Ich versuche, ein Projekt zu testen, das komprimierten Speicher benötigt, indem ich das ext4-Dateisystem verwende, da die von mir verwendete Anwendung auf ext4-Funktionen basiert.
Gibt es produktionssichere / stabile Lösungen für die transparente Komprimierung auf ext4?
Was ich ausprobiert habe:
Ext4 über ZFS-Volume mit aktivierter Komprimierung. Dies hatte tatsächlich einen negativen Einfluss. Ich habe versucht, ein ZFS-Volume mit aktivierter lz4-Komprimierung zu erstellen und ein ext4-Dateisystem unter / dev / zvol / ... zu erstellen, aber das zfs-Volume zeigte die doppelte tatsächliche Nutzung, und die Komprimierung schien keine Auswirkungen zu haben.
# du -hs /mnt/test
**1.1T** /mnt/test
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
pool 15.2T 2.70G 290K /pool
pool/test 15.2T 13.1T **2.14T** -
ZFS-Erstellungsbefehle
zpool create pool raidz2 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde2 /dev/sdf1 /dev/sdg1 /dev/sdh2 /dev/sdi1
zfs set recordsize=128k pool
zfs create -p -V15100GB pool/test
zfs set compression=lz4 pool/test
mkfs.ext4 -m1 -O 64bit,has_journal,extents,huge_file,flex_bg,uninit_bg,dir_nlink /dev/zvol/pool/test
Fusecompress: Scheint zu funktionieren, ist aber nicht 100% stabil. Alternativen suchen.
LessFS: Ist es möglich Lessfs in Verbindung mit ext4 zu verwenden? Ich habe es noch nicht ausprobiert, würde mich aber für User Insight interessieren.
Ein Hauptproblem: keine echte Transparenz
Ein Problem, das ich bei Fusecompress sah, waren Quoten. Wenn ich zum Beispiel die Komprimierung im Dateisystem aktiviere, möchte ich, dass mein System von der Komprimierung profitiert, nicht unbedingt der Endbenutzer. Wenn ich ein Kontingent von 1 GB für einen Benutzer mit einer Komprimierungsrate von 1,5 aktivieren würde, wäre er in der Lage, 1,5 GB Daten anstelle von 1 GB Daten hochzuladen, und das System würde von der Komprimierung profitieren. Dies schien sich auch auf df -h zu zeigen. Gibt es eine Lösung, um die Komprimierung für Quoten transparent zu machen?
quelle
Antworten:
Ich verwende ZFS unter Linux als Volume-Manager und als Mittel, um herkömmlichen Dateisystemen zusätzlichen Schutz und zusätzliche Funktionen zu bieten. Dies umfasst das Bringen von Snapshots, Replikation, Deduplizierung, Komprimierung und erweitertem Caching auf Blockebene in die XFS- oder ext4-Dateisysteme.
Weitere Erklärungen finden Sie unter: https://pthree.org/2012/12/21/zfs-administration-part-xiv-zvols/ .
In meinem häufigsten Anwendungsfall nutze ich die zvol-Funktion von ZFS, um ein spärliches Volume in einem vorhandenen zpool zu erstellen. Die Eigenschaften dieses ZVOL können genau wie die eines normalen ZFS-Dateisystems festgelegt werden. An dieser Stelle können Sie Eigenschaften wie Komprimierungstyp, Volume-Größe, Caching-Methode usw. festlegen.
Wenn Sie dieses zvol erstellen, wird Linux ein Block-Gerät angezeigt, das mit dem Dateisystem Ihrer Wahl formatiert werden kann. Verwenden Sie
fdisk
oderparted
, um Ihre Partition undmkfs
das fertige Volume zu erstellen .Hängen Sie dies ein und Sie haben im Wesentlichen ein Dateisystem, das von einem zvol mit all seinen Eigenschaften unterstützt wird.
Hier ist mein Workflow ...
Erstellen Sie einen Zpool, der aus vier Datenträgern besteht:
Sie möchten die
ashift=12
Direktive für den Typ von Datenträgern, den Sie verwenden. Der zpool-Name ist in diesem Fall "vol0".Festlegen der anfänglichen Zpool-Einstellungen:
Ich
autoexpand=on
stelle die Zpool-Ebene ein, falls ich jemals die Festplatten durch größere Laufwerke ersetzen oder den Pool in einem ZFS-Spiegelsetup erweitern möchte. Normalerweise verwende ich ZFS raidz1 / 2/3 nicht, weil die Leistung schlecht ist und der Zpool nicht erweitert werden kann.Festlegen der anfänglichen Eigenschaften
des ZFS- Dateisystems: Verwenden Sie den
lz4
Komprimierungsalgorithmus für neue ZFS-Installationen. Es ist in Ordnung, es die ganze Zeit eingeschaltet zu lassen.ZFS erstellen zvol:
Für ZFS unter Linux ist es sehr wichtig, dass Sie eine große Blockgröße verwenden.
-o volblocksize=128k
ist hier unbedingt erforderlich. Die-s
Option erstellt ein spärliches zvol und belegt erst dann Speicherplatz im Pool, wenn er benötigt wird. Sie können hier ein Overcommit durchführen, wenn Sie Ihre Daten gut kennen. In diesem Fall habe ich ungefähr 444 GB nutzbaren Speicherplatz im Pool, aber ich präsentiere XFS ein 800 GB-Volume.Partition zvol device:
( sollte / dev / zd0 für das erste zvol sein; / dev / zd16, / dev / zd32 usw. für nachfolgende zvols )
Erstellen Sie das Dateisystem:
mkfs.xfs oder ext4 und hängen Sie es in die neu erstellte Partition / dev / zd0p1 ein.
Nimm die UUID mit
blkid
und ändere sie/etc/fstab
.Hängen Sie das neue Dateisystem ein.
Ergebnisse...
Auflistung des ZFS-Dateisystems.
ZFS-Zpool-Liste.
ZFS-ZVOL-Eigenschaften ( beachten Sie
referenced
,compressratio
undvolsize
).quelle
/dev/sdb
versus/dev/sdb1
.Sie müssen auch Discard im ext4-Dateisystem aktivieren. Ohne Discard gewinnt zfs den Speicherplatz nicht zurück, wenn Dateien entfernt werden. Dies kann zu großen Speicherplatzdiskrepanzen zwischen den Berichten des ext4-Dateisystems und den Berichten des zfs-Volumes führen.
quelle
fstrim
Befehl regelmäßig auszuführen .