Por que em alguns sistemas Linux, o sistema de arquivos raiz aparece como / dev / root em vez de / dev / <nó real do dispositivo> no mtab?

11

Eu já vi em vários sistemas Linux onde, em vez do nó do dispositivo real (por exemplo /dev/sda1:), o dispositivo raiz aparece como /dev/root, ou em vez do sistema de arquivos real, mtabdiz que é um sistema de arquivos chamado rootfs(que aparece como um sistema de arquivos real /proc/filesystems, mas não possui código <linux-kernel-source-tree>/fs). Vários utilitários foram criados para usar determinados atributos para determinar o nó real do dispositivo raiz (como rdev e o rootdev do Chromium OS). Não consigo encontrar uma explicação lógica para isso além de ler em algum lugar que dispositivos embarcados muito pequenos nem sempre precisam ter um /devnó de dispositivo para o dispositivo raiz. (Isso é verdade? Em caso afirmativo, essa é a resposta para minha pergunta?) Por que o mtab às vezes diz /dev/root(e eu acho que posso ter visto isso dizerrootdevuma vez) em vez do nó do dispositivo real, e como posso dizer sempre o nó do dispositivo real? O kernel monta primeiro o dispositivo raiz seguindo o rootparâmetro no cmdline e depois o init/systemdmonta de acordo com o fstab, correto? Se assim for, então eu presumo que initmantém mtab. Se minha teoria estiver correta, como posso initescrever o nó do dispositivo raiz real mtab? Percebi que /etc/mtabé realmente um link simbólico para /proc/mounts, o que significa que mtabé mantido pelo kernel. Então, como configurar / corrigir um kernel para, em vez de dizer que o caminho do nó dos dispositivos raiz é /dev/root, mtabconter o nó do dispositivo real?

Billy
fonte

Respostas:

4

Isso geralmente é um artefato do uso de um initramfs.

Na documentação do kernel ( https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt )

O que é rootfs?

O Rootfs é uma instância especial do ramfs (ou tmpfs, se estiver ativado), que está sempre presente nos sistemas 2.6. Você não pode desmontar rootfs pelo mesmo motivo que não pode matar o processo init; em vez de ter um código especial para procurar e manipular uma lista vazia, é menor e mais simples para o kernel garantir que determinadas listas não possam ficar vazias.

A maioria dos sistemas apenas monta outro sistema de arquivos sobre o rootfs e o ignora. A quantidade de espaço que uma instância vazia de ramfs ocupa é pequena.

Assim rootfsé o sistema de arquivos raiz que foi criado para o initramfs e não pode ser desmontado.

No que diz respeito a /dev/root, tenho menos certeza disso, mas se bem me lembro, /dev/rooté criado ao usar um initrd (não o mesmo que um initramfs).

Patrick
fonte
mountrootfs on / type rootfs (rw)para initrd e /dev/root on / type ext2 (rw,relatime,block_validity,barrier,user_xattr)para disco rígido ext2 com esta configuração .
Ciro Santilli respondeu
/dev/rooté usado por algumas implementações do initramfs, mas não por outras - nesses casos, não é devido ao kernel. Quando não estiver usando um initramfs, parece ser um valor de espaço reservado usado pelo kernel. (Talvez ele possa ser removido em alguma versão posterior do kernel). stackoverflow.com/questions/37310046/…
sourcejedi
3

O Gentoo possui um patch que faz exatamente isso (garante que o dispositivo raiz real seja mostrado). Você pode encontrá-lo aqui: https://lkml.org/lkml/2013/1/31/574

Milos Ivanovic
fonte
2

No Linux, /dev/rootse presente, é um link simbólico para o dispositivo real criado no momento da inicialização.

Você pode usar readlink /dev/rootou cat /proc/cmdlinepara ver o rootparâmetro do kernel inicializado e, assim, descobrir o dispositivo real por trás dele.

Do homem dracut(8)

No entanto, para continuar com uma inicialização bem-sucedida, o objetivo é localizar o volume raiz e criar um link simbólico / dev / root que aponte para o sistema de arquivos.

Rui F Ribeiro
fonte
Não tenho certeza se /dev/rooté um artefato de distribuições baseadas em RedHat.
Rui F Ribeiro
Bem, meu Debian 8 não tem /dev/root/. Em um antigo CentOS, parece ser um nó de dispositivo real em vez de um link simbólico.
11136 ilkkachu
1
Bem, a base-filesreceita da OpenEmbeddedfstab menciona /dev/root, então não são apenas as distros originárias da Red Hat que a estão usando.
ack