mirror of
https://github.com/LSPosed/MagiskOnWSALocal.git
synced 2025-04-25 17:59:35 +00:00
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:
parent
9b117b8c94
commit
fddfd7954c
1 changed files with 31 additions and 16 deletions
|
@ -40,6 +40,13 @@ VENDOR_MNT_RO="$ROOT_MNT_RO/vendor"
|
|||
PRODUCT_MNT_RO="$ROOT_MNT_RO/product"
|
||||
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
|
||||
ROOT_MNT="$WORK_DIR/system_root_merged"
|
||||
SYSTEM_MNT="$ROOT_MNT/system"
|
||||
|
@ -48,6 +55,7 @@ PRODUCT_MNT="$ROOT_MNT/product"
|
|||
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 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")
|
||||
DOWNLOAD_DIR=../download
|
||||
DOWNLOAD_CONF_NAME=download.list
|
||||
|
@ -59,6 +67,9 @@ umount_clean() {
|
|||
for PART in "${LOWER_PARTITION[@]}"; do
|
||||
sudo umount -v "$PART"
|
||||
done
|
||||
for PART in "${UPPER_PARTITION[@]}"; do
|
||||
sudo rm -rf "${PART:?}"
|
||||
done
|
||||
for PART in "${MERGED_PARTITION[@]}"; do
|
||||
sudo umount -v "$PART"
|
||||
done
|
||||
|
@ -147,19 +158,20 @@ vhdx_to_raw_img() {
|
|||
rm -f "$1" || return 1
|
||||
}
|
||||
|
||||
mk_overlayfs() {
|
||||
local lowerdir="$1"
|
||||
local upperdir workdir merged context own
|
||||
merged="$3"
|
||||
upperdir="$WORK_DIR/upper/$2"
|
||||
workdir="$WORK_DIR/worker/$2"
|
||||
echo "mk_overlayfs: label $2
|
||||
mk_overlayfs() { # label lowerdir upperdir merged
|
||||
local context own
|
||||
local workdir="$WORK_DIR/worker/$1"
|
||||
local lowerdir="$2"
|
||||
local upperdir="$3"
|
||||
local merged="$4"
|
||||
|
||||
echo "mk_overlayfs: label $1
|
||||
lowerdir=$lowerdir
|
||||
upperdir=$upperdir
|
||||
workdir=$workdir
|
||||
merged=$merged"
|
||||
sudo mkdir -p -m 755 "$workdir" "$upperdir" "$merged"
|
||||
case "$2" in
|
||||
case "$1" in
|
||||
vendor)
|
||||
context="u:object_r:vendor_file:s0"
|
||||
own="0:2000"
|
||||
|
@ -180,11 +192,14 @@ mk_overlayfs() {
|
|||
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 umount -v "$1"
|
||||
sudo rm -f "$2"
|
||||
sudo mv "$2".erofs "$2"
|
||||
if [ "$3" ]; then
|
||||
sudo rm -rf "$3"
|
||||
fi
|
||||
}
|
||||
|
||||
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
|
||||
echo -e "done\n"
|
||||
echo "Create overlayfs for EROFS"
|
||||
mk_overlayfs "$ROOT_MNT_RO" system "$ROOT_MNT" || abort
|
||||
mk_overlayfs "$VENDOR_MNT_RO" vendor "$VENDOR_MNT" || abort
|
||||
mk_overlayfs "$PRODUCT_MNT_RO" product "$PRODUCT_MNT" || abort
|
||||
mk_overlayfs "$SYSTEM_EXT_MNT_RO" system_ext "$SYSTEM_EXT_MNT" || abort
|
||||
mk_overlayfs system "$ROOT_MNT_RO" "$SYSTEM_MNT_RW" "$ROOT_MNT" || abort
|
||||
mk_overlayfs vendor "$VENDOR_MNT_RO" "$VENDOR_MNT_RW" "$VENDOR_MNT" || abort
|
||||
mk_overlayfs product "$PRODUCT_MNT_RO" "$PRODUCT_MNT_RW" "$PRODUCT_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"
|
||||
elif [[ "$WSA_MAIN_VER" -ge 2302 ]]; then
|
||||
echo "Remove read-only flag for read-only EXT4 image"
|
||||
|
@ -890,9 +905,9 @@ fi
|
|||
|
||||
if [[ "$WSA_MAIN_VER" -ge 2304 ]]; then
|
||||
echo "Create EROFS images"
|
||||
mk_erofs_umount "$VENDOR_MNT" "$WORK_DIR/wsa/$ARCH/vendor.img" || abort
|
||||
mk_erofs_umount "$PRODUCT_MNT" "$WORK_DIR/wsa/$ARCH/product.img" || abort
|
||||
mk_erofs_umount "$SYSTEM_EXT_MNT" "$WORK_DIR/wsa/$ARCH/system_ext.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" "$PRODUCT_MNT_RW" || 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
|
||||
echo -e "Create EROFS images done\n"
|
||||
echo "Umount images"
|
||||
|
|
Loading…
Add table
Reference in a new issue