O `/ etc / fstab` é usado para remontar unidades?

9

Eu tenho um dispositivo instalado com o Ubuntu 14.04.5 que possui um único disco rígido com um sistema de arquivos ext4.

Ao ler o documento Ext4 Filesystem , aprendi que o modo de dados padrão é o orderedque apenas protege os metadados. No meu projeto, queremos alterá-lo para journaltambém proteger os dados do arquivo, porque a segurança dos dados é de maior valor.

A primeira coisa que tentei foi modificar o /etc/fstabarquivo. Eu tentei mudar

UUID=<UUID> / ext4 errors=remount-ro 0 1

para

UUID=<UUID> / ext4 errors=remount-ro,data=journal 0 1

anexando data=journalao campo de opção.

No entanto, quando reinicializei o dispositivo, recebi uma mensagem de erro informando cannot change data mode on remount. Eu verifiquei o dmesge vi uma mensagem anterior sobre a montagem da unidade com o orderedmodo de dados.

Por um tempo embaraçosamente longo, pensei que /etc/fstabseria usado para substituir as opções de montagem padrão, para que as unidades sejam montadas apenas uma vez. Mas agora parece errado: a unidade é montada usando suas opções de montagem padrão e, em seguida, /etc/fstabé retirada para remontá-la.

Minhas perguntas são :

  • Esse processo "mount-remout" é o design do sistema? Eu li a Fstabpágina da wiki, mas não a vi mencionar a coisa "mount-remount".
  • Se /etc/fstabé realmente usado para remontar, em qual etapa do processo de inicialização o drive é montado pela primeira vez? É implementado em /etc/init.d? Eu vi alguns scripts /etc/init.dchamados umountfse umountroot, mas, ignorando o conteúdo deles, eles não parecem relevantes.
yaobin
fonte
2
Eu acho que é o problema "galinha e ovo" mencionado aqui ( /etc/fstabreside no sistema de arquivos raiz, mas não pode ser lido até depois que o sistema de arquivos foi montado): O initramfs usa / etc / fstab?
steeldriver

Respostas:

8

De man ext4:

data = {diário | pedido | write-back}
              Especifica o modo de registro no diário para dados do arquivo. Os metadados são sempre
              registrado no diário. Para usar modos diferentes dos pedidos no sistema de arquivos raiz
              , passe o modo para o kernel como parâmetro de inicialização, por exemplo, root‐
              sinalizadores = dados = diário.

Remova data=orderedda sua linha fstab e edite /etc/default/grub. Em /etc/default/grubmudar a linha

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

para

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash root‐flags=data=journal"

executar sudo update-grube reiniciar.

mook765
fonte
5

Quando o / etc / fstab é usado

Se você executar sudo strace -e open,openat mount -o remount,rw /, verá que o comando é realmente aberto /etc/fstab. Este é o comando mais comum que você verá, geralmente mencionado em artigos sobre como trabalhar a partir do shell de recuperação.

Para citar também a resposta do sourcejedi (que vem do mount(8)manual):

mount -o remount, rw / dir

Após esta chamada, mount lê fstab e mescla essas opções com as opções da linha de comandos (-o) . Se nenhum ponto de montagem for encontrado no fstab, será permitida uma remontagem com fonte não especificada.

No entanto, isso não significa que /etc/fstabé sempre usado. Em particular, quando você também especifica o arquivo do dispositivo; referência ao mount(8)manual :

A funcionalidade remontar segue a maneira padrão como o comando mount funciona com as opções do fstab. Isso significa que o comando mount não lê fstab (ou mtab) somente quando um dispositivo e dir são totalmente especificados.

mount -o remount, rw / dev / foo / dir

Após esta chamada, todas as opções antigas de montagem são substituídas e coisas arbitrárias do fstab são ignoradas , exceto a opção loop =, que é gerada e mantida internamente pelo comando mount.

Isso faz sentido, pois /dirpode ser arbitrário - remontar um dispositivo em um ponto de montagem diferente.

Isso /etc/fstabtambém não é mencionado quando a montagem do /sistema de arquivos no momento da inicialização do kernel nada sabe /etc/fstab. Para citar a resposta de psusi :

Eventualmente, os carregadores de inicialização apareceram e poderiam passar uma linha de comando para o kernel. Se o argumento root = foi passado, isso informava ao kernel onde estava o root fs, em vez do valor incorporado. Os drivers precisavam acessar o que ainda precisava ser incorporado ao kernel

...

Finalmente, hoje temos o initramfs. Isso é semelhante ao initrd, mas em vez de ser uma imagem de sistema de arquivos compactada carregada em um ramdisk, é um arquivo cpio compactado. Um tmpfs é montado como raiz e o arquivo é extraído lá. Em vez de usar o pivot_root, considerado um hack sujo, os scripts de inicialização initramfs montam a raiz real em / root, excluem todos os arquivos da raiz tmpfs e depois chroot em / root e exec / sbin / init

Sistemas de arquivos que não precisam do fstab

Observe também que o kernel do Linux possui outros sistemas de arquivos que residem na memória - eles não estão disponíveis para os usuários normalmente, alguns dos quais não possuem um ponto de montagem, enquanto outros são expostos aos usuários. O kernel não precisa fazer referência /etc/fstaba eles. Exemplo disso é /proc- é um sistema de arquivos virtual que expõe principalmente informações sobre processos e algumas coisas sobre hardware e sistema que realmente deveriam estar /sys- em outro sistema de arquivos virtual.

Sergiy Kolodyazhnyy
fonte