Como os md
dispositivos são montados na inicialização no Ubuntu? É /etc/mdadm/mdadm.conf
realmente o fator relevante aqui?
Meu mdadm.conf
som está correto e eu verifiquei isso enquanto estava no ambiente do CD de resgate. Ao executá- mdadm -A --scan
lo, localiza e atribui os nomes dos dispositivos conforme desejado. O mdadm.conf
contém AUTO -all
para remover todo o automatismo da montagem das matrizes.
O que eu preciso fazer é ser capaz de montar automaticamente os md
dispositivos, conforme descrito no mdadm.conf
momento da inicialização ou que, ao montá-lo, honre o super-minor
valor da matriz 0,9 e name
(aparentemente <hostname>:<super-minor>
) para as matrizes 1,2 e faça a coisa certa sem isso mdadm.conf
. Que peça do quebra-cabeça estou perdendo?
Eu tenho o seguinte problema. Existem dois md
dispositivos com RAID1 ( md0
e md1
) e um com RAID6 ( md2
). Estou me referindo a eles pelos nomes de dispositivos desejados . md0
possui meta-dados versão 0.9, os outros dois têm versão 1.2. md0
mapas para /
e os outros dois não são relevantes para a inicialização .
A unidade de inicialização é particionada por GPT. Há uma cola "Partição de inicialização do BIOS" ( sda1
) nela. grub-install --no-floppy /dev/sda
relata sucesso.
md0 == sda3 + sdb3
md1 == sda2 + sdb2
md2 == sdc + sdd + sde + sdf + sdg + sdh
sda1
esdb1
são "partição de inicialização do BIOS" cada
GRUB2 está feliz com o /boot/grub/devicemap
que eu dei e eu adicionei part_gpt
, raid
, mdraid09
e ext2
para os módulos pré-carga em GRUB2.
Como ainda tinha meu volume raiz no ambiente de resgate, simplesmente montei tudo e depois chroot
editei:
mkdir /target
mount /dev/md0 /target
mount -o bind /dev /target/dev
mount -o bind /dev/pts /target/dev/pts
mount -o bind /sys /target/sys
mount -o bind /proc /target/proc
chroot /target /bin/bash
A partir daí, redefino o super-minor
on md0
(com meta-dados 0.9) e name
on md1
e md2
. Eu também verifiquei que funcionava usando mdadm --detail ...
. Fora isso eu ajustei /etc/default/grub
, corro update-grub
e também grub-install --no-floppy /dev/sda
e grub-install --no-floppy /dev/sdb
.
Depois disso, ao inicializar, sempre sou colocado no initramfs
shell de resgate, porque o sistema de arquivos raiz não pode ser montado. O motivo, após a verificação, /proc/mdstat
parece ser que o respectivo md
dispositivo nem mesmo é montado e executado. Sem mencionar que as outras duas unidades (meta-data versão 1.2) recebem um número de dispositivo em algum lugar na faixa 125..127.
Nota: O GRUB2 sai do disco de inicialização. Portanto, pelo menos, foi incorporado corretamente. O problema é a transição do rootfs
sistema de arquivos raiz inicial para o adequado.
/dev/mdX
exatamente por esse motivo. Use em/dev/md/NAME
vez disso. Isso nunca vai mudar./etc/fstab
. A instalação não depende dos nomes, eu ainda gostaria que eles fossem assim;) #Not to mention that the other two (meta-data version 1.2) drives receive a device number somewhere in the 125..127 range
. Eu não sei o suficiente sobre como o ubuntu monta volumes raid para responder a um problema maior.Respostas:
Processo básico de inicialização
Grub
Existe um modo de fallback, pois quando o Grub não consegue realmente ler o sistema de arquivos - porque não havia espaço suficiente para incorporar todo esse código no registro de inicialização ou porque não conhece o sistema de arquivos ou as camadas sob ele. Nesse caso, o GRUB incorpora uma lista de setores e lê o código deles. Isso é muito menos robusto e é melhor evitar. Pode até ser capaz de executar o kernel e o initramfs assim (não tenho certeza).
Núcleo
O kernel assume o controle e executa bastante init básico de hardware. Esta etapa é bastante rápida. Em seguida, o kernel descompacta o initramfs para um tmpfs e procura um
/init
tmpfs. Em seguida, ele é executado (no sentido normal, o kernel está sendo executado neste momento)/init
. A propósito, este é um script shell simples e antigo.Initramfs
Você pode extrair o initramfs manualmente, fazendo algo parecido
mkdir /tmp/foo; cd /tmp/foo; zcat /boot/initrd.img-3.8-trunk-amd64 | cpio -idmv
.O initramfs é responsável por carregar todos os drivers, iniciar o udev e localizar o sistema de arquivos raiz. Este é o passo que está falhando para você - ele não consegue encontrar o sistema de arquivos raiz, por isso é bem-sucedido.
Depois que o initramfs termina, ele tem o sistema de arquivos raiz montado e entrega o controle para / sbin / init.
Inicialização do sistema
Nesse ponto, seu init assume o controle - acho que o Ubuntu está usando o inicio atualmente.
O que está quebrado
Não tenho certeza do que está quebrado (parte, confesso, porque estou muito mais familiarizado com o modo como ele funciona no Debian do que no Ubuntu, embora seja semelhante), mas tenho algumas sugestões:
mdadm.conf
. Você pode precisar executar apenasupdate-initramfs -u
para corrigi-lo.fonte
Ok, eu descobri que estava faltando apenas uma peça. As
initrd
imagens não foram atualizadas após a atualizaçãomdadm.conf
.Então o que eu fiz?
Eu iniciei o sistema de resgate do CD de instalação do Ubuntu Server. Optou por executar um shell no ambiente do instalador e não usar um sistema de arquivos raiz. Em seguida (comentários anexados com
#
):Isso parece complicado, mas pode ser feito também com uma
bash
linha (embora longa):Isso usa os nomes atuais dos
md
dispositivos e seus UUIDs e cria umdevicemap
para leitura do GRUB2. Portanto, supondo que o acima foi feito corretamente, você já deve ter os nomes de dispositivos corretos.Mais para frente:
Verifique se ele contém:
se você configurou sua partição
/
ou/boot
para ser a versão 1.2 de metadados, use emmdraid1x
vez demdraid09
.Mais longe:
Esta etapa acima foi o link que faltava . Aparentemente, isso garante que o
mdadm.conf
efeito entre em inicialização.Depois disso, deixe o
chroot
e reinicie.fonte