Prevent system partition from containing duplicate data from other partitions

This is caused by using Overlayfs mounts
Even though this has no side effects,
it will consume more disk space
This commit is contained in:
Howard Wu 2023-05-26 21:55:30 +08:00
parent 9b117b8c94
commit fddfd7954c

View File

@ -40,6 +40,13 @@ VENDOR_MNT_RO="$ROOT_MNT_RO/vendor"
PRODUCT_MNT_RO="$ROOT_MNT_RO/product" PRODUCT_MNT_RO="$ROOT_MNT_RO/product"
SYSTEM_EXT_MNT_RO="$ROOT_MNT_RO/system_ext" SYSTEM_EXT_MNT_RO="$ROOT_MNT_RO/system_ext"
# upperdir
ROOT_MNT_RW="$WORK_DIR/upper"
VENDOR_MNT_RW="$ROOT_MNT_RW/vendor"
PRODUCT_MNT_RW="$ROOT_MNT_RW/product"
SYSTEM_EXT_MNT_RW="$ROOT_MNT_RW/system_ext"
SYSTEM_MNT_RW="$ROOT_MNT_RW/system"
# merged # merged
ROOT_MNT="$WORK_DIR/system_root_merged" ROOT_MNT="$WORK_DIR/system_root_merged"
SYSTEM_MNT="$ROOT_MNT/system" SYSTEM_MNT="$ROOT_MNT/system"
@ -48,6 +55,7 @@ PRODUCT_MNT="$ROOT_MNT/product"
SYSTEM_EXT_MNT="$ROOT_MNT/system_ext" SYSTEM_EXT_MNT="$ROOT_MNT/system_ext"
declare -A LOWER_PARTITION=(["zsystem"]="$ROOT_MNT_RO" ["vendor"]="$VENDOR_MNT_RO" ["product"]="$PRODUCT_MNT_RO" ["system_ext"]="$SYSTEM_EXT_MNT_RO") declare -A LOWER_PARTITION=(["zsystem"]="$ROOT_MNT_RO" ["vendor"]="$VENDOR_MNT_RO" ["product"]="$PRODUCT_MNT_RO" ["system_ext"]="$SYSTEM_EXT_MNT_RO")
declare -A UPPER_PARTITION=(["zsystem"]="$SYSTEM_MNT_RW" ["vendor"]="$VENDOR_MNT_RW" ["product"]="$PRODUCT_MNT_RW" ["system_ext"]="$SYSTEM_EXT_MNT_RW")
declare -A MERGED_PARTITION=(["zsystem"]="$ROOT_MNT" ["vendor"]="$VENDOR_MNT" ["product"]="$PRODUCT_MNT" ["system_ext"]="$SYSTEM_EXT_MNT") declare -A MERGED_PARTITION=(["zsystem"]="$ROOT_MNT" ["vendor"]="$VENDOR_MNT" ["product"]="$PRODUCT_MNT" ["system_ext"]="$SYSTEM_EXT_MNT")
DOWNLOAD_DIR=../download DOWNLOAD_DIR=../download
DOWNLOAD_CONF_NAME=download.list DOWNLOAD_CONF_NAME=download.list
@ -59,6 +67,9 @@ umount_clean() {
for PART in "${LOWER_PARTITION[@]}"; do for PART in "${LOWER_PARTITION[@]}"; do
sudo umount -v "$PART" sudo umount -v "$PART"
done done
for PART in "${UPPER_PARTITION[@]}"; do
sudo rm -rf "${PART:?}"
done
for PART in "${MERGED_PARTITION[@]}"; do for PART in "${MERGED_PARTITION[@]}"; do
sudo umount -v "$PART" sudo umount -v "$PART"
done done
@ -147,19 +158,20 @@ vhdx_to_raw_img() {
rm -f "$1" || return 1 rm -f "$1" || return 1
} }
mk_overlayfs() { mk_overlayfs() { # label lowerdir upperdir merged
local lowerdir="$1" local context own
local upperdir workdir merged context own local workdir="$WORK_DIR/worker/$1"
merged="$3" local lowerdir="$2"
upperdir="$WORK_DIR/upper/$2" local upperdir="$3"
workdir="$WORK_DIR/worker/$2" local merged="$4"
echo "mk_overlayfs: label $2
echo "mk_overlayfs: label $1
lowerdir=$lowerdir lowerdir=$lowerdir
upperdir=$upperdir upperdir=$upperdir
workdir=$workdir workdir=$workdir
merged=$merged" merged=$merged"
sudo mkdir -p -m 755 "$workdir" "$upperdir" "$merged" sudo mkdir -p -m 755 "$workdir" "$upperdir" "$merged"
case "$2" in case "$1" in
vendor) vendor)
context="u:object_r:vendor_file:s0" context="u:object_r:vendor_file:s0"
own="0:2000" own="0:2000"
@ -180,11 +192,14 @@ mk_overlayfs() {
sudo mount -vt overlay overlay -olowerdir="$lowerdir",upperdir="$upperdir",workdir="$workdir" "$merged" sudo mount -vt overlay overlay -olowerdir="$lowerdir",upperdir="$upperdir",workdir="$workdir" "$merged"
} }
mk_erofs_umount() { mk_erofs_umount() { # dir imgpath upperdir
sudo "../bin/$HOST_ARCH/mkfs.erofs" -zlz4hc -T1230768000 --chunksize=4096 --exclude-regex="lost+found" "$2".erofs "$1" || abort "Failed to make erofs image from $1" sudo "../bin/$HOST_ARCH/mkfs.erofs" -zlz4hc -T1230768000 --chunksize=4096 --exclude-regex="lost+found" "$2".erofs "$1" || abort "Failed to make erofs image from $1"
sudo umount -v "$1" sudo umount -v "$1"
sudo rm -f "$2" sudo rm -f "$2"
sudo mv "$2".erofs "$2" sudo mv "$2".erofs "$2"
if [ "$3" ]; then
sudo rm -rf "$3"
fi
} }
ro_ext4_img_to_rw() { ro_ext4_img_to_rw() {
@ -644,10 +659,10 @@ if [[ "$WSA_MAIN_VER" -ge 2304 ]]; then
mount_erofs "$WORK_DIR/wsa/$ARCH/system_ext.img" "$SYSTEM_EXT_MNT_RO" || abort mount_erofs "$WORK_DIR/wsa/$ARCH/system_ext.img" "$SYSTEM_EXT_MNT_RO" || abort
echo -e "done\n" echo -e "done\n"
echo "Create overlayfs for EROFS" echo "Create overlayfs for EROFS"
mk_overlayfs "$ROOT_MNT_RO" system "$ROOT_MNT" || abort mk_overlayfs system "$ROOT_MNT_RO" "$SYSTEM_MNT_RW" "$ROOT_MNT" || abort
mk_overlayfs "$VENDOR_MNT_RO" vendor "$VENDOR_MNT" || abort mk_overlayfs vendor "$VENDOR_MNT_RO" "$VENDOR_MNT_RW" "$VENDOR_MNT" || abort
mk_overlayfs "$PRODUCT_MNT_RO" product "$PRODUCT_MNT" || abort mk_overlayfs product "$PRODUCT_MNT_RO" "$PRODUCT_MNT_RW" "$PRODUCT_MNT" || abort
mk_overlayfs "$SYSTEM_EXT_MNT_RO" system_ext "$SYSTEM_EXT_MNT" || abort mk_overlayfs system_ext "$SYSTEM_EXT_MNT_RO" "$SYSTEM_EXT_MNT_RW" "$SYSTEM_EXT_MNT" || abort
echo -e "Create overlayfs for EROFS done\n" echo -e "Create overlayfs for EROFS done\n"
elif [[ "$WSA_MAIN_VER" -ge 2302 ]]; then elif [[ "$WSA_MAIN_VER" -ge 2302 ]]; then
echo "Remove read-only flag for read-only EXT4 image" echo "Remove read-only flag for read-only EXT4 image"
@ -890,9 +905,9 @@ fi
if [[ "$WSA_MAIN_VER" -ge 2304 ]]; then if [[ "$WSA_MAIN_VER" -ge 2304 ]]; then
echo "Create EROFS images" echo "Create EROFS images"
mk_erofs_umount "$VENDOR_MNT" "$WORK_DIR/wsa/$ARCH/vendor.img" || abort mk_erofs_umount "$VENDOR_MNT" "$WORK_DIR/wsa/$ARCH/vendor.img" "$VENDOR_MNT_RW" || abort
mk_erofs_umount "$PRODUCT_MNT" "$WORK_DIR/wsa/$ARCH/product.img" || abort mk_erofs_umount "$PRODUCT_MNT" "$WORK_DIR/wsa/$ARCH/product.img" "$PRODUCT_MNT_RW" || abort
mk_erofs_umount "$SYSTEM_EXT_MNT" "$WORK_DIR/wsa/$ARCH/system_ext.img" || abort mk_erofs_umount "$SYSTEM_EXT_MNT" "$WORK_DIR/wsa/$ARCH/system_ext.img" "$SYSTEM_EXT_MNT_RW" || abort
mk_erofs_umount "$ROOT_MNT" "$WORK_DIR/wsa/$ARCH/system.img" || abort mk_erofs_umount "$ROOT_MNT" "$WORK_DIR/wsa/$ARCH/system.img" || abort
echo -e "Create EROFS images done\n" echo -e "Create EROFS images done\n"
echo "Umount images" echo "Umount images"