Возьмем для примера папку home
Определим ее размер
du -sh /home/sysadmin
Если нужно узнать точное количество файлов и папок
find /home/sysadmin -type f | wc -l
find /home/sysadmin -type d | wc -l
Добавим директорию в архив и посмотрим получившийся объем
tar -cf /tmp/sysadmin.tar /home/sysadmin
du -h /tmp/sysadmin.tar
Чтобы извлечь архив
tar -xf sysadmin.tar
Чтобы извлечь в определенную папку
tar -xf /tmp/sysadmin.tar -C /home/sysadmin/backup
В нашем случае архив занимает немного, но в рабочей среде желательно использовать сжатие
gzip -k /tmp/sysadmin.tar // -k сохранит оригинал
или
bzip2 -k /tmp/sysadmin.tar
du -h /tmp/sysadmin.tar.gz
du -h /tmp/sysadmin.tar.bz2
В моем случае с 6.8M архив удалось сжать до 1.3 и 1.2
Совместим архивацию и сжатие
tar -czf /tmp/sysadmin.tar.gz -C /home/sysadmin . // точка в конце для того, чтобы в архив попало содержимое /home/sysadmin, а не весь путь. Другими словами, если вы распакуете архив, содержимое будет извлечено в текущую директорию, а не в подкаталог /home/sysadmin
Теперь создадим директорию для бэкапа, доработаем скрипт, добавив в него дату и хранение 5 последних копий и добавим в cron
mkdir /backup
nano backupscript
#!/bin/bash
DIR=backup/
DATE=$(date +'%d.%m.%Y_%H.%M' ) // внимательно с '
FILE=$DIR/$(hostname)+$DATE
find backup/ -mtime +4 -delete
tar -czvf $FILE.tar.gz -C /home/sysadmin . &> $FILE.log
chmod +x backupscript
./backupscript
du -h backup/
cat backup/*name*.log
Посмотрим время и добавим в cron
date
crontab -e
23 15 * * * /home/sysadmin/backupscript
Ждем, проверяем и видим, что создан новый бэкап
Теперь сделаем наш бэкап инкрементальным. Инкрементальный бэкап включает только изменившиеся с момента последнего бэкапа файлы. Это позволяет экономить время и дисковое пространство, а также снижает нагрузку на сеть, так как не нужно каждый раз делать полную копию всех данных.
cd Documents
touch file{1..10}
for i in {1..10}; do dd if=/dev/urandom of=file${i}.dat bs=1M count=10; done
cd ..
tar -czf Documents.tar.gz -g Documents.snar -C Documents/ .
Выполним
du -h Documents.*
4.0K Documents.snar
101M Documents.tar.gz
Еще раз
tar -czf Documents2.tar.gz -g Documents.snar -C Documents/ .
du -h Documents2.*
4.0K Documents2.tar.gz
tar -tf Documents2.tar.gz -g /dev/null -vv
Добавим и удалим файлы
for i in {11..15}; do dd if=/dev/urandom of=file${i}.dat bs=1M count=5; done
rm file10.dat file5.dat file6.dat
tar -czf Documents3.tar.gz -g Documents.snar -C Documents/ .
du -h Documents3.tar.gz
26M Documents3.tar.gz
tar -tf Documents3.tar.gz
./
./Documents.snar
./Documents3.tar.gz
./file11.dat
./file12.dat
./file13.dat
./file14.dat
./file15.dat
Теперь процесс восстановления таких бэкапов
Восстанавливать нужно в определенном порядке
tar -xf Documents.tar.gz -g /dev/null -C Documents/ -v
tar -xf Documents3.tar.gz -g /dev/null -C Documents/ -v
du -h Documents*
96M Documents
4.0K Documents2.tar.gz
26M Documents3.tar.gz
4.0K Documents.snar
101M Documents.tar.gz
Самостоятельно можно доработать скрипт выше, добавив в него инкрементальные бэкапы. В продакшн среде лучше использовать профессиональные средства резервного копирования, но для общего понимания, знать информацию выше необходимо.