Создание бэкапа с помощью 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 выгляди вот так

grsync1

grsync2

grsync3

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