Estou tentando configurar um nó/estação de trabalho / sistema sem disco , usando as instruções fornecidas no guia Sistema sem disco para archlinux (4.13.12-1-ARCH).
o problema
O cliente se conecta com sucesso ao TFTP ( atftp ), transfere todos os arquivos e apresenta o menu de seleção do GRUB (trecho relevante de grub.cfg
):
load_video
set gfxpayload=keep
insmod gzip
insmod ext3
insmod net
insmod tftp
insmod efinet
set root=(tftp,192.168.0.101)
set prefix=(tftp,192.168.0.101)/netboot/grub
linux /netboot/vmlinuz-linux add_efi_memmap root=/dev/nfs rootfstype=nfs nfsroot=192.168.0.101:/srv/[CLIENT OS] nfsrootdebug rw ip=dhcp
initrd /netboot/initramfs-linux.img
Eu tentei várias atribuições de ip
( https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt )
ip=:::::efinet0:dhcp
ip=:::::eno1s0:dhcp
ip=:::::eth0:dhcp
ip=[CLIENT IP]:[SERVER IP]:[GATEWAY IP]:[NETMASK]:[HOSTNAME]:[DEVICE]:dhcp
Enquanto ambos linux
e initrd
são carregados, continuar resulta em
[FAILED] "Failed to start Switch Root."
See 'systemctl status initrd-switch-root.service' for details.
You are in emergency mode. After logging in, type "journalctl -xb" to view
system logs, "systemctl reboot" to reobot, "systemctl default or ^D to enter into default mode.
Press Enter for maintenance
(or press Control-D to continue):
solução de problemas
removendo add_efi_mmap
Em vez de Failed to start Switch Root.
, o kernel entra em pânico:
[ 1.114386] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,255)
[ 1.114458] CPU: 3 PID: 1 Comm: swapper/0 Not tainted 4.13.12-1-ARCH #1
[ 1.114509] Hardware name: ASUSTeK COMPUTER INC. UX51V2A/UX51VZA, BIOS UX51VZA.204 12/03/2012
[ 1.114573] Call Trace:
[ 1.114604] dump_stack+0x63/0x8b
[ 1.114637] panic+0xe4/0x23d
[ 1.114667] mount_block_root+0x1f4/0x2ab
[ 1.114703] ? set_debug_rodata+0x17/0x17
[ 1.114737] mount_root+0x6a/0x6d
[ 1.114767] prepare_namespace+0x134/0x16c
[ 1.114802] kernel_init_freeable+0x1ec/0x205
[ 1.114840] ? rest_init+0xe0/0xe0
[ 1.114872] kernel_init+0xc/0xfc
[ 1.114904] ret_from_fork+0x25/0x30
[ 1.114957] Kernel Offset: 0x3000000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
[ 1.115040] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,255)
depuração systemd
Não consigo acessar o journalctl. O teclado não é detectado ou o sistema congela porque não consigo pressionar Enter
nem ^D
continuar.
A tentativa de inicializar diretamente no modo de emergência adicionando systemd.unit=emergency.target
ou emergency
à CLI do kernel parece não funcionar.
+(UPDATE 2) O mkinitcpio
argumento break=premount
não altera a systemd
inicialização.
rede
Usando o Wireshark, não há atividade de rede após o boot inicial do PXE, ou seja, quando linux
e initrd
são carregados, não há mais comunicação entre o cliente e o servidor.
SERVER IP: 192.168.2.101/24
CLIENT IP: 192.168.2.102/24
GRUB
Os comandos GRUB net_* e as variáveis de ambiente parecem indicar que tudo está em ordem; tftp funciona.
net_ls_cards efinet0 [CLIENT NETWORK DEVICE MAC]
net_ls_addr efinet0 [CLIENT NETWORK DEVICE MAC] 192.168.2.102
net_ls_routes efinet0:local 192.168.2.0/24 efinet0
efinet0:default 0.0.0.0/0 gw 192.168.2.101
echo $net_default_ip 192.168.2.102
echo $net_default_mac [CLIENT NETWORK DEVICE MAC]
echo $net_default_server 192.168.2.101
echo $net_efinet0_ip 192.168.2.102
echo $net_efinet0_mac [CLIENT NETWORK DEVICE MAC]
echo $net_efinet0_hostname (empty)
echo $net_efinet0_domain (empty)
echo $net_efinet0_dhcp_server_name (empty
echo $net_efinet0_next_server 192.168.0.101
echo $net_efinet0_root_path 102.168.0.101:/srv/[CLIENT OS]
echo $net_efinet0_extensionpath (empty)
Suporte de kernel para nfsroot
eip
Dado que não há atividade de rede, presumo que o ip
ou nfsroot
não esteja sendo executado.
Na verdade, o problema que estou tendo é descrito na pergunta Compilei o kernel com suporte a NFS, mas não obtive /dev/nfs .
A resposta a essa pergunta afirma (Andreas Wiese, 1 de julho de 2014 às 14:58)
... certifique-se de ter o suporte NFS incorporado ao binário do kernel e não como um módulo (ou tenha um
initramfs
, que cuida disso). O mesmo vale para drivers de rede: você provavelmente desejará ter o driver para sua placa de rede ethernet incorporada à sua imagem de kernel, caso contrário, você terá que carregá-lo de um arquivoinitramfs
.
Resumindo, existem várias possibilidades:
1. Faça como o link acima indica:root=/dev/nfs
configure, forneça o parâmetro corretonfsroot
e informe ao seu kernel sua configuração de rede por meio doip
parâmetro (essa seria a melhor maneira de garantir que está funcionando, ou seja, para descartar um servidor DHCP mal configurado).
2. TerCONFIG_IP_PNP
eCONFIG_IP_PNP_DHCP
ativado e configure um daemon DHCP para informar ao seu cliente qual endereço IP usar e onde encontrar sua raiz NFS.
3. Crie um initramfs que faça a configuração correta e a montagem do NFS.
Investigando o kernel archlinux
zgrep CONFIG_NFS_FS= /proc/config.gz -> CONFIG_NFS_FS=m
zgrep DHCP /proc/config.gz -> (nothing)
zgrep _IP_PNP_ /proc/config.gz -> CONFIG_IP_PNP is not set
indica que o archlinux não tem suporte para o ip
compilado com o kernel.
No comentário de um relatório de bug (2006) FS#5056 - O kernel padrão tem o NFS root mouting desabilitado
mkinitcpio suporta netbooting sem alterar o kernel
O que pode ser comparado ao comentário à resposta aceita na referida questão.
Desde cerca de 10 anos, o kernel não inicializa o nfs diretamente, mas monta um ramdisk inicial, que reinterpreta a linha de comando do kernel e inicializa de onde você deseja. - peterh 17 de junho de 2016 às 13:54
mkinitcpio
Delsinitcpio -a
...
Created with mkinitcpio 24
Kernel: 4.13.12-1-ARCH
Size: 55,63 MiB
Compressed with: gzip
...
Included modules:
... nfs ... nfsv3 nfsv4 [explicit] ...
Included binaries:
... ipconfig ... mount.nsf4 ... nfsmount ...
Early hook run order:
udev
Hook run order:
udev net net_nsf4 nbd
Cleanup hook order:
udev
suporte mkinitcpio para dispositivo de rede (atualização nº 1)
Embora os drivers da placa de rede devam ser carregados, queria ter certeza depois de ler [RESOLVIDO] Diskless - ipconfig: no devices to configure .
coloque a unidade do módulo de rede em /etc/mkinitcpio.conf.
MODULES=(atl1c nbd nfsv4)
Nem declarando explicitamente o módulo nem construindo tudo initramfs.img
no cliente não fez nenhuma mudança.
Não use detecção automática se a imagem deve ser executada em máquinas diferentes. autodetect remove todos os drivers que não são necessários para inicializar no sistema em execução no momento.
A remoção autodetect
dos ganchos resultou em um resultado interessante; add_efi_mmap
ocorreu o pânico do kernel observado anteriormente durante a remoção . Remover add_efi_mmap
ao carregar o autodetect
initramfs
não não teve mais efeito.
suporte mkinitcpio paranfs
Archlinux pode ou não ter suporte para nsf4.
- customização do tempo de execução do mkinitcpio usando net
- FS#28287 - [mkinitpio-nfs-utils] Suporte NFS4
Tanto quanto eu posso dizer, esta é uma questão secundária; a rede deve funcionar antes que uma tentativa de montar o nfs possa ser feita.
suporte mkinitcpio paraip
acabei de descobrir que
- mkinitcpio-nfs-utils (0.3-5) inclui um "ipconfig",
- existe um mkinitcpio-netconf 0.0.4-2 .
informação adicional
Isso pode ou não ser relevante.
O motivo para usar "inicialização UEFI PXE" em vez de "inicialização BIOS PXE" é porque o GRUB i386-pc falha ao carregar o grub.cfg. O computador reinicia, congela em "Bem-vindo ao GRUB!" e pode sobrecarregar a tela com pixels coloridos; o resultado parece aleatório. Os logs do Wireshark revelam que tftp
às vezes carrega todos os módulos do grub, às vezes não. A última entrada de log geralmente é o cliente solicitando o dispositivo de rede do servidor;ARP 60 Who has [SERVER IP]? Tell [CLIENT IP]?
De acordo com as instruções no wiki do Arch Linux para sistemas sem disco
Para a instalação do cliente
então
Pelo que entendi, basta adicionar
net_nfs4
aos ganchos padrão emmkinitcpio.conf
. Procurando por uma resposta, não consigo me lembrar de nada sobre os ganchos necessários; em vez disso, acabei adicionando onet
gancho na confusão de ler outros guias que presumivelmente eram destinados ao nfs3.Finalmente me deparei Lidamos com o carregamento do ArchLinux na rede Roshalsky 22 de março de 2015 às 16:14 .
O artigo tem uma seção chamada Nós preparamos o initramfs que é familiar no início do wiki do Arch Linux,
mas difere em alguns pontos cruciais.
Em primeiro lugar, edite o arquivo net_nfs4, que no Arch Linux é
Em segundo lugar,
ATUALIZAÇÃO +(20171210)
Tentando resolver outro problema notei na
/usr/lib/initcpio/hooks/net_nfs4
função definidanfs_mount_handler
a seguinte linha:De acordo com
man mount.nfs4
:portanto, mudei essa linha para: