Cosas que hacer cuando se tiene una partición que no arranca....

, por laura

Frente a la desesperación, tranquilidad y una buena lista de opciones alternativas a tirar el disco.

En esta ocasión sé de buena tinta que tras un apagón el disco del ibook no volvió a arrancar en la partición Linux (xfs). Estas son las notas que fuí tomando.

Al encender el ordenador me ofrecía la opción en el yaboot de elegir Linux. Estas son las líneas donde se manifestaba que no se podía arrancar el sistema operativo.

[...]

Begin: Running /scripts/init-bottom ...

mount: Moounting /root/dev on /dev/.static/dev failed: No such file or directory
Done.
mount: Mouting /sys on /root/sys failed: No such file or directory
mount: Mounting /proc on /root/proc failed: No such file or directory

Target filesystem doesn’t have /sbin/init

BusyBox c1.1.3 (Debian 1:1.1.3-5ubuntu7) Built-in shell (ash)

Enter ’help’ for a list of built-in comands
(initramfs)....

Hasta aquí llegaba el mensaje, deja una especie de shell donde hay pocos comandos con los que no supe que hacer.

Busqué la frase " Target filesystem doesn’t have /sbin/init " en google y me dió una posible solucion,
http://ubuntuforums.org/showthread.php?t=295508 , pero no me sirvió pues al iniciar el sistema con la cdlive la única partición que se montaba (que se podía ver) era la de MacOSX. [1]

Al intentar montar la partición desde la cdlive me arrojaba este error:

/dev/hda4 xfs Cannot mount volume. Unable to mount the volume, can’t read superblock.

No se podía acceder a los datos de la partición, pero si que se le podían hacer pruebas... Lo típico en linux es usar algún comando del tipo : fsck.filesystem , como por ejemplo: fsck.ext2 , así que en este caso correspondía el fsck.xfs, pero este comando se divide en dos, en el xfs_check y en el xfs_repair.

Lo intenté con xfs_check /dev/hda y este fue el resultado:

xfs_check:unexpected XFS SB magic number 0x4558

xfs_check:size check failed

cache_mode_purge: ref count was 1, not zero (node = 0x150s88)

xfs_check: cannot read root inode(22) bad superblock magic number 4558, givin up.

El xfs-repair -d /dev/hda me dijo q el número mágico no era válido [2], tras lo cual se puso a buscar otros puntos válidos, durante varias horas estuvo buscando posibles puntos de donde obtener los números mágicos de una manera válida, pero pareció no ser muy útil. Este es resultado que tiró el xfs_repair:

$sudo xfs_repair -d /dev/hda
-creating 2worker thread(5)
Phase 1- find and verify superblock.....
bad primary superblock - bad magic number!!!
attempting to find secondary superblock..................................................
................................................................
found candidate secondary superblock.....
unable to verify superblock, continuing...

La última parte se repitió bastantes veces, llegué a contar más de una docena, pero parecía que ningún superbloque valía. :((

Tras descartar la opción de arrancar desde yaboot con:

boot: /dev/dispositivo_donde_reside_linux (en este caso hda4), me detuve a ver los logs del sistema tras (intentar) montar la partición cascada. Este es lo que se obtenía en el dmesg mientras el montaje de la partición:

SGI XFS with ACLS, securtiy attributes, realtime, no debug enabled.
SGI XFS Quota management subsystem XFS mountin filesystem hda4
Starting XFS recovery on filesystem: hda4(logdev: internal)
hda: dma_intr:status = 0x51 DriveReady Seek Complete Error
hda:dma_intr: error = 0x40 UncorrectableError, LBA sect= 53833628, high = 3, low = 3501980 , sector =53833626

ide:failed opcode was: unknown
end_request: I/O error, dev hda, sector 53833626 I/O error in filesystem("hda4") meta_data dev hda4 block 0x1765d78("xlog_recover_do(read#1)")
error 5 buf count 4096
XFS: log mount/recorvery failed: error 5
XFS: log mount failed

Evidentemente no tenía buena pinta, así que tocaba recuperar el disco como fuera. Para eso usé el badblocks, así.

$sudo badblocks -s /dev/hda4
Checking for bad blocks (read-only test):

Resultado:
Pass completed
33 bad blocks found

El disco estaba mal, había que rescatar cuanta más información mejor de su interior.. así que apliqué el ddrescue. Es programa lo que hace es crear una imagen de una partición completa. Después de instalarlo en la cdlive con: apt-get install ddrescue, se ejecuta así

$dd_rescue /dev/hda4 /dispositivo_auxiliar/backup.img

Es decir, crea una imagen de la partición que se le indique, en este caso /dev/hda4, y la copia en el dispositivo auxiliar en que sea posible. El nombre de la imagen creada será el que le indiquemos en esta orden.

Para comprobar que la imagen se haya hecho en condiciones, lo mejor es verificar su consistencia:

fsck -y /dispositivo_auxiliar/backup.img

Para montar la imagen se puede hacer:

mount -o loop /dev/.../backup.img /mnt/

Comprobé que no perdía ningún dato tras hacer la imagen de la partición, y decidí formatear esta partición y de paso probar Debian en el ibookg4, pero esto ya es otra historia ;)

P.-S.

A modo de resumen cito los pasos más importantes:

Analisis de lo ocurrido:

  • Error durante el arranque
  • dmesg al intentar montarlo desde la cdlive
  • xfs_check /dev/da

Recuperar contenido del disco:

  • dd_rescue /dev/hda4 /dev/hdb/backup.img (crea la imagen)
  • fsck -y /dev/hdb/backup.img (verifica la consistencia de la imagen)
  • mount -o loop /dev/hdb/backup.img /mnt/

Recuperación del disco, si se puede:

  • xfs_repair -d /dev/hda
  • xfs_repair /dev/hda4 -L (repara el disco)
  • sudo badblocks -r -o salida_badblocks /dev/hda (la opción -o es para que copie los sectores defectuosos en un archivo aparte)
  • Una vez recuperada la información del disco se puede optar por volver a formatear la partición, y si se tiene suerte se corrigen (algunos de) los errores.

Notas

[1En la solución proponen entrar con un livecd, montar la partición de linux, usándola como root y reinstalar el sistema base:

Es decir, tras montar la partición, cambiar el directorio root te la live con: sudo chroot /media/lugardemontaje
y desde allí reinstalar el sistema base de ubuntu: sudo aptitude reinstall ubuntu-minimal

[2ALGUIEN SABE QUE SON LOS NÚMEROS MÁGICOS???