Como o Linux pode detectar automaticamente se o kernel deve inicializar em dev hdc ou hda

3

Eu tenho um PC industrial montado em Linux.

Este PC é entregue em duas versões, cada uma com placa interna ligeiramente diferente e dependendo do tipo de placa, o disco dentro do PC é visto como hda ou hdc.

Até agora, para selecionar entre os dois tipos de boot de disco eu simplesmente coloco duas entradas dentro do grub menu.lst como mostra abaixo, então na primeira partida do PC o pessoal de manutenção irá selecionar o dispositivo correto que será memorizado para reinicialização futura.

default = 0
timeout = 9

title Linux 2.4.34 ( hda )
        root (hd0,0)
        kernel /boot/vmlinuz-2.4.34 ro root=/dev/hda1 console=ttyS0,9600 console=tty0 apm=off

title Linux 2.4.34 ( hdc )
        root (hd0,0)
        kernel /boot/vmlinuz-2.4.34 ro root=/dev/hdc1 console=ttyS0,9600 console=tty0 apm=off

Mas na maioria dos casos esse tipo de computador é entregue sem tela e teclado, e as pessoas de manutenção não podem selecionar a opção de inicialização, então estou procurando uma maneira que permita que o PC verifique o dispositivo de inicialização correto antes de carregar o kernel.

Em termos práticos, eu preciso que o procedimento de inicialização verifique se o disco é visto como / dev / hdc ou como / dev / hda para chamar a opção de inicialização com o valor correto para o dispositivo raiz (isto é, root = / dev / hda1 ou root = / dev / hdc1)

O problema é que não tenho ideia se isso é possível e como fazer isso.

Alguém tem alguma sugestão sobre esse assunto?

    
por enzo2 11.12.2012 / 09:02

1 resposta

1

A resposta de Mat deve funcionar para você. Eu gostaria de ressaltar outra possibilidade: use um initramfs / initrd.

Você pode enviar um initrd (tenho certeza que o initramfs é pós-2.4, mas o 2.4 deve ter o initrd) que contém algum código para localizar o rootfs. A vantagem de um initrd é que você está rodando Linux naquele momento. Você pode escrever, por exemplo, um shell script para encontrar o root fs. Depois de encontrá-lo, monte-o, pivot_root e exec / sbin / init.

Você ganha outras coisas legais - por exemplo, se as diferentes placas (agora ou no futuro) precisarem de módulos diferentes carregados para ver o disco rígido ou outros dispositivos críticos para inicialização, você pode fazer isso.

Você também pode colocar várias coisas de recuperação, o que pode ser útil.

(Em uma distribuição Linux moderna, a opção root = é realmente manipulada pelo initramfs.)

    
por 11.12.2012 / 18:53