Поддержка архивных копий файлов в Samba Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
wiki:samba_shadow_copy [2010/05/19 19:10]
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 -/​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 -/​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 "Usagesnapshots.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''​.+Естественновам нужно будет поменять все параметры, присвоив им нужные значения. Кроме того, для каждого тома ​необходимо будет создать ​свою копию скрипта с нужными параметрами.
  
 ===== Ссылки ===== ===== Ссылки =====
Строка 396: Строка 412:
  
  
-{{tag>​HOWTO Администрирование Файловый_сервер Samba LVM Shadow_volume_copy Снапшоты}}+{{tag>​HOWTO Администрирование Файловый_сервер Samba LVM Shadow_volume_copy Снапшоты ​Server Linux_на_предприятии}}