Hier je bidouillais sur mon Dockstar et un programme que je testais s’est montré trop gourmand en ressource puis à crashé, mon système ne répondais plus du tout. Impatient j’ai rebooté électriquement mon Dockstar, erreur fatale, impossible après cela de me connecter en SSH sur Debian.

Voici les symptômes au début du boot le système est pingable, la lumière du Dockstar clignote en vert, puis le système ne répond plus au ping et la lumière s’éteint….

Voici les étapes suivi pour ramener le Dockstar à la vie.

Booter sous pogoplug

Tout d’abord je me suis assuré que le problème venait de Debian et pas du Dockstar lui-même, pour cela il suffit de débrancher tous les périphériques USB et de rebooter, au bout d’un certain temps le système devrait être accessible en SSH avec l’utilisateur root (comme lors de la toute première connexion au Dockstar sous Pogoplug) :

ssh root@[Ip du Dockstar]

Avec le mot de passe stxadmin

Si ce n’est pas le cas il va vous falloir vous fabriquer un connecteur JTAG, heureusement pour moi je n’en ai pas eu besoin

Installer le uBoot modifié

Jeff Doozan (encore lui) à créé une version modifié du uBoot (Universal Bootloader) permettant d’interagir avec le dockstar lors du boot, nous allons l’installer (peut n’est ce pas nécessaire, je n’ai pas vérifié mais il semblerait que le uBoot modifié soit déjà installé dès lors que l’on à installé Debian avec le script de Jeff Doozan)

cd /tmp
wget http://jeff.doozan.com/debian/uboot/install_uboot_mtd0.sh
chmod +x install_uboot_mtd0.sh
./install_uboot_mtd0.sh

Configurer netconsole

Netconsole permet de transmettre les messages du noyaux via UDP (réseau), il faut configurer netconsole (inclus dans le noyau 2.6 de Linux) pour qu’il emette les message de boot vers un autre PC via le réseau.

On réalise cette configuration avec l’utilitaire fw_setenv installé par le uBoot de Jeff Dozan, dans mon cas cet utilitaire est présent dans /usr/sbin qui n’est pas dans mon path d’où le chemin complet à chaque fois :

/usr/sbin/fw_setenv serverip [adresse IP PC]
/usr/sbin/fw_setenv ipaddr [adresse IP Dockstar]
/usr/sbin/fw_setenv if_netconsole 'ping $serverip'
/usr/sbin/fw_setenv start_netconsole 'setenv ncip $serverip; setenv bootdelay 10; setenv stdin nc; setenv stdout nc; setenv stderr nc; version;'
/usr/sbin/fw_setenv preboot 'run if_netconsole start_netconsole'

Diagnostiquer le boot du Dockstar

Sur le PC qui recevra les messages netconsole lancer la commande :

nc -lu 6666

Pour Ubuntu (11.04) sur Debian il semblerait que ce soit nc -l -u -p 6666 ce qui m’a valu un peu de recherche…

Rebooter le Dockstar (shutdown -r now sur la console en SSH que vous devez avoir sous la main pour avoir fait les manip ci-dessus) et miracle sur votre autre console (celle avec le nc) les messages de boot s’affichent :

Messages de boot sous pogoplug :

U-Boot 2010.09 (Oct 23 2010 - 11:49:22)
 Marvell-Dockstar/Pogoplug by Jeff Doozan
 Hit any key to stop autoboot:  0
 (Re)start USB...
 USB:   Register 10011 NbrPorts 1
 USB EHCI 1.00
 scanning bus for devices... 2 USB Device(s) found
 scanning bus for storage devices... 0 Storage Device(s) found
 ** Block device usb 0 not supported
 
** Invalid boot device **
 Creating 1 MTD partitions on "nand0":
 0x000002500000-0x000010000000 : "mtd=3"
 UBI: attaching mtd1 to ubi0
 UBI: physical eraseblock size:   131072 bytes (128 KiB)
 UBI: logical eraseblock size:    129024 bytes
 UBI: smallest flash I/O unit:    2048
 UBI: sub-page size:              512
 UBI: VID header offset:          512 (aligned 512)
 UBI: data offset:                2048
 UBI: attached mtd1 to ubi0
 UBI: MTD device name:            "mtd=3"
 UBI: MTD device size:            219 MiB
 UBI: number of good PEBs:        1751
 UBI: number of bad PEBs:         1
 UBI: max. allowed volumes:       128
 UBI: wear-leveling threshold:    4096
 UBI: number of internal volumes: 1
 UBI: number of user volumes:     0
 UBI: available PEBs:             1730
 UBI: total number of reserved PEBs: 21
 UBI: number of PEBs reserved for bad PEB handling: 17
 UBI: max/mean erase counter: 1/1
 UBIFS error (pid 0): ubifs_get_sb: cannot open "ubi:rootfs", error -19
 Error reading superblock on volume 'ubi:rootfs'!
 ** Block device usb 0 not supported
 ** Block device usb 1 not supported
 ** Block device usb 2 not supported
 ** Block device usb 3 not supported
 ** Block device usb 0 not supported
 ** Block device usb 0 not supported
 Wrong Image Format for bootm command
 ERROR: can't get kernel image!
 stopping USB..
 ### JFFS2 loading 'uboot-original-mtd0.kwb' to 0x800000
 Scanning JFFS2 FS: ........ done.
 ### JFFS2 load complete: 524288 bytes loaded to 0x800000
 ## Starting application at 0x00800200 ...

J’ai ensuite rebranche ma clé USB qui contient mon système Debian et le disque dur qui contient divers point de montage et rebooté une autre fois le Dockstar

 

Messages de boot sous Debian :

U-Boot 2010.09 (Oct 23 2010 - 11:49:22)
 Marvell-Dockstar/Pogoplug by Jeff Doozan
 Hit any key to stop autoboot:  0
 (Re)start USB...
 USB:   Register 10011 NbrPorts 1
 USB EHCI 1.00
 scanning bus for devices... 4 USB Device(s) found
 scanning bus for storage devices... 2 Storage Device(s) found
 Loading file "/rescueme" from usb device 0:1 (usbda1)
 ** File not found /rescueme
 reading /rescueme.txt
 
** Unable to read "/rescueme.txt" from usb 0:1 **
 Creating 1 MTD partitions on "nand0":
 0x000002500000-0x000010000000 : "mtd=3"
 UBI: attaching mtd1 to ubi0
 UBI: physical eraseblock size:   131072 bytes (128 KiB)
 UBI: logical eraseblock size:    129024 bytes
 UBI: smallest flash I/O unit:    2048
 UBI: sub-page size:              512
 UBI: VID header offset:          512 (aligned 512)
 UBI: data offset:                2048
 UBI: attached mtd1 to ubi0
 UBI: MTD device name:            "mtd=3"
 UBI: MTD device size:            219 MiB
 UBI: number of good PEBs:        1751
 UBI: number of bad PEBs:         1
 UBI: max. allowed volumes:       128
 UBI: wear-leveling threshold:    4096
 UBI: number of internal volumes: 1
 UBI: number of user volumes:     0
 UBI: available PEBs:             1730
 UBI: total number of reserved PEBs: 21
 UBI: number of PEBs reserved for bad PEB handling: 17
 UBI: max/mean erase counter: 1/1
 UBIFS error (pid 0): ubifs_get_sb: cannot open "ubi:rootfs", error -19
 Error reading superblock on volume 'ubi:rootfs'!
 Loading file "/boot/uImage" from usb device 0:1 (usbda1)
 1 bytes read
 Found bootable drive on usb 0:1
 Loading file "/boot/uImage" from usb device 0:1 (usbda1)
 1433640 bytes read
 Loading file "/boot/uInitrd" from usb device 0:1 (usbda1)
 4887353 bytes read
 ## Booting kernel from Legacy Image at 00800000 ...
 Image Name:   Debian kernel 2.6.32-5-kirkwood
 Image Type:   ARM Linux Kernel Image (uncompressed)
 Data Size:    1433576 Bytes = 1.4 MiB
 Load Address: 00008000
 Entry Point:  00008000
 Verifying Checksum ... OK
 ## Loading init Ramdisk from Legacy Image at 01100000 ...
 Image Name:   Debian ramdisk 2.6.32-5-kirkwood
 Image Type:   ARM Linux RAMDisk Image (gzip compressed)
 Data Size:    4887289 Bytes = 4.7 MiB
 Load Address: 00000000
 Entry Point:  00000000
 Verifying Checksum ... OK
 Loading Kernel Image ... OK
 OK
 
Starting kernel ...

On voit / confirme alors que le boot du Dockstar fonctionne parfaitement puisque le kernel Debian démarre. Le problème se situe donc au niveau de ce dernier…

 

Réparer Debian

Après avoir éteint le Dockstar, j’ai branché la clé USB contenant Debian sur mon PC et commencé par faire une vérification du disque :

sudo fsck /dev/sdb1

La clé contenait une erreur :

fsck de util-linux-ng 2.17.2
 e2fsck 1.41.14 (22-Dec-2010)
 /dev/sdb1 est monté.
 
AVERTISSEMENT !!! Le système de fichiers est monté.   Si vous continuez
 vous ***ALLEZ*** causer des dommages ***SÉVÈRES*** au système de fichiers.
 
Souhaitez-vous réellement continuer (o/n)? oui
 
/dev/sdb1 contient un système de fichiers comportant des erreurs, vérification forcée.
 Passe 1 : vérification des i-noeuds, des blocs et des tailles
 Passe 2 : vérification de la structure des répertoires
 Passe 3 : vérification de la connectivité des répertoires
 Passe 4 : vérification des compteurs de référence
 I-noeud 8098 non attaché
 Connecter à /lost+found<o>? oui
 
le compteur de référence de l'i-noeud 8098 est 2, devrait être 1. Corriger<o>? oui
 
Passe 5 : vérification de l'information du sommaire de groupe
 
/dev/sdb1: ***** LE SYSTÈME DE FICHIERS A ÉTÉ MODIFIÉ *****
 /dev/sdb1 : 28353/108864 fichiers (1.3% non contigus), 217045/435448 blocs

J’ai ensuite re-généré l’image du kernel, pour cela on démarre le Dockstar sous pogoplug (sans clé USB) et on se connecte dessus en SSH (voir 1er paragraphe).

On connecte alors la clé USB contenant Debian, on la monte, on fait un chroot sur le point de montage et on régénère l’image du kernel :

mount /dev/sda1 /mnt
/usr/sbin/chroot /mnt
/usr/bin/mkimage -A arm -O linux -T kernel  -C none -a 0x00008000 -e 0x00008000 -n Linux-2.6.32-5 -d /boot/vmlinuz-2.6.32-5-kirkwood /boot/uImage

Sortie de la commande :

Image Name:   Linux-2.6.32-5
 Created:      Tue Jun 21 23:58:21 2011
 Image Type:   ARM Linux Kernel Image (uncompressed)
 Data Size:    1433576 Bytes = 1399.98 kB = 1.37 MB
 Load Address: 0x00008000
 Entry Point:  0x00008000

Puis

 

/usr/bin/mkimage -A arm -O linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initramfs -d /boot/initrd.img-2.6.32-5-kirkwood /boot/uInitrd

 

Sortie de la commande :

Image Name:   initramfs
 Created:      Tue Jun 21 23:58:25 2011
 Image Type:   ARM Linux RAMDisk Image (gzip compressed)
 Data Size:    4887289 Bytes = 4772.74 kB = 4.66 MB
 Load Address: 0x00000000
 Entry Point:  0x00000000

 

Laisser les périphériques branchés, sortir du chroot (exit) et rebooter et normalement miracle le Dockstar devrait démarrer sous Debian…

 

Sources :

Les commentaires sont fermés.