En weer een periodieke tutorial van CurlyMo

Een van mijn vorige tutorials ging over het migreren van data via zfs send/receive. De vraag betrof toen een migratie binnen dezelfde pool. Daarvoor blijkt nog een veel snellere oplossing voor handen te zijn. De
promoted clone:
Stel we hebben de volgende situatie:
code:
1
2
3
4
5
| data
|--user1
|----foto
|--user2
|----foto |
Deze gebruiker heeft 1 foto genaamd
aap.jpg
code:
1
2
3
| [root@server /]# dd if=/dev/random of=/data/user1/foto/aap.jpg bs=1024 count=1024
[root@server /]# md5 /data/user1/foto/aap.jpg
MD5 (/data/user1/foto/aap.jpg) = af07235e4e0f4e24adb77b354594286c |
Deze indeling is leuk zolang er maar één gebruiker is en je verder niks anders in je data pool hebt staan. Maar stel je krijgt meerdere gebruikers. Dan is deze opstellingen veel handiger:
code:
1
2
3
4
5
6
| data
|--users
|----user1
|------foto
|----user2
|------foto |
Het migreren van deze mappen kan echter niet zomaar tussen ZFS bestandssystemen (op dezelfde pool). Normaal gesproken zou je dit dus moeten doen via ofwel
zfs send/receive ofwel via bijv.
rsync. Afhankelijk van het aantal bestanden kan dit vele uren duren.
Er is echter wel een snelle manier (evensnel als het maken van snapshots), maar die werkt alleen binnen dezelfde pool. Hierbij maken we gebruik van clones. Voor het gemak roep ik bewust foutmeldingen op om te laten zien wat het doel van verschillende stappen zijn.
code:
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
| [root@server /]# zfs snapshot -r data/user1@clone
[root@server /]# zfs list -t snapshot -r data/user1
NAME USED AVAIL REFER MOUNTPOINT
[...]
data/user1@clone 0 - 221K -
data/user1/foto@clone 0 - 1.21M -
[root@server /]# zfs create data/users
[root@server /]# zfs clone data/user1@clone data/users/user1
[root@server /]# zfs clone data/user1/foto@clone data/users/user1/foto
[root@server /]# zfs list -r data
NAME USED AVAIL REFER MOUNTPOINT
[...]
data/user1 1.43M 2.61T 221K /data/user1
data/user1/foto 1.21M 2.61T 1.21M /data/user1/foto
data/users/user1 23.2K 2.61T 221K /data/users/user1
data/users/user1/foto 11.6K 2.61T 1.21M /data/users/user1/foto
[root@server /]# md5 /data/users/user1/foto/aap.jpg
MD5 (/data/users/user1/foto/aap.jpg) = af07235e4e0f4e24adb77b354594286c
[root@server /]# zfs destroy data/user1/foto@clone
cannot destroy 'data/user1/foto@clone': snapshot has dependent clones
use '-R' to destroy the following datasets:
data/users/user1/foto
[root@server /]# zfs promote data/users/user1/foto
[root@server /]# zfs destroy data/user1/foto@clone
could not find any snapshots to destroy; check snapshot names.
[root@server /]# zfs destroy data/user1/foto
[root@server /]# zfs destroy data/user1@clone
cannot destroy 'data/user1@clone': snapshot has dependent clones
use '-R' to destroy the following datasets:
data/users/user1/foto@clone
data/users/user1/foto
data/users/user1
[root@server /]# zfs promote data/users/user1
[root@server /]# zfs destroy data/user1
[root@server /]# zfs list -r data
NAME USED AVAIL REFER MOUNTPOINT
data/users/user1 1.45M 2.61T 221K /data/users/user1
data/users/user1/foto 1.23M 2.61T 1.21M /data/users/user1/foto
[root@server /]# md5 /data/users/user1/foto/aap.jpg
MD5 (/data/users/user1/foto/aap.jpg) = af07235e4e0f4e24adb77b354594286c |
In dit voorbeeld is er maar één snapshot. Zouden we echter een grote geschiedenis aan snapshots hebben, dan worden die netjes allemaal mee gecloned t/m de
geclonede snapshot. Het betreft dus een volledige migratie van het bestandssysteem.
Denk er overigens aan dat het verwijderen van je originele filesystem alleen mogelijk is wanneer de betreffende filesystem een
child is van de pool. Stel je hebt een pool genaamd
tank, dan kun je achteraf dus wel netjes
tank/foo verwijderen, maar natuurlijk niet
tank zelf. Dan zou je namelijk je pool verwijderen. In dat laatste geval moet je
zeer voorzichtig aan de slag met een goede oude
rm -rf. Het beste kan je voor die tijd van de eerste childs van
tank even het mountpoint veranderen zodat je niet je vers geclonede data weer verwijderd via je
rm -rf.
@CiPHER, is het een idee om in de openingspost linkjes te zetten naar nuttige tutorials. Ik weet dat er meerdere gebruikers zijn die van zulke posts plaatsen. Dat maakt het handiger om ze te vinden als zijnde FAQ.
[
Voor 7% gewijzigd door
CurlyMo op 15-08-2014 16:47
]