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.

Naftuli Kay
quelle

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.

don_crissti
quelle
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 .

Zhi-Ming Chen
quelle
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
Benutzer
quelle
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

user3477652
quelle