[PROLOG]
Hier habe ich beschrieben wie man ein statisches Volume auf einer Einzeldisk unter Linux ausliest, das Gleiche gilt es nun auch für ein statisches Volume im RAID1 und RAID5 zu realisieren.
Diesmal habe ich mir ein frisches Debian auf echtem Blech, statt eine VM daher genommen. Mehr gibt es eigentlich nicht zu sagen.
[VORBEREITUNG]
Wir brauchen also auch hier ein Linux-System und die Möglichkeit die QNAP-Datenträger daran anzuschließen, theoretisch würde ein Datenträger beim RAID1 reichen, das habe ich an entsprechender Stelle vermerkt. Auch hier bediene ich mich noch den Tools „Putty“ für den CLI Zugriff über SSH und „WinSCP“ um komfortabel auf die Daten zugreifen zu können. Das System wird gestartet und eine SSH Session geöffnet.
Ich habe es im vorherigen Artikel nicht erwähnt, aber es empfiehlt sich die Datenträger erst anzuschließen, wenn das System bereits hochgefahren ist, damit nicht versucht wird von diesen zu booten. Andernfalls muss ausgeschlossen sein, dass dies passiert. In diesem Beispiel habe ich die Disks mittels 2-fach SATA-USB Dock angeschlossen.
Falls nicht bereits vorhanden muss der Logical Volume Manager sowie mdadm (RAID-Verwaltung) installiert werden. Letzteres scheint ebenfalls nicht vorinstalliert zu sein, das habe ich im vorherigen Artikel nicht bemerkt, da ich die VM zuvor schon öfter im Einsatz hatte…
apt-get install lvm2
apt-get install mdadm
[RAID1 - DURCHFÜHRUNG]
Zunächst werfen wir einen Blick auf die Datenträger und identifizieren anhand der Kapazität die für uns relevanten Geräte sowie das RAID Array (das RAID besteht hier aus unterschiedlich großen SSD, 120GB und 240GB):
root@Debian:/# sudo fdisk -l
Disk /dev/sda: 232.89 GiB, 250059350016 bytes, 488397168 sectors
Disk model: WDC WD2500AAKX-7
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x42937818
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 486395903 486393856 231.9G 83 Linux
/dev/sda2 486397950 488396799 1998850 976M 5 Extended
/dev/sda5 486397952 488396799 1998848 976M 82 Linux swap / Solaris
Disk /dev/sdc: 111.8 GiB, 120040980480 bytes, 234455040 sectors
Disk model: 1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 4096 bytes / 33553920 bytes
Disklabel type: gpt
Disk identifier: 5D15CCE7-D049-4753-A4DE-5FE9840465C2
Device Start End Sectors Size Type
/dev/sdc1 40 1060289 1060250 517.7M Microsoft basic data
/dev/sdc2 1060296 2120579 1060284 517.7M Microsoft basic data
/dev/sdc3 2120584 216668654 214548071 102.3G Microsoft basic data ## <<< gewünschte Partition
/dev/sdc4 216668656 217728944 1060289 517.7M Microsoft basic data
/dev/sdc5 217728952 234436544 16707593 8G Microsoft basic data
Disk /dev/sdb: 223.57 GiB, 240057409536 bytes, 468862128 sectors
Disk model: 0
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 4096 bytes / 33553920 bytes
Disklabel type: gpt
Disk identifier: 24EA99F4-A7D5-4E05-9FEA-450710852BCD
Device Start End Sectors Size Type
/dev/sdb1 40 1060289 1060250 517.7M Microsoft basic data
/dev/sdb2 1060296 2120579 1060284 517.7M Microsoft basic data
/dev/sdb3 2120584 451073069 448952486 214.1G Microsoft basic data ## <<< gewünschte Partition
/dev/sdb4 451073072 452133359 1060288 517.7M Microsoft basic data
/dev/sdb5 452133368 468840959 16707592 8G Microsoft basic data
Disk /dev/md1: 102.3 GiB, 109848494080 bytes, 214547840 sectors ## <<< gewünschtes Array auf dem die Partition liegt
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 4096 bytes / 33553920 bytes
Alles anzeigen
Man erkennt eine QNAP Disk übrigens daran, dass es mehrere Partitionen gibt, wovon die ersten beiden etwa 512MB Kapazität aufweisen. Das könnte von Interesse sein wenn man die Disk nicht anhand der Kapazität identifizieren kann. Alternativ kann man sich die Datenträger vorher auch mal anzeigen lassen, ohne dass die QNAP Disks verbunden sind.
Nun stellen wir nochmal sicher, dass md1 wirklich das gewünschte RAID Array ist. Bei mir gibt es komischerweise nur das eine RAID, ich hätte hier zusätzlich die System-RAID erwartet… für uns relevant ist das Array mit unserem identifizierten sdb und/oder sdc. Dieser Schritt ist optional, denn bei QNAP sind die Arrays mit den Nutzdaten in der Regel immer md1 bis mdX, wobei md9 und md13 anderweitig verwendet werden, daher gewöhne ich mir lieber direkt an, das nochmal gegenzuprüfen.
root@Debian:/# cat /proc/mdstat
Personalities : [raid1]
md1 : active (auto-read-only) raid1 sdb3[1] ## <<< Identität des Array ist damit bestätigt, denn es beinhaltet unser sdb3
107273920 blocks super 1.0 [2/1] [_U]
Dann wird das Array mit sdb3 (in diesem Fall) gestoppt…
root@Debian:~# mdadm --stop /dev/md1
… und wir erstellen ein Neues, hier mit der Nummer 99 (diese darf nicht bereits existieren). Theoretisch würde bei einem RAID1 auch nur eine Disk genügen (also sdb3 oder sdc3), dazu ist die Option --run erforderlich. Wir nehmen hier aber beide Disks mit rein und bauen das RAID neu auf:
root@Debian:/# sudo mdadm --assemble /dev/md99 /dev/sdb3 /dev/sdc3
Nun werfen wir einen Blick in die Volumes welche LVM-verwaltet sind und schauen wieder anhand der Kapazität, was unsere Volume Group (VG) und unser Volume (LV) ist.
root@Debian:/# sudo lvs
WARNING: PV /dev/md99 in VG vg288 is using an old PV header, modify the VG to update.
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1 vg288 -wi------- 101.25g ## <<< Gewünschte Volume Group vg288 mit gewünschtem Volume lv1
lv544 vg288 -wi------- 1.05g
Zunächst aktivieren wir die Volume Group:
root@Debian:/# sudo vgchange -ay
WARNING: PV /dev/md99 in VG vg288 is using an old PV header, modify the VG to update.
2 logical volume(s) in volume group "vg288" now active
und mounten sie dann…
root@Debian:/# mkdir test
root@Debian:/# mount /dev/vg288/lv1 /test
… und nach einem Wechsel in das Verzeichnis sehen wir auch schon den Inhalt. In diesem Beispiel habe ich ein paar MP3 in der Freigabe „Media“ abgelegt…
root@Debian:/# cd test
root@Debian:/test# ls -all
total 124
drwxrwxrwx 25 root root 4096 Aug 24 12:54 .
drwxr-xr-x 20 root root 4096 Aug 24 13:25 ..
drwx------ 2 root root 16384 Aug 18 14:14 lost+found
drwxrwxrwx 4 root root 4096 Aug 18 14:52 Media ## <<< Da ist meine Freigabe "Media" (die Auflistung wurde hier gekürzt; da es das Systemvolume des QNAP war, gibt es hier viel mehr Ordner)
root@Debian:/test# cd Media
root@Debian:/test/Media# ls -all
total 32772
drwxrwxrwx 4 root root 4096 Aug 18 14:52 .
drwxrwxrwx 25 root root 4096 Aug 24 12:54 ..
-rw-rw-rw- 1 root root 7129926 Jun 25 2016 'Ethiopians - Everything Crash - 01- When Will Be The End.mp3'
-rw-rw-rw- 1 root root 2732014 Jun 25 2016 'Ethiopians - Everything Crash - 02 - Empty Belly.mp3'
-rw-rw-rw- 1 root root 3864480 Jun 25 2016 'Ethiopians - Everything Crash - 03 - Hard Times.mp3'
-rw-rw-rw- 1 root root 3393919 Jun 25 2016 'Ethiopians - Everything Crash - 04 - Everything Crash.mp3'
-rw-rw-rw- 1 root root 5236218 Jun 26 2016 'Ethiopians - Everything Crash - 05 - Locust.mp3'
-rw-rw-rw- 1 root root 5626850 Jun 25 2016 'Ethiopians - Everything Crash - 06 - No Baptism.mp3'
-rw-rw-rw- 1 root root 2423648 Jun 25 2016 "Ethiopians - Everything Crash - 07 - Won't Give Up.mp3"
-rw-rw-rw- 1 root root 3097862 Jun 25 2016 'Ethiopians - Everything Crash - 08 - Open The Gate.mp3'
-rw-rw-rw- 1 root root 16933 Nov 6 2015 frontcover.jpg
drwxrwxrwx 2 root root 4096 Aug 18 14:17 @Recycle
Alles anzeigen
... die Daten kann man sich nun mit WinSCP herunterladen, alternativ kann natürlich ein ausreichend großer Datenträger an den "Recovery-Rechner" angeschlossen werden, auf den die Daten direkt kopiert werden.
[RAID5 - DURCHFÜHRUNG]
Die Durchführung unterscheidet sich kaum von der bei RAID1. Das RAID5 besteht aus drei Disks mit unterschiedlicher Kapazität, in diesem Beispiel verwenden wir aber nur zwei Disks um das RAID aufzubauen, denn eine darf ja bekanntlich fehlen.
Es beginnt wieder mit einem Blick auf die Datenträger und wir identifizieren die für uns Relevanten. Hier werden erwartungsgemäß auch die System-RAID angezeigt, was beim RAID1 komischerweise nicht der Fall war:
root@Debian:/ # sudo fdisk -l
Disk /dev/sda: 232.89 GiB, 250059350016 bytes, 488397168 sectors
Disk model: WDC WD2500AAKX-7
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x42937818
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 486395903 486393856 231.9G 83 Linux
/dev/sda2 486397950 488396799 1998850 976M 5 Extended
/dev/sda5 486397952 488396799 1998848 976M 82 Linux swap / Solaris
Disk /dev/sdb: 223.57 GiB, 240057409536 bytes, 468862128 sectors
Disk model: 0
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 4096 bytes / 33553920 bytes
Disklabel type: gpt
Disk identifier: 24EA99F4-A7D5-4E05-9FEA-450710852BCD
Device Start End Sectors Size Type
/dev/sdb1 40 1060289 1060250 517.7M Microsoft basic data
/dev/sdb2 1060296 2120579 1060284 517.7M Microsoft basic data
/dev/sdb3 2120584 451073069 448952486 214.1G Microsoft basic data ## <<< gewünschte Partition
/dev/sdb4 451073072 452133359 1060288 517.7M Microsoft basic data
/dev/sdb5 452133368 468840959 16707592 8G Microsoft basic data
Disk /dev/sdc: 111.8 GiB, 120040980480 bytes, 234455040 sectors
Disk model: 1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 4096 bytes / 33553920 bytes
Disklabel type: gpt
Disk identifier: 5D15CCE7-D049-4753-A4DE-5FE9840465C2
Device Start End Sectors Size Type
/dev/sdc1 40 1060289 1060250 517.7M Microsoft basic data
/dev/sdc2 1060296 2120579 1060284 517.7M Microsoft basic data
/dev/sdc3 2120584 216668654 214548071 102.3G Microsoft basic data ## <<< gewünschte Partition
/dev/sdc4 216668656 217728944 1060289 517.7M Microsoft basic data
/dev/sdc5 217728952 234436544 16707593 8G Microsoft basic data
Disk /dev/md1: 204.61 GiB, 219696988160 bytes, 429095680 sectors ## <<< gewünschtes Array auf dem die Partitionen liegen
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 65536 bytes / 131072 bytes
Disk /dev/md13: 448.13 MiB, 469893120 bytes, 917760 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 4096 bytes / 33553920 bytes
Disk /dev/md127: 7.9 GiB, 8482521088 bytes, 16567424 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 4096 bytes / 33553920 bytes
Disk /dev/md9: 517.63 MiB, 542769152 bytes, 1060096 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 4096 bytes / 33553920 bytes
Alles anzeigen
Auch hier stellen wir nochmal sicher, dass md1 auch wirklich das Array mit unseren Volumes für die Nutzdaten ist:
root@Debian:/ # cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md9 : active (auto-read-only) raid1 sdc1[128] sdb1[129]
530048 blocks super 1.0 [128/2]
[U__U____________________________________________________________________________________________________________________________]
bitmap: 1/1 pages [4KB], 65536KB chunk
md127 : active (auto-read-only) raid1 sdc5[0] sdb5[2]
8283712 blocks super 1.0 [2/2] [UU]
bitmap: 0/1 pages [0KB], 65536KB chunk
md13 : active (auto-read-only) raid1 sdc4[128] sdb4[129]
458880 blocks super 1.0 [128/2]
[U__U____________________________________________________________________________________________________________________________]
bitmap: 1/1 pages [4KB], 65536KB chunk
md1 : active (auto-read-only) raid5 sdb3[1] sdc3[0] ## <<< Identität des Array ist damit bestätigt, denn es beinhaltet unsere sdb3 und sdc3
214547840 blocks super 1.0 level 5, 64k chunk, algorithm 2 [3/2] [UU_]
unused devices: <none>
Alles anzeigen
Dann wird das Array mit unserem sdb3 und sdc3 (in diesem Fall) gestoppt…
root@Debian:/ # sudo mdadm --stop /dev/md1
… und wir erstellen ein Neues, hier wieder mit der Nummer 99 (diese darf nicht bereits existieren). Da wir nur zwei der drei Disks angeschlossen haben, erstellen wir das Array auch nur mit diesen beiden unter Verwendung der Option --run. Hat man alle Datenträger angeschlossen, so lässt man diese Option weg und fügt den Datenträger (z.B. /dev/sdd3) mit an:
root@Debian:/ # sudo mdadm --assemble --run /dev/md99 /dev/sdb3 /dev/sdc3
Nun werfen wir einen Blick in die Volumes welche LVM-verwaltet sind und schauen wieder anhand der Kapazität, was unsere Volume Group (VG) und unser Volume (LV) ist.
root@Debian:~# sudo lvs
WARNING: PV /dev/md99 in VG vg288 is using an old PV header, modify the VG to update.
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1 vg288 -wi------- 202.50g ## <<< Gewünschte Volume Group vg288 mit gewünschtem Volume lv1
lv544 vg288 -wi------- <2.11g
Zunächst aktivieren wir die Volume Group:
root@Debian:/# sudo vgchange -ay
WARNING: PV /dev/md99 in VG vg288 is using an old PV header, modify the VG to update.
2 logical volume(s) in volume group "vg288" now active
und mounten sie dann…
root@Debian:/# mkdir test
root@Debian:/# mount /dev/vg288/lv1 /test
… und nach einem Wechsel in das Verzeichnis sehen wir auch schon den Inhalt. Um die Spannung zu steigern habe ich habe ich ein paar andere MP3 in der Freigabe „Media“ abgelegt, als im Beispiel zuvor…
root@Debian:/# cd test
root@Debian:/test# ls -all
total 124
drwxrwxrwx 25 root root 4096 Aug 24 12:54 .
drwxr-xr-x 20 root root 4096 Aug 24 13:25 ..
drwx------ 2 root root 16384 Aug 18 14:14 lost+found
drwxrwxrwx 4 root root 4096 Aug 18 14:52 Media ## <<< Da ist meine Freigabe "Media" (die Auflistung wurde hier gekürzt; da es das Systemvolume des QNAP war, gibt es hier viel mehr Ordner)
root@Debian:/test# cd Media
root@Debian:/test/Media# ls -all
total 70676
drwxrwxrwx 4 root root 4096 Aug 24 14:42 .
drwxrwxrwx 25 root root 4096 Aug 24 14:01 ..
-rw-rw-rw- 1 root root 27652 Nov 5 2015 frontcover.jpg
-rw-rw-rw- 1 root root 2094759 Jun 25 2016 'Rancid - 01 - Maxwell Murder.mp3'
-rw-rw-rw- 1 root root 3580603 Jun 25 2016 'Rancid - 02 - The 11th Hour.mp3'
-rw-rw-rw- 1 root root 4051436 Jun 25 2016 'Rancid - 03 - Roots Radicals.mp3'
-rw-rw-rw- 1 root root 3495332 Jun 25 2016 'Rancid - 04 - Time Bomb.mp3'
-rw-rw-rw- 1 root root 5086504 Jun 25 2016 'Rancid - 05 - Olympia Wa.mp3'
-rw-rw-rw- 1 root root 3521052 Jun 25 2016 'Rancid - 06 - Lock, Step & Gone.mp3'
-rw-rw-rw- 1 root root 4467089 Jun 25 2016 'Rancid - 07 - Junkie Man.mp3'
-rw-rw-rw- 1 root root 3450200 Jun 25 2016 'Rancid - 08 - Listed M.I.A..mp3'
-rw-rw-rw- 1 root root 3811936 Jun 25 2016 'Rancid - 09 - Ruby Soho.mp3'
-rw-rw-rw- 1 root root 4865206 Jun 25 2016 'Rancid - 10 - Daly City Train.mp3'
-rw-rw-rw- 1 root root 4629515 Jun 25 2016 'Rancid - 11 - Journey to the End of the East Bay.mp3'
-rw-rw-rw- 1 root root 2312310 Jun 25 2016 "Rancid - 12 - She's Automatic.mp3"
-rw-rw-rw- 1 root root 4202522 Jun 25 2016 'Rancid - 13 - Old Friend.mp3'
-rw-rw-rw- 1 root root 4097218 Jun 25 2016 'Rancid - 14 - Disorder and Disarray.mp3'
-rw-rw-rw- 1 root root 2758686 Jun 25 2016 'Rancid - 15 - The Wars End.mp3'
-rw-rw-rw- 1 root root 3591280 Jun 25 2016 "Rancid - 16 - You Don't Care Nothin'.mp3"
-rw-rw-rw- 1 root root 3892185 Jun 25 2016 'Rancid - 17 - As Wicked.mp3'
-rw-rw-rw- 1 root root 4635754 Jun 25 2016 'Rancid - 18 - Avenues & Alleyways.mp3'
-rw-rw-rw- 1 root root 3740476 Jun 25 2016 'Rancid - 19 - The Way I Feel.mp3'
drwxrwxrwx 2 root root 4096 Aug 18 14:17 @Recycle
Alles anzeigen
[EPILOG]
Die Option --run bei mdadm verstehe ich übrigens anders, aber in beiden Beispielen konnte ich das Array nur mithilfe dieser Option zusammensetzen, wenn ein Datenträger gefehlt hat. Sei es drum, Hauptsache der Zugriff auf die Daten ist wieder möglich!
Auch mit einem RAID und LVM ist es demnach nicht schwer, wieder Zugriff auf die Daten zu erlangen, wenn man kein QNAP zur Hand hat. Die Testdaten wurden auf einem TS-453D unter QTS 5.0.0 erstellt, das RAID1 wurde dabei nach der ersten Datenwiederherstellung in das RAID5 konvertiert, aber das tut eigentlich nichts zur Sache.
Dieses Vorgehen ist so auch für andere RAID-Level umsetzbar, wichtig ist, dass mindestens die Datenträger verwendet werden, die bei dem Level erforderlich sind. Die Datenträger die ausfallen dürfen, können weggelassen werden.
Eigentlich wollte ich das Spiel nun wenigstens noch mit RAID0 und JBOD durchziehen, befürchte aber, dass das etwas langweilig wird.
Ich hoffe, dass ich diese Serie irgendwann mit einem dritten Teil abschließen kann, nämlich der Wiederherstellung von Thin- oder Thick- Volumes, was -sofern überhaupt möglich- der komplizierteste Teil sein wird, mal sehen ob ich hier noch einen Schritt weiter komme, denn das wäre sicherlich auch der interessanteste Teil!
So sehr mich dieses Vorgehen auch interessiert: Selbst wenn es nicht klappt brauche ich mir hier dank ausreichender Backups gar keine Sorgen machen und kann stattdessen die schönen Seiten des Lebens genießen… cheers!