Gibt es eine Möglichkeit, eine in Teile zerlegte Disk-Img-Datei als Single-Loop-Gerät zu mounten?
Gibt es eine Möglichkeit, eine in Teile zerlegte Disk-Img-Datei als Single-Loop-Gerät zu mounten?
Antworten:
Ich glaube nicht, dass Sie es an Ort und Stelle tun können, aber wenn Sie genug Platz haben, sollte dies funktionieren:
# Create the files that will hold your data
dd if=/dev/zero of=part-00 bs=1M count=4k
dd if=/dev/zero of=part-01 bs=1M count=4k
# Create the loop devices
losetup /dev/loop0 part-00
losetup /dev/loop1 part-01
# Create a RAID array
mdadm --create /dev/md0 --level=linear --raid-devices=2 /dev/loop0 /dev/loop1
# Copy the original filesystem
dd if=original-file-00 of=/dev/md0 bs=512
# Look at the records written value
dd if=original-file-01 of=/dev/md0 bs=512 seek=<sum of records written values so far>
# Mount the new filesystem
mount /dev/md0 /mnt
Sie können ein RAID-Array nicht einfach aus den Originaldateien erstellen, da die RAID-Festplatten einen bestimmten Header haben, in dem die Anzahl der Festplatten, die RAID-Stufe usw. gespeichert sind. Wenn Sie dies tun, wird dieser Teil Ihrer Originaldateien überschrieben.
Sie können das verwenden mdadm --build
, um ein Array ohne Metadaten zu erstellen, aber dann sollten Sie wirklich zuerst ein Backup erstellen. Oder wenn ein Nur-Lese-Mount ausreicht:
losetup -r /dev/loop0 original-00
losetup -r /dev/loop1 original-11
mdadm --build /dev/md0 --level=linear --raid-devices=2 /dev/loop0 /dev/loop1
mount /dev/md0 /mnt
Warum willst du das machen? Wenn Ihr Dateisystem keine Dateien mit mehr als 4 GB verarbeiten kann, sollten Sie einfach zu einer vernünftigen wechseln.
truncate
anstatt, dd
weil es viel schneller ist (es führt kein eigentliches Schreiben in FS durch, sondern ordnet nur Inodes zu und markiert die Datei als lochhaltig).
Zum Mounten eines geteilten Disk-Image (oder Partitions-Image) sollten Sie affuse
die afftools verwenden, die derzeit hier verwaltet werden: https://github.com/sshock/AFFLIBv3
Wenn Sie also eine Datei haben, teilen Sie sie in mehrere Unterdateien auf test_img.000, test_img.001, test_img.002, test_img.003, test_img.004, test_img.005, test_img.006, test_img.007, test_img.008, test_img.009
dann kannst du sie virtuell mit verbinden affuse
# affuse test_img.000 /mnt/combine
# ls -lh /mnt/combine
total 0
-r--r--r-- 1 root root 2.0G 1969-12-31 16:00 test_img.000.raw
(Dies kombiniert alle Dateien, beginnend mit der Datei 000, dann 001, 002, ...)
Und dann das Image einhängen
mount -o ro,loop,offset=329043456 /mnt/combine/test_img.000.raw /mnt/test
Die Verwendung wird hier und einige Beispiele hier beschrieben . Eine Hilfeseite ist auch nach dem Kompilieren und Installieren oder hier verfügbar .
PS: Bei mir hat das affuse
nur funktioniert, wenn die geteilten Dateien eine Größe hatten, die ein Vielfaches von 512 Bytes war.
Sie können Ihre eigene Blockspeichergeräteerweiterung schreiben (denken Sie an eine sicherungsähnliche Erweiterung) und die Suche abhängig von der Adresse durchführen.
Hier finden Sie ein Beispiel für die Verwendung von fuse https://github.com/libfuse/python-fuse/blob/master/example/hello.py
Das, was ich bisher einer Lösung am nächsten kenne, ist die Erstellung einer VMware-VM. Sie starten eine Linux-Live-CD wie Rescatux oder Knoppix, Sie erstellen einen freigegebenen SMB-Ordner auf Ihrem Host-Computer, Sie mounten diese SMB-Freigabe auf Ihrer VM und dann dd
das Image in die virtuelle Festplatte. VMware speichert seine Festplatten-Images standardmäßig als aufgeteilte Dateien. Dies entspricht also am ehesten dem direkten Lesen eines in mehrere Dateien aufgeteilten Festplatten-Images.
Wenn Sie später von Ihrem Host-Computer aus auf die Dateien zugreifen möchten, können Sie versuchen, dem Image eine zweite virtuelle Festplatte hinzuzufügen und die Dateien dort zu kopieren. Anschließend richten Sie einen freigegebenen SMB-Ordner auf der VM ein und stellen von Ihrem Host aus eine Verbindung dazu her. Auf diese Weise können Sie beispielsweise das 4-GB-Dateilimit von FAT32 verletzen, wenn Sie einen iPod Classic (der nur fat32 unterstützt) oder die SD-Karte Ihres Smartphones verwenden (normalerweise müssen Sie ein benutzerdefiniertes ROM installieren, um dies zu erreichen) Um Ext3 oder NTFS auf dem externen Speicher verwenden zu können, benötigen Sie ein Telefon eines bekannten Herstellers wie Samsung oder Motorola. Wenn Sie also ein chinesisches Smartphone haben, sind Sie ratlos.
Es ist zwar keine effiziente Lösung, aber da ich auf meinem iPod Classic oder meinem Samsung-Smartphone mit Standard-ROM nur mit fat32 arbeiten kann, habe ich das gesamte Internet im Internet durchsucht Vergangenheit und bin immer noch nicht in der Lage, eine effiziente Lösung dafür zu finden. Ich muss es vielleicht sogar selbst schreiben.
PS: Ich habe vergessen zu erwähnen, dass dies unter Windows der einzige Weg ist, dies zu tun.
Unter BSD können Sie die Option union zum Mounten verwenden. Unter Linux können Sie unionFS ausprobieren.