staging.inyokaproject.org

wie gesplittete Datei(en) als ein loop-dev einhängen

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

tony88

Anmeldungsdatum:
28. März 2009

Beiträge: 85

Da ist eine Datei (4 GB), darin ist eine Dateiensystem.

Diese Datei wurde mit split in 4x 1GB Stücke zerteilt.

Wie können diese Stücke, ohne diese wieder zusammen zu kopieren, als eine Datei benutzt werden?

Das müsste mit dmsetup funktionieren, aber wie?

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7529

Vier Loop-Devices, dann mit dmsetup linear zusammenfassen (Loopdevice da dmsetup nur mit Blockgeräten, aber nicht mit Dateien arbeiten kann). Von jedem Loopgerät die Größe in Sektoren abfragen (blockdev --getsz). 1 GiB wäre genau 2097152...

Dann musst du eben dmsetup das linear Mapping mit den richtigen Offsets mitgeben.

dmsetup create name << EOF
0 2097152 linear /dev/loop0 0
2097152 2097152 linear /dev/loop1 0
4194304 2097152 linear /dev/loop2 0
6291456 2097152 linear /dev/loop3 0
EOF

logisches offset, größe, modus, gerät, geräte-offset

so ungefähr in der Art

Ähnliche Beispiele hier https://docs.kernel.org/admin-guide/device-mapper/linear.html

Da hats ein Script um 2 Geräte zusammenzufassen, das erweiterst du einfach auf 4 (oder auch nicht so einfach - der erste Parameter Summe aller bisherigen size) und rufst dann auf per script /dev/loop{1,2,3,4}

Ich empfehle dir stark, die Loop-Geräte mit --read-only anzulegen und auch das Dateisystem nur mit mount -o loop,ro (je nach Dateisystem noload, norecovery, etc.) zu mounten.

Denn wenn das dm-linear falsch zusammengebaut wird (falsche Offset) und das gemountete Dateisystem dann irgendwas schreibt. Das wird korrupt und dann kannst du deine Images dann auch gleich wegwerfen...

Alternativ eine Vollkopie der Imagedateien anlegen aber dann könntest du das ja auch gleich mit cat machen ...

tony88

(Themenstarter)

Anmeldungsdatum:
28. März 2009

Beiträge: 85

Hey frostschutz, danke - das ist eine super Lösung.

Das soll auch im nur lesen Modus benutzt werden....

Wie könnte eine Start/Stop Script dazu aussehen das erkennen kann wieviele .partX-Dateien es gibt?

Diese an die loop-devs hängt, das mit blockdev --getstz ausführt und an dmsetup übergibt, aber auch wieder alles entfernen kann?

trollsportverein

Avatar von trollsportverein

Anmeldungsdatum:
21. Oktober 2010

Beiträge: 2627

Ich finde das viel zu kompliziert. Viel einfacher geht es doch mit tmpfs und cat und dann die ISO-Datei aus dem tmpfs heraus mounten. Beispiel, mantic-mini-iso-amd64.iso:

Download:

wget https://cdimage.ubuntu.com/ubuntu-mini-iso/daily-live/current/mantic-mini-iso-amd64.iso

Zerschnibbeln:

split -n2 -d mantic-mini-iso-amd64.iso mantic-mini-iso-amd64.iso.part

Die 2 Schnippel mit cat im tmpfs zusammensetzen, /tmp ist bei mir ein tmpfs:

cat mantic-mini-iso-amd64.iso.part* > /tmp/mantic-mini-iso-amd64.iso

Dann die ISO-Datei mounten, fertig.

In meinen KDE hatte ich mir da mal schon vor langer Zeit ein KDE-Servicemenü zum ISO-Datei mounten für den KDE-Dateimanager Dolphin gemacht:

[Desktop Entry]
Type=Service
ServiceTypes=KonqPopupMenu/Plugin
MimeType=application/x-cd-image;application/x-iso;application/x-mdf;application/x-nrg;application/x-iso9660-image;application/vnd.squashfs;
Icon=application-x-cd-image
Actions=mountiso;unmountiso;
X-KDE-Submenu=Mount/unmount CD image
TryExec=fuseiso
Terminal=false

[Desktop Action mountiso]
Name=Mount and open CD image
Icon=emblem-mounted
Exec=fuseiso -p "%F" "$HOME/media/`basename "%F"`"; kde-open5 "$HOME/media/`basename "%F"`" && notify-send -i emblem-mounted "Ready! :-)" "ISO mounted"

[Desktop Action unmountiso]
Name=Unmount CD image
Icon=emblem-unmounted
Exec=fusermount -u "$HOME/media/`basename "%F"`" && notify-send -i emblem-unmounted "Ready! :-)" "ISO umounted"

Das wohnt in $HOME/.local/share/kservices5/ServiceMenus/fuseiso_mount.desktop

Möchte man die gemountete ISO-Datei auch aus dem media Verzeichnis aushängen können, in das die ISO-Datei eingehängt wurde, dann hier noch ein KDE-Servicemenü:

[Desktop Entry]
Type=Service
ServiceTypes=KonqPopupMenu/Plugin
MimeType=inode/directory;
Icon=application-x-cd-image
Actions=unmountisodir;
TryExec=fuseiso

[Desktop Action unmountisodir]
Name=Unmount CD image mounted here
Icon=emblem-unmounted
Exec=fusermount -u "%F"

Das wohnt in $HOME/.local/share/kservices5/ServiceMenus/fuseiso_directory.desktop

tony88

(Themenstarter)

Anmeldungsdatum:
28. März 2009

Beiträge: 85

Bin auf der Suche nach einer Lösung die ohne zusammenkopieren funktioniert.

dmsetup mit loopdevices und der linearen zusammenfassung ist schon sehr gut dafür.

(Die 4x 1GB waren nur ein Beispiel, es gibt Situationen wo es auch viel mehr Dateien sind.)

Es wird nur noch etwas benötigt das erkennt wieviele part-Dateien es gibt....

Antworten |