Создание бэкапа с помощью rsync

Как я делаю бэкап.
У меня есть жесткий диск 3.5, специально большой, чтобы его с собой таскать было не удобно. Его я подключаю раз в месяц и делаю копию раздела /home на него.

Можно просто копировать, но мне нужно чтобы каждый раз копировались только измененные или добавленные файлы, и из архива удалялись файлы которых нет больше и на моем home.
То есть бэкап должен быть инкрементным.

Для этого существует множество утилит, с множеством различного функционала, но так как я это все делаю периодически, и подключаю диск вручную, то мне удобнее использовать rsync.

Определимся сразу, я копирую /home/goodigy в папку на подключенном диске /media/goodigy/backup_disk.

Чтобы начать копирование, нужно выполнить команду

rsync \
--archive \ 
--delete --delete-excluded \  
--progress \ 
"/home/goodigy/" \ 
"/media/goodigy/backup_disk" \  
--exclude='/docs/' 

Пояснения к опциям

  • --archive - сохранять всю дополнительную информацию о файлах сохраняются права доступа и информация о владельцах;
  • --delete

    --delete-excluded - удаление из резервной копии несуществующих в источнике и исключённых файлов;

  • --progress - выводить информацию о прогрессе передачи;

  • "/home/goodigy/" - каталог источник. Если каталог источник оканчивается на слэш, то сам каталог копироваться не будет, только файлы.
    Например, "/home/goodigy" - скопируются только файлы /media/goodigy/backup_disk/файлы, а для "/home/goodigy/" - скопируется и каталог /media/goodigy/backup_disk/goodigy/файлы.

  • "/media/goodigy/backup_disk" — каталог приемник, для текущей резервной копии;

  • --exclude='/docs/' - исключение ненужных каталогов и файлов. Выполняется по маске, а не по конкретному пути.  Маска задается относительно каталога источника, то есть /home/goodigy/ - корневой. Таким образом, --exclude='/docs/' означает исключить каталог docs. Если нужно оставить каталог, но исключить все файлы из него - '/docs/*'.
    Для исключения каталогов в названии которых есть docs - '/docs'.
    Вместо названия каталога можно указать **- все каталоги. Например, - '/docs/**/dir', исключить dir из всех каталогов.

    Чтобы лучше понять как это работает, лучше на создавать каталогов и файлов, и потренироваться на них. Мне это помогло.
    Некоторые рецепты можно посмотреть тут.

Еще существует много опций, но я ими не пользуюсь. Посмотреть их можно тут.

Также, существует графическая утилита на основе rsyncgrsync.

grsync в Ubuntu 14.04 выгляди вот так

Тут все предельно просто и понятно.

E-mail для связи: goodigy@goodigy.ru