• Bez kategorii

Jak zamienić w kontenerze dataset na lofs

Ponieważ konfiguruję system pocztowy, potrzebuję wyeksportować filesystem ZFS przez NFS do innego noda, gdzie postfix poprzez delivera będzie zapisywał wiadomości do skrzynek. Jak widać w tym zapisie sesji, skonfigurowałem całą zpoole „studmail” jako dataset ZFS dla kontenera st1. Niestety w prosty sposób nie da się współdzielić systemu plików ZFS przez NFS w kontenerze (non-global):

root@st1:~# zfs list
NAME                         USED  AVAIL  REFER  MOUNTPOINT
studmail                     301M  1.78T  28.0K  none
studmail/etc                4.52M  1.78T  4.19M  /data/etc
studmail/studmail            480K  1.78T   417K  /data/studmail
studmail/var                 296M  1.78T   294M  /data/var

root@st1:~# zfs set sharenfs=rw=@192.168.X.X/32,anon=0 studmail/studmail
cannot set property for 'studmail/studmail': 'sharenfs' cannot be set in a non-global zone

Zdecydowałem się więc przekonfigurować kontener aby używał lofs zamiast całego datasetu, ale najpierw trzeba zmienić punkty montowania:

root@st1:~# zfs set mountpoint=/data/etc/st1 studmail/etc
root@st1:~# zfs set mountpoint=/data/var/st1 studmail/var
root@st1:~# zfs list
NAME                         USED  AVAIL  REFER  MOUNTPOINT
studmail                     301M  1.78T  28.0K  none
studmail/etc                4.52M  1.78T  4.19M  /data/etc/st1
studmail/studmail            480K  1.78T   417K  /data/studmail
studmail/var                 296M  1.78T   294M  /data/var/st1

Teraz można zatrzymać i przekonfigurować kontener:

root@st1:~# halt

[Connection to zone 'st1' pts/2 closed]
root@feniks:~# zonecfg -z st1
zonecfg:st1> info
zonename: st1
zonepath: /zones/st1
brand: native
autoboot: true
...
dataset:
	name: studmail

Usunięcie datasetu (jeśli jest więcej niż jeden, to należy podać nazwę tego, który chcemy usunąć):

zonecfg:st1> remove dataset

Dodanie systemów plików ZFS jako lofs:

zonecfg:st1> add fs
zonecfg:st1:fs> set dir=/data/etc
zonecfg:st1:fs> set special=/data/etc/st1
zonecfg:st1:fs> end
type not specified
zonecfg:st1:fs> set type=lofs
zonecfg:st1:fs> end
zonecfg:st1> add fs
zonecfg:st1:fs> set dir=/data/var
zonecfg:st1:fs> set special=/data/var/st1
zonecfg:st1:fs> set type=lofs
zonecfg:st1:fs> end
zonecfg:st1> add fs
zonecfg:st1:fs> set dir=/data/studmail
zonecfg:st1:fs> set special=/data/studmail
zonecfg:st1:fs> set type=lofs
zonecfg:st1:fs> end
zonecfg:st1> verify
zonecfg:st1> commit
zonecfg:st1> exit

OK, ale katalogi są puste. Dlaczego? Sprawdźmy właściwość zoned w datasecie:

root@feniks:~# zfs get -r zoned studmail
NAME                        PROPERTY  VALUE  SOURCE
studmail                    zoned     on     local
studmail/etc                zoned     on     inherited from studmail
studmail/studmail           zoned     on     inherited from studmail
studmail/var                zoned     on     inherited from studmail

Zatem systemy plików są zamontowane, ale nie widać ich zawartości w strefie globalnej. Trzeba to zmienić:

root@feniks:~# zfs set zoned=off studmail
root@feniks:~# zfs get -r zoned studmail
NAME                        PROPERTY  VALUE  SOURCE
studmail                    zoned     off    local
studmail/etc                zoned     off    inherited from studmail
...
root@feniks:~# ls -laF /data/etc/st1
total 4
drwxr-xr-x  2 root root  2 Aug 10 13:30 ./
drwxr-xr-x 27 root root 28 Aug 13 10:26 ../

Ciągle pusto (lub nie ma katalogu)? Najprostsze wyjście to wyeksportować i zaimportować zpoolę:

root@feniks:~# zpool export studmail
root@feniks:~# zpool import studmail 
root@feniks:~# zfs list -r studmail
NAME                         USED  AVAIL  REFER  MOUNTPOINT
studmail                     301M  1.78T  28.0K  none
studmail/etc                4.52M  1.78T  4.19M  /data/etc/st1
studmail/studmail            480K  1.78T   417K  /data/studmail
studmail/var                 296M  1.78T   294M  /data/var/st1
root@feniks:~# ls -laF /data/etc/st1 
total 638
drwxr-xr-x 10 root root     13 Jul 21 14:03 ./
drwxr-xr-x 27 root root     28 Aug 13 10:26 ../
drwxr-xr-x  7 root root     11 Jan 15  2010 apache/
drwxr-xr-x  2 root root     13 Apr 12 13:23 certs/
drwxr-xr-x  3 root root      6 Aug 17 08:40 dovecot/
drwxr-xr-x  2   27 root      4 Apr 26 13:22 gnarwl/
...

Myślę, że można uruchomić kontener:

root@feniks:~# zoneadm -z st1 boot
root@feniks:~# zoneadm -z st1 list -v
  ID NAME             STATUS     PATH                           BRAND    IP    
  14 st1              running    /zones/st1                     native   shared

Teraz można już wyeksportować system plików przez NFS ze strefy globalnej:

root@feniks:~# zfs set sharenfs=rw=@192.168.X.X/32,anon=0 studmail/studmail
root@feniks:~# share
-               /data/studmail   anon=0,sec=sys,rw=@192.168.X.X/32   "" 

UWAGA: W tym przykładzie nie brałem pod uwagę kwestii bezpieczeństwa eksportowanego przez NFS zasobu, proszę zajrzeć do dokumentacji NFS aby dobrać odpowiednie opcje!

Może Ci się również spodoba

Dodaj komentarz