Jaki jest odpowiednik / etc / fstab na Androida?

26

Czasami naprawdę żałuję, że nie pomylili się tak bardzo z Linuksem! Wiem, /etc/fstabże gdzieś tam jest, ale gdzie?

Chciałbym zamontować niektóre partycje z alternatywnymi systemami plików (ponieważ nie lubię FAT32).

barrymac
źródło

Odpowiedzi:

19

Nie myśl o Androidzie jako mocno zmodyfikowanej dystrybucji Linuksa. Ponieważ tak nie jest. Prawie jedyną rzeczą, którą Android dzieli z dystrybucją Linuksa, jest jądro. I nawet ten komponent jest modyfikowany. Różnią się także inne podstawowe komponenty, takie jak libc.

Android nie ma /etc/fstab

Nie musisz /etc/fstabmontować partycji. Ale nie ma też IIRC bez mountpolecenia. dev_mountpowinien działać (wymagany root). Aby odpowiedzieć na pytanie: Montaż w systemie startowym odbywa się za pomocą /etc/vold.fstabskryptu pomocniczego.

Pływ
źródło
Chyba jestem życzliwym użytkownikiem maemo, to naprawdę. Tak, to chyba dość daleko od Linuksa. Dzięki za wskaźnik do vold.fstab!
barrymac
3
Vold.fstab ma tylko kartę SD na moim
Nexusie One
7

Plik fstab jest w /.

To się nazywa, /fstab.$systemname.rcgdzie $systemnamejest oparte na właściwości odcisków palców słuchawki, albo zidentyfikowanej jako kategoria mikroukładu lub samego zestawu słuchawkowego.

Phil Carswell
źródło
3
To zależy i różni się w zależności od ROM. W AOSP jego /etc/vold.fstab. :)
t0mm13b
i chociaż jest to prawdą w przypadku CM10 - mam /fstab.p1c - przy ponownym uruchomieniu zostaje zastąpione przez coś, czego jeszcze nie odkryłem.
jcomeau_ictx
3
Według source.android.com/devices/storage/config.html , w Androidzie 4.2.2 i wcześniejszych jest vold.fstab, a w 4.3 i późniejszych /fstab.<device>.
LarsH
1
w moim Moto E ten plik jest na zamontowanym systemie plików tylko do odczytu :(
Anton Krosnev
5

Widzę sprzeczne informacje. Jeden zasób mówi, że jest zakodowany na stałe , więc nie można tego zmienić po stronie użytkownika:

Programy inicjujące dla Androida znajdują się w urządzeniu / systemie / init. Dodaj komunikaty LOG, aby pomóc w debugowaniu potencjalnych problemów z makrem LOG zdefiniowanym w device / system / init / init.c.

Program init montuje bezpośrednio wszystkie systemy plików i urządzenia, używając albo zakodowanych nazw plików, albo nazw urządzeń wygenerowanych przez sondowanie systemu plików sysfs (eliminując w ten sposób potrzebę pliku / etc / fstab w Androidzie).

Gdzie indziej /etc/vold.fstabi /etc/vold.confsą wymienione. Mam je na moim urządzeniu w wersji CM 7.1, ale nie jestem pewien, jak są używane.

Matthew Read
źródło
3
To jest trochę zakodowane, ale tak nie jest. W init.rctwoim ramdysku znajduje się plik, więc możesz wyciągnąć boot.img, wyodrębnić ramdysk, a następnie zmodyfikować go init.rci ponownie go spakować (krótko omówione tutaj , a źródłoinit.rc
Tiamata
5

Możesz ponownie zamontować pamięć zewnętrzną, aby była wykonywalna, uruchamiając

mount -o remount, rw /mnt/sdcard

spowoduje to usunięcie flag noexec, nosuid i nodev, ale nadal będzie to vfat fs. Możesz tworzyć linki do tego fs, ale nie od wewnątrz. Ponowne podłączenie nie przetrwa ponownego uruchomienia, ponieważ plik vold.fstab zostanie odczytany i zostaną ponownie zamontowane przy ponownym uruchomieniu z flagami noexec.

Jeśli sformatujesz dowolną pamięć zewnętrzną na inną niż vfat, nie zostaną one ponownie zamontowane przy ponownym uruchomieniu, a wszelkie aplikacje przeniesione do dowolnej pamięci zewnętrznej nie będą nadawać się do użytku. Jeśli nie zamierzasz używać pamięci zewnętrznej dla aplikacji, możesz odmontować pamięć zewnętrzną i użyć busybox mke2fs DEVICEjej, aby ją powiększyć2. Użyj, busybox newfs_msdos DEVICEaby przywrócić vfat i sprawić, by znów był użyteczny.

Uwaga busybox mkfs.vfatjest zepsuta, dostaniesz coś takiego

lseek: Wartość za duża dla zdefiniowanego typu danych

więc nie marnuj czasu. Wszystko to zakłada, że ​​jesteś zrootowany i masz działający plik binarny busybox.

Mark Mikofski
źródło
2

Zdaję sobie sprawę, że jest to stary temat, ale niektóre odpowiedzi tutaj utrudniły moje starania o zdobycie wiedzy o fstabAndroidzie, ponieważ tak mocno sugerują, że fstabsytuacja w Androidzie jest bardzo różna od innych dystrybucji Linuksa. Z tego, co mogę powiedzieć, nie jest.

Jednak czytanie różnych odpowiedzi tutaj zastanawiało mnie: jaki fstabekwiwalentny plik lub pliki znajdują się na moim urządzeniu?

Cofając się na chwilę, zauważając, że „ Android nie ma / etc / fstab ” prawdopodobnie nie jest pomocne OP, ponieważ musieli już o tym wiedzieć. Gdyby było to nieprawdą, ich pytanie (pytanie, czym jest odpowiednik Androida /etc/fstab) nie miałoby sensu. Z drugiej strony wiemy, że @Flow nie próbował sugerować, że nie ma odpowiednika na Androidzie, ponieważ wspomnieli o jednym z nich, o nazwie „skrypt pomocniczy” /etc/vold.fstab.

Podsumowując, myślę, że na wynos z postu @ Flow jest to, że w niektórych systemach istnieje plik (prawdopodobnie „skrypt pomocniczy” - nie mogę tego sprawdzić na moim telefonie) /etc/vold.fstab, a na tych systemach ten plik jest najbliższy odpowiednik /etc/fstab.

Wracając do zastanawiania się nad własnym urządzeniem, zamierzam opublikować tutaj moje odkrycia z kilku powodów, pomimo wieku OP:

  • Po pierwsze, chcę dokumentować wszystko z fstab-Style plików mogę znaleźć w moim telefonie, piksel 2XL.
  • Po drugie, chcę pokazać ludziom, szczególnie początkującym na Linuksie / Androidzie, że dość łatwo jest znaleźć te pliki na własnym urządzeniu („naucz je łowić ryby”).
  • Po trzecie, pomocne jest spisanie moich ustaleń (premia: zawsze będę mógł je znaleźć ponownie tutaj na StackExchange!).
  • Wreszcie Google nadal wyświetla tę stronę, więc istnieje szansa, że ​​pomoże to komuś innemu niż ja.

Pozwólcie, że spróbuję podsumować wszystko, czego się nauczyłem z tego wszystkiego:

Android, a przynajmniej jego warianty, do których mam dostęp, korzysta z fstabplików w stylu. Jednak dokładna nazwa, lokalizacja i funkcja tych plików różnią się w zależności od dystrybucji - co oznacza wersję Androida i urządzenie, a także pamięć ROM, jeśli używasz niestandardowej pamięci ROM.

Aby znaleźć te pliki na komputerze, otwórz terminal emulator jak tmuxalbo adb shelli uruchomić coś takiego: find / -type f -iname '*fstab*' 2>/dev/null. Przekierowanie pliku 2 ( stderr) /dev/nullsprawi, że Twoje dane wyjściowe będą znacznie czystsze, ponieważ będziesz w stanie zignorować napływ komunikatów o błędach, które otrzymasz find, nawet jeśli tak jest root.

W moim systemie (Pixel 2XL, nazwa kodowa „taimen”) znalazłem trzy pliki kandydatów:

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

Pierwsze dwa to osobne pliki, w których żaden nie jest ani twardym ani symbolicznym łączem do drugiego, ale jeśli diffje znajdziesz, okaże się, że są identyczne. Patrząc nieco głębiej, jeśli uruchomisz statna plikach, zobaczysz, że mają one te same wartości Device i 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

statzgłasza oba te nazwy plików jako zwykłe pliki z tylko jednym linkiem każdy (więc nie są zaangażowane żadne twarde ani symboliczne linki). Nie jestem ekspertem od systemów plików, ale to, co się tutaj wydarzyło, polega na tym, że to samo urządzenie zostało zamontowane dwukrotnie. Możesz to zobaczyć w danych wyjściowych następującego polecenia, gdzie jedynymi różnicami między dwoma liniami danych wyjściowych są punkty montowania (część bezpośrednio po „on”):

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)

Trzeci plik jest dla mnie widoczny tylko wtedy, gdy zaloguję się jako root, więc jeśli masz urządzenie identyczne z moim, nadal nie znajdziesz tego pliku lub nie będziesz mieć do niego dostępu, chyba że Twój telefon jest zrootowany. Ten plik ma związek z usługą o nazwie Open Mobile Alliance Device Management, ale jest to usługa, o której bardzo mało wiem, więc wspomnę o tym tutaj, a jeśli chcesz, możesz podać Google szczegółowe informacje na ten temat.

skye --- kapitan
źródło
1
Rzeczywiście stary temat i od tego czasu wszystko się zmieniło, do tego stopnia, że ​​większość urządzeń, dla których zbudowałem ROM, miałoby samodzielny plik fstab w jednym /system/etclub drugim /vendor/etc. Dzięki za dostarczenie świeżych informacji.
Andy Yan
Znaleziono ten post, szukając powodu, dla którego mount zwraca błąd mount: bad /etc/fstab: No such file or directory. Czy masz jakieś przemyślenia lub rozwiązanie tego problemu?
Michael