Por que em alguns sistemas Linux, o sistema de arquivos raiz aparece como / dev / root em vez de / dev / real device nodein mtab?

9

Eu já vi em vários sistemas Linux onde, em vez do nó de dispositivo real (por exemplo: /dev/sda1 ), o dispositivo raiz aparece como /dev/root ou, em vez do sistema de arquivos real, mtab diz que é um sistema de arquivos chamado rootfs (que aparece como um sistema de arquivos real em /proc/filesystems , mas não tem código em <linux-kernel-source-tree>/fs ). Vários utilitários foram feitos para usar determinados atributos para determinar o nó real do dispositivo raiz (como rdev e o rootdev do SO Chromium). Não consigo encontrar nenhuma explicação lógica para isso além de ler em algum lugar que dispositivos incorporados muito pequenos nem sempre precisam ter um nó de dispositivo /dev para seu dispositivo raiz. (Isso é verdade, e se assim for, é a resposta à minha pergunta?) Por que o mtab às vezes diz /dev/root (e acho que eu poderia ter visto rootdev uma vez) em vez do nó real do dispositivo, e como posso dizer sempre o nó do dispositivo real? O kernel primeiro monta o dispositivo raiz seguindo o parâmetro root no cmdline, então init/systemd re-monta de acordo com o fstab , correto? Em caso afirmativo, presumo que init mantém mtab . Se minha teoria estiver correta, como posso fazer init escrever o nó do dispositivo raiz real em mtab ? Eu percebi que /etc/mtab é na verdade um link simbólico para /proc/mounts , o que significaria mtab é mantido pelo kernel. Então, como faço para configurar / corrigir um kernel, em vez de dizer que o caminho do nó dos dispositivos raiz é /dev/root , ter mtab contém o nó do dispositivo real?

    
por Billy 11.07.2016 / 05:49

3 respostas

4

Isso geralmente é um artefato do uso de um initramfs.

Da documentação do kernel ( link )

What is rootfs?

Rootfs is a special instance of ramfs (or tmpfs, if that's enabled), which is always present in 2.6 systems. You can't unmount rootfs for approximately the same reason you can't kill the init process; rather than having special code to check for and handle an empty list, it's smaller and simpler for the kernel to just make sure certain lists can't become empty.

Most systems just mount another filesystem over rootfs and ignore it. The amount of space an empty instance of ramfs takes up is tiny.

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

Em relação 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).

    
por 11.07.2016 / 07:50
3

O Gentoo tem um patch que faz exatamente isso (garante que o dispositivo raiz real seja mostrado). Você pode encontrá-lo aqui: link

    
por 03.10.2016 / 10:21
2

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

Você usa readlink /dev/root ou cat /proc/cmdline para ver o parâmetro root do kernel inicializado e, assim, descobrir o dispositivo real por trás dele.

De man dracut(8)

However, to continue with a successful boot, the objective is to locate your root volume and create a symlink /dev/root which points to the file system.

    
por 11.07.2016 / 07:52