OpenSolaris CIFS Server z funkcjonalnością VSS
Często zdarza nam się rozpaczliwie poszukiwać skasowanego nieopatrznie pliku, który znajdował się na współdzielonym zasobie. Na backup wykonywany co noc ciężko będzie liczyć, gdyż plik ten mocno edytowany był w ciągu dnia. Z pomocą przyjść nam może Volume Shadow Copy (VSS), oczywiście pod warunkiem, że korzystamy z rozwiązań firmy Microsoft. Wspomniany VSS wykonuje w tle o ustalonych godzinach tzw. snapshoty-zrzuty, które pozwalają nam odzyskać dostęp do poprzednich wersji plików. W systemie MS Windows 2003 Server(jako pierwszy system z zaimplementowaną usługą VSS) możemy wykonać maksymalnie 64 snapshoty, więc musimy dość rozsądnie wypośrodkować czas kiedy je wykonujemy i historię plików jaką chcemy przechowywać. Jednak nie będę się rozwodził nad implementację VSS w rozwiązaniach Microsoft’u, spróbuję przedstawić alternatywne rozwiązanie o podobnej funkcjonalności, choć o większych możliwościach. Chodzi o rozwiązanie współdzielonego zasobu wyeksportowanego z systemu OpenSolaris z obsługą snapshotów ZFS…
Firma Sun Microsystems założyła, że obecna implementacja protokółu CIFS/SMB w rozwiązaniu takim jak Samba nie dość dobrze integruję sie z systemem OpenSolaris. Postarali się więc o własną implementację protokołu CIFS/SMB dostarczając użytkownikom funkcjonalność klienta, serwera CIFS/SMB oraz rozwiązanie integrujące się z Active Directory projekt Winchester. Po tym krótkim wstępie przejdźmy do dzieła.
Protokół CIFS/SMB jest dostępny po zainstalowaniu pakietu:
:::bash
# pkg install SUNWsmbs
następnie warto stworzyć grupę w sharemgr, tworząc grupę dodajemy do niej współdzielone zasoby, dzięki czemu łatwo możemy zarządzać wszystkimi zasobami:
:::bash
# sharemgr create -P smb smbshares
stworzonej grupie wolno jedynie udostępniać zasoby po protokole CIFS/SMB co zawarte jest na liście grup:
:::bash
# sharemgr list -v
default enabled nfs
zfs enabled
smbshares enabled smb
następnie dodajemy współdzielony katalog /shared:
:::bash
# sharemgr add-share -r nazwazasobu -d "opis" -s /rpool/shared smbshares
dodatkowo możemy stać się członkiem grupy roboczej GRUPAROBOCZA:
:::bash
# smbadm join -w GRUPAROBOCZA
aby uzyskać dostęp do zasobu współdzielonego musimy wygenerować hasło dla protokołu CIFS/SMB. Zatem w pliku konfiguracyjnym PAM /etc/pam.conf na końcu należy dołożyć linijkę:
:::bash
other password required pam_smb_passwd.so.1 nowarn
na sam koniec wygenerować wspomiane hasło CIFS/SMB:
:::bash
# passwd witalis
po tej operacji możemy sprawdzić czy faktycznie widoczny jest nasz zasób:
:::bash
# smbutil view //witalis@localhost/
Password:
Share Type Comment
-------------------------------
ipc$ IPC Remote IPC
nazwazasobu disk opis
2 shares listed from 2 available
Teraz możemy przejść do kwestii wspominanych snapshotów, w przypadku
systemu plików ZFS możemy wykonać dowolną ilość takich snapshotów. Co
więcej w łatwy sposob możemy je replikować na inne maszyny oraz szybko
wykonać klon istniejącego zasobu. Pisanie ręczne skryptów do
automatycznego wykonywania snapshotów nie jest zadaniem trudnym, ale
możemy go uniknąć. Z pomocą przychodzi nam pakiet SUNWzfs-auto-snapshot,
który o określonych porach wykonuje snapshoty oraz utrzymuje ich stała
liczbę.
Dostarcza on zestaw nowych usług:
:::bash
# svcs -a | grep auto-snap
disabled 17:26:57 svc:/system/filesystem/zfs/auto-snapshot:hourly
disabled 17:26:57 svc:/system/filesystem/zfs/auto-snapshot:weekly
disabled 17:26:57 svc:/system/filesystem/zfs/auto-snapshot:daily
disabled 17:26:57 svc:/system/filesystem/zfs/auto-snapshot:monthly
disabled 19:07:54 svc:/system/filesystem/zfs/auto-snapshot:frequent
uruchamiając np. wybraną usługę *weekly system będzie wykonywał
snapshot raz na tydzień i przechowywał maksymalnie 4 najświeższe
snapshoty
charakterystyka czasowa poszczególnych usług:
:::bash
frequent snapshots every 15 mins, keeping 4 snapshots
hourly snapshots every hour, keeping 24 snapshots
daily snapshots every day, keeping 31 snapshots
weekly snapshots every week, keeping 4 snapshots
monthly snapshots every month, keeping 12 snapshots
załóżmy, że chcemy przechowywać 6 snapshotów wykonywanych co 20min co
daje nam historię 2h aktywności użytkowników. Usługa najbliższa naszym
zamierzeniom to *frequent.
Najpierw określamy, które systemy plików będą przetwarzane przez
zfs-auto-snapshot’a. W naszym przypadku chodzi o wspóldzielony zasób.
Wyłączamy więc zfs-auto-snapshota na wszystkich systemach plików z
wyjątkiem wybranego zasobu sieciowego:
:::bash
# zfs set com.sun:auto-snapshot=false rpool
# zfs set com.sun:auto-snapshot:frequent=true rpool/shared
usługę *frequent warto włączyć w tym momencie tj. po ustaleniu, które katalogi mają mieć generowane snapshoty:
:::bash
# svcadm enable system/filesystem/zfs/auto-snapshot:frequent
po tej operacji dodany zostanie automatycznie wpis w crontab’ie z
odpowiednim interwałem czasowym.
Jednak założone wymaganie co do ilości i interwału czasowego snapshotów
są różne od std. dla *frequent, aby je zmienić musimy ustawić zmienne w
pliku manifest dla zfs-auto-snapshot i przeładować te ustawienia:
:::bash
# svccfg -s svc:/system/filesystem/zfs/auto-snapshot:frequent setprop
zfs/period = 20
# svccfg -s svc:/system/filesystem/zfs/auto-snapshot:frequent setprop
zfs/keep = 6
# svccfg -s svc:/system/filesystem/zfs/auto-snapshot:frequent refresh
# svcadm restart svc:/system/filesystem/zfs/auto-snapshot:frequent
aby podejrzeć zmienione wartości (opis parametrów w pliku /var/svc/manifest/system/filesystem/auto-snapshot.xml):
:::bash
# svccfg -s auto-snapshot:frequent listprop
zfs application
zfs/avoidscrub boolean false
zfs/backup astring none
zfs/backup-lock astring unlocked
zfs/backup-save-cmd astring "not set"
zfs/fs-name astring //
zfs/interval astring minutes
zfs/keep astring 6
zfs/label astring frequent
zfs/offset astring 0
zfs/snapshot-children boolean true
zfs/verbose boolean false
zfs/period astring 20
...
tworzone są teraz automatycznie snapshoty:
:::bash
# zfs list -t snapshot
rpool/shared@zfs-auto-snap:frequent-2009-08-14-18:00 0 - 5.02M -
rpool/shared@zfs-auto-snap:frequent-2009-08-14-18:20 0 - 5.02M -
...
jednak przeglądając zasób współdzielony w szczególności pod kątem snapshotów to są one dla nas niewidoczne dopóki, dopóty nie ustawimy parametru snapdir:
:::bash
# zfs set snapdir=visible rpool/shared
od tego momentu będą już one widoczne w katalogu .zfs/snapshot. Niestety niektóre implementacje CIFS/SMB nie radzą sobie z dwukropkami w nazwie katalogu aby go zmienić np. na “_” należy wyedytować plik /lib/svc/method/zfs-auto-snapshot i ustawić w nim zmienną SEP="_". Dodatkowo korzystając z opcji zfs-auto-snapshot możemy ustawić polecenia służące do automatycznej replikacji określonego zasobu przy pomocy poleceń zfs send.
Podsumowując okazuje się, że przy niewielkim nakładzie pracy otrzymujemy podobną funkcjonalność co wspomniany na początku VSS, dodatkowo bez limitu snapshotów, a z możliwościami replikacji oraz klonowania zasobu.
powered by Hugo and Noteworthy theme