Qual é o equivalente do Android / etc / fstab?

26

Às vezes eu realmente gostaria que eles não tivessem mexido tanto com o Linux! Eu sei que há um /etc/fstabem algum lugar, mas onde?

Gostaria de montar algumas partições com sistemas de arquivos alternativos (porque não gosto do FAT32).

barrymac
fonte

Respostas:

19

Não pense no Android como uma distribuição Linux fortemente modificada. Porque não é. A quase única coisa que o Android compartilha com uma distribuição Linux é o kernel. E mesmo este componente é modificado. Também outros componentes principais, como o libc, diferem.

Android não tem /etc/fstab

Você não precisa /etc/fstabmontar uma partição. Mas também não há mountcomando para o IIRC . dev_mountdeve funcionar (raiz necessária). Para responder ao título das suas perguntas: Toda a montagem do sistema de inicialização é feita com o /etc/vold.fstabscript auxiliar.

Fluxo
fonte
Acho que sou um usuário desejável do maemo, na verdade. Sim, é muito longe do Linux, eu acho. Obrigado pelo ponteiro para vold.fstab!
barrymac
3
Vold.fstab só tem coisas cartão SD no meu Nexus One
gcb
7

O arquivo fstab está em /.

Chama-se /fstab.$systemname.rcwhere $systemnameé baseado na propriedade de impressão digital do aparelho, identificada como categoria do chipset ou do próprio aparelho.

Phil Carswell
fonte
3
Isso depende e varia de ROM para ROM. Em AOSP é /etc/vold.fstab. :)
t0mm13b
e embora seja verdade para o CM10 - eu tenho /fstab.p1c - ele é sobrescrito na reinicialização por algo que ainda não descobri.
jcomeau_ictx
3
De acordo com source.android.com/devices/storage/config.html , no Android 4.2.2 e versões anteriores vold.fstab, e no 4.3 e versões posteriores /fstab.<device>.
LarsH
11
no meu Moto E, esse arquivo está no sistema de arquivos montado somente para leitura :(
Anton Krosnev 19/07/16
5

Estou vendo informações conflitantes. Um recurso diz que é codificado permanentemente ; portanto, não é algo que você possa alterar do lado do usuário:

Os programas init específicos do Android são encontrados em device / system / init. Adicione mensagens de LOG para ajudá-lo a depurar possíveis problemas com a macro LOG definida em device / system / init / init.c.

O programa init monta diretamente todos os sistemas de arquivos e dispositivos usando nomes de arquivos codificados ou dispositivos gerados pela análise do sistema de arquivos sysfs (eliminando assim a necessidade de um arquivo / etc / fstab no Android).

Em outros lugares /etc/vold.fstabe /etc/vold.confsão mencionados. Eu os tenho no meu dispositivo no CM 7.1, mas não tenho certeza de como eles são usados.

Matthew Read
fonte
3
É meio codificado, mas não é. Há um init.rcarquivo que mora no seu ramdisk, para que você possa puxar o seu boot.img, extrair o seu ramdisk e modificá- init.rclo e reembalá-lo novamente (brevemente discutido aqui , e a fonte do Tiamat é um bom exemplo de configuração de pontos de montagem init.rc)
eldarerathis
5

Você pode remontar seu armazenamento externo para ser executável executando

mount -o remount, rw /mnt/sdcard

isso removerá os sinalizadores noexec, nosuid e nodev, mas ainda será vfat fs. Você pode fazer links para este FS, mas não de dentro. A remontagem não sobrevive a uma reinicialização, porque o arquivo vold.fstab será lido e será remontado na reinicialização com os sinalizadores noexec.

Se você reformatar algum de seu armazenamento externo para algo diferente de vfat, eles não serão remontados na reinicialização e os aplicativos que você moveu para qualquer armazenamento externo não serão utilizáveis. Se você não pretende usar armazenamento externo para aplicativos, desmonte seu armazenamento externo e use-o busybox mke2fs DEVICEpara torná-lo ext2. Use busybox newfs_msdos DEVICEpara devolvê-lo ao vfat e torná-lo utilizável novamente.

Nota busybox mkfs.vfatestá quebrada, você receberá algo como

lseek: valor muito grande para o tipo de dados definido

então não perca seu tempo. Tudo isso pressupõe que você esteja enraizado e tenha um binário do busybox funcionando.

Mark Mikofski
fonte
2

Sei que esse é um tópico antigo, mas algumas das respostas aqui realmente atrapalharam meus esforços para aprender sobre o fstabAndroid, porque elas implicam fortemente que a fstabsituação no Android é extremamente diferente de outras distribuições Linux. Pelo que sei, não é.

No entanto, ler respostas diferentes aqui me fez pensar: que fstabarquivos ou arquivos equivalentes estão no meu dispositivo?

Recuar por um momento, observando que "O Android não possui / etc / fstab " provavelmente não é útil para o OP, pois eles já devem saber disso. Se isso não fosse verdade, a pergunta deles (perguntando qual é o equivalente do Android /etc/fstab) não faria sentido. Por outro lado, sabemos que o @Flow não estava tentando sugerir que não havia equivalente no Android, pois eles mencionaram um deles, um "script auxiliar" chamado /etc/vold.fstab.

Em suma, acho que a dica do post do @ Flow é que, em alguns sistemas, existe um arquivo (possivelmente um "script auxiliar" - não posso verificar isso no meu telefone) chamado /etc/vold.fstabe, nesses sistemas, esse arquivo é o equivalente mais próximo de /etc/fstab.

Voltando a me perguntar sobre meu próprio dispositivo, vou postar minhas descobertas aqui por vários motivos, apesar da idade do OP:

  • Primeiro, quero documentar todos os fstabarquivos de estilo que posso encontrar no meu telefone, um Pixel 2XL.
  • Segundo, quero mostrar às pessoas, especialmente aos iniciantes em Linux / Android, que é bastante fácil encontrar esses arquivos em seu próprio dispositivo ("ensine-os a pescar").
  • Terceiro, é útil escrever minhas descobertas (bônus: sempre poderei encontrá-las novamente aqui no StackExchange!).
  • Finalmente, o Google ainda está exibindo esta página, então há uma chance de isso ajudar alguém que não seja eu.

Então, deixe-me tentar resumir tudo o que aprendi com tudo isso:

O Android, ou pelo menos suas variantes às quais tenho acesso, usa fstabarquivos -style. No entanto, o nome exato, o local e a função desses arquivos variam de acordo com a distribuição, ou seja, a versão e o dispositivo Android e também a ROM, se você usar uma ROM personalizada.

Para encontrar esses arquivos em seu sistema, abra um emulador de terminal como tmuxou adb shelle executar algo como isto: find / -type f -iname '*fstab*' 2>/dev/null. O redirecionamento do arquivo 2 ( stderr) para /dev/nulltornar sua saída muito mais limpa, pois você poderá ignorar o ataque de mensagens de erro das quais receberá find, mesmo que seja root.

No meu sistema (um Pixel 2XL, codinome "taimen"), encontrei três arquivos candidatos:

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

Os dois primeiros são arquivos separados, pois nenhum deles é um link simbólico ou físico para o outro, mas, se você diffos encontrar, descobrirá que são idênticos. Olhando um pouco mais fundo, se você executar statos arquivos, verá que eles têm os mesmos valores de Dispositivo e 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

statrelata esses dois nomes de arquivos como arquivos regulares com apenas um link cada (portanto, não há links simbólicos ou físicos). Não sou especialista em sistemas de arquivos, mas o que aconteceu aqui é que o mesmo dispositivo foi montado duas vezes. Você pode ver isso na saída do comando a seguir, onde as únicas diferenças entre as duas linhas de saída são os pontos de montagem (a parte imediatamente após "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)

O terceiro arquivo só está visível para mim se eu fizer login como root; portanto, se você tiver um dispositivo idêntico ao meu, ainda não encontrará ou terá acesso a esse arquivo, a menos que seu telefone esteja enraizado. Esse arquivo tem a ver com um serviço chamado Open Mobile Alliance Device Management, mas esse é um serviço que eu conheço muito pouco, então vou mencioná-lo aqui, e você pode pesquisar no Google por detalhes, se quiser.

skye --- capitão
fonte
11
Tópico antigo, de fato, e desde então as coisas mudaram bastante, na medida em que a maioria dos dispositivos para os quais construí ROMs teriam um arquivo fstab independente em um /system/etcou em outro /vendor/etc. Obrigado por trazer novas informações.
Andy Yan
Encontrei este post procurando o motivo pelo qual o mount retorna o erro mount: bad /etc/fstab: No such file or directory. Você tem alguma ideia ou solução para isso?
Michael