On Android 10+, system partitions might no longer be able to remount as read-write. For devices use dynamic partition, it is nearly impossible to modify system partiton as there is no space left. This module solves these problem by using OverlayFS. So what is OverlayFS? On Wikipedia:
OverlayFS is a union mount filesystem implementation for Linux. It combines multiple different underlying mount points into one, resulting in single directory structure that contains underlying files and sub-directories from all sources. Common applications overlay a read/write partition over a read-only partition, such as with LiveCDs and IoT devices with limited flash memory write cycles.
Benefits of using overlayfs for system partitions:
/system
, /vendor
, /product
, /system_ext
, /odm
, /odm_dlkm
, /vendor_dlkm
, ...) become read-write./data
storage is used for upperdir
of OverlayFS mount. However, on some kernel, f2fs is not supported by OverlayFS and cannot be used directly. The workaround is to create an ext4 loop image then mount it.If you are interested in OverlayFS, you can read documentation at https://docs.kernel.org/filesystems/overlayfs.html
There is two way:
git clone http://github.com/HuskyDG/Magisk_OverlayFS && cd Magisk_OverlayFS
wget https://dl.google.com/android/repository/android-ndk-r23b-linux.zip
unzip android-ndk-r23b-linux.zip
bash build.sh
nsenter -t 1 -m sh
overlayfs_system --unmount-ksu
or set DO_UNMOUNT_KSU=true
in /data/adb/modules(_update)/magisk_overlayfs/mode.sh
OverlayFS is mounted as read-only by default
Configure overlayfs mode in /data/adb/modules(_update)/magisk_overlayfs/mode.sh
to change mode of OverlayFS
Read-write mode of overlayfs will cause baseband on some devices stop working
# 0 - read-only but can still remount as read-write
# 1 - read-write default
# 2 - read-only locked (cannot remount as read-write)
export OVERLAY_MODE=2
/dev/block/overlayfs_loop
$(magisk --path)/overlayfs_mnt
. You can make modifications through this path to make changes to overlayfs mounted in system.If you are lazy to remount, please modify mode.sh
and set it to OVERLAY_MODE=1
so overlayfs will be always read-write every boot.
You can quickly remount all overlayfs to read-write by this command in terminal:
su -mm -c magic_remount_rw
After that you can restore all system partitons back to read-only mode by this commamd in terminal:
su -mm -c magic_remount_ro
customize.sh
:OVERLAY_IMAGE_EXTRA=0 # number of kb need to be added to overlay.img
OVERLAY_IMAGE_SHRINK=true # shrink overlay.img or not?
# Only use OverlayFS if Magisk_OverlayFS is installed
if [ -f "/data/adb/modules/magisk_overlayfs/util_functions.sh" ] && \
/data/adb/modules/magisk_overlayfs/overlayfs_system --test; then
ui_print "- Add support for overlayfs"
. /data/adb/modules/magisk_overlayfs/util_functions.sh
support_overlayfs && rm -rf "$MODPATH"/system
fi
/cache/overlayfs.log
/data/adb/overlay
and reinstall module# - Create a writeable directory in ext4 (f2fs) /data
# which will be used for upperdir
# - On some Kernel, f2fs is not supported by OverlayFS
# and cannot be used directly
WRITEABLE=/data/overlayfs
mkdir -p "$WRITEABLE"
# - Export list of modules if you want to load mounts by overlayfs
# - If you have /vendor /product /system_ext as seperate partitons
# - Please move it out of "system" folder, overwise **BOOM**
export OVERLAYLIST=/data/adb/modules/module_a:/data/adb/modules/module_b
# - If there is Magisk, export this in post-fs-data.sh (before magic mount):
export MAGISKTMP="$(magisk --path)"
# - Load overlayfs
./overlayfs_system "$WRITEABLE"