Benutzer-Werkzeuge

Webseiten-Werkzeuge


linux:zfs

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
linux:zfs [2018/12/20 11:28] – [L2ARC (Cache) hinzufügen] ckolblinux:zfs [2022/06/03 08:28] (aktuell) – [kleine Blöcke auf Special Device auslagern] Tippfehler beseitigt ckolb
Zeile 35: Zeile 35:
 Fügt dem Pool ''pool'' einen Cache hinzu. Häufige Lesezugriffe auf die gleichen Daten profitieren vom Cache. Fügt dem Pool ''pool'' einen Cache hinzu. Häufige Lesezugriffe auf die gleichen Daten profitieren vom Cache.
 Als Cache sollte eine SSD verwendet werden. Man kann z.B. auch eine SSD entsprechend partitionieren und eine kleine Partition für den ZIL verwenden. Als Cache sollte eine SSD verwendet werden. Man kann z.B. auch eine SSD entsprechend partitionieren und eine kleine Partition für den ZIL verwenden.
 +
 +===== Special Device hinzufügen =====
 +<code bash>zpool add -o ashift=12 pool special mirror ID_SSD1 ID_SSD2</code>
 +Auf dem Special-Device werden die Metadaten gespeichert. Dadurch ggf. enormer Performance-gewinn. Das Redundanzlevel sollte dem des Pools entsprechen, da beim Ausfall der komplette Pool verloren ist.
 +Die nötige Kapazität der SSD hängt vom Datenbestand ab. Falls die SSD voll ist, werden weitere Metadaten auf den Haupt-Pool geschrieben.
 +==== kleine Blöcke auf Special Device auslagern ====
 +Um die Performance beim schreiben/lesen von (sehr) kleinen Dateien zu verbessern, können kleine Datenblöcke auf dem Special Device, statt auf den normalen Datasets gespeichert werden.
 +Dazu gibt man die maximale Größe von Blöcken an, die auf dem Special Device gespeichert werden sollen. Blöcke, die größer als die angegebene Größe sind, werden auf den regulären Datasets gespeichert. Datenblöcke mit max. der angegebenen Größe werden auf dem Special Device gespeichert.
 +<code bash>zfs set special_small_blocks=16K pool</code>
 +Ab jetzt werden Blöcke bis 16kB auf dem Special Device gespeichert.
 +Es ist möglich, diese Option für jedes Dataset separat und unabhängig einzustellen.
 +
 +**ACHTUNG:** Die angegebene Blockgröße ''special_small_blocks'' solte immer kleiner sein, als die Blockgröße des Pools (standard: 128K)!
 +Wenn ''special_small_blocks'' gleich der Blockgröße des Pools gesetzt wird, wird ALLES ins Special Device geschrieben!
 +===== TRIM für SSDs =====
 +Wenn man einen SSD-Pool hat, kann es sinnvoll sein, TRIM zu aktivieren. Dies kann die Schreibperformance verbessern.
 +''autotrim'' meldet der SSD nach einem Löschvorgang automatisch nicht mehr benötigte Blöcke. Dies ist ein schneller Vorgang, weil nur Blöcke gemeldet werden, die gerade gelöscht wurden.
 +<code bash>zpool set autotrim=on pool</code>
 +Einstellung kann überprüft werden mit:
 +<code bash>zpool get autotrim</code>
 +
 +Auf Debian gibt es noch die Option ''periodic-trim''. Dies kann aktiviert werden mit
 +<code bash>zfs set org.debian:periodic-trim=enable pool</code>
 +Wenn man diese Option aktiviert, wird der Pool am ersten Sonntag im Monat vollständig getrimmt.
 +
 +Die beiden Optionen ''autotrim'' und ''periodic-trim'' dürfen beide zusammen aktiviert werden. Dann werden die SSDs nach jedem löschen schnell getrimmt, und jeden Monat noch mal vollständig.
 +
 +Es ist auch möglich einen Pool manuell zu trimmen. Dazu führt man folgendes Kommando aus.
 +<code bash>zpool trim pool</code>
 ===== Datasets erstellen ===== ===== Datasets erstellen =====
 Es ist empfehlenswert direkt in den Pools keine Daten zu speichern, da sonst einige tolle Funktionen von ZFS nicht sinnvoll genutzt werden können. Daher sollte man sogenannte Datasets anlegen. Diese stellen quasi Unterdateisysteme dar. Es kann z.B. auch sinnvoll sein für jeden Benutzer ein eigenes Dataset unter ''/home'' zu erstellen. Dadurch ist es auch sehr einfach möglich, für jeden Benutzer ein individuelles Quota einzurichten. Es ist empfehlenswert direkt in den Pools keine Daten zu speichern, da sonst einige tolle Funktionen von ZFS nicht sinnvoll genutzt werden können. Daher sollte man sogenannte Datasets anlegen. Diese stellen quasi Unterdateisysteme dar. Es kann z.B. auch sinnvoll sein für jeden Benutzer ein eigenes Dataset unter ''/home'' zu erstellen. Dadurch ist es auch sehr einfach möglich, für jeden Benutzer ein individuelles Quota einzurichten.
Zeile 42: Zeile 71:
 <code bash>zfs list</code> <code bash>zfs list</code>
  
 +==== Datasets in anderes Verzeichnis mounten ====
 +Datasets können einfach an einen beliebigen Ort im Verzeichnisbaum gemountet werden. Dafür gibt es die Option ''mountpoint''.
 +<code bash>zfs set mountpoint=/pfad/zum/neuen/mountpunkt pool/dataset</code>
 +Mountet ''pool/dataset'' auf ''/pfad/zum/neuen/mountpunkt''
 ==== Quota ==== ==== Quota ====
 Für die Datasets können Quotas gesetzt werden, sodass diese eine maximal vorgegebene Größe nicht überschreiten können. Für die Datasets können Quotas gesetzt werden, sodass diese eine maximal vorgegebene Größe nicht überschreiten können.
Zeile 61: Zeile 94:
 ==== ZVOL erstellen ==== ==== ZVOL erstellen ====
 Ein ZVOL mit einer Kapazität von 10GB auf dem Pool "pool" erstellen: Ein ZVOL mit einer Kapazität von 10GB auf dem Pool "pool" erstellen:
-<code bash>zfs create -V 10G pool/vm_1</code>+<code bash>zfs create -V 10G pool/zvol_1</code>
 Die Abbilder finden sich unter /dev/zvol/"poolname"/"ZVOLname". Die Abbilder finden sich unter /dev/zvol/"poolname"/"ZVOLname".
 Also z.B. "/dev/zvol/pool/vm_1". Also z.B. "/dev/zvol/pool/vm_1".
 +
 +==== ZVOL für VMs ====
 +Gängige Dateisysteme verwenden eine Blockgröße von 4 kiB (4096 Bytes). Die standardblockgröße von ZVOLs ist aber 8kiB (8192 Bytes).
 +Um optimale performannce zu erreichen, sollten ZVOLs für VMs mit einer Blockgröße von 4kiB erzeugt werden.
 +Die Blockgröße eines ZVOL kann nachträglich nicht mehr geändert werden.
 +<code bash>zfs create -b 4K -V 10G pool/vm_1</code>
 ==== ZVOL vergrößern ==== ==== ZVOL vergrößern ====
 Das ZVOL "vm_1" auf "pool" auf 20GB vergrößern: Das ZVOL "vm_1" auf "pool" auf 20GB vergrößern:
Zeile 73: Zeile 112:
   * Synchrones Schreiben generell deaktivieren. Hier für das Dataset "dataset" im Pool "pool". ACHTUNG: Bei einem Stromausfall kann es zu unkontrolliertem Datenverlust kommen! Das Dateisystem wird aber konsistent bleiben. Dies sorgt z.B. für einen erheblich besseren Datendurchsatz beim Schreiben von vielen kleinen Dateien über NFS. Siehe auch [[http://milek.blogspot.de/2010/05/zfs-synchronous-vs-asynchronous-io.html milek.blogspot.de]]   * Synchrones Schreiben generell deaktivieren. Hier für das Dataset "dataset" im Pool "pool". ACHTUNG: Bei einem Stromausfall kann es zu unkontrolliertem Datenverlust kommen! Das Dateisystem wird aber konsistent bleiben. Dies sorgt z.B. für einen erheblich besseren Datendurchsatz beim Schreiben von vielen kleinen Dateien über NFS. Siehe auch [[http://milek.blogspot.de/2010/05/zfs-synchronous-vs-asynchronous-io.html milek.blogspot.de]]
 <code bash>zfs set sync=disabled pool/dataset</code> <code bash>zfs set sync=disabled pool/dataset</code>
 +ACHTUNG: wahrscheinlich ist es sinnvoller stattdessen dem Pool ein [[linux:zfs#ZIL (Log) hinzufügen|Log-Device (ZIL) hinzuzufügen!]]
 ===== Defekte Festplatte ersetzen ===== ===== Defekte Festplatte ersetzen =====
 <code bash>zpool replace -o ashift=12 pool alte_Festplatte neue_Festplatte</code> <code bash>zpool replace -o ashift=12 pool alte_Festplatte neue_Festplatte</code>
linux/zfs.1545305283.txt.gz · Zuletzt geändert: 2018/12/20 11:28 von ckolb

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki