FreeBSD jails cz.2

Sun 18 October 2009 by admin

W drugiej części cyklu FreeBSD jails postaram się przybliżyć współpracę narzędzia ezjail z systemem plików ZFS.

Począwszy od wersji FreeBSD 8.0 RC1 implementacja ZFS straciła status eksperymentalnej, o czym możemy się przekonać czytając raport prac za okres 2009-04 -- 2009-09:

We believe that the ZFS file system is now production-ready in FreeBSD 8.0. Most (if not all) reported bugs were fixed and ZFS is no longer tagged as experimental

(źródło: http://www.freebsd.org/news/status/report-2009-04-2009-09.html#FreeBSD/ZFS)

Stwarza to okazję rozbudowania wcześniej opisywanego narzędzia ezjail o współpracę z systemem plików ZFS co zaowocować może m.in. szybszym tworzeniem nowych instancji jails oraz łatwiejszym wykonywaniem kopii zapasowych. Na potrzeby tego projektu stworzyłem prosty skrypt ezjail-zfs w bash'u, który realizuje następujące funkcję:

  • integruje się z ezjail wykorzystując wspólny plik konfiguracyjny
  • tworzy podstawową hierarchię systemu plików ZFS
  • wspomaga tworzenie instancji jails
  • wykonuje snapshoty wybranych jails'ów
  • wspomaga tworzenie clone'ów podanych jails'ów
  • tworzy kopie zapasowe całego systemu ezjails lub wybranych instancji jails

Konfiguracja samego skryptu ezjail-zfs wymaga podania lokalizacji plików konfiguracyjnych poszczególnych jails'ów, samego ezjail.conf oraz określenia nazwy naszego podstawowego systemu ZFS:

zfs_root="jail"

ezjail_confdir="/usr/local/etc/ezjail"

ezjail_conf="/usr/local/etc/ezjail.conf"

Po przeprowadzonej konfiguracji możemy zainicjować wymagane systemy plików ZFS poleceniem:

# ezjail-zfs init

stworzy on na podstawie zmiennych ezjail_jaildir oraz ezjail_jailbase odpowiednie systemy plików ZFS. Dopiero wtedy możemy wydać polecenie ezjail-admin install. Narzędzie ezjail-zfs wspomaga tworzenie instancji jails i tak:

# ezjail-zfs create

po podaniu nazwy nowego jail'sa otwiera się automatycznie edytor vi, dodajemy wybrane przełączniki do ezjail-admin create oraz podajemy adres IP po zatwierdzeniu tworzy się nowy system plików ZFS w podanej lokalizacji. Nowy jail jest gotowy do uruchomienia.

Przełącznik snapshot w ezjail-zfs, stworzy migawkę wybranego z listy jails'a:

# ezjail-zfs snapshot

[ snapshot ]

List of jails:

----------------------------

jail1

Make snapshot of which jail: jail1

NAME                          USED  AVAIL  REFER  MOUNTPOINT

jail/jails/jail1@1255864344      0      -  1.57M  -

Zapisana migawka może posłużyć np. do odtworzenia stanu jail'a sprzed update'u lub odzyskania utraconych plików. Nazwa migawki to unix timestamp, najprościej zdekodować go można poleceniem:

$ date -r <timestamp>

W celu stworzenia nowego jails'a możemy posłużyć się już istniejącym i na bazie jego stworzyć nową instancję jails. Aby to uczynić należy skorzystać:

# ezjail-zfs clone

...

NAME                     USED  AVAIL  REFER  MOUNTPOINT

jail/jails/jail1_clone      0  2.79G  1.57M  /usr/jails/jail1_clone

w efekcie uzyskujemy nowego jails'a, który początkowo nie zajmuje żadnej przestrzeni dyskowej, dopiero wraz z jego rozwojem będzie zajmował miejsce na dysku. Tworzenie klonów jest korzystniejsze niż operowanie flavours, gdyż wystarczy, że stworzymy coś na wzór template'u jails'a do określnego celu i po prostu go sklonujemy zamiast tak jak to jest w przypadku flavours mozolnie opisywać funkcjonalność w formie skryptu, który każdorazowo będziemy wywoływać.

Ostatnią cechą skryptu ezjail-zfs jest wykonywanie kopii zapasowych pojedynczych instancji jails bądź całego środowiska wraz z plikami konfiguracyjnymi:

# ezjail-zfs backup

[ backup ]

Which backup do you want to perform:

1. Only one jail with config files

2. Full backup of your all jails and config files

Your choice [1]:

w przypadku backup'u pojedynczego jails'a w lokalizacji ezjail_archivedir (konfiguracja ezjail.conf) znajdziemy kopię zapasową:

Backup of jail1 created:

-rw-r--r--  1 root  wheel   333K Oct 18 13:35 /root/jail1.tar.gz

zaś w przypadku całościowego backup'u:

Full jail backup created:

-rw-r--r--  1 root  wheel   53M Oct 16 19:09 /root/fulljail.tar.gz

Backup'y zawierają pliki konfiguracyjne, backup został wykonany poleceniem zfs send, odtworzenie wymaga użycia polecenia zfs receive oraz przegrania/zmodyfikowania plików konfiguracyjnych.

Za pośrednictwem prostego skryptu uzyskujemy jeszcze większą łatwość zarządzania oraz migracji naszej infrastrukturą wirtualnej.

W następnej części cyklu FreeBSD jails, postaram się przedstawić niektóre ciekawsze parametry konfiguracyjne jails.


Comments