Различия
Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
wiki:samba_shadow_copy [2010/05/28 12:01] |
wiki:samba_shadow_copy [2010/12/27 23:20] (текущий) |
||
|---|---|---|---|
| Строка 15: | Строка 15: | ||
| comment = Users shared folders | comment = Users shared folders | ||
| path = /var/data/users/ | path = /var/data/users/ | ||
| - | admin users = "@DNCM\Администраторы домена" | + | admin users = "@DOMAIN\Администраторы домена" |
| read only = No | read only = No | ||
| create mask = 0600 | create mask = 0600 | ||
| Строка 55: | Строка 55: | ||
| path = /var/data/users/ | path = /var/data/users/ | ||
| # Пользователи с правами редактирования галочек ;) | # Пользователи с правами редактирования галочек ;) | ||
| - | admin users = "@DNCM\Администраторы домена" | + | admin users = "@DOMAIN\Администраторы домена" |
| hide unreadable = yes | hide unreadable = yes | ||
| read only = no | read only = no | ||
| Строка 111: | Строка 111: | ||
| # Библиотека функций работы со снапшотами. | # Библиотека функций работы со снапшотами. | ||
| # Author: Nevorotin Vadim aka Malamut | # Author: Nevorotin Vadim aka Malamut | ||
| - | # Лицензия: используйте как посчитаете нужным | + | # Лицензия: GPLv3 |
| use 5.010; | use 5.010; | ||
| Строка 198: | Строка 198: | ||
| # Монтируем | # Монтируем | ||
| - | if (system "mount -r /dev/$vg/$sn_name $path/\@GMT-$sn_name") { | + | if (system "mount -o ro,acl,user_xattr /dev/$vg/$sn_name $path/\@GMT-$sn_name") { |
| !system "lvremove -f /dev/$vg/$sn_name 1>/dev/null" or warn "Very big error: I can't remove a snapshot :("; | !system "lvremove -f /dev/$vg/$sn_name 1>/dev/null" or warn "Very big error: I can't remove a snapshot :("; | ||
| rmdir "$path/\@GMT-$sn_name" or warn "Very big error: I can't remove a directory for snapshot :("; | rmdir "$path/\@GMT-$sn_name" or warn "Very big error: I can't remove a directory for snapshot :("; | ||
| Строка 307: | Строка 307: | ||
| } | } | ||
| unless (isIn($sn_name, @mounted)) { | unless (isIn($sn_name, @mounted)) { | ||
| - | if (system "mount -r /dev/$vg/$sn_name $path/\@GMT-$sn_name") { | + | if (system "mount -o ro,acl,user_xattr /dev/$vg/$sn_name $path/\@GMT-$sn_name") { |
| rmdir "$path/\@GMT-$sn_name" or warn "Very big error: I can't remove a directory for snapshot $sn_name!:(\n"; | rmdir "$path/\@GMT-$sn_name" or warn "Very big error: I can't remove a directory for snapshot $sn_name!:(\n"; | ||
| die "I can't mount a snapshot $sn_name to it's directory!\n"; | die "I can't mount a snapshot $sn_name to it's directory!\n"; | ||
| Строка 319: | Строка 319: | ||
| rmdir "$path/\@GMT-$_" or die "Error: I can't remove an unused directory $_!:(\n"; | rmdir "$path/\@GMT-$_" or die "Error: I can't remove an unused directory $_!:(\n"; | ||
| } | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | # Удаляет все снапшоты для заданного тома | ||
| + | sub removeAllSnapshots { | ||
| + | @_ == 3 or die "removeAllSnapshots - OOPS!\n"; | ||
| + | my ($lv, $vg, $path) = @_; | ||
| + | |||
| + | my %snapshots = getActive($lv, $vg); | ||
| + | |||
| + | # Удаляем все снапшоты | ||
| + | foreach (keys %snapshots) { | ||
| + | removeSnapshot($_, $vg, $path); | ||
| } | } | ||
| } | } | ||
| Строка 326: | Строка 339: | ||
| </code> | </code> | ||
| - | А вот файл ротации снапшотов для упоминавшегося выше тома ''/var/data/users'': | + | А вот файл управления снапшотами для упоминавшегося выше тома ''/var/data/users'': |
| <code perl> | <code perl> | ||
| #!/usr/bin/perl -w | #!/usr/bin/perl -w | ||
| + | # Скрипт управления ротацией снапшотов. | ||
| + | # Author: Nevorotin Vadim aka Malamut | ||
| + | # Лицензия: GPLv3 | ||
| use 5.010; | use 5.010; | ||
| + | use Getopt::Long; # Для разбора опций | ||
| - | require "/etc/samba/libsnapshot.pm"; | + | # Библиотека с необходимыми функциями |
| + | require "/etc/samba/snapshots/libsnapshot.pm"; | ||
| - | # | + | ######################################## |
| - | ## Parameters | + | # Параметры тома для ротации снапшотов # |
| - | # | + | ######################################## |
| # Группа томов | # Группа томов | ||
| Строка 350: | Строка 368: | ||
| # Начальный размер снапшота, Gb | # Начальный размер снапшота, Gb | ||
| - | $sn_size = 10; | + | $sn_size = 5; |
| # Предел заполнения до ресайза, % | # Предел заполнения до ресайза, % | ||
| $sn_limit = 80; | $sn_limit = 80; | ||
| # Шаг увеличения снапшота при переполнении, Gb | # Шаг увеличения снапшота при переполнении, Gb | ||
| - | $sn_add = 5; | + | $sn_add = 3; |
| - | ################################ | + | ######################################### |
| - | snapshotsRotate($lv, $vg, $path, $count, $sn_size, $sn_limit, $sn_add); | + | $clear = 0; |
| - | </code> | + | $rotate = 0; |
| + | $remount = 0; | ||
| - | Его необходимо запускать по cron, я делаю это раз в сутки в 00:12. | + | Getopt::Long::Configure ("bundling"); # Конфигурирование getopt дабы воспринимать склейку коротких аргументов |
| + | GetOptions( | ||
| + | "clear|c" => \$clear, # Удалить все снапшоты | ||
| + | "rotate|r" => \$rotate, # Провести ротацию | ||
| + | "remount|m" => \$remount, # Перемонтировать имеющиеся снапшоты | ||
| + | "help|h" => \$help); # Помощь же | ||
| - | Кстати, не забудьте после рестарта сервера перемонтировать все снапшоты, для этого пригодится такой скрипт: | + | if (@ARGV or $help) { |
| + | die "Usage: snapshots.pl [--clear|--rotate|--remount]\n\t-c = --clear\n\t-r = --rotate\n\t-m = --remount\n"; | ||
| + | } elsif ($clear) { | ||
| + | removeAllSnapshots($lv, $vg, $path); | ||
| + | } elsif ($rotate) { | ||
| + | snapshotsRotate($lv, $vg, $path, $count, $sn_size, $sn_limit, $sn_add); | ||
| + | } elsif ($remount) { | ||
| + | snapshotsRemount($lv, $vg, $path); | ||
| + | } else { | ||
| + | die "Usage: snapshots.pl [--clear|--rotate|--remount]\n\t-c = --clear\n\t-r = --rotate\n\t-m = --remount\n"; | ||
| + | } | ||
| + | </code> | ||
| - | <code perl> | + | Его необходимо запускать по **cron** с опцией **-r** (ротация), я делаю это раз в сутки в 00:12. |
| - | #!/usr/bin/perl -w | + | |
| - | use 5.010; | + | Также надо не забыть после рестарта сервера перемонтировать все снапшоты, для этого нужно запустить скрипт с параметром **-m**.Сделать это можно из ''/etc/rc.local''. Если же вы решите удалить все снапшоты, то вызовите скрипт с параметром **-c**. |
| - | + | ||
| - | require "/etc/samba/libsnapshot.pm"; | + | |
| - | + | ||
| - | # | + | |
| - | ## Parameters | + | |
| - | # | + | |
| - | + | ||
| - | # Группа томов | + | |
| - | $vg = 'data'; | + | |
| - | # Логический том | + | |
| - | $lv = 'users'; | + | |
| - | # Точка монтирования | + | |
| - | $path = '/var/data/users'; | + | |
| - | + | ||
| - | ################################ | + | |
| - | + | ||
| - | snapshotsRemount($lv, $vg, $path); | + | |
| - | </code> | + | |
| - | Его вызов можно добавить в ''/etc/rc.local''. | + | Естественно, вам нужно будет поменять все параметры, присвоив им нужные значения. Кроме того, для каждого тома необходимо будет создать свою копию скрипта с нужными параметрами. |
| ===== Ссылки ===== | ===== Ссылки ===== | ||