# SquashFS

SquashFS (.sfs oder .sqfs) ist ein von Phillip Lougher entwickeltes, freies (GPL), komprimiertes Dateisystem für GNU/Linux-Betriebssysteme, welches nur lesbar ist. SquashFS komprimiert Dateien, Inodes und Verzeichnisse und unterstützt zur besseren Komprimierung Blockgrößen bis zu 1 Mebibyte. Der Zugriff auf SquashFS-Daten erfolgt über ein Kernel-Modul als virtuelles Dateisystem.
SquashFS wird unter anderem in Live-Systemen von Arch Linux, Debian, Ubuntu, Clonezilla, SystemRescue und Kali Linux eingesetzt, und im Bereich von Embedded Linux wie bei OpenWrt. Weiters wird es beim Linux Terminal Server Project eingesetzt.

## Technische Einzelheiten

SquashFS ist als universelles, nur lesbares Dateisystem implementiert, das alle zu speichernden Dateien in einem Dateicontainer, ähnlich wie tar.gz-Archiv, speichert. Beim Zugriff werden Daten zur Laufzeit dekomprimiert und SquashFS erlaubt so den Einsatz unter anderem in Live-Systemen und in Anwendungen, in denen nur eine geringe Speicherkapazität wie z. B. in eingebetteten Systemen vorhanden ist.
Zur Datenkompression wird standardmäßig Deflate (zlib) verwendet, wobei auch Unterstützung für den Lempel-Ziv-Markow-Algorithmus (LZMA), LZ4 (seit Linux 3.19) und Zstandard (seit Linux 4.14) vorhanden ist.
* Squashfs speichert die komplette Benutzer- und Gruppenkennung (UID/GID) und die Zeit der Dateierstellung.
* Theoretisch werden Dateien bis zu 16 Exbibyte ($2^{64}$ Bytes) unterstützt.
* Inode- und Verzeichnisdaten sind stark komprimiert. Jeder Inode hat dabei durchschnittlich eine Länge von 8 Byte. Die exakte Länge variiert mit dem Dateityp, z. B. Verzeichnis, symbolische Verknüpfung usw.
* SquashFS kann mit Blockgrößen bis zu 1 MiB benutzt werden (Standardwert 128 KiB). Je größer die Blockgröße gewählt wird, desto höher sind die Kompressionsraten.
* Dateien, die mehrfach vorhanden sind, werden nur einmal gespeichert.
* Es werden Big- und Little-Endian-Architekturen unterstützt.
Zu SquashFS gibt es einen Satz Werkzeuge, die squashfs-tools, die unter anderen mksquashfs (zur Erzeugung eines Dateisystems) und unsquashfs enthalten. Mit den Werkzeugen kann aus einem bestehenden Verzeichnisbaum, welcher beispielsweise auf einer regulären Festplatte mit einem ext4-Dateisystem liegt, ein SquashFS-Container gebildet werden oder umgekehrt, die Dateien aus einem erstellten SquashFS-Container extrahiert werden.
SquashFS wird häufig zusammen mit UnionFS verwendet, um damit mehrere logischen Dateisysteme zur Laufzeit zu vereinigen: Die ursprünglichen Dateien, welche nur gelesen werden können, kommen von SquashFS, während Änderung daran im UnionFS abgelegt werden. Damit kann in Kombination auch ein Schreibzugriff und eine permanente Speicherung von Dateien ermöglicht werden.

## Geschichte

Am 23. Oktober 2002 wurde die erste Version (1.0) veröffentlicht. Mit Version 3.3 wurde die effiziente Behandlung von Sparse-Dateien hinzugefügt. Nachdem sich die SquashFS-Entwickler bereits mehrfach um die Aufnahme des Dateisystems in den Linux-Kernel bemüht hatten, hielt Version 4 des SquashFS-Codes schließlich in die am 23. März 2009 veröffentlichte Version 2.6.29 des Kernels Einzug, nachdem sich Linus Torvalds aufgrund der verbreiteten Nutzung dafür aussprach.