Alte Hardware weiterverwenden

Linux Western Digital MyBook Live WD NAS OpenWRT Firmware rsync CIFS SMB HDD Festplatte WDC WD30EZRS-11J99B1

Wer hat nicht das eine oder andere Stück Hardware im Haus, das seit Jahren keine Updates mehr erhält, aber weiter unauffällig seinen Dienst versieht?! Abgesehen von in den Nachrichten auftauchenden Gerätschaften die in Bot-Armeen misbraucht wurden, wird die Nutzbarkeit aber auch von fortschreitender Technik die sie nutzen sollen ausgebremst. Von so einem Beispiel möchte ich heute erzählen: Ein Western Digital MyBook Live NAS, welches seine letzte Firmware 2015 erhalten hatte, verrichtet hier seit Jahren seinen Dienst als Backup-Ziel für das aktuelle NAS.

Bislang war das einfach als CIFS/SMB Speicher eingebunden, hatte so aber vor Monaten aufgehört zu funktionieren. Nicht das es selbst ein (neues) Problem gehabt hätte, aber die Umgehungslösungen um das antike SMB 1 Protokoll des NAS anzusprechen wurden aus dem Betriebssystem des aktuellen NAS letztlich entfernt und so konnte es das MyBook Live einfach nicht mehr ansprechen.

Hardware

In den Datenblättern hört sich der apm82181 (PowerPC Architektur) GHz Processor noch ganz ordentlich an. Das Gerät verfügt über eine Gigabit Ethernet Schnittstelle und in meinem Fall über eine 3 TB Festplatte (es gab das Gerät damals auch mit 1 und 2 TB Platten). Aber diese Angaben sahen nur in den Prospekten gut aus. Mit seinen 256 MB Hauptspeicher und dem nur im 800 MHz Bereich laufenden Einkerner, erreichte das MyBook Live schon bei erscheinen nicht mehr als 20 MB/s beim Schreiben und 40 MB/s beim Lesen. Die Festplatte war schon damals nicht der limitierende Faktor.

Firmware

Das Alter der letzten verfügbaren Firmware ist aber nicht das einzige Problem des MyBook Live. Als eierlegende Wollmilchsau erdacht, bringt es einen Twonky Mediaserver mit und die Debian Eingeweide rendern die Weboberfläche mit php. Auch setzt es gewisse Freigaben voraus, was die Partitionierung abbildet - schon früher ein Ärgernis. Es führt also für ein nur noch als Block-Device genutztes Gerät ziemlich viele ungenutzte Dienste aus, die sich alle auf der schwachbrüstigen CPU tummeln und Speicher fressen.

Lösungsansätze

Es bietet sich förmlich an über den Namen des Gerätes nach Bastlern bzw. deren Anleitungen im Internet zu suchen, man wird in den meisten Fällen aber bei Versuchen landen, die auch ein Debian dafür nutzen. Die PowerPC Architektur wurde aber bereits 2020 abgekündigt und ich fand es nicht sehr sexy ein nur 5 Jahre neueres Image aufzuspielen, welches dann vermutlich noch dicker daherkommen würde als das des Herstellers.

Die Lösung

Mitunter ist es ratsam ausgetretene Pfade zu verlassen und zunächst unsinnig erscheinende Ansätze zu durchdenken. Welche Geräteklasse kommt den ähnlich limitiert daher und wird häufig mit Funktionalität förmlich erschlagen? Das sind Router und OpenWRT unterstützt einen riesigen Zoo an Plattformen und Prozessoren!

Der Ausgangspunkt ist der OpenWRT Firmware Selector:
Die Seite startet mit einer Suchmaske, die rechts bereits das aktuellste Release ausgewählt haben sollte (im Beispiel 25.12.5). Gib im Suchfeld (nach und nach) den Namen Deines Gerätes ein - die Suche startet umgehend - also tippe ruhig langsam. Findet sich dein Gerät nicht in der Liste, heißt das nicht, dass es nicht unterstützt wird, sondern nur, dass sich noch niemand mit deinem speziellen Gerät befasst hat. Du kannst dann z.B. nach dem Prozessor deines Gerätes bzw. dessen Gruppe suchen (in meinem Beispiel apm821xx). Hast du eine passende Auswahl getroffen, wechselt die Seite in die Build-Maske:

OpenWRT-Firmware.jpg

Wenn du die Installierte Pakete anpassen.. Zeile anklickst, wird dir auch die Liste der bereits ausgewählten Pakete angezeigt. Ich habe hier zusätzlich noch ksmbd-server luci-app-ksmbd nachgetragen, um meine benötigte CIFS/SMB Unterstützung zu bekommen ohne den fetten Samba Server installieren zu müssen. Im Zweifel lasse lieber etwas Weg, als das Image zu voll zu packen. Das System nutzt eine 100 MB kleine Systempartition! Wenn alles passt, klicke auf Firmware anfordern. Die Firmware wird direkt zusammengestellt und auf dem Server als Image bereitgestellt - das kann ein paar Minuten dauern, wird aber mit einer Fortschrittsanzeige visualisiert.

Ist das Image fertig erstellt, kannst du es weiter unten auf der Seite herunterladen. Du benötigst das Faktory Image, wobei SquashFS ein schreibgeschutztes Image auf deinem Gerät erzeugt, was ein Zurücksetzen ermöglicht, EXT4 aber eine offene Partition, in die sich direkt installieren lässt (über SSH). Ich habe hier ext4 ausgewählt um möglichst große Freiheit bei meinem ersten Versuch zu haben und gehe nicht davon aus hier etwas kaputt spielen zu können, was ein Zurücksetzen notwendig machen würde.

OpenWRT-Download.jpg

Möchtest du später deine Firmware aktualisieren, gehst du die gleichen Schritte einfach noch einmal durch und kannst das über die Weboberfläche von OpenWRT auf deinem Gerät das resultierende Image einspielen.

Installation

Anders als bei einem Router, der gern recht eigenwillige Schritte verlangt um seine Hersteller-Firmware gegen die von OpenWRT auszutauschen, kann ich beim NAS das Image einfach auf die Festplatte überspielen. Das Gehäuse Der WD MyBook Live ist lediglich geklipst, die kleinen Plastiknasen, 4 an der Zahl, lassen sich aber sehr leicht abbrechen. Der Computer ist in Form einer winzigen Platine mit 4 Schrauben, unten an die Festplatte geschraubt und lässt sich nach dem Lösen der Schrauben vorsichtig aus dem SATA Anschluß schieben. Mit weiteren 4 Schrauben sind zwei Stahlbleche an die Seiten der Platte geschraubt, nach deren Entfernung sich auch das Blechkleid der Platte entfernen lässt. Die jetzt nackte HDD (WDC WD30EZRS-11J99B1) kann mit einem SATA/USB Adapter oder einem SATA Dock an einem PC angeschlossen, mit dem zuvor heruntergeladenen Image bespielt werden.

Da das Image von OpenWRT gepackt als gz Datei kommt. muss es zunächst noch entpackt werden, dazu habe ich 7 Zip genutzt und es unter Windows mit dem Win32DiskImager übertragen. Wer das unter Windows macht, sollte ggf. aufploppende Nachrichten über nicht initialisierte oder nicht formatierte Datenträger ignorieren oder abbrechen. Unter Linux tut dd den Job. Nachdem das MyBook Live wieder zusammengebaut ist, kann es wieder mit Ethernet und Netzteil verbunden werden um das erste mal mit dem neuen System zu starten. OpenWRT holt sich dabei über DHCP eine IP ADresse und sollte mit dem Hostnamen openwrt im Netz erreichbar sein. Falls das nicht gleich klappt, schau auf deinem Router nach, welche IP Adresse es bekommen hat um dich damit im Browser zu verbinden (http://IP-oder-Hostname). Die Anmeldung wird mit root ohne Kwennwort durchgeführt und die folgende Abfrage nach den Online-Updates abgelehnt. Jetzt noch unter System -> Administration das Passwort vergeben und danach in einer Shell (bei mir PowerShell) eine SSH Verbindung herstellen (auch dort kann statt des Hostname die IP verwendet werden):

ssh root@openwrt

Als erstes lassen wir den Paketmanager mal das Repository aktualisieren, installieren gdisk und schauen uns die Partitionierung an:

apk update
apk add gdisk
fdisk -l /dev/sda

Es sollten zwei Partitionen angezeigt werden:

Disk /dev/sda: 2.73 TiB, 3000592982016 bytes, 5860533168 sectors
Disk model: WDC WD30EZRS-11J
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x5452574f
Device     Boot Start    End Sectors  Size Id Type
/dev/sda1  *     8192  24575   16384    8M 83 Linux
/dev/sda2       32768 245759  212992  104M 83 Linux

Das Disklabel type: dos zeigt uns hier, dass die Platte noch als MBR Device eingerichtet ist, welches lediglich bis zu 2 TB ansprechen kann - blöd bei einer 3 TB HDD. Allerdings müssen wir davon ausgehen, dass auch die WD Firmware zuvor bereits nach GPT Schema auf die Platte zugegriffen hat um die gesamte Platte nutzen zu können und da unsere Image Kopieraktion lediglich die beiden Partitionen an Anfang geschrieben hat, am Ende der Platte noch ein defekter GPT Teil existiert. Wir sollten also aufpassen den nicht wieder aktivieren zu lassen!

gdisk /dev/sda
p
GPT fdisk (gdisk) version 1.0.10
Caution: invalid main GPT header, but valid backup; regenerating main header
from backup!
Warning: Invalid CRC on main header data; loaded backup partition table.
Warning! Main and backup partition tables differ! Use the 'c' and 'e' options
on the recovery & transformation menu to examine the two tables.
Warning! Main partition table CRC mismatch! Loaded backup partition table
instead of main partition table!
Warning! One or more CRCs dont match. You should repair the disk!
Main header: ERROR
Backup header: OK
Main partition table: ERROR
Backup partition table: OK
Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: damaged
Found valid MBR and corrupt GPT. Which do you want to use? (Using the
GPT MAY permit recovery of GPT data.)
 1 - MBR
 2 - GPT
 3 - Create blank GPT
 1

Damit wird die MBR Partitionstabelle geladen und wir lassen uns noch einmal anzeigen was Phase ist:

 p
Disk /dev/sda: 5860533168 sectors, 2.7 TiB
Model: WDC WD30EZRS-11J
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): 4607FCC8-20BD-40D5-A569-B81EA9A7B7DA
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 5860533134
Partitions will be aligned on 2048-sector boundaries
Total free space is 5860303725 sectors (2.7 TiB)
Number  Start (sector)    End (sector)  Size       Code  Name
   1            8192           24575   8.0 MiB     8300  Linux filesystem
   2           32768          245759   104.0 MiB   8300  Linux filesystem

Jetzt legen wir die dritte Partition für unsere Daten an:

 n

Die 4 dann folgenden Abfragen jeweils mit Enter ↵ bestätigen (Default übernehmen). Zum Schluß nocheinmal mit p das Ergebnis anschauen und mit w auf die Platte schreiben:

 p
 [...]
 Number  Start (sector)    End (sector)  Size       Code  Name
   1            8192           24575   8.0 MiB     8300  Linux filesystem
   2           32768          245759   104.0 MiB   8300  Linux filesystem
   3          245760      5860532223   2.7 TiB     8300  Linux filesystem
 w

gdisk wird dich noch einmal explizit nach Bestätigung fragen:

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)
The operation has completed successfully.

Und da wir schon so direkt darauf aufmerksam gemacht werden, starten wir das NAS einmal neu.

 reboot

Das Anlegen der dritten Partition hat den Datenträger wieder auf GPT umgestellt und du hast gerade ausprobiert, ob sich das MyBook Live damit auch noch starten lässt. Das schauen wir uns direkt wieder an - also nochmal über SSH anmelden (ssh root@openwrt):

fdisk -l /dev/sda
Disk /dev/sda: 2.73 TiB, 3000592982016 bytes, 5860533168 sectors
Disk model: WDC WD30EZRS-11J
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 4607FCC8-20BD-40D5-A569-B81EA9A7B7DA
Device      Start        End    Sectors  Size Type
/dev/sda1    8192      24575      16384    8M Linux filesystem
/dev/sda2   32768     245759     212992  104M Linux filesystem
/dev/sda3  245760 5860532223 5860286464  2.7T Linux filesystem

Jetzt formatieren wir Partition 3 als ext4:

mkfs.ext4 -L backup -m 0 /dev/sda3

Einen dauerhaften Einhängepunkt der einen Neustart übersteht braucht es auch noch:

mkdir -p /mnt/backup
uci add fstab mount
uci set fstab.@mount[-1].device='/dev/sda3'
uci set fstab.@mount[-1].target='/mnt/backup'
uci set fstab.@mount[-1].fstype='ext4'
uci set fstab.@mount[-1].enabled='1'
uci commit fstab
block mount

Und einen Benutzer mit dem wir darauf zugreifen können (Kennwort frei wählbar, direkt eingeben):

which useradd || apk add shadow-useradd
useradd backup
passwd backup

Der SMB Benutzer mit dem wir von außen Zugreifen. Du wirst wieder nach einem Kennwort gefragt und um später nicht verwirrt dazustehen, habe ich hier das selbe Kennwort wie zuvor gewählt. Das muss aber nicht so sein.:

ksmbd.adduser -a backup

Jetzt noch dem Benutzer die Berechtigung auf die Partition verschaffen:

chown backup:backup /mnt/backup

Zuletzt noch eine Freigabe in der Weboberfläche (http://openwrt) einrichten unter Services → Network Shares:

  • Name: backup
  • Path: /mnt/backup
  • Guest ok: nein
  • Read only: nein
  • Users / Allowed users: backup

OpenWRT-Shares.jpg

Von Windows, MacOS und Linux kann die Freigabe jetzt bereits genutzt werden, aber das war ja nicht das Ziel - dafür ist das alte NAS viel zu langsam. Ich möchte vom Synology NAS darauf sichern und dessen Lösung Hyper Backup ist etwas wählerisch mit seinen Zielen und ich möchte den SMB Overhead auch nicht unbedingt im Backup-Prozess haben. Hier ist rsync die erste Wahl und das muss ich dem MyBook Live noch beibringen, in der SSH Shell:

apk add rsyncd
cat > /etc/rsyncd.conf << 'EOF'
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
use chroot = no
read only = no
max connections = 4
timeout = 300

[backup]
    path = /mnt/backup
    comment = Hyper Backup Ziel
    read only = no
    list = yes
    uid = backup
    gid = backup
    auth users = backup
    secrets file = /etc/rsyncd.secrets
EOF
echo 'backup:DEIN-PASSWORT-HIER' > /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets

Dann den Dienst noch aktivieren und starten:

/etc/init.d/rsyncd enable
/etc/init.d/rsyncd start

Das Kind braucht einen Namen

Ok, das ist technisch nicht unbedingt notwendig, aber ich fand OpenWRT als Hostname für ein NAS jetzt nicht unbedingt selbsterklärend, also habe ich den zum Abschluß auch noch angepasst:

uci set system.@system[0].hostname='WDNAS'
uci commit system
/etc/init.d/system reload

Fazit

Wenn du so ein Gerät im LAN ohne Transportverschlüsselung betreibst, kannst du von Schreibraten zwischen 10 und 15 MB/s sowie Leseraten bis zu 40 MB/s ausgehen. Mit Transportverschlüsselung kann sich das noch einmal halbieren, der Prozessor hat einfach keine Reserven. Verschlüssele lieber clientseitig das Backup vor der Übertragung wenn es drauf ankommt. Da eine regelmäßige, geplante Sicherung zwischen Servern aber üblicherweise nachts erfolgt, ist die Schreib.-/Leserate nicht wirklich wichtig. Ich konnte so aber ein sehr antikes System zu neuem Leben verhelfen, das noch einen ganz realen Zweck erfüllt und nur der erste Lauf muss ja wirklich alle Daten übertragen. Die kleinen Änderungen danach täglich zu sichern, geht dann trotz der winzigen Datenrate ziemlich flott von statten.

Fragen und Anregungen kannst du mit mir im Fediverse teilen.