Acabei de configurar um sistema básico do Gentoo (o que significa que posso inicializar, efetuar login e fazer coisas com ele agora). Minha partição raiz está em um grupo virtual LVM2 (com uma /boot
partição separada ). Para inicializar, preciso passar os parâmetros abaixo para o kernel:
root=/dev/ram0 real_root=/dev/vg/rootlv init=/linuxrc dolvm
Aparentemente, ele está usando um ramdisk inicial para fazer alguma coisa (eu acho que carregando as coisas do LVM) antes de montar o root. Existe uma maneira de eu colocar esse código no próprio kernel para que nenhum initrd seja necessário? Se não, como posso fazer o initrd sozinho?
Pode ser útil acrescentar que eu tentei compilar o kernel para raiz não LVM, sem o initrd e funcionou perfeitamente. Então tentei colocar tudo sob o LVM e não consegui inicializar a máquina (acho que não pode lidar com o material do LVM). Então eu usei a genkernel
ferramenta com a --lvm
opção e ela cria o kernel e o initrd que estou usando no momento.
Agora eu quero pular genkernel
e fazer tudo sozinho, de preferência sem o initrd, para que a máquina inicialize um pouco mais rápido (não preciso da flexibilidade de qualquer maneira).
Respostas:
Resposta simples: Não. Se você deseja LVM, precisa de um initrd.
Mas, como outros já disseram antes: os LVMs não diminuem a velocidade do seu sistema ou fazem algo de ruim de outra maneira, eles apenas permitem que você crie um ambiente que permita ao seu kernel carregar e fazer o seu trabalho.
O initrd permite que seu kernel seja carregado: Se seu kernel estiver em uma unidade LVM, todo o ambiente LVM deve ser estabelecido antes que o binário que contém o kernel possa ser carregado.
Confira a entrada da Wikipedia no initrd, que explica o que o initrd faz e por que você precisa.
Outra observação: Entendo que você quer fazer as coisas sozinho, mas você pode sujar as mãos, mesmo com o genkernel. Use genkernel --menuconfig all e você pode basicamente definir tudo como se fosse construir seu kernel completamente sem o suporte de ferramentas, o genkernel apenas adiciona o make bzImage, make modules e make modules_install linhas para você e faz essas coisas desagradáveis do initrd.
Obviamente, você pode criar o initrd você mesmo, conforme descrito aqui para initramfs ou aqui para initrd .
fonte
linuxrc
script no initrd executa essa tarefa.edit: acabei de perceber que você está tentando inicializar no LVM, nunca configurei um LVM, nunca precisei deles, portanto, provavelmente a abordagem aqui pode não funcionar
Aqui estão as regras básicas que você precisa fazer para criar um kernel sem initrd (a partir da memória, não me lembro exatamente):
Recompile seu kernel, certifique-se de incorporá-lo (IMPORTANTE: não como módulo!):
Device Drivers
)/
,/etc/*
e/lib/modules/*
(sobFile systems
)Basicamente, o kernel precisa ser capaz de montar o sistema de arquivos raiz, ler o / etc / fstab, carregar outros módulos de driver (se necessário) e montar outros sistemas de arquivos não raiz para concluir o restante do processo de inicialização. Se você tiver um processo de inicialização mais envolvido, por exemplo, inicialização em rede, também precisará criar esses drivers.
Desative o initrd no kernel "Configuração geral> Sistemas de arquivos RAM iniciais e suporte a disco RAM (initramfs / initrd)", também conhecido como CONFIG_BLK_DEV_INITRD = n.
Modifique a configuração do GRUB, você não precisa mais de init = e realroot = e configurar root = para que aponte para o dispositivo do sistema de arquivos raiz.
Eu acho que isso é tudo. Não se esqueça de manter um kernel de backup e uma boa cópia de um Live CD inicializável, caso algo aconteça.
Coisas que podem dar errado: se você compilou os drivers errados ou se você compilou os drivers básicos como um módulo, o kernel não pode ler o sistema de arquivos. Reinicie com um kernel novo ou com um Live CD e recompile um kernel com os drivers corretos.
A única parte difícil é descobrir qual driver é relevante para o seu hardware. Você pode usar
lspci
elshw
para ajudar a identificar seu hardware. Se você ainda não possui essas ferramentas, entãoemerge lshw pciutils
.fonte
lsmod
de um kernel em execução também é útil.Sim, você precisa de um initrd. Aqui está o porquê:
O processo normal de inicialização começa com o carregador de inicialização, que sabe o suficiente sobre o seu sistema para encontrar o kernel e executá-lo. (O GRUB2 é inteligente o suficiente para encontrar um kernel localizado em uma partição LVM2 ou RAID, mas o GRUB1 não, por isso é geralmente recomendável que você crie / inicialize como uma partição separada com um layout simplificado.) Uma vez carregado, o kernel precisa ser capaz de encontrar o sistema de arquivos raiz, para que ele possa iniciar o processo de inicialização. No entanto, o LVM não pode ser iniciado sem ser acionado por algumas ferramentas do espaço do usuário, que existem no sistema de arquivos raiz, que não podem ser carregadas sem as ferramentas LVM, que existem no sistema de arquivos raiz ...;)
Para interromper esse ciclo, um initrd ou initramfs é um sistema de arquivos compactado armazenado no kernel (no / boot ou dentro do próprio kernel), que contém um sistema Linux suficiente para iniciar serviços como LVM ou MD ou qualquer outra coisa você quer. É um sistema de arquivos temporário e atua apenas como seu sistema de arquivos raiz o tempo suficiente para que a raiz real seja carregada.
No que diz respeito à criação de um, a maior parte da documentação sobre o assunto é surpreendentemente obsoleta - lvm2create_initrd, por exemplo, nem funciona mais no Gentoo. (Configurei a mesma coisa há alguns meses atrás e tive que reescrever o script antes de obter um initrd de trabalho.) Criar seu próprio initramfs pode ser divertido, e é a única maneira de obter uma inicialização absolutamente mínima. processo (e aprenda os detalhes sobre como o Linux inicializa no processo), mas é muito trabalhoso.
A resposta curta: use Dracut. É uma nova estrutura que está sendo criada para gerar um initramfs de maneira automatizada e está no portage. A documentação é um pouco esparsa, mas há o suficiente para descobrir as coisas, e é de longe a maneira mais fácil de obter um initramfs sólido e uma raiz LVM.
fonte
Embora não seja possível não usar algum tipo de initrd, é possível não usar arquivos initrd separados. (Eu nunca usei o genkernel, então não posso dar instruções para isso).
Por exemplo, eu configurei a opção:
Onde
/usr/src/initrd.contents
no meu caso se parece (eu tenho LVM + tuxonice + fbsplash):E
/usr/src/init
é:fonte
Sim, ele é.
As complicações que surgem da criação e manipulação de initrds são discutidas se você instalar e usar o grub2. O wiki do grub2 http://grub.enbug.org/LVMandRAID descreve como você pode ter seu / boot no lvm com nada mais do que um insmod lvm no grub.cfg, o arquivo de configuração do grub, portanto, não há necessidade de um initrd.
grub2 agora na versão 1.98, mas ainda no ramo experimental no gentoo. No entanto, pode ser instalado em outro slot e é perfeitamente utilizável.
Desfrutar!
fonte