Что такое Android-эквивалент / etc / fstab?

26

Иногда мне бы очень хотелось, чтобы они не так много возились с Linux! Я знаю, /etc/fstabчто где-то там есть, но где?

Я хотел бы смонтировать некоторые разделы с альтернативными файловыми системами (потому что я не люблю FAT32).

barrymac
источник

Ответы:

19

Не думайте об Android как о сильно модифицированном дистрибутиве Linux. Потому что это не так. Почти единственное, что разделяет Android с дистрибутивом Linux, - это ядро. И даже этот компонент модифицируется. Также другие основные компоненты, такие как libc, отличаются.

Android не имеет /etc/fstab

Вам не нужно /etc/fstabмонтировать раздел. Но IIRC также не имеет mountкоманды. dev_mountдолжно работать (требуется рут). Чтобы ответить на ваши вопросы заголовок: Все установки системы запуска выполняется с помощью /etc/vold.fstabвспомогательного скрипта.

поток
источник
Думаю, я действительно желанный пользователь maemo. Да, это довольно далеко от Linux, я думаю. Спасибо за указатель на vold.fstab!
Барримак
3
Vold.fstab имеет только SD-карты на моем
Nexus One
7

Файл fstab находится в /.

Он называется /fstab.$systemname.rcгде $systemname, основываясь на свойстве отпечатка пальца телефона, который определяется как категория набора микросхем или самого телефона.

Фил Карсвелл
источник
3
Это зависит и варьируется от ROM к ROM. В AOSP его /etc/vold.fstab. :)
t0mm13b
и хотя это верно для CM10 - у меня есть /fstab.p1c - при перезагрузке он перезаписывается чем-то, чего я еще не понял.
jcomeau_ictx
3
Согласно source.android.com/devices/storage/config.html , в Android 4.2.2 и более ранних версиях она есть vold.fstab, а в 4.3 и более поздних версиях она есть /fstab.<device>.
LarsH
1
на моем Moto E этот файл находится на смонтированной файловой системе только для чтения :(
Антон Кроснев
5

Я вижу противоречивую информацию. Один ресурс говорит, что он жестко запрограммирован , поэтому вы не можете что-то изменить на стороне пользователя:

Специфичные для Android программы init находятся в устройстве / system / init. Добавьте сообщения LOG, чтобы помочь вам отладить потенциальные проблемы с макросом LOG, определенным в device / system / init / init.c.

Программа init непосредственно монтирует все файловые системы и устройства, используя жестко запрограммированные имена файлов или имена устройств, сгенерированные при проверке файловой системы sysfs (тем самым устраняя необходимость в файле / etc / fstab в Android).

В другом месте /etc/vold.fstabи /etc/vold.confупоминаются. У меня они есть на моем устройстве под CM 7.1, но я не уверен, как они используются.

Мэтью Рид
источник
3
Это вроде жестко закодировано, но это не так. На init.rcвашем виртуальном диске есть файл, так что вы можете вытащить свой boot.img, извлечь его и затем изменить init.rcи снова упаковать его (кратко обсуждается здесь , а исходный код Tiamat - хороший пример установки точек монтирования в init.rc)
eldarerathis
5

Вы можете перемонтировать внешнее хранилище, чтобы оно было исполняемым

mount -o remount, rw /mnt/sdcard

это удалит флаги noexec, nosuid и nodev, но все равно будет vfat fs. Вы можете делать ссылки на этот фс, но не изнутри. Перемонтирование не переживает перезагрузку, потому что файл vold.fstab будет прочитан, и они будут перемонтированы при перезагрузке с флагами noexec.

Если вы переформатируете какое-либо внешнее хранилище во что-либо, кроме vfat, при перезагрузке они не будут перемонтированы, и любые приложения, которые вы переместили в любое внешнее хранилище, не будут использоваться. Если вы не собираетесь использовать внешнее хранилище для приложений, вы можете отключить внешнее хранилище и использовать busybox mke2fs DEVICEего для ext2. Используйте, busybox newfs_msdos DEVICEчтобы вернуть его в vfat и сделать его снова пригодным для использования.

Примечание busybox mkfs.vfatсломано, вы получите что-то вроде

lseek: значение слишком велико для определенного типа данных

так что не трать свое время. Все это предполагает, что вы root и работающий бинарный код busybox.

Марк Микофски
источник
2

Я понимаю, что это старая тема, но некоторые ответы здесь на самом деле препятствовали моим попыткам узнать об fstabAndroid и об этом, потому что они настолько сильно подразумевают, что fstabситуация в Android чрезвычайно отличается от других дистрибутивов Linux. Из того, что я могу сказать, это не так.

Однако чтение разных ответов заставило меня задуматься: что такое fstabфайл или файлы на моем устройстве?

Остановившись на мгновение, отметив, что « Android не имеет / etc / fstab », вероятно, не поможет OP, так как они, должно быть, уже знали это. Если бы это было не так, их вопрос (спрашивающий, каков эквивалент Android /etc/fstab) не имел бы никакого смысла. С другой стороны, мы знаем, что @Flow не пытался подразумевать, что на Android не было эквивалента, поскольку они упомянули один из них, «вспомогательный скрипт» с именем /etc/vold.fstab.

В целом, я думаю, что вывод из поста @ Flow заключается в том, что в некоторых системах вызывается файл (возможно, «вспомогательный скрипт» - я не могу проверить это на своем телефоне) /etc/vold.fstab, а в этих системах этот файл ближайший эквивалент /etc/fstab.

Возвращаясь к размышлениям о моем собственном устройстве, я собираюсь опубликовать здесь свои результаты по нескольким причинам, несмотря на возраст ОП:

  • Во- первых, я хочу , чтобы документировать все из fstab-Style файлов можно найти на моем телефоне, пиксель 2XL.
  • Во-вторых, я хочу показать людям, особенно новичкам в Linux / Android, что эти файлы довольно легко найти на вашем собственном устройстве («научите их ловить рыбу»).
  • В-третьих, для меня полезно написать свои выводы (бонус: я всегда смогу найти это снова здесь, на StackExchange!).
  • Наконец, Google все еще обслуживает эту страницу, так что есть шанс, что это поможет кому-то, кроме меня.

Итак, позвольте мне подвести итог всему, чему я научился из всего этого:

Android или, по крайней мере, его варианты, к которым у меня есть доступ, используют fstabфайлы -style. Однако точное имя, расположение и функции этих файлов различаются в зависимости от дистрибутива, то есть от версии и устройства Android, а также от ПЗУ, если вы используете пользовательское ПЗУ.

Чтобы найти эти файлы в вашей системе, откройте эмулятор терминала , как tmuxи adb shellи запустить что - то вроде этого: find / -type f -iname '*fstab*' 2>/dev/null. Перенаправление файла 2 ( stderr) /dev/nullсделает ваш вывод намного чище, так как вы сможете игнорировать поток сообщений об ошибках, которые вы получите find, даже если это так root.

В моей системе (Pixel 2XL, кодовое имя "taimen") я нашел три файла-кандидата:

taimen:/ # find / -type f -iname '*fstab*' 2>/dev/null

/sbin/.core/mirror/vendor/etc/fstab.taimen
/vendor/etc/fstab.taimen
/data/data/com.android.omadm.service/files/dm/dmt_data/fstab

Первые два являются отдельными файлами, поскольку ни одна из них не является жесткой или символической ссылкой на другую, но если вы diffих найдете, вы обнаружите, что они идентичны. Если посмотреть немного глубже, если вы запустите statфайлы, вы увидите, что они имеют одинаковые значения Device и Inode:

taimen:/ # stat /sbin/.core/mirror/vendor/etc/fstab.taimen /vendor/etc/fstab.taimen

  File: `/sbin/.core/mirror/vendor/etc/fstab.taimen'
  Size: 1326     Blocks: 16      IO Blocks: 512 regular file
Device: fc00h/64512d     Inode: 925      Links: 1
Access: (644/-rw-r--r--)        Uid: (    0/    root)   Gid: (    0/    root)
Access: 2009-01-01 02:00:00.000000000
Modify: 2009-01-01 02:00:00.000000000
Change: 2009-01-01 02:00:00.000000000

  File: `/vendor/etc/fstab.taimen'
  Size: 1326     Blocks: 16      IO Blocks: 512 regular file
Device: fc00h/64512d     Inode: 925      Links: 1
Access: (644/-rw-r--r--)        Uid: (    0/    root)   Gid: (    0/    root)
Access: 2009-01-01 02:00:00.000000000
Modify: 2009-01-01 02:00:00.000000000
Change: 2009-01-01 02:00:00.000000000

statсообщает оба этих имени файла как обычные файлы с только одной ссылкой каждый (таким образом, жесткие или символические ссылки не используются). Я не эксперт по файловой системе, но здесь произошло то, что одно и то же устройство было смонтировано дважды. Это можно увидеть в выходных данных следующей команды, где единственными различиями между двумя строками вывода являются точки монтирования (часть сразу после «вкл»):

taimen:/ $ mount | grep vendor

/dev/block/dm-0 on /vendor type ext4 (ro,seclabel,relatime,block_validity,delalloc,barrier,user_xattr)
/dev/block/dm-0 on /sbin/.core/mirror/vendor type ext4 (ro,seclabel,relatime,block_validity,delalloc,barrier,user_xattr)

Третий файл виден мне только в том случае, если я войду в систему как пользователь root, поэтому если у вас есть устройство, идентичное моему, вы все равно не найдете или не получите доступ к этому файлу, пока ваш телефон не будет рутирован. Этот файл имеет отношение к сервису под названием Open Mobile Alliance Device Management, но это сервис, о котором я знаю очень мало, поэтому я просто упомяну его здесь, и вы можете узнать подробности об этом в Google, если хотите.

скай --- капитан
источник
1
Старая тема на самом деле, и с тех пор все изменилось совсем немного, в той степени , что большинство устройств я построил ромы для будет иметь файл FSTAB автономный в любой /system/etcили /vendor/etc. Спасибо за привлечение свежей информации.
Энди Ян
Нашел этот пост в поисках причины, по которой mount возвращает ошибку mount: bad /etc/fstab: No such file or directory. Есть ли у вас какие-либо мысли или решение для этого?
Майкл