Create backup file in linux

Простые инкрементальные бэкапы в Linux с помощью TAR и GPG

Обожаю UNIX-way, тут бэкапы можно делать значительно более гибкими.

Для бэкапа home директории я использую обычный tar с инкрементацией и шифрую его своим gpg ключом.

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

#!/bin/bash NOW=$(date +%Y%m%d%H%M) MNOW=$(date +%Y%m) BACKUP_HOME="/tmp/home/" EMAIL="devpew" ARCHIVES_DIR="/tmp/backup/" DOW=`date +%a` # Day of the week e.g. Mon DOM=`date +%d` # Date of the Month e.g. 27 DM=`date +%d%b` # Date and Month e.g. 27Sep if [[ ! -d $$ ]] then mkdir $$ else echo &>/dev/null fi tar --exclude-from=/home/dm/mybin/.backup.excludes -v -z --create --file $$/$.tar.gz --listed-incremental=$$/$.snar $BACKUP_HOME &> $$/$.log if [ $(ls -d $$/*.tar.gz 2> /dev/null | wc -l) != "0" ] then gpg -r $EMAIL --encrypt-files $$/*.tar.gz \ && rm -rf $$/*.tar.gz fi scp $$/$.tar.gz.gpg $$/$.snar dm@192.168.0.152:/home/dm/backup/$

Если нужен более гибкий инкремент второго уровня, например, по неделям, то можно использовать такие условия

DOW=`date +%a` # Day of the week e.g. Mon DOM=`date +%d` # Date of the Month e.g. 27 DM=`date +%d%b` # Date and Month e.g. 27Sep if [ $DOM = "01" ]; then echo 'this is monthly backup' fi if [ $DOW = "Sun" ]; then echo 'this is weekly backup' else echo 'this is daily backup' fi 

How it works

Теперь, коротко о том, что делает этот скрипт

Скрипт перейдет в указанную директорию для бекапов и создаст в ней директорию с именем года и месяца в формате “202205” если сейчас май 2022 года.

Далее все бэкапы за май будут находиться в этой папке.

Далее если в папке нет файла с инкрементом (например, мы впервые запустили скрипт или начался новый месяц) то у нас создастся полный бекап всей системы.

Читайте также:  Linux web system monitor

В дальнейшем при запуске этого скрипта будут создаваться инкременты от текущего полного бекапа

Кроме того появится файл с логом

После того как у нас сделался бекап, он у нас зашифруется нашим GPG ключом а файл TAR удалится.

После этого мы скопируем наш бэкап к нам на сервер

Exclude

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

➜ mybin cat /home/dm/mybin/.backup.excludes /tmp/home/Nextcloud /tmp/home/.cache /tmp/home/youtube-videos

Кроме того, ничего не будет работать, если вы поставите слэш в конце.

Например строка /tmp/home/Nextcloud будет работать, а вот строка /tmp/home/Nextcloud/ работать уже не будет. Так что будьте аккуратны

Если нужно распаковать

У нас делаются инкрементальные бекапы и шифруются. Если нам нужно получить данные, то для начала нам нужно расшифровать файл

Расшифровать можно командой

gpg --output 202205122134.tar.gz --decrypt 202205122134.tar.gz.gpg

После этого, начнем распаковывать tar начиная с самого первого. Для начала распаковываем архив от первого числа.

tar --extract --verbose --listed-incremental=/dev/null --file=202205010101.tar.gz

И после этого распаковываем остальные инкременты, если нужно восстановить состояние системы, например, на 11 число, то нужно последовательно распаковать tar-архивы со 2 по 11 в ту же папку

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

Или если вручную для вас это кажется слишком длительным процессом, можете накидать небольшой скрипт для распаковки. В простейшем случае так:

tar --extract --incremental --file file0.tar tar --extract --incremental --file file1.tar tar --extract --incremental --file file2.tar
for i in *.tbz2; do tar -xjGf "$i"; done;

Если нужно извлечь только конкретные каталоги из архива:

tar -xjGf levelX.tar --wildcards 'example/foo*' 'example/bar*'

Autorun

Если бы в убунте или дебиане, то вам нужно запускать этот скрпит через крон. В арче нет крона и автозапуск делается иначе. В этом примере будем запускать наш скрипт каждый день в 03:30

sudo nvim /usr/lib/systemd/system/backup.service
[Unit] Description=backup [Service] Type=simple ExecStart=/home/dm/mybin/backup
sudo nvim /usr/lib/systemd/system/backup.timer
[Unit] Description=my backup [Timer] OnCalendar=*-*-* 03:30:00 [Install] WantedBy=multi-user.target

После этого можем запустить наш сервис

sudo systemctl start backup.timer sudo systemctl enable backup.timer

После этого проверим добавился ли он командой

sudo systemctl list-timers --all
sudo systemctl status backup.timer

Remove old backups

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

Читайте также:  Восстановление ssd под linux

Источник

How to Create Backup with tar Command in Linux

Hello Linux Geeks, if you are looking for free command line backup tools on Linux systems then tar command is the solution for you. Tar command can create backup of your application, configurations files and folders of the system.

Tar stands for ‘ tape archive ’ and can archive multiple files and directories into a tar file. This tar can also be compressed using gzip and bzip2 compression utility. Once we have a tar backup ready then we can easily transfer it to remote backup server using scp or rsync commands.

In this post, we will demonstrate how to create backup with tar command in Linux.

How to create tar backup file?

To create a tar backup file, first identify the files and folders that would be part of your backup. Let’s assume we want to take backup of / home/linuxtechi , /etc and /opt folder. Run following tar command ,

$ sudo tar -cvpf system-back.tar /home/linuxtechi /etc /opt

This will create a tar ball in the present working directory. In above tar command, we have used following options

  • c – Create new archive
  • v – display verbose output while creating tar file
  • f – archive file name
  • p – preserve permissions

As you have seen that we have not used any compression options to compress tar file. So, to compress the tar backup file during the archive use -z ( gzip compression) or -j (bzip2 compression)

Creating tar backup along with gzip compression

Use ‘ z ’ in tar command to use gzip compression. This time tar backup file will have extension either .tgz or .tar.gz

$ sudo tar -zcvpf system-back.tgz /home/linuxtechi /etc /opt

Creating tar backup along with bzip compression

Use ‘ j ’ option in tar command to use bzip2 compression, this time tar backup file will have extension either .tbz2 or .tar.bz2

$ sudo tar -jcvpf system-back.tbz2 /home/linuxtechi /etc /opt

How to append a file to tar backup?

To append a file to the existing tar backup file, use ‘ -r ’ option, complete command would like below:

Читайте также:  Linux search and delete file

Let’s assume we want to append /root/app.yaml file to system-backup.tar, run

$ sudo tar -rvf system-back.tar /root/app.yaml

Note: We can not append files or folders to compressed tar backup as it is not supported.

How to exclude file while creating tar backup?

To exclude a file while creating tar backup, use ‘ -X ’ option followed by the exclude file. To use exclude feature we must create a exclude file which will have file name to be excluded.

$ cat exclude.txt /etc/debconf.conf /etc/hosts $

Run following command to exclude files mentioned in exclude.txt while creating tar backup of /etc

$ sudo tar -X exclude.txt -zcpvf etc-backup.tgz /etc

How to view the contents of tar backup?

To view the contents of tar backup, use ‘ -t ’ option, complete options would be ‘ -tvf ’. Example is shown below:

$ sudo tar -tvf system-back.tgz | grep -i etc/fstab -rw-rw-r-- root/root 665 2021-07-07 04:57 etc/fstab $

How to extract tar backup?

Use ‘ -x ’ option in tar command to extract tar backup, complete option would be ‘ -xpvf ’. Example is shown below

$ sudo tar -xpvf system-back.tgz

This command will extract system-back.tgz in the current working directory. In case you want extract it in a particular folder then use ‘ -C ’ option followed by the folder path. In the following example we are extracting system-back.tgz in /var/tmp folder.

$ sudo tar -xpvf system-back.tgz -C /var/tmp/ $ ls -l /var/tmp/

Extract-tar-backup-in-specific-folder

How to verify tar backup integrity?

For tar ball, use ‘-tf’ option and redirect the output to /dev/null file,

$ tar -tf system-back.tar > /dev/null

If above command does not generate any output on the screen then we can say that there is no corruption.

In case of corruption, we will get the output something like below,

Verify-Tar-Integrity-Linux

To verify the integrity of compressed tar backup, use following

$ gunzip -c system-back.tgz | tar -t > /dev/null
$ tar -tvf system-back.tbz2 > /dev/null

Above commands should not produce any output on the screen. In case, there is an output then we can say that there might be some corruption in compressed tar backup.

That’s all from this post, I hope you have found it informative. Please do share share your feedback and queries in below comments section below.

Источник

Оцените статью
Adblock
detector