Как работает монтирование Magisk?

Pre. S. Да, я задал этот же вопрос на английском SO. Но я предпочту перезадать вопрос тут (заодно переведу на русский), чтобы соотечественникам было проще понять меня и ответить на вопрос. Честно, отчаялся искать ответ на свой вопрос

Сам вопрос:

Как работает монтирование Magisk? Я вначале обратил внимание на mount:

 ~ # mount
# покажу только важные точки монтирования
/sbin/.magisk/block/system_root at /sbin/.magisk/mirror/system_root
tmpfs on /system/bin # судя по всему, смонтирован Magisk-ом
tmpfs on /system/etc # Судя по всему, смонтирован Magisk-ом
tmpfs on /tmp # Моя собственная точка монтирования, делаю через init.d
/dev/block/mmcblk0p69 on / type ext4 (ro)
 ~ # touch /system/bin/binary
# Success
 ~ # mount -t tmpfs tmpfs /
 ~ # touch /test
Error: read-only system
 / # mount --bind /tmp /vendor/etc
# /tmp пустой
 / # ls /vendor/etc
 / # umount /vendor/etc
 / # ls /vendor/etc
IPACM_cfg.xml
NOTICE.xml.gz
a2dp_in_audio_policy_configuration.xml
acdbdata
audio
...

Здесь возникает ряд вопросов. Я спрашивал и тут, искал ответы в Google, читал код Magisk-а (я немного знаю C++). Нашёл только функцию в xwrap.hpp (может быть это то самое "magic mount"):

int xmount(const char *source, const char *target, const char *filesystemtype, unsigned long mountflags, const void *data);

Выглядит как mount() в sys/mount.h... Но здесь функция xmount() пустая!

Следующий вопрос о tmpfs. Почему я могу писать в [Magisk-овый] tmpfs в /system/bin, но не могу писать в свой tmpfs, который я смонтировал командой в /?

Я думал, что Magisk использует overlayfs или mhddfs. Но моё ядро эти ФС не поддерживает. Больше того, у меня нет поддержки aufs или unionfs! Так как работает монтирование Magisk???

Следующий вопрос. Зачем Magisk-у свои блочные устройства??

 ~ # ls /sbin/.magisk/block
data
system_root
vendor
 ~ # mount | grep /sbin/.magisk/block
/sbin/.magisk/block/system_root on /system/xbin/7z
/sbin/.magisk/block/system_root on /system/xbin/htop
...
 ~ # dd if=/sbin/.magisk/block/system_root of=./system.img
 ~ # losetup /dev/block/loop0 ./system.img
 ~ # mount -t ext4 /dev/block/loop0 /data/local/mnt
 ~ # ls /data/local/mnt/system/bin
# только стандартные файлы, никаких модульных файлов

ЧТО ЭТО???

1: Неужели возможно "ассоциировать" с реальным разделом/loop-образом более 1 блочного устройства?

2: Я понял, как монтировать В ФАЙЛ (не файл [образа] куда-либо). Но здесь странная ситуация: один блочный девайс на нескольких РАЗНЫХ файлах?? Содержащий при том реальный system раздел, и ни одного файла модуля? Это как вообще работает?

3: Как Magisk монтирует tmpfs поверх системного раздела? Когда я пытаюсь писать в /system/bin, запись идёт в tmpfs, а не реальный раздел. Когда я пытаюсь писать в tmpfs, смонтированный в /, я пишу на реальный раздел, tmpfs игнорируется (почему).

4: Как Magisk монтирует модули? Здесь явно используется не классический mount --bind: я показывал, к чему это на самом деле приведёт. Но когда Magisk монтирует, я могу видеть (и даже использовать) и системные файлы, и файлы модулей, как если бы они лежали в одной папке, одном разделе.


Ответы (0 шт):