Tagesarchiv für den 21. Mai 2008

3Ware-RAID “offline” verwenden

Mittwoch, den 21. Mai 2008

Wer ohne 3ware-Controller auf eine Festplatte zugreifen will, die mal mit einem 3ware-Controller als RAID-1-Laufwerk benutzt wurde, dem können diese paar Zaubertricks weiterhelfen:

1.) Festplatte irgendwie lokal anschließen

Für alte ATA-Festplatten nehme ich immer so einen USB-ATA-Hostadapter - dann muss man nicht andauernd den Rechner neu starten :)

2.) Bootsektor suchen

Die 3ware-Controller speichern in den ersten Sektoren der Festplatten einige Verwaltungsinformationen, daher kann man die Platten ohne Controller (leider) nicht direkt mounten. In diesem Fall muss man also den Bootsektor suchen, und von dort aus mit entsprechenden Offsets und losetup auf die Partitionen zugreifen.

Zumindest beim 7000-2 liegt der “echte” Bootsektor in Sektor 1024. Da wir ohnehin auf die Partitionstabelle zugreifen müssen, kann man diesen schonmal als loop-Device einbinden:

losetup /dev/loop0 /dev/sdb -o $((512*1024))
fdisk -l /dev/loop0

Optimalerweise sollte nun die Partitionstabelle angezeigt werden, z.B. so:

Disk /dev/loop0: 80.0 GB, 80025837568 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/loop0p1 1 125 1004031 82 Linux swap / Solaris
/dev/loop0p2 * 126 1950 14659312+ 83 Linux
/dev/loop0p3 1951 9729 62484817+ 83 Linux

Sollte der Bootsektor woanders liegen, kann man mit diesen Zeilen z.B. die ersten 2048 Sektoren der Festplatte auslesen (am besten im /tmp-Verzeichnis) und mit dem file-Befehl nach dem “richtigen” suchen:

for i in `seq 1 2048`; do dd if=/dev/sdb of=sect.$i.bin bs=512 skip=$i count=1; done
file sect.*.bin | grep -i boot

3.) Gewünschte Partition mounten

Für die gewünschte Partition erzeugen wir ein weiteres Loop-Device. Der Offset hierzu berechnet sich aus der Position des Bootsektors plus der Startposition laut Boot-Tabelle (Vorsicht: in der Boot-Tabelle wird mit “1″ begonnen, beim Offset müssen wir aber mit “0″ beginnen; in diesem Fall also von der Start-Position der Partition noch 1 abziehen).

In dem o.g. Beispiel wird die Partition 2 wie folgt gemounted:

losetup /dev/loop1 /dev/sdb -o $(((512*1024)+(125*512*16065)))
mount /dev/loop1 /mnt -o ro

Dann mal viel Erfolg! :-)