Постановка задачи: есть NAS WD EX4 объемом 18T. Он используется для хранения данных дизайн студии. Соответственно на нем хранятся текущие проекты и завершенные проекты. Хочется делать ежедневный бэкап данных для возможности откатиться на несколько дней назад. Однако для бэкапа нашелся только диск 3T. Как просто бэкапить только последние данные? Смириться с возможной потерей архивных данных можно, но терять текущие проекты недопустимо. Переносить данные из рабочих каталогов в архивные неудобно. Хотелось бы сделать бэкап абсолютно прозрачным для пользователей, которые привыкли к одной структуре каталогов и не хотят ее менять. Для решения используется адаптированный скрипт, описанный в http://habrahabr.ru/post/149059/. Неудобство описанного скрипта в том, что он копирует исходный каталог целиком, а мне нужно выбрать файлы по дате изменения. Привожу скрипт с моими правками:
#!/bin/sh date=`date "+%Y-%m-%d-%H%M%S"` SRC=/mnt/ex4 DST=/backup find $SRC -mtime -360 -type f > $DST/findlist rsync -ax --link-dest=../Latest --files-from=$DST/findlist / $DST/Processing-$d$ cd $DST mv Processing-$date $date rm -f Latest ln -s $date Latest
В принципе, ничего сложного нет. Есть только небольшие пояснения:
1) Вначале командой find формируется список файлов с датой изменения не более 360 дней, затем rsync копирует файлы из этого списка в каталог для бэкапа. Если файл уже был скопирован ранее, то создается жесткая ссылка. Это уменьшает время бэкапа и экономит место на диске.
2) Скрипт запускается по ночам cron-ом.