Рейтинг:0

Bacula — дисковое резервное копирование по GFS-схеме «дырка»

флаг in
123

У меня вопрос по поводу реализации GFS-схемы с bacula на жестком диске (демоны уже работают нормально).

Чего я хочу добиться:

Каждые полгода мне нужна полная резервная копия, которая должна быть доступна не менее 12 месяцев -> мне нужно хранить резервные копии немного дольше, чем 12 месяцев, чтобы вторая полная резервная копия не перезаписывала первую. Это означает, что будет как минимум 3 полных резервных копии (я выбрал 18 месяцев). Так продолжается дни, месяцы и так далее. Простая GFS-схема.

График{
  Имя = "GGFSCycle"
  Включено = да

  # DailyCycle - объем сохраняется 14 дней
  Run = Level=Incremental Pool=DailyPool FullPool=HalfAnnualPool Priority=10 вторник-воскресенье в 03:00

  # WeeklyCycle - объем сохраняется 5 недель
  Run = Level=Incremental Pool=WeeklyPool FullPool=HalfAnnualPool Priority=11 понедельник в 03:00
  
  # MonthlyCycle - объем хранится 7 месяцев
  Run = Level=Differential Pool=MonthlyPool FullPool=HalfAnnualPool Priority=12 февраля-1 июня в 03:00
  Run = Level=Differential Pool=MonthlyPool FullPool=HalfAnnualPool Priority=12 август-декабрь 1 в 03:00

  # HalfAnnualCycle - данные хранятся 18 месяцев
  Запуск = Уровень = Полный пул = HalfAnnualPool Priority = 13 1 января в 03:00
  Запуск = Уровень = Полный пул = HalfAnnualPool Priority = 13 1 июля в 03:00

}

Бассейн {    
  Имя = DailyPool
  Тип пула = резервный
  Хранилище = резервный сервер-sd
  Формат метки = "DailyVol_"
  Продолжительность использования объема = 23 часа
  Recycle = yes # Bacula может автоматически перерабатывать тома
  AutoPrune = yes # Удаление просроченных томов
  Удержание объема = 14 дней         
  Максимальное количество байтов тома = 50M # Ограничить размер тома чем-то разумным
  Максимальное количество томов = 1000 # Ограничение количества томов в пуле
  # -> макс. 50G
}

Бассейн {
  Имя = Еженедельный Пул
  Тип пула = резервный
  Хранилище = резервный сервер-sd
  Формат метки = "WeeklyVol_"
  Продолжительность использования объема = 23 часа
  Переработка = да
  Автоудаление = да
  Сохранение объема = 5 недель
  Максимальный объем байтов = 500M 
  Максимальные объемы = 80
  # -> макс. 70G
}

Бассейн {
  Имя = Месячный пул
  Тип пула = резервный
  Хранилище = резервный сервер-sd
  Формат метки = "MonthlyVol_"
  Длительность объемного использования = 2 дня
  Переработка = да
  Автоудаление = да
  Сохранение объема = 7 месяцев
  Байты максимального объема = 5G
  Максимальные объемы = 80
  # -> макс. 170G
}
 
Бассейн {
  Имя = HalfAnnualPool
  Тип пула = резервный
  Формат метки = "HalfannualVol_"
  Хранилище = резервный сервер-sd
  Длительность объемного использования = 3 дня
  Переработка = да
  Автоудаление = да
  Сохранение объема = 18 месяцев #1,5 года
  Максимальный объем байтов = 35G
  Максимальные объемы = 20
  # -> макс. 700G
}

Проблема, которую я вижу:

заключается в том, что инкрементная резервная копия всегда ссылается на последнюю инкрементную, дифференциальную или полную резервную копию и сохраняет только те файлы, которые изменились с тех пор. В моей схеме у меня есть два «разных» инкрементных бэкапа, ежедневный и еженедельный. Еженедельный всегда ссылается на ежедневный, который пришел накануне, верно? Когда я держу еженедельный файл более 4 недель (я выбрал 5 недель), а ежедневный - только более 10 дней (я выбрал 14 дней), ежедневные файлы будут удалены через 14 дней, но ежемесячный все еще ссылается на них . Значит будет "дырка"?

Я выяснил, возможно ли иметь несколько «уровней» инкрементных резервных копий, например, я мог бы сказать, что еженедельное инкрементное резервное копирование ссылается только на еженедельные резервные копии (уровень 0), а ежедневные инкрементные резервные копии — только на ежедневные (уровень 1). ) проблема исчезнет. Та же проблема возникала, когда я сохранял полную резервную копию для короткого замыкания.Например, если полная резервная копия перезаписывает единственную существующую, не останется полной резервной копии, на которую могла бы ссылаться дифференциальная резервная копия, и я потеряю все резервные копии, которые я сделал до этого момента.

Что я нашел:

Я поискал в интернете и нашел глава в бакула-документации: В нем говорится: «Теперь, поскольку каждый из этих различных видов сохранений должен оставаться действительным в течение разных периодов времени, самый простой способ сделать это (и, возможно, единственный) — создать отдельный пул для каждого типа резервного копирования».

Мои вопросы:

  1. По сути, это означает, что нет другого решения, кроме единых полных, дифференциальных и чернильных пулов, описанных в главе документации bacula. Это правильно?
  2. Если это неверно, как я могу достичь своей цели с двумя разными инкрементными пулами?

Я также читал о базовых заданиях в документации bacula, это не правильно, но это идет в правильном направлении.

Большое спасибо за ваше время и помощь в чтении до сих пор.

Ps: я не носитель английского языка, и мне жаль, если я делаю ошибки. Если есть что-то, что вас действительно бесит, я хотел бы услышать от вас, чтобы улучшить свой английский.

Спасибо.

Рейтинг:0
флаг in
123

Я уже разобрался с этим с помощью списка рассылки bacula-user-mailinglist. Невозможно эффективно использовать несколько инкрементных пулов для одного задания. Я изменил свои настройки на это:

График{
  Имя = "GFSCycle"
  Включено = да

  # DailyCycle - объемы хранятся 40 дней
  Run = Level=Incremental Pool=DailyPool FullPool=HalfAnnualPool Priority=10 ежедневно в 03:00
  
  # MonthlyCycle - объемы хранятся 7 месяцев
  Run = Level=Differential Pool=MonthlyPool FullPool=HalfAnnualPool Priority=11 февраля-июня 1 в 03:00
  Run = Level=Differential Pool=MonthlyPool FullPool=HalfAnnualPool Priority=11 август-декабрь 1 в 03:00

  # HalfAnnualCycle - объемы хранятся 12 месяцев
  Запуск = Уровень = Полный пул = HalfAnnualPool Priority = 12 1 января в 03:00
  Запуск = Уровень = Полный пул = HalfAnnualPool Priority = 12 1 июля в 03:00


Бассейн {    
  Имя = DailyPool
  Тип пула = резервный
  Хранилище = резервный сервер-sd
  Формат метки = "DailyVol_"
  Продолжительность использования объема = 23 часа
  Recycle = yes # Bacula может автоматически перерабатывать тома
  AutoPrune = yes # Удаление просроченных томов
  Удержание объема = 40 дней
  Максимальное количество байтов тома = 50M # Ограничить размер тома чем-то разумным
  Максимальное количество томов = 3000 # Ограничение количества томов в пуле
  # -> макс. 150G
}

Бассейн {
  Имя = Месячный пул
  Тип пула = резервный
  Хранилище = резервный сервер-sd
  Формат метки = "MonthlyVol_"
  Длительность объемного использования = 2 дня
  Переработка = да
  Автоудаление = да
  Сохранение объема = 7 месяцев
  Байты максимального объема = 5G
  Максимальные объемы = 80
  # -> макс. 170G
}
 
Бассейн {
  Имя = HalfAnnualPool
  Тип пула = резервный
  Формат метки = "HalfannualVol_"
  Хранилище = резервный сервер-sd
  Длительность объемного использования = 3 дня
  Переработка = да
  Автоудаление = да
  Удержание объема = 12 месяцев
  Максимальный объем байтов = 35G
  Максимальные объемы = 20
  # -> макс. 700G 
}

сохранение файлов и заданий для одного клиента установлено на максимальное удержание тома.

-> Хранение файла = 12 месяцев , Хранение задания = 12 месяцев

Существуют также виртуальные полные резервные копии, которые могут пригодиться и более подробно объясняются по адресу: https://www.baculasystems.com/incremental-backup-software/

Еще раз большое спасибо всем участникам списка рассылки bacula-user-mailinglist, которые помогли мне разобраться.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.