Mounten eines Squashfs-Dateisystems in Lese- und Schreibzugriff


45

Ich habe eine Clonezilla-Installation auf einem USB-Stick und möchte einige Änderungen am Betriebssystem vornehmen. Insbesondere möchte ich ein ausführbares Skript einfügen /usr/sbin, um die Ausführung meines eigenen Sicherungsbefehls zu vereinfachen, damit Sicherungen weniger schmerzhaft sind.

Das Hauptdateisystem befindet sich /live/filesystem.squashfsauf der USB-FAT-32-Partition.

Wie kann ich diesen Lese- / Schreibzugriff auf meinem Linux-Computer aktivieren, um Dateien hinzufügen / entfernen / ändern zu können? Ich verwende ein Ubuntu 12.04-Derivat.

Antworten:


38

Kopieren Sie als root filesystem.squashfsin ein leeres Verzeichnis, zB:

cp /mnt/clonezilla/live/filesystem.squashfs /path/to/workdir
cd /path/to/workdir

Entpacke die Datei und verschiebe sie an einen anderen Ort (so dass du sie immer noch als Backup hast):

unsquashfs filesystem.squashfs
mv filesystem.squashfs /path/to/backup/

Gehen Sie hinein squashfs-root, fügen Sie hinzu, ändern Sie nach Ihrem Geschmack und erstellen Sie dann neu filesystem.squashfs:

cd /path/to/workdir
mksquashfs squashfs-root filesystem.squashfs -b 1024k -comp xz -Xbcj x86 -e boot

Kopieren Sie das neu erstellte filesystem.squashfsüber das vorhandene auf Ihr USB-Laufwerk, zB:

cp filesystem.squashfs /mnt/clonezilla/live/

Starten Sie dann neu und verwenden Sie Ihr LIVE USB.

Hinweis: Die obigen Befehle sind Teil von squashfs-tools.


Das funktioniert prima, aber leider bekomme ich eine Nachricht für alle Root-Verzeichnisse, in der ich darauf hingewiesen werde Source directory entry bin already used! - trying bin_1. Sicher genug, in meinem Ausgabedateisystem habe ich ein /binund ein /bin_1, anstatt den Ordner zusammenzuführen. Irgendwelche Ideen? Wenn ich mit -noappend,dem Dateisystem laufe, funktioniert das einfach nicht.
— Naftuli Kay

1
@TKKocheran - Ich erhalte hier keinen dieser Fehler, nachdem ich ein benutzerdefiniertes Skript hinzugefügt /usr/binund es erneut gepackt habe mksquashfs. USB-Stick bootet gut und ich kann mein Skript aus der Live-Sitzung verwenden. Vergewissern Sie sich, dass sich das alte nicht mehr filesystem.squashfsin demselben Verzeichnis wie das geänderte befindet, squashfs-rootbevor Sie es ausführen mksquashfs.
— don_crissti

@Naftuli: Sie scheinen den Schritt "mv ... backup /" übersprungen zu haben.
— Joachim Wagner

Funktioniert das nicht unter (gefälschten) root? Nur aus dem Extrahieren bekomme ich den Fehlercreate_inode: could not create character device squashfs-root/dev/audio, because you're not superuser!
— Wilf

@Wilf - Sie können keine Gerätedateien ( squashfs-root/dev/*) als normaler Benutzer erstellen , Sie benötigen Root-Rechte.
— don_crissti

5

Wenn Ihr System ein uion-Dateisystem wie aufs oder overlayfs unterstützt , müssen Sie Ihre ursprüngliche squashfs-Datei nicht extrahieren.

Zum Beispiel wird das Overlayfs verwendet (eine Kernel-Option, um es zu aktivieren): Sie können Ihre squashfs.file zuerst in / fm oder an einer anderen Stelle mounten . Bereiten Sie ein beschreibbares Dateisystem mit 2 Verzeichnissen vor, sagen Sie / to und / temp . Bereiten Sie ein anderes beschreibbares Verzeichnis / fin für die zusammengeführten Ergebnisse vor. Mounten Sie sie zusammen als Overlay auf Ihrem System ---

mount -t overlay -o lowerdir=/fm,upperdir=/to,workdir=/temp overlay /fin

Jetzt können Sie Dateien in / fin hinzufügen / ändern . Sobald alles erledigt ist, können Sie mksquashfs / fin zu einer neuen squashfs-Datei machen,

mksquashfs /fin newfile; umount /fin

Löschen Sie dann alle anderen verwendeten Verzeichnisse, und heben Sie die Bereitstellung auf.

Die Squashfs und einige Unionfs werden üblicherweise für eine Live-CD verwendet .


Wenn Sie eine Datei von der gemounteten / fin löschen, wird sie dann aus den endgültigen Squashfs entfernt, die Sie erstellen?
— localhost

2

Hier habe ich eine andere Antwort gefunden:

bash# mount dir.sqsh /mnt/dir -t squashfs -o loop

7
Mit dem obigen Befehl wird es schreibgeschützt bereitgestellt, was besser ist, als es überhaupt nicht bereitzustellen. Leider keine vollständige Antwort auf die vorliegende Frage.
— Harperville

Ich bin damit einverstanden, dass es keine vollständige Antwort ist. Zusammen mit unix.stackexchange.com/a/377269/27328 können Sie eine Antwort erstellen, bei der Sie Ihr Dateisystem nicht entpacken müssen, um es zu ändern - weniger Speicherplatz, weniger Zeit.
— User

Einfachste Methode, arbeitete an CentOS 7
— Seff

0

Die Verwendung von Overlays wie gezeigt ist der beste Weg, um Pseudo "squashfs rw" zu erhalten. Es muss jedoch auf> 4.x Kernel (oder Ubuntu> 14.x Trusty) ausgeführt werden.

Eine alternative Lösung, wenn man auf einer älteren Live-CD ohne Overlayfs / aufs / unionfs sitzt, besteht darin, die Funktionen von squashfs'own zu nutzen

wichtig:

 without unsquashfs, so this can be done on low storage system

Beispiel:

Ändern Sie das "usr" -Verzeichnis von squashfs

1    mount squashfs_file /mnt

2    cp -a /mnt/usr $HOME  ##modify whatever $HOME/usr as needed

3    mksquashfs /mnt new_squashfs_file -wildcards -e usr

4    mksquashfs $HOME/usr new_squashfs_file -keep-as-directory

5    umount /mnt  # cleanup

Zeile 3 erstellt temporär eine squashfs-Datei ohne olddir_usr

Zeile 4 fügt modified-usr-dir in new_squashfsfile ein

siehe hier Anhängen von Squashfs Anhängen an ein Unterverzeichnis in der Squashfs-Datei

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.