LINUX.ORG.RU

Настройка btrbk на хранение N последних бекапов

 ,


0

2

Настраиваю бекапирование файловой системы ноутбука (btrfs) с помощью btrbk на внешний жесткий диск, подключенный по USB. Хочу, чтобы на жестком диске хранились N последних бекапов независимо от того, когда они были сделаны. Например, я бекаплюсь каждый день - значит на жестком диске должны сохраниться 3 последних дня. Если я по каким-то причинам месяц не бекапился и решил сегодня забекапиться, то на жестком диске должны остаться 2 бекапа с прошлого месяца и один сегодняшний.

В конфиге btrbk можно указать сколько часовых, дневных и месячных бекапов хранить. При этом, если я указываю target_preserve_min 3d, то все бекапы старше трех дней удаляются.

Подскажите пожалуйста, возможно ли реализовать желаемое поведение и если да, то как?

Странное поведение, причём документированное. Если не принципиально использовать именно фичи Btrfs, посмотри Restic или Borg, там retention работает более логично, при этом тоже есть снапшоты, дедупликация и компрессия, только без привязки к ФС.

anonymous
()

Отключи эту функцию у btrbk, и удаляй отдельным скриптом. Я таким скриптом пользуюсь чтобы лишние копии бекапов БД удалять:

_DDIR="/backup/db/"
num_backups_to_keep=7

_clean_arch() {                                                                                                                                                                                          
    DNAME=$1                                                                                                                                                                                             
    num_backups=$(ls -1 "$_DDIR" | grep -c "^$DNAME")                                                                                                                                                    
    num_backups_to_remove=$((num_backups - num_backups_to_keep))                                                                                                                                         
    if [ $num_backups_to_remove -gt 0 ]; then                                                                                                                                                            
        old_backups=$(ls -1 "$_DDIR" | grep "^$DNAME" | sort | head -n $num_backups_to_remove)                                                                                                           
        for old_backup in $old_backups; do                                                                                                                                                               
            rm "$_DDIR/$old_backup"                                                                                                                                                                      
            echo "Removed old backup: $old_backup"                                                                                                                                                       
        done                                                                                                                                                                                             
    fi                                                                                                                                                                                                   
} 

_clean_arch miniflux
ptah_alexs ★★★★★
()
Ответ на: комментарий от usermod

Что мешает написать скрипт, который будет проверять что там на диске, бекапить и удалять лишнее?

Ну так проще тогда вообще не использовать btrbk (что я и предложил выше).

anonymous
()
Ответ на: комментарий от usermod

Не, тут идея именно в использовании btrfs, которая дает консистентные снапшоты, инкрементальные бекапы и прочие штуки. Бекапилка в этом случае должна быть максимально простой, на это и был расчет.

Окей, если btrbk такой сложный - заменю его скриптом на bash, благо, поведение максимально простое: одной командой сделать снапшот, другой - отправить его на usb-диск, третьей - удалить старые снапшоты, если их больше, чем N штук.

Goganchic ★★
() автор топика
Ответ на: комментарий от Goganchic

Можно продолжать использовать btrfs и btrbk.

Просто не использовать его удаление старых копий. Делать это обвязкой на баше. Запускаешь не сам btrbk, а скрипт, в котором запускается btrbk и если тот отработал без ошибок, то дальше все тот же скрипт считает количество резервных корий и если их больше, чем надо, удаляет самые старые, сколько надо.

usermod
()