Home > Blog > Recovery der QNAP TS-109 (U-Boot)

Recovery der QNAP TS-109 (U-Boot)

In diesem Artikel soll es um die Wiederherstellung einer QNAP TS-109 NAS gehen. Im ersten Artikel zum Einsatz von Debian Lenny auf diesem Gerät habe ich bereits erwähnt, dass es zwar ein offizielles Supportdokument von QNAP gibt, dieses aber die falschen Adressen enthält.

Update 14.12.2008: Das Support-Dokument ist nun hier (Benutzer: csdread, Passwort: csdread) in dem Archiv “TS-209 Update Image.rar” zu finden und enthält mittlerweile die korrigierten Adressen. Die Adressen sind mit den von mir ermittelten Adressen weiter unten identisch.

Auf dem TS-109 (sowie auf den anderen TS-x09-Geräten) wird der Bootloader “Das U-Boot” verwendet. Die Dokumentation zu U-Boot befindet sich hier.

Vor einer Installation von Debian sollten unbedingt Bereiche des Flash-Speichers gesichert werden. Es handelt sich dabei um den Kernel (/dev/mtdblock1), initrd (/dev/mtdblock2) und die U-Boot-Konfiguration (/dev/mtdblock4). Kernel sowie initrd werden bei der Debian-Installation durch alternative Versionen ersetzt. Sollte die Installation von Debian nicht erfolgreich sein, dann müssen diese beiden Bereiche wiederhergestellt werden, um eine Rückkehr zur QNAP-Firmware zu ermöglichen. Diese beiden Bereiche müssen auch auf die Originalversionen zurückgesetzt werden, wenn nach einer erfolgreichen Installation von Debian eine Rückkehr zu QNAP gewünscht wird.

Unter Linux kann eine Sicherung so erfolgen:

cat /dev/mtdblock1 > mtd1
cat /dev/mtdblock2 > mtd2
cat /dev/mtdblock4 > mtd4

Die Wiederherstellung läuft dann analog so:

cat mtd1 > /dev/mtdblock1
cat mtd2 > /dev/mtdblock2
cat mtd4 > /dev/mtdblock4

Wenn das System nun aber nicht sauber startet und kein Zugriff auf eine Shell besteht, dann muss dieser Prozess über die serielle Konsole mit U-Boot erfolgen. Dazu muss zunächst ein passendes Adapterkabel erstellt werden, welches die Spannungspegel zwischen PC und NAS konvertiert. Schließlich wird noch ein Terminalprogramm benötigt, welches das Dateitransferprotokoll Kermit versteht. Unter Windows kann dafür z.B. HyperTerminal verwendet werden, unter Linux minicom in Verbindung mit gkermit. Weitere Informationen zum Adapterkabel und zur Konfiguration des Terminals befinden sich hier.

Wird die TS-109 mit angeschlossenem Terminal gestartet, erscheint wenige Augenblicke später der U-Boot Bootloader. Dieser wartet ein paar Sekunden auf einen Tastendruck, um die U-Boot Shell zu starten. Ohne Tastenbetätigung bootet das installierte System. Dies sollte man auf jeden Fall einmal bei Problemen machen, da der Bootprozess von Linux einige Hinweise auf mögliche Ursachen eines Problems liefert. Insb. Unterbrechungen, die zur manuellen Durchführung eines fsck auffordern, sind bei mir bisher beliebte Gründe dafür, dass mein System von alleine nicht starten will.

In der U-Boot Shell gibt es diverse Kommandos, mit denen man Informationen zum System erhält und die U-Boot-Konfiguration anzeigen sowie ändern kann. Interessant sind für uns die Kommandos protect, iminfo, loadb und cp.b.

Um nun die zuvor genannten Flash-Bereiche (kernel, initrd, ubootconfig) zu ändern, wird noch deren Adresse im Flash benötigt. Die Adressen findet man hier. Allerdings sind die Adressen dort relativ zur Startadresse des Flash (0xff000000) angegeben, so dass die Adressen im U-Boot so verwendet werden müssen:

0xff000000 - 0xff1fffff /dev/mtdblock1 Kernel
0xff200000 - 0xff5fffff /dev/mtdblock2 Initrd (“RootFS1″)
0xff600000 - 0xff6fffff /dev/mtdblock3 RootFS2
0xff760000 - 0xff77ffff /dev/mtdblock4 U-Boot-Config

Update 14.12.2008: /dev/mtdblock3 ergänzt

Um die Speicheradresse für den Kernel zu prüfen, kann das Kommando iminfo verwendet werden:

Marvell>> iminfo 0xff000000
## Checking Image at ff000000 ...
Image Name:   Debian kernel
Created:      2008-08-13  11:32:38 UTC
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    1366044 Bytes =  1.3 MB
Load Address: 00008000
Entry Point:  00008000
Verifying Checksum ... OK

Wenn an der angegebenen Adresse ein gültiges Kernel-Image liegt, dann sollte die Ausgabe wie oben aussehen. Erscheint dort eine Fehlermeldung, dann ist entweder kein gültiges Image vorhanden oder die Adresse ist falsch.

Update 14.12.2008: Hier stand mal ein Hinweis, dass der Schreibschutz des Flash aufgehoben werden muss (wird auch im QNAP-Dokument so gemacht). Abgesehen von der U-Boot-Konfiguration (Speicherbereich ab 0xff760000) ist aber kein Bereich geschützt, der nachfolgende beschrieben werden würde. Die U-Boot-Konfiguration muss normalerweise nicht verändert werden, daher entfällt die Aufhebung des Schreibschutzes. Sollte dies doch erforderlich werden, steht dafür das Kommando protect on bzw. protect off zur Verfügung.

Anschließend wird die Datei mit den zu flashenden Daten per Kermit ins RAM übertragen (0x00400000 ist die RAM-Adresse, die als Ziel für solche Operationen im QNAP-Supportdokument vorgeschlagen wird):

loadb 0x00400000

Nach diesem Kommando erwartet U-Boot den Kermit-Transfer der Datei (z.B. mtd1). Abschließend müssen die Daten vom RAM ins Flash geschrieben werden, zuvor muss der Flash-Bereich jedoch gelöscht werden.

Um den Kernel (mtdblock1) zu schreiben, sind die folgenden Kommandos notwendig:

loadb 0x00400000

Im Terminalprogramm muss nun der Transfer der Datei (mtd1) per Kermit gestartet werden.

erase 0xff000000 0xff1fffff
cp.b 0x00400000 0xff000000 ${filesize}

Die Angabe ${filesize} wird durch die Umgebungsvariable filesize ersetzt, welche beim loadb-Kommando auf die Größe der übertragenden Datei gesetzt wurde.

Für initrd (mtdblock2) sind die Kommandos wie folgt:

loadb 0x00400000

Im Terminalprogramm muss nun der Transfer der Datei (mtd2) per Kermit gestartet werden.

erase 0xff200000 0xff5fffff
cp.b 0x00400000 0xff200000 ${filesize}

Nun kommt der spannende Moment, der über das weitere Schicksal des Systems entscheidet ;-) :

reset

Damit startet das System neu. Wenn man vorher keine Fehler gemacht hat, dann sollte einen Augenblick später wieder U-Boot mit der neuen Konfiguration starten. Bei Wiederherstellung der Original-Daten von QNAP kann nun eine Installation der Firmware mit dem QNAP-Finder erfolgen oder eine (erneute) Installation von Debian erfolgen.

Viel Glück… ;-)

Achja, alle hier gemachten Angaben (insb. zu Speicheradressen) wurden nach bestem Wissen und Gewissen zusammengestellt. Ich übernehme aber keine Gewährleistung dafür.

Update

loadb-Anweisungen für mtdblock1/2 vervollständigt. Danke an Ingo S. für den Hinweis.

Update 14.12.2008

Hinweis auf neues QNAP-Supportdokument, Speicheradresse für mtdblock3 hinzugefügt, protect off all entfernt

KategorienBlog Tags: , , ,
  1. Bisher keine Kommentare
  1. Bisher keine Trackbacks
Stoppt die Vorratsdatenspeicherung! Jetzt klicken & handeln!Willst du auch bei der Aktion teilnehmen? Hier findest du alle relevanten Infos und Materialien: