Люди поділяються на 2 типи: ті що не роблять бекапи, і ті що вже роблять.
Свого часу в мене накрився мідним тазом жорсткий диск і з того часу я перейшов у другий тип людей. Але використовувати якусь графічну програму - це не цікаво, тому вирішив написати свій невеличкий скрипт, який буде вміти усе що мені необхідно і нічого лишнього.
Для початку визначимося яким саме методом будемо передавати дані. Якщо щоразу перекопійовувати з заміною усе, то це займатиме дууууже бугато часу й навантажуватиме дискову підсистему лишній раз. Тому необхідно перед копіюванням файлу перевірити чи він не був змінений з моменту останньої резервної копії. І щоб не винаходити велосипеда використаємо чудову утиліту rsync. Бонусом вона вміє копіювати дані як локально, так й через ssh і rsh.
Створимо наш sh-скрипт:
#!/bin/bash
SOURCE=$HOME # Звідки копіюємо
DEST="/media/user/HDD/.backup" # куди (локально)
# DEST="user@192.168.0.1:/home/user/backup # і віддалено
rsync -ahu --info=progress2 --partial --delete-during --delete-excluded --exclude-from=backup.exclude $SOURCE $DEST
Трішки про використані параметри:
-a - archive mode: рекурсивно, з копіюванням символічних посилань, прав доступу, часу модифікації, груп, власника, файлів-пристроїв і спеціальних файлів;
-h - human-readable: показувати усі розміри в "людському" форматі :) ;
-u - update: пропускати, якщо в призначенні файл новіший ніж в джерелі;
--info=progress2 - показ поступу передачі (є інші варіанти);
--partial - залишати частково передані файли (під час наступної передачі їх почне передавати з місця зупинки)
--delete-during - видаляти застврілі файли під час передачі
--delete-excluded - видаляти файли, які містяться в списку ігнорованих
--exclude-from=backup.exclude - список ігнорованих файлів. Можна гнучко налаштувати, ось для прикладу мій файл:
- .* ігнорувати усі приховані файли
- *.vdi ігнорувати усі .vdi-файли
- *.avi ігнорувати усі .avi-файли
- *.mkv ігнорувати усі .mkv-файли
- *.torrent ігнорувати усі .torrent-файли
- *.iso ігнорувати усі .iso-файли
- Programs/* ігнорувати файли в папці Programs
+ Programs/Multiboot/ але в підпапці Multiboot не ігнорувати
- Videos/* ігнорувати файли в папці Videos
- Downloads/* ігнорувати файли в папці Downloads
На цьому можна було б завершити, але ігноровані файли хоч не надто важливі, проте непогано було б знати хоч їхні імена, щоб в разі втрати можна було швиденько завантажити із всесвітньої павутини. Для цього використаємо утиліту tree, яка генерує гарне дерево файлів:TEMPDIR=$HOME/.temp-backup # Тека для тимчасових файлів
mkdir $TEMPDIR # створимо її
# Створимо тимчасові файли:
PROG=$(mktemp --tmpdir=$TEMPDIR) # для списку програм
VIDEO=$(mktemp --tmpdir=$TEMPDIR) # відеофайлів
ALL=$(mktemp --tmpdir=$TEMPDIR) # і усіх файлів (про всяк випадок)
# Збережемо дерева файлів:
tree -inR -o $PROG --dirsfirst $SOURCE/Programs/
tree -inR -o $VIDEO --dirsfirst $SOURCE/Videos/
tree -hnRs -o $ALL --dirsfirst --du $SOURCE
# Скопіюємо їх в папку призначення (локально):
cp $PROG $DEST/Programs.txt
cp $VIDEO $DEST/Videos.txt
cp $ALL $DEST/All.txt
# # Скопіюємо по SSH:
# sftp $DEST <<EOF
# put $ALL All.txt
# put $PROG Programs.txt
# put $SOUND Sounds.txt
# put $VIDEO Videos.txt
# EOF
rm -r $TEMPDIR # Видаляємо тимчасові файли
Ось тепер можна повісити даний скрипт на cron, або ж запускати час від часу вручну і не переживати за свої дані ;)
Коментарі
Дописати коментар