Transplantando Debian Sarge
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
- Instalación dos discos fixos na nova placa. O iniciar nin siquera carga o menu do grub
- Inicio do sistema a partir dun Live CD con Knoppix 5.5 en modo consola (para aforrar tempo)
- 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
- monto a partición co sistema / (sdb6): mount /dev/sda6
- mount -t proc -o bind proc /media/sda6
- mount -o bind /dev /media/sda6/dev
- chroot /media/sda6
- 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
- reinstalo o grub: grub-install --recheck /dev/sda
- 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.....