milindur.de Mein externes Notizbuch…

15Dez/08Off

System Recovery Mode für QNAP TS-109, TS-209, TS-409 & TS-409U

Vor rund 4 Monaten habe ich mich bereits ausführlich mit der Wiederherstellung der QNAP TS-109 beschäftigt. Dies ist besonders dann interessant, wenn man statt der originalen Firmware z.B. Debian verwenden möchte. Aber auch bei fehlgeschlagenen Upgrades der Original-Firmware könnte eine Wiederherstellung des Flash notwendig werden.

QNAP hat diese Problematik auch erkannt und stellt nun einen offiziellen Recovery Mode bereit, der wichtige Flash-Bereiche per TFTP wiederherstellen kann. QNAP-Geräte, die vor 2009 ausgeliefert wurden, beinhalten diesen Recovery Mode noch nicht, er kann aber nachgerüstet werden. Im wesentlichen muss dafür der Bootloader ("U-Boot") ausgetauscht werden.

Das Update des Bootloaders für QNAP-Geräte mit Original-Firmware wird im QNAP-Wiki beschrieben. Für Systeme, die bereits Debian verwenden, hat Martin Michlmayr Anleitungen bereitgestellt.

Danke an Martin für die Info zum Recovery Mode sowie die ausführliche Anleitung. Bei mir hat das Update problemlos funktioniert.

Artikel drucken Artikel drucken
21Aug/08Off

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

Artikel drucken Artikel drucken
12Aug/08Off

Debian auf QNAP TS-109

Die QNAP TS-x09 (TS-109/209/409) sind kleine NAS für den SOHO-Bereich. Ich verwende hier eine TS-109 mit einer 500GB HDD als File- und Mailserver.

Die originale QNAP-Firmware ist ganz nett und bietet in einer relativ einfachen Konfigurationsoberfläche einige Möglichkeiten. Wer sich bisher nicht näher mit Linux beschäftigt hat, sollte unbedingt bei dieser Firmware bleiben.

Ich selbst bin aus zwei Gründen auf eine native Debian-Installation umgestiegen:

  • Komfortable Installation und Aktualisierung von Softwarepaketen mit apt-get
  • Unabhängigkeit von QNAP und proprietären QNAP-Erweiterungen

Gerade der zweite Punkt verdient besondere Beachtung. QNAP verwendet auf der Daten-Partition ein modifiziertes ext3, welches mit einem anderen Linux-System nicht gelesen werden kann. Sollte die TS-x09 also mal ausfallen, kann die Datenpartition nur mit einem passenden QNAP-Gerät (also z.B. einer anderen TS-x09) gelesen werden. Klar, natürlich sollten die Daten noch auf einem anderen Backup-Medium liegen, aber ich sehe nicht ein, dass meine Optionen bei einem Ausfall so unnötig eingeschränkt werden. Deinen einen sinnvollen Grund für diese ext3-Extension von QNAP kenne ich bisher nicht.

Debian Lenny unterstützt die Installation auf den QNAP-Geräten mittlerweile direkt per Debian-Installer. Martin Michlmayr beschreibt auf seiner Webseite den Installationsprozess.

Vorsicht: Vorhandene Daten auf der Daten-Partition der TS-x09 müssen vorher gesichert werden, da das QNAP-ext3 proprietäre Erweiterungen verwendet und mit einem normalen ext3 (wie es in Debian enthalten ist) nicht kompatibel ist.

Hinweis: Wenn auf der TS-x09 bereits eine andere Linux-Installation durchgeführt wurde, welche eine Änderung der U-Boot-Konfiguration (/dev/mtdblock4) erforderte, muss vor der Debian-Installation die originale Konfiguration wiederhergestellt werden, da ansonsten der Debian-Installer möglicherweise nicht booten kann.

Der prinzipielle Ablauf ist wie folgt (die Details stehen in der oben genannten Anleitung):

  1. /dev/mtdblock* sichern und ggf. auf Originalzustand zurücksetzen
  2. Debian-Installer ins Flash kopieren
  3. Box neustarten
  4. Verbindung mit dem Installer per SSH herstellen
  5. Debian mit dem normalen Debian-Installer installieren

Der Debian-Installer kümmert sich selbst darum, dass bei Abschluss der Installation der Kernel ins Flash kopiert wird. Dies geschieht übrigens auch automatisch bei neuen Kernel-Versionen, die per apt-get geladen wurden.

Eine serielle Konsole ist bei diesem Vorgehen nicht erforderlich. Es kann aber bei Boot-Problemen der einzige Weg sein, um die Box wiederherzustellen. Daher sollte man sich rechtzeitig um die benötigten Teile kümmern. Für den Zugriff auf die serielle Konsole werden ein Pegelwandler (z.B. MAX3232) und ein paar Kondensatoren benötigt (Infos).

Über die serielle Konsole erhält man Zugriff auf U-Boot und kann in den Debian-Bootprozess eingreifen. Mit Hilfe von U-Boot kann der Flash überprüft und neu beschrieben werden. Eine Anleitung dazu hat QNAP auf seinem FTP-Server veröffentlicht. Leider ist diese Anleitung bezüglich der Flash-Speicheradressen fehlerhaft. Die dort genannen Adressen sollten daher keinesfalls verwendet werden, ich habe mir so eine TS-109 zerschossen, indem ich U-Boot überschrieben habe. Die korrekten Adressen, die ich selbst bereits erfolgreich verwendet habe, werde ich in einem weiteren Blog-Artikel beschreiben.

Artikel drucken Artikel drucken