Lösung 1:
Ich verwende ZFS unter Linux als Volume-Manager und als Mittel, um traditionellen Dateisystemen zusätzlichen Schutz und Funktionalität zu bieten. Dazu gehören Snapshots auf Blockebene, Replikation, Deduplizierung, Komprimierung und erweitertes Caching für die XFS- oder ext4-Dateisysteme.
Siehe:https://pthree.org/2012/12/21/zfs-administration-part-xiv-zvols/ für eine weitere Erklärung.
In meinem häufigsten Anwendungsfall nutze ich die ZFS-Funktion zvol, um ein Sparse-Volume auf einem vorhandenen zpool zu erstellen. Die Eigenschaften dieses zvol können genau wie die eines normalen ZFS-Dateisystems eingestellt werden. An dieser Stelle können Sie Eigenschaften wie Komprimierungstyp, Volume-Größe, Caching-Methode usw. festlegen
Das Erstellen dieses zvol präsentiert Linux ein Blockgerät, das mit dem Dateisystem Ihrer Wahl formatiert werden kann. Verwenden Sie fdisk
oder parted
zum Erstellen Ihrer Partition und mkfs
der fertige Band.
Mounten Sie dies und Sie haben im Wesentlichen ein Dateisystem, das von einem Zvol unterstützt wird und alle seine Eigenschaften enthält.
Hier ist mein Arbeitsablauf...
Erstellen Sie einen Zpool, der aus vier Festplatten besteht:
Sie brauchen die ashift=12
Direktive für den verwendeten Festplattentyp. Der zpool-Name ist in diesem Fall "vol0".
zpool create -o ashift=12 -f vol0 mirrorscsi-AccOW140403AS1322043scsi-AccOW140403AS1322042 mirrorscsi-AccOW140403AS1322013scsi-AccOW140403AS1322044
Zpool-Anfangseinstellungen festlegen:
Ich habe autoexpand=on
eingestellt auf zpool-Ebene, falls ich jemals die Festplatten durch größere Laufwerke ersetze oder den Pool in einem ZFS-Mirror erweitere Konfiguration. Normalerweise verwende ich ZFS raidz1/2/3 nicht wegen der schlechten Leistung und der Unfähigkeit, den zpool zu erweitern.
zpool set autoexpand=on vol0
Anfangseigenschaften des zfs-Dateisystems festlegen:
Bitte verwenden Sie den lz4
Komprimierungsalgorithmus für neue ZFS-Installationen. Es ist in Ordnung, es die ganze Zeit eingeschaltet zu lassen.
zfs set compression=lz4 vol0
zfs set atime=off vol0
ZFS-zvol erstellen:
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 Sparse-Zvol und verbraucht keinen Pool-Speicherplatz, bis er benötigt wird. Sie können hier überschreiben, 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.
zfs create -o volblocksize=128K -s -V 800G vol0/pprovol
Zvol-Gerät partitionieren:
(sollte /dev/zd0 für das erste zvol sein; /dev/zd16, /dev/zd32 usw. für nachfolgende zvols )
fdisk /dev/zd0 # (create new aligned partition with the "c" and "u" parameters)
Erstellen und mounten Sie das Dateisystem:
mkfs.xfs oder ext4 auf der neu erstellten Partition /dev/zd0p1.
mkfs.xfs -f -l size=256m,version=2 -s size=4096 /dev/zd0p1
Holen Sie sich die UUID mit blkid
und ändern Sie /etc/fstab
.
UUID=455cae52-89e0-4fb3-a896-8f597a1ea402 /ppro xfs noatime,logbufs=8,logbsize=256k 1 2
Hängen Sie das neue Dateisystem ein.
mount /ppro/
Ergebnisse...
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sde2 20G 8.9G 9.9G 48% /
tmpfs 32G 0 32G 0% /dev/shm
/dev/sde1 485M 63M 397M 14% /boot
/dev/sde7 2.0G 68M 1.9G 4% /tmp
/dev/sde3 12G 2.6G 8.7G 24% /usr
/dev/sde6 6.0G 907M 4.8G 16% /var
/dev/zd0p1 800G 398G 403G 50% /ppro <-- Compressed ZFS-backed XFS filesystem.
vol0 110G 256K 110G 1% /vol0
ZFS-Dateisystemliste.
[[email protected] ~]# zfs list
NAME USED AVAIL REFER MOUNTPOINT
vol0 328G 109G 272K /vol0
vol0/pprovol 326G 109G 186G - <-- The actual zvol providing the backing for XFS.
vol1 183G 817G 136K /vol1
vol1/images 183G 817G 183G /images
ZFS-Zpool-Liste.
[[email protected] ~]# zpool list -v
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
vol0 444G 328G 116G 73% 1.00x ONLINE -
mirror 222G 164G 58.1G -
scsi-AccOW140403AS1322043 - - - -
scsi-AccOW140403AS1322042 - - - -
mirror 222G 164G 58.1G -
scsi-AccOW140403AS1322013 - - - -
scsi-AccOW140403AS1322044 - - - -
ZFS-Zvol-Eigenschaften (beachten Sie referenced
, compressratio
und volsize
).
[[email protected] ~]# zfs get all vol0/pprovol
NAME PROPERTY VALUE SOURCE
vol0/pprovol type volume -
vol0/pprovol creation Sun May 11 15:27 2014 -
vol0/pprovol used 326G -
vol0/pprovol available 109G -
vol0/pprovol referenced 186G -
vol0/pprovol compressratio 2.99x -
vol0/pprovol reservation none default
vol0/pprovol volsize 800G local
vol0/pprovol volblocksize 128K -
vol0/pprovol checksum on default
vol0/pprovol compression lz4 inherited from vol0
vol0/pprovol readonly off default
vol0/pprovol copies 1 default
vol0/pprovol refreservation none default
vol0/pprovol primarycache all default
vol0/pprovol secondarycache all default
vol0/pprovol usedbysnapshots 140G -
vol0/pprovol usedbydataset 186G -
vol0/pprovol usedbychildren 0 -
vol0/pprovol usedbyrefreservation 0 -
vol0/pprovol logbias latency default
vol0/pprovol dedup off default
vol0/pprovol mlslabel none default
vol0/pprovol sync standard default
vol0/pprovol refcompressratio 3.32x -
vol0/pprovol written 210M -
vol0/pprovol snapdev hidden default
Lösung 2:
Sie müssen auch das Verwerfen auf dem ext4-Dateisystem aktivieren. Ohne Verwerfen fordert zfs den Speicherplatz nicht zurück, wenn Dateien entfernt werden. Dies kann zu großen Diskrepanzen zwischen den Angaben des ext4-Dateisystems und den zfs-Datenträgerberichten führen.