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!