Schon einmal eine Partition direkt eingebunden? Das klingt nun vieleicht etwas merkwürdig, der Kernel erkennt ja die Partitionen und udev legt die passenden nodes unter /dev an … aber, was, wenn die Partitionstabelle beschädigt wurde oder man aus versehen mit einer grub-installation diese zerstört hat? Kein Problem. Kennt man das offset der Partition, kann die Festplatte mit einem offset als neues Gerät bereitgestellt werden, was ausreicht, um Dateien noch kopieren zu können. Schreiben sollte man mit dieser Methode nicht.
Beispiel an meiner HDD
fdisk -ul /dev/sda
Platte /dev/sda: 250.0 GByte, 250059350016 Byte
255 Köpfe, 63 Sektoren/Spuren, 30401 Zylinder, zusammen 488397168 Sektoren
Einheiten = Sektoren von 1 × 512 = 512 Bytes
Disk identifier: 0xc606c606
Gerät boot. Anfang Ende Blöcke Id System
/dev/sda1 * 63 146496734 73248336 7 HPFS/NTFS
/dev/sda2 146496735 193374404 23438835 83 Linux
/dev/sda3 193374405 486978344 146801970 b W95 FAT32
/dev/sda4 486978345 488392064 706860 82 Linux Swap / Solaris
Die erste Partition startet bei Sektor 63 und endet bei 146496734. Dabei ist zu beachten, das die Start/Endposition unbedingt in Sektoren, und nicht in Zylindern anzugeben ist. 146496735 Sektoren entsprechen 146496735*512/1024/1024/1024 Gigabyte. losetup benötigt das offset in bytes, so ist zb. 146496735*512=75006328320 für die 2. Partition zu übergeben. Andersherum kann man diese Rechnung auch nutzen, um bei zerstörten Partitionstabellen sich in etwa an den 1. Block heranzutasten. Dabei muss man in diesem Bereich nach einer gültigen Dateisystem-Signatur suchen und den 1. Sektor als offset nutzen. Das geht besonders gut mit einem hexeditor (zb. hexedit). Die größe der Partition in byte umrechnen, die HDD im hexeditor öffnen und nach einer Signatur suchen und per loopback als neues device bereitstellen. OK, zurück zur Aufgabe.
Um meine 1. Partition zu mounten, muss das Offset in byte angegeben werden, bei der diese Physisch auf der HDD startet. Also, 63sektoren a 512 Byte. Also, 63*512 = 32256. Dieses offset übergibt man zusammen mit dem zu verwendendem loop-device und der hdd an losetup. Anschließend kann das Device normal gemountet werden (wenn das offset stimmt und ein Dateisystem-header im loop-device gefunden wird)
~ # losetup -o 32256 /dev/loop4 /dev/sda
~ # losetup -a
/dev/loop/4: [000f]:1108 (/dev/sda) offset=32256
~ # mount /dev/loop4 tmp2
~ # mount
/dev/sda2 on / type ext3 (rw,noatime)
proc on /proc type proc (rw,nosuid,nodev,noexec)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec)
udev on /dev type tmpfs (rw,nosuid)
devpts on /dev/pts type devpts (rw,nosuid,noexec)
shm on /dev/shm type tmpfs (rw,noexec,nosuid,nodev)
usbfs on /proc/bus/usb type usbfs (rw,noexec,nosuid,devmode=0664,devgid=85)
svcdir on /var/lib/init.d type tmpfs (rw,mode=0755,size=2048k)
none on /sys/fs/fuse/connections type fusectl (rw)
/dev/loop/4 on /root/tmp2 type ntfs (rw)
~ # ls tmp2
AUTOEXEC.BAT ntldr
BOOT.BAK pagefile.sys
bootfont.bin Programme
boot.ini RECYCLER
Dokumente und Einstellungen hiberfil.sys
System Volume Information NTDETECT.COM
IO.SYS Update
MSDOS.SYS WINDOWS
mount | grep -i loop
/dev/loop/4 on /root/tmp2 type ntfs (rw)
df -h | grep -i loop
/dev/loop/4 70G 68G 2,1G 98% /root/tmp2
nagut, wie man sieht lassen sich die Dateisysteme problemlos mounten und lesen. Wurde die Partitionstabelle beschädigt, kann man in einer Region der HDD in der sich das Dateisystem befinden sollte nach der Signatur suchen und anschließend mit offset mounten.