Mijn oude fileserver had een 3Ware RAID controller. Die server was kapot na een stroomstoring en dus lagen de schijven al enige tijd op de plank, want misschien staat er nog data op die niet in de backup zit. Echter hoe haal je de data eraf zonder die RAID controller?
Situatie
De RAID controller, een 3Ware 6410, is er een met een PCI aansluiting en 4x IDE. Beide aansluitingen die nogal schaars beginnen te worden.
Om het nog even wat complexer te maken, had ik op de schijven een LVM toegepast, zodat de boel eventueel makkelijker uitgebreid zou kunnen worden. Uiteraard is dat nooit gebeurd…
Mijn LVM bevatte 2x IDE disk van de 3Ware controller als RAID-1 (mirroring) en 4x SATA schijf in software-RAID-5. De root (met /home , /var , enz.) staat op de RAID-1 set en de rest op de software RAID-5-set. Eerst maar even de IDE-schijf uit de RAID-1 set proberen.
Ter illustratie de situatie zoals ik me die herinnerde 🙂
Transparantie 3Ware controller
Als hardware RAID-controller moet je de schijven kunnen herkennen, dus moet er nog wat op geschreven worden buiten de partitionering om. Dit kun je aan het begin doen, of aan het eind. 3Ware blijkt voor het begin gekozen te hebben, alleen hoeveel? Oftewel, bij welke sector begint de partitietabel?
Het blijkt dat dit 512 kByte te zijn, oftewel 1024 sectoren op mijn schijf. Ik heb geen idee of die offset in Bytes of sectoren geldt voor de controller, maar bij mij begon het dus na 524288 Bytes.
Bepalen Offset
Eerst maar even een loop-back device aanmaken met die offset:
losetup -o 524288 /dev/loop0 /dev/sdd
Dan hebben we een device /dev/loop0, waar fdisk hopelijk wat mee kan…
root@htpc:~# fdisk -l /dev/loop0
Disk /dev/loop0: 320.1 GB, 320072409088 bytes 255 heads, 63 sectors/track, 38913 cylinders, total 625141424 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0005a8b6 Device Boot Start End Blocks Id System /dev/loop0p1 * 63 498014 248976 83 Linux /dev/loop0p2 498015 625137344 312319665 5 Extended /dev/loop0p5 498078 625137344 312319633+ 8e Linux LVM
De LVM-partitie begint op sector 498078, dus 498078 * 512 + 524288 = 255540224 Bytes na het begin van de harde schijf.
Eerst de eerst gemaakte loopback weggooien:
losetup -d /dev/loop0
En dan opnieuw aanmaken met de gewenste offset:
losetup -o 255540224 /dev/loop0 /dev/sdd
Mounten Logical Volume
Een “vgscan” leverde niets op, maar blijkbaar moet je lvm.conf nog aanpassen om een LVM via een loopback device te kunnen mounten. Oftewel pas de vergelijkbare regel in lvm.conf als volgt aan:
filter = [ "a|/dev/loop.*|", "r/.*/" ]
Daarna werd de volume-group gevonden:
root@htpc:~# vgscan Reading all physical volumes. This may take a while... Couldn't find device with uuid LJXHd9-wfNq-sJRS-VZgx-B0bt-Nk65-W2Ml6L. Found volume group "fileserver" using metadata type lvm2
Het software-RAID5 device werd (uiteraard) niet gevonden en gelukkig had ik de logical volumes precies zo groot gemaakt als de fysieke schijven. Dus ik kon verder.
Zorg dat je de volume-group ‘fileserver’ kunt gebruiken:
root@htpc:~# lvm vgchange -ay fileserver Couldn't find device with uuid LJXHd9-wfNq-sJRS-VZgx-B0bt-Nk65-W2Ml6L. Refusing activation of partial LV Postbus. Use --partial to override. 2 logical volume(s) in volume group "fileserver" now active
En via de device-mapper kun je dan de Logical Volumes mounten:
root@htpc:~# mount /dev/mapper/fileserver-root /mnt/recover/
Resultaat
Uiteindelijk bleek dat de hdd’s zelf ook niet helemaal lekker meer waren, want rsync had best wel moeite met het lezen van een aantal files.
Maar gelukkig had ik 2 van die schijven, dus uiteindelijk heb ik vrijwel alles wat de moeite waard was kunnen recoveren.
En het “leuke” was nog wel dat hetgeen ik naarstig naar op zoek was, waarschijnlijk nooit bestaan heeft (gemonteerde video uit 2008) die ik kennelijk nooit gemaakt heb, omdat er toen helemaal geen filmpje was gemaakt….
Binnenkort maar eens een aantal SATA=>USB adapters bij elkaar scharrelen om de stapel hdd’s van de software-RAID5 set te recoveren.