Главная страница


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Pavel Gulchouck                      2:463/68       29 Apr 2005  21:26:26
 To : Eugene B. Berdnikov
 Subject : Unux Backup
 -------------------------------------------------------------------------------- 
 
 
 22 Apr 05, Eugene B. Berdnikov ==> Pavel Gulchouck:
 
  PG>> Я делаю так:
  PG>> бэкап нужных каталогов rsync-ом, перед этим делаю rotate имеющихся
  PG>> бэкапов и создание новой копии, состоящей из hardlink-ов
  PG>> предыдущего.
 
  EBB>  Чем, самодельным скриптом? Можете поделиться?
 
 IMHO такие скрипты проще под себя писать, чем чужие использовать.
 
 Hа машине, которую надо забэкапить, запускаю
 
 cd /
 /usr/local/bin/rsync --rsh="ssh -x -T -i /root/id_backup" \
   -aqHxR --delete --delete-excluded \
   ... \
   backup@backups.itpark.ua:\
 
 где "..." - это правила include/exclude, что нужно бэкапить.
 Hа бэкапящей машине из ~backup/.ssh/authorized_keys по ключу по безпарольному
 sudo запускается такой скрипт:
 
 ===
 #! /usr/bin/perl
 
 $host{"193.109.240.5"}  = "puma";
 $host{"193.109.240.7"}  = "racoon";
 $host{"193.109.240.8"}  = "irbis";
 [...]
 
 $backupdir = "/backups/archives";
 $rsync = "/usr/bin/rsync";
 $rm    = "/bin/rm";
 $ndaily=2;
 $nweekly=2;
 $nmonthly=2;
 
 die "Backup from unknown host $ARGV[0]!\n" if !defined($host{$ARGV[0]});
 $host=$host{$ARGV[0]};
 $dirname="$backupdir/$host";
 
 # Need rotate?
 $suffix="";
 $time=time();
 if (-d $dirname && $time-(stat($dirname))[9]>=2*3600 && $ndaily) {
         $suffix=".tmp";
         linkdir($dirname, "$dirname$suffix");
 }
 
 # Do rsync
 $rc=system("$rsync --server -lHogDtprRx --delete-excluded . $dirname$suffix");
 if ($rc) {
         if ($rc == -1) {
                 $reason = "Can't execute rsync: $!";
         } else {
                 $reason = "rsync retcode $rc";
         }
         system("$rm -rf $dirname$suffix") if $suffix;
         die "$reason\n";
 }
 utime($time, $time, "$dirname$suffix");
 exit 0 unless $suffix;
 
 # Rotate
 if ($suffix) {
         system("$rm -rf $dirname.$ndaily");
         for ($i=$ndaily-1; $i>0; $i--) {
                 rename("$dirname.$i", "$dirname.".($i+1));
         }
         rename($dirname, "$dirname.1");
         rename("$dirname$suffix", $dirname);
 }
 ($a,$a,$a,$mday,$a,$a,$wday, $yday) = localtime($time);
 if ($wday==0 && $nweekly) {
         unless (-d "$dirname.weekly" &&
 (localtime((stat("$dirname.weekly"))[9]))[7]==$yday) {
                 # rotate weekly backups
                 system("$rm -rf $dirname.$nweekly.weekly");
                 for ($i=$nweekly-1; $i>0; $i--) {
                         rename("$dirname.$i.weekly",
 "$dirname.".($i+1).".weekly");
                 }
                 linkdir($dirname, "$dirname.1.weekly");
         }
 }
 if ($mday==1 && $nmonthly) {
         unless (-d "$dirname.monthly" &&
 (localtime((stat("$dirname.monthly"))[9]))[7]==$yday) {
         # rotate monthly backups
                 system("$rm -rf $dirname.$nmonthly.monthly");
                 for ($i=$nmonthly-1; $i>0; $i--)
                 {       rename("$dirname.$i.monthly",
 "$dirname.".($i+1).".monthly");
                 }
                 linkdir($dirname, "$dirname.1.monthly");
         }
 }
 exit(0);
 
 sub linkdir
 {
         my ($src, $dst) = @_;
         my ($mode, $uid, $gid, $atime, $mtime) = (stat($src))[2,4,5,8,9];
         linkdir2($src, $dst, $mode, $uid, $gid, $aime, $mtime);
         system("$rsync -aqH --delete $src/ $dst");
         utime($atime, $mtime, $dst);
 }
 
 use Fcntl ':mode';
 
 sub linkdir2
 {
         my ($src, $dst, $mode, $uid, $gid, $atime, $mtime) = @_;
         my ($file, @files, $at, $mt);
         local (*DIR);
         mkdir($dst);
         chmod($mode & 07777, $dst);
         chown($uid, $gid, $dst);
         opendir(DIR, $src);
         @files = readdir(DIR);
         closedir(DIR);
         foreach $file (@files) {
                 next if $file =~ /^\.\.?$/;
                 ($mode, $uid, $gid, $at, $mt) = (stat("$src/$file"))[2,4,5,8,9];
 if (S_ISDIR($mode)) {
                         linkdir2("$src/$file", "$dst/$file", $mode, $uid, $gid, 
 $at, $mt);
                 } elsif (S_ISREG($mode)) {
                         link("$src/$file", "$dst/$file");
                 }
         }
         utime($atime, $mtime, $dst);
 }
 ===
 
  PG>> Таким образом, получаю бэкапы за несколько последних
  PG>> дней/недель/месяцев (зависит от настроек ротейта), где одинаковые
  PG>> файлы представлены хардлинками и много места не занимают. Еще
  PG>> плюсы: простой доступ к бэкапной информации (не нужно
  PG>> растаривать), большая скорость бэкапа (передаются только
  PG>> изменившиеся файлы). Минусы: снижение секьюрности по сравнению с
  PG>> бэкапами в парольных архивах, необходимость монтировать раздел с
  PG>> бэкапами как noexec,nodev (ну это не сильный недостаток),
 
  EBB>  Да уж... :)))
 
  PG>> иногда может искажаться информация о владельце (если такого юзера
  PG>> на бэкапящей машине нет, а такой uid есть и занят другим),
  PG>> хранение некомпрессированого бэкапа (это окупается за счет
  PG>> использования хардлинков и простоты доступа). Я храню бэкапы за
  PG>> последние два дня, последние две недели и последние два месяца,
  PG>> всего 6 бэкапов. Btw, тот же tar AFAIU потеряет информацию о
  PG>> хардлинках на сохраняемом разделе, в отличие от rsync.
 
  EBB>  Hет, tar нынче хардлинки восстанавливает, во всяком случае в линуксе.
 
  EBB>  А с rsync'ом есть две шероховатости: 1. память кушает при -H,
  EBB>  2. всегда обновляет atime. Второе нельзя побороть как-нибудь?
 
 Да, обновление atime несколько напрягает, особенно для /var/mail/.
 Как побороть, не знаю. :(
 
  PG>> Кроме того, раз в час (ну или кому сколько надо) проверяется
  PG>> список критичных текстовых файлов (всякие конфиги), изменения
  PG>> шлются по почте, и эти файлы хранятся под cvs.
 
  EBB>  Hечаевское произведение? :)
 
 Да нет, свое. Может, у Hетча и у многих других есть аналогичные, это ж не бином 
 Hьютона. ;-)
 
               Lucky carrier,
                            Паша
                            aka  gul@gul.kiev.ua
 --- GoldED+/LNX 1.1.5
  * Origin: Компьютер без Windows как рыба без велосипеда. (2:463/68)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Unux Backup   Vladimir Kiselyov   20 Apr 2005 15:54:24 
 Re: Unux Backup   Victor Wagner   20 Apr 2005 14:48:10 
 Re: Unux Backup   Vladimir Kiselyov   20 Apr 2005 18:01:56 
 Re: Unux Backup   Victor Wagner   20 Apr 2005 17:27:45 
 Re: Unux Backup   Pavel Gulchouck   21 Apr 2005 11:28:27 
 Re: Unux Backup   Eugene B. Berdnikov   22 Apr 2005 17:08:04 
 Unux Backup   Pavel Gulchouck   29 Apr 2005 21:26:26 
 Re: Unux Backup   Eugene B. Berdnikov   30 Apr 2005 02:08:27 
 Re: Unux Backup   Pavel Gulchouck   30 Apr 2005 12:59:50 
 Re: Unux Backup   Eugene B. Berdnikov   30 Apr 2005 16:08:15 
 Unux Backup   Andrew Vetlugin   22 Apr 2005 23:52:12 
 Unux Backup   Sergey Zhemchugov   20 Apr 2005 16:05:26 
 Re: Unux Backup   Victor Wagner   20 Apr 2005 17:54:00 
 Re: Unux Backup   Nikolay Panov   20 Apr 2005 18:12:43 
 Re: Unux Backup   Victor Wagner   20 Apr 2005 22:13:11 
 Unux Backup   abrasha shapirus   20 Apr 2005 17:12:46 
 Re: Unux Backup   Victor Wagner   20 Apr 2005 22:13:46 
 Re: Unux Backup   Eugene B. Berdnikov   21 Apr 2005 01:08:20 
 Unux Backup   abrasha shapirus   21 Apr 2005 01:10:20 
 Re: Unux Backup   Max A. Krasilnikov   22 Apr 2005 01:08:43 
 Unux Backup   abrasha shapirus   22 Apr 2005 00:23:20 
 Re: Unux Backup   Max A. Krasilnikov   22 Apr 2005 10:26:54 
 Unux Backup   abrasha shapirus   22 Apr 2005 11:02:24 
 Re: Unux Backup   Ilya Anfimov   20 Apr 2005 19:12:02 
 Re: Unux Backup   Sergey Shibeko   21 Apr 2005 09:15:15 
 Re: Unux Backup   Victor Wagner   21 Apr 2005 10:48:25 
 Re: Unux Backup   Igor Chumak   21 Apr 2005 12:09:53 
 Re: Unux Backup   Victor Wagner   21 Apr 2005 12:15:32 
 Re: Unux Backup   Sergey Shibeko   21 Apr 2005 12:50:48 
 Re: Unux Backup   Alex Korchmar   23 Apr 2005 00:16:24 
 Re: Unux Backup   Ilya Anfimov   23 Apr 2005 18:44:57 
 Re: Unux Backup   Alex Korchmar   23 Apr 2005 19:34:58 
 Re: Unux Backup   Ilya Anfimov   23 Apr 2005 19:53:14 
 Re: Unux Backup   Alex Korchmar   23 Apr 2005 20:21:09 
 Re: Unux Backup   Ilya Anfimov   25 Apr 2005 18:59:15 
 Re: Unux Backup   Eugene B. Berdnikov   26 Apr 2005 00:08:04 
 Re: Unux Backup   Eugeny Chernetcki   26 Apr 2005 01:27:49 
 Re: Unux Backup   Alex Korchmar   26 Apr 2005 00:53:43 
 Re: Unux Backup   Eugene B. Berdnikov   24 Apr 2005 18:08:08 
 Re: Unux Backup   Alex Korchmar   24 Apr 2005 18:46:14 
 Re: Unux Backup   Slava Astashonok   24 Apr 2005 19:40:35 
 Unux Backup   Sergei Dubarev   21 Apr 2005 00:23:22 
 Unux Backup   Ilya Rubinchik   21 Apr 2005 07:21:04 
 Re: Unux Backup   Andrew Dolgov   21 Apr 2005 20:59:10 
 Unux Backup   Ilya Rubinchik   22 Apr 2005 08:34:28 
 Re: Unux Backup   Andrew Dolgov   22 Apr 2005 10:30:36 
 Unux Backup   Ilya Rubinchik   22 Apr 2005 13:27:56 
 Re: Unux Backup   Igor Tihonov   23 Apr 2005 01:35:20 
 Unux Backup   Ilya Rubinchik   23 Apr 2005 16:47:30 
 Re: Unux Backup   Igor Tihonov   23 Apr 2005 22:10:27 
 Unux Backup   Ilya Rubinchik   25 Apr 2005 18:21:42 
 Unux Backup   Mita Mikheev   21 Apr 2005 20:44:30 
 Re: Unux Backup   Yury Lyakh   21 Apr 2005 14:46:58 
 Unux Backup   Andrew Vetlugin   22 Apr 2005 23:45:34 
Архивное /ru.linux/147942728081.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional