Как стать автором
Обновить

Bacula: realtime filesets на Windows-клиентах

Время на прочтение3 мин
Количество просмотров5.2K

Сегодня мы поговорим про создание/восстановление резервных копий bacula под Windows.
Сразу предупреждаю, никакой революционной изюминки здесь вы не найдете, но, надеюсь, некоторым хабражителям информация будет полезной (дабы в т.ч. оценить гибкость этого бесплатного продукта).
Статья расчитана на тех, у кого уже есть небольшой опыт общения с bacula.

Ограничение, с которым я столкнулся, это невозможность задавать ограничение на размер файла. Но зато bacula поддерживает получение списка файлов через pipe от команды, которая может выполняться как на клиенте, так и на сервере. Подробнее читайте здесь.

Итак, поехали.

Список требований.
0) должны поддерживаться русские имена файлов!
1) не ставить дополнительного ПО на клиенте
2) гибкость в настройке
3) гибкость в восстановлении

Исходная система — CentOS 5 + bacula 5.0.2 with mysql-backend + webacula.
Hint! В MySQL должна быть выставлена правильная кодировка, в нашем случае utf8.
Установка и настройка не являются темой данного топика. На эту тему ищите другие топики на хабре. Описывать самые простые случаи я тоже не буду, дабы не засорять статью.

Для начала опишем набор файлов для директора bacula.
Выглядит это примерно так:
FileSet {
Name = XXX
..
File = "\\|c:/windows/system32/cscript.exe //NOLOGO \"C:/Program Files/Bacula/_jobs/filelist.js\""
..
}

Отметим, что в командной строке мы можем передавать аргументы в наш скрипт, в т.ч. максимальный размер файла (тем самым реализуя пункт 2).

Теперь сам скрипт для создания списка файлов. Обратите внимание, что используем перекодирование CP866->UTF-8.
filelist.js:
// описываем фукнкцию перекодировки в UTF-8
function sToUTF8(sText, srcCharset) 
{ 
  if (!srcCharset) srcCharset = "cp866"; //ADODB.Stream default - Unicode. KOI8-R, cp866, windows-1251
  with (new ActiveXObject("ADODB.Stream")) 
  { //http://www.w3schools.com/ado/ado_ref_stream.asp
    type = 2; //Binary 1, Text 2 (default)
    mode = 3; //Permissions have not been set 0,  Read-only 1,  Write-only 2,  Read-write 3,
    //Prevent other read 4,  Prevent other write 8,  Prevent other open 12,  Allow others all 16
    charset = "utf-8";
    open();
    writeText(sText);
    position = 0;
    charset = srcCharset;
    var nPos = 3;
    return readText().substr(nPos);
  }
}
   
function ShowFolderList(folderspec)
{
  var fso, f, fc;
  var p;
  fso = new ActiveXObject("Scripting.FileSystemObject");
  f = fso.GetFolder(folderspec);
   
  re = /\\/g;    // необходимо для последующего преобразования \ -> /         
   
  fc = new Enumerator(f.Files);
  for (; !fc.atEnd(); fc.moveNext())
  {
    try
    {
      p = fc.item();
      r = '' + p;
      r = r.replace(re, "/");    // replace \ to "/".
   
      if (p.Size < 2097152) // 2 MB
        WScript.Echo(sToUTF8(r));
    }
    catch(e)
    {
    }
   
  }
   
  fc = new Enumerator(f.SubFolders);
  for (; !fc.atEnd(); fc.moveNext())
  {
    try
    {
      ShowFolderList(fc.item());
    }
    catch(e)
    {
    }
  }
   
}
ShowFolderList("D:\\Private\\Buhgalteria");


Несложно заметить, что мы просто рекурсивно пробегаем все папки от исходной, перебирая файлы и фильтруя под наши условия.
Теперь перейдем непосредственно к восстановлению. Запускаем на сервере bconsole, выбираем restore и указывыем для восстановления соответствующий job.
На этапе выбора файлов для восстановления нам доступно несколько команд, опишу самые полезные:
help — подсказка
find — поиск нужного файла
ls,dir — просмотр файлов в текущем каталоге (каталоги с подкаталогами будут отображены с "+")
cd — смена каталога
mark file — отметить файл находящийся в текущем местоположении
mark dir/ — отметить отдельный каталог находящийся в текущем местоположении
mark * — отметить все файлы и каталоги внутри текущего каталога. Кстати, TAB здесь тоже работает
lsmark — просмотреть отмеченние файлы
pwd — показать текущий каталог
estimate — посчитать размер восстанавливаемых файлов
done — закончить отметку

Т.о. общая схема такая — ищем через find то что нужно, затем переходим в нужный каталог посредством cd и делаем mark на то, что нужно.
Важное замечание:
для bacula имеет значение регистр, не важно что клиентом выступает Windows-машина.
Теги:
Хабы:
Всего голосов 6: ↑5 и ↓1+4
Комментарии3

Публикации

Истории

Работа

Ближайшие события