• 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

This site uses Akismet to reduce spam. Learn how your comment data is processed.