Transplantando Debian Sarge

De Wiki do Ciclo ASIR do IES de Rodeira

Índice

Introducción

A causa dun fallo dunha placa base, xurde a necesidade de restablecer as funcións realizadas polo equipo que ten funcionando unha Debian Sarge, con kernel 2.6.8 compilado (non o estandar) e con moitos servizos e usuarios en funcionamento. A idea é simplemente coller os discos fixos e transplantalos a outro equipo calquera que se atope funcional.

O principal problema é a diferencia entre o hardware de unha e outra máquina. Como o linux ten unha estructura modular na que se cargan dinámicamente os módulos necesarios para xestionar o hardware, en principio parece unha cuestión trivial.

O Proceso de Arranque

Para arrancar a máquina utilizamos o Grub coma xestor de arranque. Este xestor carga do disco fixo un menú de arranque que nos permitirá iniciar a máquina, o lugar do disco fixo e a situación deste menú (e de todo o necesario para o funcionamento do xestor de arranque) configúrase no momento de instalalo no disco.

Unha vez que o grub carga o menú, o usuario pode seleccionar a entrada correspondente o sistema que quere arrancar. Cada entrada no menú de configuración (situado normalmente en /boot/grub/menu.lst) contén:

  • O título da entrada
  • O disco de donde se cargará o kernel. Esta entrada se especifica mediante o comando root (hdX,Y), donde X é 0 para o primeiro disco, 1 para o segundo... etc. E Y é 0 para a primeira partición, 1 para a segunda ... etc.
  • O kernel que queremos cargar con todas as opcions de arranque necesarias
  • Si o kernel utiliza initrd (como é o noso caso) o initrd que é necesario cargar
  • O comando de arranque: boot

O Grub dispón tamén da posibilidades de modificar as entradas do menú coa tecla e, ou de entrar nun modo de comandos coa tecla c.

Comenza o Arranque

Unha vez que o usuario selecciona unha entrada e pulsa Enter (ou pulsa b, ou escribe boot na consola de Grub) comenza o proceso de arranque. O kernel se carga en RAM e se descomprime iniciando así a máquina. Para cargar os módulos indispensabeis para facer o arranque e a configuración inicial, se carga o ficheiro initrd e se descomprime.

initrd

O ficheiro initrd está comprimido e contén entre outras cousas a lista dos módulos necesarios para realizar o arranque nun ficheiro chamado loadmodules. O ficheiro initrd se xera automáticamente no momento de instalar o kernel tendo en conta o contido de /etc/mkinitrd/mkinitrd.conf e de /etc/mkinitrd/modules. Se nos interesa podemos examina-lo contido do initrd mediante: mount -o loop ficheiroinitrd /puntodemontaxe

Finaliza o Arranque

O sistema descomprime initrd, carga os módulos e monta a partición root definitiva (/) a partir da información suministrada no menu.lst, continuando xa o arranque tal e como o ten configurado o sistema vía o proceso init.

Os Problemas

Os posibles problemas cando se transplantan discos fixos cunha instalación funcional a unha máquina distinta poden ser varios, particularmente que non carge o grub.

Si conseguimos iniciar o sistema, é moi probable que ocurra o seguinte:

 pivot_root : no such file or directory 
 /sbin/init : 431 : cannot open dev/console :No such file
 Kernel panic - not syncing : Attempted to kill init!

As razóns poden ser varias. Tamén temos que ter en conta que os discos poden ter cambiado de nome (de hda a hdb, por exemplo) e as tarxetas de rede tamén, polo tanto teremos que revisar /etc/fstab e /etc/network/interfaces

As Solucións

É necesario comprobar os seguintes puntos:

  • Si o Grub non arranca, probablemente sexa porque a BIOS está intentando cargala do disco incorrecto. Nese caso basta indicalo na BIOS ou instalar o grub no disco de arranque.
  • E necesario comprobar que os discos esten ben nomeados: O grub ten o parámetro root (hdX,Y) correcto e a partición root (root=) se monta tamén a partir do disco e partición correctas. Particularmente recordar que os discos SATA se recoñecen como scsi, polo que se nomean sda, sdb ... etc.
  • Comprobar tamén que /etc/fstab ten ben nomeadas as particións e puntos de montaxe.

Si aínda así non arranca, é moi posible que os módulos cargados no initrd non sexan compatibles coa nova placa. Particularmente importante é o módulo para manexar os disco SATA, xa que cada chipset ten que utilizar un módulo específico. Nese caso teríamos que modificar initrd para incluir o módulo que precisamos mediante a utilidade mkinitrd, ou reinstalar un novo kernel.

O procedemento do transplante

O proceso seguido no meu caso e os problemas atopados e solucionados se describen a continuación:

Datos Previos

  • Placa queimada: baseada nun chipset Intel. Placa nova: baseada nun chipset Via
  • 2 Discos Fixos SATA. En sda copias de seguridade, backups e a cache do squid. En sdb todo o sistema organizado en distintas particions.

Proceso Seguido

  1. Instalación dos discos fixos na nova placa. O iniciar nin siquera carga o menu do grub
  2. Inicio do sistema a partir dun Live CD con Knoppix 5.5 en modo consola (para aforrar tempo)
  3. con dmsg|grep sd miro os discos detectados e comprobo que disco é sda e cal sdb, e que controladora de disco usan. sdb6 ten o meu 'root filesystem' e a controladora é sata_via
  4. monto a partición co sistema / (sdb6): mount /dev/sda6
  5. mount -t proc -o bind proc /media/sda6
  6. mount -o bind /dev /media/sda6/dev
  7. chroot /media/sda6
  8. edito /boot/grub/menu.lst e o comprobo/modifico do modo axeitado, root (hd0,5) e collendo root=/dev/sda6: vim /boot/grub/menu.lst
  9. reinstalo o grub: grub-install --recheck /dev/sda
  10. agora teño que facer que initrd cargue o módulo sata_via en lugar de cargar sata_piix. Teño dúas maneiras, descomprimindo o initrd, modificando logo o seu ficheiro loadmodules, ou dun xeito máis simple, instalo un novo kernel logo de poñer o módulo en /etc/mkinitrd/modules: apt-get install kernel-linux-2.6-686-smp
    Si este kernel xa estaba instalado podemos instalar outro ou desinstalalo e volvelo a instalar para rexenerar o 'initrd: apt-get remove --purge kernel-image-2.6.8-3-686-smp.OLLO: Desinstalar o kernel, non o paquete xenérico kernel-linux-2.6-686-smp
    A maneira máis simple, probablemente sexa poñer o módulo en /etc/mkinitrd/modules e escribir mkinitrd nome-do-novo-initrd kernel-onde-colle-os-módulos
  • Verificamos de novo que /boot/grub/menu.lst é correcto, e si é necesario o modificamos para arrancar o novo kernel.
  • Cruzamos os dedos, escribimos reboot, pechamos os ollos e contemos a respiración.....