Mounten mehrerer IMG-Dateien als Single-Loop-Gerät

18

Gibt es eine Möglichkeit, eine in Teile zerlegte Disk-Img-Datei als Single-Loop-Gerät zu mounten?

MageProspero
quelle
1
Wie ist es kaputt? Um welches Format handelt es sich? Wenn es sich um ein spezielles Format handelt, kann es eine Art Zündungsmagie geben, aber ich vermute, dass die Antwort darin besteht, sie zusammen zu katzen!
Caleb
Ich bin durch das Format des Gerätes auf Dateien beschränkt, die kleiner als die 4 Gigs sind. Ich habe root-Zugriff auf das Gerät. Gibt es etwas, das ich mit LVM
MageProspero

Antworten:

16

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.

stribika
quelle
Möglicherweise können Sie dies auch mit Device Mapper tun, dies ist jedoch einfacher.
Wodin
Es tut mir leid, dass ich so lange gebraucht habe, um zu akzeptieren, sehr gute Antwort. Ich würde dies unter normalen Umständen nicht tun, es ist eher eine Frage im Abenteuermodus.
MageProspero
2
Wahrscheinlich möchten Sie verwenden, truncateanstatt, ddweil es viel schneller ist (es führt kein eigentliches Schreiben in FS durch, sondern ordnet nur Inodes zu und markiert die Datei als lochhaltig).
Maciej Piechotka
Nett. Ich wusste das nicht.
Stribika
Wenn Sie Cloud-basierte Backup- oder Synchronisierungslösungen mit hoher Kapazität wie CrashPlan oder kostenpflichtiges Google Drive verwenden, ist es erfahrungsgemäß eine sehr gute Idee, kleine aufgeteilte Dateien anstelle einer einzelnen großen Datei zu verwenden. Im Falle eines fehlgeschlagenen Dateidownloads müssen Sie nur 1 GB anstelle der gesamten 100-GB-Datei erneut herunterladen.
RAKK
2

Zum Mounten eines geteilten Disk-Image (oder Partitions-Image) sollten Sie affusedie 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 affusenur funktioniert, wenn die geteilten Dateien eine Größe hatten, die ein Vielfaches von 512 Bytes war.

erik
quelle
3
Ich habe gerade diese Methode ausprobiert. Dies hat eine wichtige Einschränkung: Sie können Ihr Image nur als schreibgeschützt einbinden.
RAKK
Funktioniert hervorragend, solange Sie nur Hunderte und nicht Tausende von Datei-Chunks haben. Besser wäre es, mit mdadm eine lineare RAID-Partition zu erstellen: unix.stackexchange.com/a/98779/22709
Jay Taylor
1

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

test30
quelle
danke, ich sollte wirklich meinen Kopf um die Meta-
Rundheit
0

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 dddas 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.

RAKK
quelle
Es ist einige Zeit her, seit ich dieses Problem besuchte. Ich habe es immernoch. Auch ich habe es genau aus dem gleichen Grund wie Sie. Ich frage mich, ob Sie einen Prozess aufrufen können, der über ein eigenes benutzerdefiniertes Dateisystem verfügt. Ehrlich gesagt würde ich dies gerne versuchen. Ich weiß, ich kann es in Node tun. Ich hatte Erfolg damit, den Dolmetscher verwurzelt zu erziehen. Ich weiß nicht, ob das Ihr Problem löst, wenn ich es getan habe. Auf meiner Hardware Samsung Galaxien ist dies in Ordnung. Sagen Sie mir, Sie möchten gemeinsam an etwas für dieses Problem arbeiten.
MageProspero
-1

Unter BSD können Sie die Option union zum Mounten verwenden. Unter Linux können Sie unionFS ausprobieren.

julienlf
quelle
2
Dies sieht nicht aus der Ferne relevant. Hast du die Frage falsch verstanden?
Gilles 'SO - hör auf böse zu sein'