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> |