ubuntuusers.de

SquashFS

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

squashfs ist ein Linux-Dateisystem, welches seit Ende März 2009 direkt vom Linux-Kernel unterstützt wird. squashfs ist ein komprimiertes Dateisystem, welches nur lesenden Zugriff bietet und sich komplett in einer Datei befindet. Eine Datei mit einem SquashFS-Dateisystem ist also, vereinfacht gesagt, wie ein komprimiertes Tar-Archiv, nur als Dateisystem. SquashFS ist wie alle anderen Dateisysteme auch über mount einhängbar und unterstützt Dateiattribute etc. wie z.B. ext auch. SquashFS unterstützt verschiedene Kompressionsmethoden und führt standardmäßig eine Deduplizierung von Dateien durch, die in das Dateisystem gepackt werden.

Ein eingehängtes SquashFS-Dateisystem wird nicht entpackt, sondern bleibt stets komprimiert. Beim Laden / Öffnen von Dateien aus dem Dateisystem werden die jeweils benötigten Dateien zur Laufzeit, also beim Zugriff darauf, vom Kernelmodul für SquashFS entpackt und dann ins RAM geschrieben.

SquashFS kann z.B. dann praktisch sein, wenn man eine größere Menge archivierter Dateien hat, auf die man aber trotzdem noch lesend Zugreifen möchte. Hier hat SquashFS gegenüber gepackten Archiven den Vorteil, dass auf die Dateien über das SquashFS-Dateisystem zugegriffen werden kann, man das Archiv aber jedes Mal erst entpacken müsste. SquashFS kommt auch bei snap zum Einsatz. snap-Pakete sind auch ein SquashFS-Dateisystem. Des Weiteren kommt SquashFS auch auf Embeddedgeräten mit Linux als Betriebssystem zum Einsatz, wenn es darum geht, Speicherplatz für Programme und Daten zu sparen, indem man diese in ein SquashFS-Dateisystem verpackt. Außerdem kommt SquashFS auch auf Live- / Installationsmedien von Linux-Distributionen zum Einsatz, so auch bei Ubuntu.

Installation

Das Kernelmodul zum Lesen aus einem SquashFS Dateisystem ist in dem von Ubuntu verwendeten Kernel enthalten. Die Hilfsprogramme zum Anlegen, Entpacken etc. des Dateisystems sind im Paket

  • squashfs-tools

Befehl zum Installieren der Pakete:

sudo apt-get install squashfs-tools 

Oder mit apturl installieren, Link: apt://squashfs-tools

enthalten[1]. Dieses ist bei Ubuntu normalerweise bereits installiert.

Nutzung

Ein SquashFS Dateisystem kann wie jedes andere Dateisystem auch über den Befehl mount eingebunden werden. Beim Parameter -t für den Typ des Dateisystems muss squashfs angegeben werden. Beispiel:

sudo mount -t squashfs /home/otto/data.sqfs /media/otto/data 

Hier würde das in der Datei data.sqfs SquashFS Dateisystem nach /media/otto/data eingehängt. Standardmäßig werden dabei die Optionen ro,relatime,errors=continue gesetzt. Nach dem einhängen kann dann auf die Dateien im Dateisystem lesend zugegriffen werden.

mksquashfs - Dateisystem erstellen

Zum Erstellen eines SquashFS-Dateisystems dient der Befehl mksquashfs. Die allgemeine Syntax lautet:

mksquashfs EINGABEDATEIEN AUSGABEDATEI [OPTIONEN] 

EINGABEDATEIEN können ein oder mehrere Dateien und / oder Verzeichnisse sein. Die Verzeichnisstruktur bleibt dabei erhalten, Dateiattribute bleiben ebenfalls erhalten. AUSGABEDATEI ist die Datei, die das SquashFS-Dateisystem enthält. Man kann für die Datei die Endung .sqfs benutzen, dies ist aber keine Pflicht. Wichtig ist, dass mögliche Optionen nach EINGABEDATEIEN und AUSGABEDATEI angegeben werden, sonst wird der Befehl nicht ausgeführt.

Beispiel:

mksquashfs /home/otto/code codefs.sqfs 

Hier würde die Dateien und Unterverzeichnisse von /home/otto/code in ein SquashFS-Dateisystem in der Datei codefs.sqfs gepackt. Die Ausgabe des Befehls sieht z.B. so aus:

Parallel mksquashfs: Using 16 processors
Creating 4.0 filesystem on codefs.sqfs, block size 131072.
[======================================================================================================================================================================================/] 31962/31962 100%

Exportable Squashfs 4.0 filesystem, gzip compressed, data block size 131072
	compressed data, compressed metadata, compressed fragments,
	compressed xattrs, compressed ids
	duplicates are removed
Filesystem size 118736.15 Kbytes (115.95 Mbytes)
	27.47% of uncompressed filesystem size (432248.41 Kbytes)
Inode table size 356267 bytes (347.92 Kbytes)
	28.29% of uncompressed inode table size (1259559 bytes)
Directory table size 330007 bytes (322.27 Kbytes)
	33.94% of uncompressed directory table size (972373 bytes)
Number of duplicate files found 8401
Number of inodes 39148
Number of files 31352
Number of fragments 1608
Number of symbolic links 28
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 7768
Number of ids (unique uids + gids) 1
Number of uids 1
	otto (1000)
Number of gids 1
	otto (1000)

mksquashfs kennt, wie andere Dateisysteme auch, eine Vielzahl von Optionen, inklusive solcher zum Einstellen der Blockgröße oder Ausschließen bestimmter Teile des Dateisystems von der Komprimierung, die alle in der Man-Page oder beim Aufruf von mksquasfs -herklärt sind.

Möchte man einen anderen Kompressionsalgorithmus als zlib 🇬🇧 verwenden, muss man die Option -comp ALGORITHMUS angeben. Mögliche Kompressionsalgorithmen sind:

⚓︎

Kompressionalgorithmen für mksquashfs
Abkürzung Algorithmus
gzip zlib Algorithmus, der auch von z.B. von gzip verwendet wird. Defaultwert für -comp
lzma Lempel-Ziv-Markow-Algorithmus
lzo Lempel-Ziv-Oberhumer Algorithmus
lz4 LZ4 Algorithmus
xz xz Algorithmus
zstd Zstandard Algorithmus

Solange man nicht spezieller Anforderungen / Anwendungsfälle hat kann man den Standardalgorithmus zlib verwenden. Einige Algorithmen kennen auch noch zusätzliche Parameter zum Kompressionsgrad. Diese sind ebenfalls in der Man-Page von mksquashfs erklärt.

unsquashfs - Dateisystem entpacken

Zum Entpacken eines SquashFS Dateisystems dient der Befehl unsquashfs. Die allgemeine Syntax lauter:

unsquashfs [OPTIONEN] SQUASHFS_DATEI 

Standardmäßig wird das Dateisystem dann in den Ordern squashfs-root entpackt, der auch direkt anlegt wird. Ist der Ordner schon vorhanden, erhält man ein Fehlermeldung und die Ausführung des Befehls wird abgebrochen.

Möchte man das Ausgabeverzeichnis, in das entpackt wird, selber bestimmt, fügt man die Option -d AUSGABEVERZEICHNIS hinzu.

Informationen zu einem einem SquashFS-Dateisystem erhält man mit folgendem Befehl

unsquashfs -s DATEI.sqfs 

Die Ausgabe sieht dann z.B. so aus:

Found a valid SQUASHFS 4:0 superblock on DATEI.sqfs.
Creation or last append time Thu Dec 15 19:59:32 2022
Filesystem size 239426092 bytes (233814.54 Kbytes / 228.33 Mbytes)
Compression zstd
Block size 131072
Filesystem is exportable via NFS
Inodes are compressed
Data is compressed
Uids/Gids (Id table) are compressed
Fragments are compressed
Always-use-fragments option is not specified
Xattrs are compressed
Duplicates are removed
Number of fragments 1608
Number of inodes 39148
Number of ids 1
Number of xattr ids 0

Möchte man sich den Inhalt einer Datei mit einem SquashFS Dateisystem anzeigen lassen, ohne das Dateisystem zu einzuhängen oder zu entpacken, kann man den Befehl

unsquashfs -l SQAUASHFS_DATEI.sqfs 

aufrufen. Dann werden auf die Standardausgabe alle Datei inklusive Pfad relativ zum Wurzelverzeichnis des SquashFS-Dateisystems ausgegeben. Nutzt man die Option -ll, erhält man eine Ausgabe analog zu ls -la:, d.h. es werden auch Dateirechte, Eigentümer, Gruppe, Größe usw. ausgegeben.

unsquashfs kennt auch noch eine Vielzahl von weiteren Optionen, die in der Man-Page oder beim Aufruf von unsquasfs -h erklärt sind.

sqfscat

Mit dem Befehl sqfscat kann man sich eine Datei aus einem SquashFS-Dateisystem ausgeben lassen, ohne das Dateisystem einzuhängen oder zu entpacken. Beispiel:

sqfscat codefs.sqfs releases.csv 

Versucht man mittels sqfscat eine Datei aus einem SqaushFS Dateisystem auszugeben, die es nicht gibt, wie z.B:

sqfscat codefs.sqfs gibtesnicht.txt 

erhält man die Fehlermeldung:

cat: no matches for /gibtesnicht.txt

sqfstar

sqfstar ist ein Hilfsprogramm, mit dessen Hilfe man ein tar-Archiv in ein SquashFS-Dateisystem packen kann. Der Aufruf ist wie folgt:

cat ARCHIV.tar | sqfstar AUSGABEDATEI [OPTIONEN] 

Das tar-Archiv wird also mittels cat auf die Standardausgabe ausgegeben, sqfstar liest von der Standardeingabe und generiert das SquashFS-Dateisystem. Die Optionen für sqfstar sind fast identisch mit denen von mksquashfs und können über sqfstar -h ausgegeben werden.

squashfs und du

Wenn man das Programm du zur Bestimmung des belegten Platzes auf ein eingehängtes SqaushFS-Dateisystem anwendet, dann gibt du nicht dir Größe der SquashFS-Datei aus, sondern du sieht die Größe aller Dateien darin, als wenn diese komplett Entpackt vorliegen würden. Wie in der Einleitung bereits erklärt bleiben die Daten auf Laufwerk stets komprimiert.

Beispiel: Die Größe des Firefox snap - welches ja auch ein SqaushFS-Dateisystem ist - in der Version 2154 kann wie folgt bestimmt werden:

du -h /var/lib/snapd/snaps/firefox_2154.snap  

238M	firefox_2154.snap

Bestimmt man dagegen die Größe aller Dateien unterhalb des Einhängepunkts des snaps, erhält man folgendes Ergebnis:

du -hs /snap/firefox/2154  

#

626M	/snap/firefox/2154

Intern

  • Dateisystem Übersichtsartikel rund ums Thema Dateisysteme

Extern

Diese Revision wurde am 9. Mai 2023 07:47 von tomtomtom erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: System, Dateisystem