summaryrefslogtreecommitdiff
path: root/zfs-intro.md
blob: 920a7efa2e41b712532d6cf22adea2d63a93c887 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
ZFS Einführung
==============

Inhalt
------

::: {.container}
::: {.col}
1.  Geschichte
2.  Pools
3.  Datasets
    -   Volumes
4.  Snapshots
:::

::: {.col}
5.  Redundanz
6.  Caches
7.  Besondere Features
    -   Deduplikation
    -   Kompression
:::
:::

*Nicht* behandelt
-----------------

-   Austausch von Platten
-   Eingebautes Sharing via NFS/CIFS
-   Root auf ZFS

Geschichte
==========

Geschichte
----------

-   2001: Beginn der Entwicklung bei Sun für Solaris
-   2005: Erster Public Release, Code wird Open Source
-   2006-2010: Portierung auf Linux, MacOS, FreeBSD
-   Ab 2010: Oracle macht ZFS zu Closed Source, offene Entwicklung
    weiter als OpenZFS

Features
========

Pools
-----

-   ZFS ist Dateisystem und Volume Manager gleichzeitig
-   Basis: Blockdevices
-   Blockdevices können zu `vdev`s zusammengefasst werden
-   Blockdevices und `vdev`s bilden zusammen einen Storage Pool
-   Viele Einstellungen schon hier möglich, werden runter vererbt

Demo
----

<aside class="notes">

-   Einfachen Stripe-Pool anlegen:
    `zpool create -oashift=12 -R/mnt tank /dev/sd{b,c,d,e}`
-   "Raid-10" Pool:
    `zpool create -oashift=12 -R/mnt tank mirror /dev/sd{b,c} mirror /dev/sd{d,e}`
-   RAID-Z ("RAID-5") Pool:
    `zpool create -oashift=12 -R/mnt tank raidz /dev/sd{b,c,d,e}`
-   Allgemeine Einstellungen:
    -   `zfs get compression tank`
    -   `zfs get dedup tank`
    -   `zfs get all tank`

</aside>

Datasets
--------

-   Datasets entsprechen eigentlichen Dateisystemen
-   Können verschachtelt werden
-   Settings eines Datasets werden vererbt
-   Standardmäßig so groß wie das übergeordnete Dataset
-   Quotas können gesammt, pro User oder pro Gruppe vergeben werden

Volumes
-------

-   Spezielle Datasets
-   Verhalten sich wie Blockdevices
-   Gerne genutzt für VM Images, Swap Space, ...

Snapshots
---------

-   Werden durch CoW ermöglicht
-   Halten den exakten Stand fest
-   Sind keine Kopie sondern der eingefrorene Zustand
-   Können auf andere Rechner, Pools, Datasets übertragen werden

<aside class="notes">

CoW
:   Copy on Write, neue Daten überschreiben nicht den vorhandenen Block
    sondern werden in einen neuen Block geschrieben und Referenzen auf
    den alten werden bereinigt.

</aside>

Demo
----

<aside class="notes">

-   Dataset anlegen: `zfs create tank/zfsintro`
-   Dataset mit Quota: `zfs create -o quota=1G tank/zfsintro/data`
-   Quota ändern: `zfs set quota=5G tank/zfsintro`
-   Quota für User: `zfs set userquota@backup=1G tank/zfsintro`
-   Volume anlegen: `zfs create -b 4096 -V 2G tank/swap`
-   Snapshot anlegen: `zfs snaphot tank/zfsintro/data@snap1`
-   Snapshot in `$DATASET/.zfs/snapshot`, Readonly

</aside>

Caches: RAM
-----------

-   ARC Read-Cache, Default: zwischen `max(32MB, 1/32 RAM)` und ½ RAM
-   Write-Cache, schreibt zumindest alle 5-30 Sekunden auf die Platte

Caches: Disken
--------------

-   Pro Pool
-   Schnelle Medien (SSD, M2, ...)
-   Lesen: L2ARC (Level 2 ARC), kann auch Dedup-Tabelle halten
-   Schreiben: SLOG als Schreib-Cache
    -   Sollte gespiegelt sein, sonst Risiko des Datenverlusts
-   Können im Betrieb hinzugefügt und entfernt werden

<aside class="notes">

ARC
:   Adaptive Replacement Cache

</aside>

Besondere Features
==================

Deduplikation
-------------

-   Prüfsumme über Blöcke, wenn gleich wird nur 1 Kopie gespeichert
-   Keine rückwirkende Änderung
-   Braucht **viel** RAM (1GB RAM / 1TB Dataset zusätzlich)
-   Sinnvoll für Archive

Kompression
-----------

-   Wie Dedup auf Block-Level
-   Wie Dedup keine rückwirkende Änderung
-   Unterschiedliche Verfahren je nach Anforderung vorhanden
-   *Sehr* sinnvoll für Datasets mit viele Text-Dateien (Logs,
    Mail-Spool, ...)

Links
=====

Links
-----

ZFS Demo VM
:   https://cloud.usrspace.at/s/eB4ifqQBNtLz322

Wikipedia zu ZFS
:   https://en.wikipedia.org/wiki/ZFS

Präsentation ist [CC-BY-SA
4.0](https://creativecommons.org/licenses/by-sa/4.0/legalcode.de)

Fragen?
=======