Como o Linux ou Unix “/” são montados durante o boot?

5

Os dispositivos podem ser montados em um caminho. Por exemplo, "/ dev / sda1" pode ser montado em "/ home / user". O que não entendo é como e onde o "/" é montado durante a inicialização. Alguma ajuda explicando?

    
por claOnline 17.01.2017 / 21:45

2 respostas

6

Durante o boot de um sistema Unix, o kernel faz algumas coisas que ele não faz durante a operação normal. Uma dessas coisas é montar um sistema de arquivos no diretório / ; isso é bem diferente das operações normais de montagem, pois a montagem não é acionada por uma chamada de sistema mount e o diretório de destino não é um diretório existente. Outra coisa é executar um programa como PID 1 , que é diferente da operação normal, pois isso cria um processo sem duplicando um processo existente .

A forma como esta montagem “mágica” do diretório raiz é muito diferente em diferentes variantes do Unix. O kernel escolhe qual dispositivo montar com base nos parâmetros de configuração que podem ser especificados de várias maneiras: configuração em tempo de compilação, configuração de tempo de execução na imagem do kernel, configuração de tempo de execução em algum local de memória predefinido, parâmetros de linha de comando,… funciona em sua máquina, você precisaria examinar a documentação de sua variante Unix e descobrir como sua máquina está configurada.

Para ter uma ideia de como funciona, aqui está uma visão geral de como um kernel moderno do Linux opera. Este não é o exemplo mais simples, porque o Linux tem muito histórico e casos de uso variados.

  • O Linux pode começar com um sistema de arquivos “especial” anexado ao caminho / , que consiste em arquivos armazenados na RAM. Esse sistema de arquivos especial é chamado de initramfs ; é uma instância do tipo de sistema de arquivos rootfs. O initramfs é preenchido pelo conteúdo transmitido pelo carregador de inicialização por meio de um protocolo dependente da arquitetura, compilado diretamente na imagem do kernel que é carregada na memória pelo carregador de inicialização.
  • Como alternativa, o Linux pode montar um dispositivo em / que faz parte de um conjunto restrito (mas grande) de tipos de volume que são reconhecidos pelo código de inicialização no kernel. Esses tipos de dispositivos incluem qualquer sistema de arquivos em tipos comuns de partições em tipos comuns de discos (qualquer coisa vagamente semelhante a SCSI, incluindo ATA, USB, etc.), bem como discos RAM e montagens NFS.
  • Dependendo do caminho escolhido, o sistema de arquivos raiz inicial pode ser posteriormente sombreado ou substituído por outro. O sombreamento é o que acontece com um initramfs e é assim que a maioria dos sistemas de desktop e servidor opera (sistemas embarcados, por outro lado, geralmente têm um sistema de arquivos raiz codificado). Substituição é o que acontece com um initrd , que é um tipo particular de disco RAM. O trabalho do initramfs ou initrd é carregar os drivers que fornecem o sistema de arquivos raiz “real” que será usado na operação normal.
por 18.01.2017 / 02:20
5

Isso é do manual bootup(7) em uma máquina Ubuntu:

A number of different components are involved in the system boot. Immediately after power-up, the system BIOS will do minimal hardware initialization, and hand control over to a boot loader stored on a persistent storage device. This boot loader will then invoke an OS kernel from disk (or the network). In the Linux case, this kernel (optionally) extracts and executes an initial RAM disk image (initrd), such as generated by dracut(8), which looks for the root file system (possibly using systemd(1) for this). After the root file system is found and mounted, the initrd hands over control to the host's system manager (such as systemd(1)) stored on the OS image, which is then responsible for probing all remaining hardware, mounting all necessary file systems and spawning all configured services.

Você teria encontrado isso por man boot , lendo e não encontrando a resposta, mas vendo "Veja também: bootup(7) " na parte inferior do manual.

Sendo curioso, olhei o manual para initrd :

In the first boot-up phase, the kernel starts up and mounts an initial root filesystem from the contents of /dev/initrd (e.g., RAM disk initialized by the boot loader). In the second phase, additional drivers or other modules are loaded from the initial root device's contents. After loading the additional modules, a new root filesystem (i.e., the normal root filesystem) is mounted from a different device.

Você mencionou "Unix", então eu vou lhe mostrar a documentação do primeiro do OpenBSD. -stage bootstrap do sistema e bootstrap de segunda fase também.

    
por 17.01.2017 / 22:02