Estou tentando criar um kernel de inicialização PXE paraCloneDeploy. Eu tenho uma NIC que precisa de alguns drivers que não funcionam imediatamente, mas funcionam bem em uma instalação do Ubuntu, então pensei em simplesmente inicializar o PXE usando o kernel e o initrd a partir dos quais inicializo meu Ubuntu (não sendo muito Linux -savvy Não consigo pensar em uma maneira muito melhor de fazer as coisas, as tentativas de construir meu próprio kernel não conseguiram produzir uma NIC funcional).
Estou executando uma instalação 18.04.2 atualizada. Então copiei os arquivos:
vmlinuz-4.18.0-20-generic
e initrd.img-4.18.0-20-generic
para os lugares certos do meu sistema PXE e tentei inicializar a partir deles.
Esta é a linha de comando de inicialização (ipxe) (com localizações de imagens encurtadas para manter as coisas legíveis):
kernel http://.../IpxeBoot?filename=vmlinuz-4.18.0-20-generic&type=kernel initrd=initrd.img-4.18.0-20-generic root=/dev/ram0 rw ramdisk_size=1560000 web=http://.../ USER_TOKEN= task=debug consoleblank=0
imgfetch --name initrd.img-4.18.0-20-generic http://.../IpxeBoot?filename=initrd.img-4.18.0-20-generic&type=bootimage
boot
Ao inicializar, vários dispositivos relevantes são inicializados (incluindo minha NIC!), Mas então me deparo com o seguinte erro:
gave up waiting for root file system device
ALERT! /dev/ram0 does not exist. Dropping to a shell!
eu encontreiessa questão, o que sugere que preciso executar uma etapa extra durante a inicialização em algum lugar para carregar o módulo brd e fazer com que o initrd seja transformado em um disco RAM realmente utilizável. Foi sugerido add "brd rd_size=16777216" to /etc/initramfs/modules
, mas quando descompactei o arquivo initrd.img-4.18.0-20-generic (usando unmkinitramfs
), não há /etc/initramfs. (Observo também que provavelmente deveria usar rd_nr=1 rd_size=1048576
apenas ram0 criado em vez de ram0 até ram15).
Como faço para superar o erro de inicialização. E se isso envolve carregar o brd, como faço isso para esta versão do kernel?
Responder1
O ramdisk inicial (no seu caso é initrd.img-4.18.0-20-generic
) é gerado pela update-initramfs
ferramenta automaticamente durante a instalação do kernel em seu sistema.
update-initramfs
verifica seu sistema e adiciona os módulos necessários initrd
para carregá-lo durante a inicialização.
Existem dois locais onde você pode colocar seus scripts initial ramdisk
:
/usr/share/initramfs-tools
e
/etc/initramfs-tools
No seu caso você deve inserir essa linha /etc/initramfs-tools/modules
e executar
update-initramfs -u
para o seu kernel atual.
Então confira o resultado:
mkdir myinitramfs
cd myinitramfs
zcat /boot/initrd.img-4.18.0-20-generic | cpio --extract
cat conf/modules
verifique se o seu módulo está na lista