LINUX.ORG.RU
решено ФорумMobile

Использование одной директории в двух местах файловой системы в android

 , , ,


0

1

Задача: сделать возможным использование одной директории в двух местах файловой системы (одна из них используется для синхронизации в nextcloud).

Дано: lineageos 14.1 с рутом

Проблема: Обычно я в таких случаях делаю симлинк. Выполнение

ln -s /storage/emulated/0/<path to file> /storage/emulated/0/<path to dir>

в adb root shell/termux валится с operation not permitted. Вывод mount:

rootfs on / type rootfs (ro,seclabel)
tmpfs on /dev type tmpfs (rw,seclabel,nosuid,relatime,size=956988k,nr_inodes=239247,mode=755)
devpts on /dev/pts type devpts (rw,seclabel,relatime,mode=600)
proc on /proc type proc (rw,relatime,gid=3009,hidepid=2)
sysfs on /sys type sysfs (rw,seclabel,relatime)
selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,seclabel,relatime)
none on /acct type cgroup (rw,relatime,cpuacct)
tmpfs on /mnt type tmpfs (rw,seclabel,relatime,size=956988k,nr_inodes=239247,mode=755,gid=1000)
none on /config type configfs (rw,relatime)
none on /dev/cpuctl type cgroup (rw,relatime,cpu)
none on /dev/cpuset type cgroup (rw,relatime,cpuset,noprefix,release_agent=/sbin/cpuset_release_agent)
pstore on /sys/fs/pstore type pstore (rw,seclabel,relatime)
none on /dev/bfqio type cgroup (rw,relatime,bfqio)
/dev/block/mmcblk0p25 on /system type ext4 (ro,seclabel,relatime,data=ordered)
/dev/block/mmcblk0p31 on /data type ext4 (rw,seclabel,nosuid,nodev,noatime,noauto_da_alloc,data=ordered)
/dev/block/mmcblk0p29 on /cache type ext4 (rw,seclabel,nosuid,nodev,noatime,noauto_da_alloc,data=ordered)
/dev/block/mmcblk0p28 on /persist type ext4 (rw,seclabel,nosuid,nodev,noatime,noauto_da_alloc,data=ordered)
/dev/block/mmcblk0p21 on /firmware type vfat (ro,context=u:object_r:firmware_file:s0,relatime,uid=1000,gid=1026,fmask=0337,dmask=0227,codepage=437,iocharset=iso8859-1,shortname=lower,errors=remount-ro)
adb on /dev/usb-ffs/adb type functionfs (rw,relatime)
tmpfs on /storage type tmpfs (rw,seclabel,relatime,size=956988k,nr_inodes=239247,mode=755,gid=1000)
/data/media on /mnt/runtime/default/emulated type sdcardfs (rw,nosuid,nodev,noexec,noatime,fsuid=1023,fsgid=1023,gid=1015,multiuser,mask=6)
/data/media on /storage/emulated type sdcardfs (rw,nosuid,nodev,noexec,noatime,fsuid=1023,fsgid=1023,gid=1015,multiuser,mask=6)
/data/media on /mnt/runtime/read/emulated type sdcardfs (rw,nosuid,nodev,noexec,noatime,fsuid=1023,fsgid=1023,gid=9997,multiuser,mask=23)
/data/media on /mnt/runtime/write/emulated type sdcardfs (rw,nosuid,nodev,noexec,noatime,fsuid=1023,fsgid=1023,gid=9997,multiuser,mask=7)

Походу дело упирается в sdcardfs, но я впервые слышу о такой fs. Думал ещё о mount -o bind, но оно будет отваливаться после каждого ребута.

Насколько я помню, в /storage/emulated/0 используется sdcardfs, в то время, как настоящая файловая система для внутренней памяти содержится в /data/media/0. Там можно делать симлинки, и они будут работать, но в /storage/emulated/0 они будут отображаться как пустой файл.

Так что лучшим решением будет использовать уже упомянутый mount -o bind, для работы которого после ребутов можно, например, воспользоваться Termux с плагином :boot.

dvrpd
()

Замечу, что

mount -o bind
может не заработать из-за mount namespaces separation. Придётся совершать дополнительные телодвижения.

anonymous
()
Ответ на: комментарий от dvrpd

настоящая файловая система для внутренней памяти содержится в /data/media/0

Не знал, весьма неочевидный факт. Там действительно нормальный ext4, где бинд и симлинки работают.

Karthago ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.