Projet

Général

Profil

BtrFs » Historique » Version 2

Fabien Dupont, 09/05/2013 13:58

1 1 Fabien Dupont
h1. BtrFs
2 1 Fabien Dupont
3 2 Fabien Dupont
{{>toc}}
4 2 Fabien Dupont
5 1 Fabien Dupont
h2. Présentation
6 1 Fabien Dupont
7 1 Fabien Dupont
BtrFs (se prononce « Butter FS ») est un filesystem de type CoW (« Copy on Write »). C'est à dire que deux données identiques (même CRC32) ne sont écrites qu'une seule fois sur le filesystem jusqu'à ce qu'une des deux soit modifiées.
8 1 Fabien Dupont
9 1 Fabien Dupont
Exemple :
10 1 Fabien Dupont
11 1 Fabien Dupont
<pre>
12 1 Fabien Dupont
$ cat toto > fichier1        # « toto » est écrit quelque part sur le disque dur
13 1 Fabien Dupont
$ cat toto > fichier2        # fichier2 devient un pointeur vers fichier1
14 1 Fabien Dupont
$ sed -ie 's/o/a/g' fichier2 # « tata » est écrit quelque part sur le disque dur
15 1 Fabien Dupont
                             # et fichier2 n'est plus un pointeur vers fichier1
16 1 Fabien Dupont
</pre>
17 1 Fabien Dupont
18 1 Fabien Dupont
De plus, BtrFs est différents des systèmes de fichiers « classiques » (ext2/3/4) car il offre les fonctionnalités suivantes :
19 1 Fabien Dupont
20 1 Fabien Dupont
* possibilité d'écrire le filesystem sur plusieurs disques : raid1, raid0, raid10 et depuis le kernel 3.9, raid5 ou raid6.
21 1 Fabien Dupont
* sous-volumes : il n'y a pas de notion de partitions mais un répertoire peut devenir la racine d'un nouveau volume.
22 1 Fabien Dupont
* snapshots : une image peut être créée et utilisée pour sauvegarder ou restaurer l'état d'un filesystem (ou d'un sous-volume) à un instant T.
23 1 Fabien Dupont
24 1 Fabien Dupont
h2. Création d'un filesystem BtrFs sous debian
25 1 Fabien Dupont
26 1 Fabien Dupont
Le paquet « btrfs-tools » offre les outils permettant la création et la gestion d'un filesystem BtrFs.
27 1 Fabien Dupont
28 1 Fabien Dupont
<pre>
29 1 Fabien Dupont
# apt-get install btrfs-tools
30 1 Fabien Dupont
</pre>
31 1 Fabien Dupont
32 1 Fabien Dupont
h3. Single
33 1 Fabien Dupont
34 1 Fabien Dupont
Les données et les métadonnées sont écrites sur un seul disque.
35 1 Fabien Dupont
36 1 Fabien Dupont
<pre>
37 1 Fabien Dupont
# mkfs.btrfs -d single /dev/sdb
38 1 Fabien Dupont
</pre>
39 1 Fabien Dupont
40 1 Fabien Dupont
h3. raid0
41 1 Fabien Dupont
42 1 Fabien Dupont
Les données sont « stripées » sur deux disques. Il faut donc un minimum de 2 disques.
43 1 Fabien Dupont
44 1 Fabien Dupont
<pre>
45 1 Fabien Dupont
# mkfs.btrfs -d raid0 -m raid0 /dev/sdb /dev/sdc
46 1 Fabien Dupont
</pre>
47 1 Fabien Dupont
48 1 Fabien Dupont
Par exemple pour un fichier contenant « abcdefgh », on aura sur les disques :
49 1 Fabien Dupont
50 1 Fabien Dupont
<pre>
51 1 Fabien Dupont
+-----+   +-----+
52 1 Fabien Dupont
| sdb |   | sdc |
53 1 Fabien Dupont
+-----+   +-----+
54 1 Fabien Dupont
|  a  |   |  b  |
55 1 Fabien Dupont
|  c  |   |  d  |
56 1 Fabien Dupont
|  e  |   |  f  |
57 1 Fabien Dupont
|  g  |   |  h  |
58 1 Fabien Dupont
+-----+   +-----+
59 1 Fabien Dupont
</pre>
60 1 Fabien Dupont
61 1 Fabien Dupont
Pros :
62 1 Fabien Dupont
63 1 Fabien Dupont
* Performance accrue en lecture, un fichier est lue sur deux disques, débit doublé.
64 1 Fabien Dupont
* Plusieurs disques sont vus en un seul volume.
65 1 Fabien Dupont
66 1 Fabien Dupont
Cons :
67 1 Fabien Dupont
68 1 Fabien Dupont
* Sécurité des données faible, si un seul disque tombe en panne, l'ensemble des données est perdue.
69 1 Fabien Dupont
70 1 Fabien Dupont
h3. raid1
71 1 Fabien Dupont
72 1 Fabien Dupont
Les données sont « mirrorées » sur deux disques. Il faut donc un minimum de 2 disques.
73 1 Fabien Dupont
74 1 Fabien Dupont
<pre>
75 1 Fabien Dupont
# mkfs.btrfs -d raid1 -m raid1 /dev/sdb /dev/sdc
76 1 Fabien Dupont
</pre>
77 1 Fabien Dupont
78 1 Fabien Dupont
Par exemple pour un fichier contenant « abcdefgh », on aura sur les disques :
79 1 Fabien Dupont
80 1 Fabien Dupont
<pre>
81 1 Fabien Dupont
+-----+   +-----+
82 1 Fabien Dupont
| sdb |   | sdc |
83 1 Fabien Dupont
+-----+   +-----+
84 1 Fabien Dupont
|  a  |   |  a  |
85 1 Fabien Dupont
|  b  |   |  b  |
86 1 Fabien Dupont
|  c  |   |  c  |
87 1 Fabien Dupont
|  d  |   |  d  |
88 1 Fabien Dupont
|  e  |   |  e  |
89 1 Fabien Dupont
|  f  |   |  f  |
90 1 Fabien Dupont
|  g  |   |  g  |
91 1 Fabien Dupont
|  h  |   |  h  |
92 1 Fabien Dupont
+-----+   +-----+
93 1 Fabien Dupont
</pre>
94 1 Fabien Dupont
95 1 Fabien Dupont
Pros :
96 1 Fabien Dupont
97 1 Fabien Dupont
* Sécurité des données forte, N-1 disques peuvent tomber en panne avant de perdre les données.
98 1 Fabien Dupont
99 1 Fabien Dupont
Cons :
100 1 Fabien Dupont
101 1 Fabien Dupont
* Pour N disques de taille T, on n'a que T octets à disposition.
102 1 Fabien Dupont
103 1 Fabien Dupont
h4. raid10
104 1 Fabien Dupont
105 1 Fabien Dupont
Les données sont « mirrorées » sur N/2 disques puis « stripées » entre les 2 N/2 disques. Il faut donc un minimum de 4 disques.
106 1 Fabien Dupont
107 1 Fabien Dupont
<pre>
108 1 Fabien Dupont
# mkfs.btrfs -d raid10 -m raid10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
109 1 Fabien Dupont
</pre>
110 1 Fabien Dupont
111 1 Fabien Dupont
Par exemple pour un fichier contenant « abcdefgh », on aura sur les disques :
112 1 Fabien Dupont
113 1 Fabien Dupont
<pre>
114 1 Fabien Dupont
        <-------raid0------->
115 1 Fabien Dupont
<-----raid1----->   <-----raid1----->
116 1 Fabien Dupont
+-----+   +-----+   +-----+   +-----+
117 1 Fabien Dupont
| sdb |   | sdc |   | sdd |   | sde |
118 1 Fabien Dupont
+-----+   +-----+   +-----+   +-----+
119 1 Fabien Dupont
|  a  |   |  a  |   |  b  |   |  b  |
120 1 Fabien Dupont
|  c  |   |  c  |   |  d  |   |  d  |
121 1 Fabien Dupont
|  e  |   |  e  |   |  f  |   |  f  |
122 1 Fabien Dupont
|  g  |   |  g  |   |  h  |   |  h  |
123 1 Fabien Dupont
+-----+   +-----+   +-----+   +-----+
124 1 Fabien Dupont
</pre>
125 1 Fabien Dupont
126 1 Fabien Dupont
Pros :
127 1 Fabien Dupont
128 1 Fabien Dupont
* Sécurité des données forte, N-1 disques dans chaque morceau du raid0 peuvent tomber en panne avant de perdre les données.
129 1 Fabien Dupont
* Performance accrue en lecture, un fichier est lue sur deux disques, débit doublé.
130 1 Fabien Dupont
* Plusieurs disques sont vus en un seul volume.
131 1 Fabien Dupont
132 1 Fabien Dupont
Cons : 
133 1 Fabien Dupont
134 1 Fabien Dupont
* Pour N disques de taille T, on n'a que (N×T)/2 octets à disposition.
135 2 Fabien Dupont
136 2 Fabien Dupont
h4. raid5 (kernel >= 3.9)
137 2 Fabien Dupont
138 2 Fabien Dupont
Les données sont « stripées » sur N-1 disques puis la parité d'un « stripe » est écrite sur le dernier disque. Il faut donc un minimum de 3 disques.
139 2 Fabien Dupont
140 2 Fabien Dupont
<pre>
141 2 Fabien Dupont
# mkfs.btrfs -d raid5 -m raid5 /dev/sdb /dev/sdc /dev/sdd
142 2 Fabien Dupont
</pre>
143 2 Fabien Dupont
144 2 Fabien Dupont
Par exemple pour un fichier contenant « abcdefgh », on aura sur les disques :
145 2 Fabien Dupont
146 2 Fabien Dupont
<pre>
147 2 Fabien Dupont
+-----+   +-----+   +-----+
148 2 Fabien Dupont
| sdb |   | sdc |   | sdd |
149 2 Fabien Dupont
+-----+   +-----+   +-----+
150 2 Fabien Dupont
|  a  |   |  b  |   |  p1 |
151 2 Fabien Dupont
|  p2 |   |  c  |   |  d  |
152 2 Fabien Dupont
|  e  |   |  p3 |   |  f  |
153 2 Fabien Dupont
|  g  |   |  h  |   |  p4 |
154 2 Fabien Dupont
+-----+   +-----+   +-----+
155 2 Fabien Dupont
</pre>
156 2 Fabien Dupont
157 2 Fabien Dupont
Pros :
158 2 Fabien Dupont
159 2 Fabien Dupont
* Sécurité des données forte, 1 disque peut tomber en panne avant de perdre les données.
160 2 Fabien Dupont
* Plusieurs disques sont vus en un seul volume.
161 2 Fabien Dupont
162 2 Fabien Dupont
Cons : 
163 2 Fabien Dupont
164 2 Fabien Dupont
* Pour N disques de taille T, on n'a que (N-1)×T octets à disposition.
165 2 Fabien Dupont
166 2 Fabien Dupont
167 2 Fabien Dupont
h4. raid6 (kernel >= 3.9)
168 2 Fabien Dupont
169 2 Fabien Dupont
Les données sont « stripées » sur N-2 disques puis la parité d'un « stripe » est « mirrorée » sur 2 disques. Il faut donc un minimum de 4 disques.
170 2 Fabien Dupont
171 2 Fabien Dupont
<pre>
172 2 Fabien Dupont
# mkfs.btrfs -d raid6 -m raid6 /dev/sdb /dev/sdc /dev/sdd
173 2 Fabien Dupont
</pre>
174 2 Fabien Dupont
175 2 Fabien Dupont
Par exemple pour un fichier contenant « abcdefgh », on aura sur les disques :
176 2 Fabien Dupont
177 2 Fabien Dupont
<pre>
178 2 Fabien Dupont
+-----+   +-----+   +-----+   +-----+
179 2 Fabien Dupont
| sdb |   | sdc |   | sdd |   | sde |
180 2 Fabien Dupont
+-----+   +-----+   +-----+   +-----+
181 2 Fabien Dupont
|  a  |   |  b  |   |  p1 |   |  p1 |
182 2 Fabien Dupont
|  p2 |   |  c  |   |  d  |   |  p2 |
183 2 Fabien Dupont
|  p3 |   |  p3 |   |  e  |   |  f  |
184 2 Fabien Dupont
|  g  |   |  p4 |   |  p4 |   |  h  |
185 2 Fabien Dupont
+-----+   +-----+   +-----+   +-----+
186 2 Fabien Dupont
</pre>
187 2 Fabien Dupont
188 2 Fabien Dupont
Pros :
189 2 Fabien Dupont
190 2 Fabien Dupont
* Sécurité des données forte, 2 disques peut tomber en panne avant de perdre les données.
191 2 Fabien Dupont
* Plusieurs disques sont vus en un seul volume.
192 2 Fabien Dupont
193 2 Fabien Dupont
Cons : 
194 2 Fabien Dupont
195 2 Fabien Dupont
* Pour N disques de taille T, on n'a que (N-2)×T octets à disposition.
196 2 Fabien Dupont
197 2 Fabien Dupont
h2. Administration d'un volume BtrFs
198 2 Fabien Dupont
199 2 Fabien Dupont
h3. Sous-volumes (subvolumes)
200 2 Fabien Dupont
201 2 Fabien Dupont
Un sous-volume n'est _pas_ équivalent à LVM. C'est une racine sous la racine.
202 2 Fabien Dupont
203 2 Fabien Dupont
Un sous-volume peut contenir une hierarchie de fichiers ou bien une image (« snapshot ») d'un autre sous-volume à un instant T.
204 2 Fabien Dupont
205 2 Fabien Dupont
Par exemple, dans un même volume, on peut avoir :
206 2 Fabien Dupont
207 2 Fabien Dupont
<pre>
208 2 Fabien Dupont
+-+- root (sous volume par défaut)
209 2 Fabien Dupont
| +-- /bin
210 2 Fabien Dupont
| +-- /usr
211 2 Fabien Dupont
| +-- ...
212 2 Fabien Dupont
|
213 2 Fabien Dupont
+-+- home
214 2 Fabien Dupont
| +-- /home
215 2 Fabien Dupont
|
216 2 Fabien Dupont
+-+- snapshot_root1
217 2 Fabien Dupont
| +-- /bin
218 2 Fabien Dupont
| +-- /usr
219 2 Fabien Dupont
| +-- ...
220 2 Fabien Dupont
|
221 2 Fabien Dupont
.
222 2 Fabien Dupont
.
223 2 Fabien Dupont
</pre>
224 2 Fabien Dupont
225 2 Fabien Dupont
h4. Création d'un sous-volume
226 2 Fabien Dupont
227 2 Fabien Dupont
Par exemple, pour créer un sous-volume /mnt/home dans le volume BtrFs monté dans /mnt :
228 2 Fabien Dupont
229 2 Fabien Dupont
<pre>
230 2 Fabien Dupont
# btrfs subvolume create /mnt/home
231 2 Fabien Dupont
</pre>
232 2 Fabien Dupont
233 2 Fabien Dupont
/!\ /mnt/home ne doit _pas_ exister. Il apparaîtra tel un répertoire, du point de vue de l'utilisateur mais ce n'en n'est pas un.
234 2 Fabien Dupont
235 2 Fabien Dupont
h4. Création d'un snapshot dans un sous-volume :
236 2 Fabien Dupont
237 2 Fabien Dupont
Par exemple, pour créer un snapshot de /mnt/home :
238 2 Fabien Dupont
239 2 Fabien Dupont
<pre>
240 2 Fabien Dupont
# ls -l /mnt/home/fab
241 2 Fabien Dupont
/mnt/home/fab:
242 2 Fabien Dupont
total 0
243 2 Fabien Dupont
# btrfs subvolume snapshot /mnt/home /mnt/snapshot_of_home
244 2 Fabien Dupont
# touch /mnt/home/fab/toto
245 2 Fabien Dupont
# ls -l /mnt/home/fab /mnt/snapshot_of_home/fab
246 2 Fabien Dupont
/mnt/home/fab:
247 2 Fabien Dupont
total 0
248 2 Fabien Dupont
-rw-r--r-- 1 root root 0 May  9 13:49 toto
249 2 Fabien Dupont
250 2 Fabien Dupont
/mnt/snapshot_of_home/fab:
251 2 Fabien Dupont
total 0
252 2 Fabien Dupont
</pre>
253 2 Fabien Dupont
254 2 Fabien Dupont
On voit bien que le snapshot contient l'état de /mnt/home avant la création du fichier toto.
255 2 Fabien Dupont
256 2 Fabien Dupont
h4. Monter un sous-volume
257 2 Fabien Dupont
258 2 Fabien Dupont
Pour monter un sous-volume précédement créé :
259 2 Fabien Dupont
260 2 Fabien Dupont
<pre>
261 2 Fabien Dupont
# btrfs subvolume list /mnt
262 2 Fabien Dupont
ID 261 gen 37 top level 5 path home
263 2 Fabien Dupont
ID 262 gen 41 top level 5 path snapshot_of_home
264 2 Fabien Dupont
# mount /dev/sdb1 /home -o subvolume=home
265 2 Fabien Dupont
#  df -HTP | grep sdb1
266 2 Fabien Dupont
/dev/sdb1      btrfs     8.0T  6.7G  8.0T   1% /home
267 2 Fabien Dupont
/dev/sdb1      btrfs     8.0T  6.7G  8.0T   1% /mnt
268 2 Fabien Dupont
# mkdir /home/fab
269 2 Fabien Dupont
# chown fab:fab /home/fab
270 2 Fabien Dupont
# ls -ld /mnt/home/fab /home/fab
271 2 Fabien Dupont
drwxr-xr-x 1 fab fab 8 May  9 13:49 /mnt/home/fab
272 2 Fabien Dupont
drwxr-xr-x 1 fab fab 8 May  9 13:49 /home/fab
273 2 Fabien Dupont
</pre>