logo

Suche:

RSS News/Blog
RSS Seiten

Da hat man gerade von der ganzen Platte ein Image per dd gezogen.

Aber wie kommt man nun an die Daten in den einzelnen Partitionen ran?

Für diesen Zweck sieht der mount-Befehl für das Loop-Device einen Parameter "offset" vor. Damit kann man ihn anweisen, erst ab einer bestimmten Position im Imagefile die Daten zu berücksichtigen.
Anmerkung: Bei meinen ersten Versuchen gab es dazu auch noch den Parameter "Sizelimit", der für die Größe des Bereichs zuständig war. Beim aktuellen Versuch taucht der aber nicht mehr auf. Ggf. muss man ihn je nach Version noch ergänzen. (Nähres dazu enthält die Manpage von mount bzw. losetup)

Wie bekomme ich raus, wo die Partition(en) startet(n)?
Das Tool sfdisk zeigt alles an, was man braucht: sfdisk -d <imagefilename>
Beispiel der Ausgabe:

# sfdisk -d medion_hda-komplett.dd
unit: sectors

medion_hda-komplett.dd1 : start= 63, size= 41913522, Id= 7, bootable
medion_hda-komplett.dd2 : start= 41913585, size= 81947565, Id= b
medion_hda-komplett.dd3 : start=123861150, size= 2136645, Id=82
medion_hda-komplett.dd4 : start=125997795, size= 69368670, Id= 5
medion_hda-komplett.dd5 : start=125997858, size= 2040192, Id=83
medion_hda-komplett.dd6 : start=128038113, size= 20482812, Id=83
medion_hda-komplett.dd7 : start=148520988, size= 46845477, Id=83

Die Angezeigten Werte müssen allerdings noch mit 512 multipliziert werden, da hier sektoren statt der benötigten Bytes angezeigt werden.

Um die Sache etwas zu automatisieren, habe ich das folgende kleine Scriptchen geschrieben:

file=$1

sfdisk -d $file | grep "start=" | grep -v "Id=82" | grep -v "Id= 5" | while read i

do

name=`echo $i |cut -d " " -f1`

start=`echo $i |cut -d "=" -f2|cut -d "," -f1`
OFFSET=$(($start*512))

size=`echo $i |cut -d "=" -f3|cut -d "," -f1`
SIZELIMIT=$(($size*512))

id=`echo $i |cut -d "=" -f4|cut -d "," -f1`

echo "----------------------------------------"
echo name $name
echo start $start
echo offset $OFFSET
echo size $size
echo id $id
echo

mkdir -p /mnt/dd-mounter/$name

mount -o loop,offset=$OFFSET,ro $file /mnt/dd-mounter/$name

done

echo "========================================"
mount | grep $file

Achtung, das Script muß als root ausgeführt werden. Sudo hat bei mir nicht funktioniert!
Es erwartet als Parameter den Dateinamen des Image-Files.