O Mandriva Linux não inicializa após a instalação do systemd

1

Eu tenho um sistema Mandriva Linux que foi atualizado no local usando urpmi da versão 2010.0 para 2010.1 e depois para 2011.0. Eu me deparei com alguns problemas menores, mas nada que eu não pudesse lidar.

Algumas semanas atrás, o atualizador do Mandriva me informou que, para atualizar o shorewall , eu tinha que substituir também sysvinit por systemd e systemd-sysvinit . Naturalmente, eu estava relutante em deixar o atualizador tocar em algo tão crítico quanto o sistema de inicialização sem nenhum motivo, então eu adiei. Naturalmente, o applet de atualização do Mandriva continuou me incomodando. Naturalmente, acabei desistindo e concordei. E, naturalmente, causou confusão o suficiente para o meu sistema não inicializar sozinho.

Ele inicia normalmente, bicos de algumas mensagens e, em seguida, eu recebo muitas mensagens nesse formato:

Starting XXXX aborted because a dependency failed.

em que XXXX é algo relacionado ao sistema de arquivos, seja uma chamada fsck ou uma montagem do sistema de arquivos. Ele me coloca no shell raiz, onde a dependência que falhou logo se torna óbvia: a maioria dos arrays do MD não foi iniciada. Executando manualmente

# mdadm -As
# mount -a
# systemctl default

nesta ordem permite que o sistema conclua o processo de inicialização.

Eu tenho várias unidades físicas divididas em partições, que são então combinadas em alguns arrays RAID-1 (por exemplo, /boot ) e RAID-5 ( / , swap e praticamente todo o resto). As partições e os arrays, assim como os sistemas de arquivos que eles contêm, foram criados manualmente e depois o Mandriva Linux foi instalado. Lá onde nenhum problema de nota e tudo funcionou bem, até que systemd aparecesse.

Eu acho que acompanhei esta questão até certo ponto. O antigo sistema sysvinit usado para executar /etc/rc.d/rc.sysinit , que, conforme fornecido pela Mandriva, contém esta linha:

MDADM_RETURN='/sbin/mdadm -As --auto=yes --run 2>&1'

que inicia qualquer matriz MD especificada em /etc/mdadm.conf que não tenha sido iniciada. Tanto quanto eu posso dizer, este arquivo não é mais usado depois que system foi instalado e a linha acima foi substituída por essa linha de /lib/systemd/fedora-storage-init :

[ -r /proc/mdstat -a -r /dev/md/md-device-map ] && /sbin/mdadm -IRs

Infelizmente. meu sistema parece estar perdendo o arquivo /dev/md/md-device-map , então mdadm não é executado. Posso pensar em algumas maneiras de "corrigir" esse problema, como editar os scripts systemd ou modificar meu /boot/initrd.img para iniciar todos os arrays do MD, mas prefiro fazê-lo de uma maneira que não rompa com o próxima atualização do pacote.

  • Qual é o formato de /dev/md/md-device-map e como posso criá-lo? Este arquivo é comum? com as versões mais recentes do mdadm , ou é algo específico do Fedora / Mandriva? Eu vi alguns exemplos nos fóruns do Fedora, mas nada sólido.

  • Qual é a maneira "correta" de corrigir essa falha de inicialização? Prefiro não recorrer a uma cirurgia cerebral se puder evitá-la ...

  • Por que, por que, por que não fiquei com o "Se não está quebrado, não conserte!" máxima? (Sim, isso é retórico ...)

por thkala 04.12.2011 / 00:22

1 resposta

1

Consegui rastrear esse problema. /dev/md/md-device-map aparentemente é o arquivo de mapa de dispositivos mdadm em sistemas Fedora, enquanto meu sistema Mandriva usa /dev/.mdadm/map . Portanto, o script /lib/systemd/fedora-storage-init falhou ao iniciar mdadm porque estava procurando no lugar errado.

Em vez de editar esse arquivo de script e arriscar perder as modificações em uma atualização de pacote futura, adicionei meu próprio script:

$ cat /lib/systemd/mdadm-array-start 
#!/bin/bash

# Start any MD RAID arrays that have not been started yet
[ -r /proc/mdstat ] && /sbin/mdadm --assemble --scan

exit 0

Eu também criei um arquivo de unidade para systemd :

$ cat /lib/systemd/system/mdadm-array-start.service 
[Unit]
Description=Start MD arrays
DefaultDependencies=no
Conflicts=shutdown.target
After=fedora-wait-storage.service
Before=fedora-storage-init.service local-fs.target shutdown.target
Wants=fedora-wait-storage.service

[Service]
ExecStart=/lib/systemd/mdadm-array-start
Type=oneshot
TimeoutSec=0
RemainAfterExit=yes

[Install]
WantedBy=basic.target

Então, acabei de ativar o serviço:

# systemctl enable mdadm-array-start.service
ln -s '/lib/systemd/system/mdadm-array-start.service' '/etc/systemd/system/basic.target.wants/mdadm-array-start.service'

Isso garante que qualquer matriz MD seja iniciada sem a intervenção de um administrador.

    
por 05.12.2011 / 00:10