What is incremental backup in linux

How to Create and Restore Incremental Backups with Tar on Linux

Regularly backing up the system data is an essential part of any system administrator. There are two types of backup, incremental and full backup. Incremental backup is the advanced backup type that backup only the data that is created or modified since the last backup has been taken. This will save backup time and also save disk space.

There are several backup tools available in Linux. Among them, tar is one of the best and popular command-line tool used by System administrators to take a full and incremental backup.

In this post, we will show you how to create and restore the incremental backup with tar on Linux.

Create Data Files

For the purpose of this tutorial, we will create some files to perform the incremental backup.

First, create a data directory with the following command:

Next, create some files with the following command:

 
cd /backup/data cat /etc/sysctl.conf > test1.txt cat /etc/sysctl.conf > test2.txt cat /etc/sysctl.conf > test3.txt cat /etc/sysctl.conf > test4.txt cat /etc/sysctl.conf > test5.txt cat /etc/sysctl.conf > test6.txt

Create Level 0 Incremental Backup

A level 0 incremental backup is the base copy of all source files.

Let’s take an example to create an incremental backup of the data directory.

In this example, we will use the following argument:

  • data: We will take a backup of this directory.
  • /backup/data.tgz: We will compress the data directory in tgz format and save it inside /backup directory.
  • /backup/data.sngz: We will create a level 0 incremental backup and save it at /backup/data.sngz

Run the following command to perform the incremental backup:

 
cd /backup tar --verbose --verbose --create --gzip --listed-incremental=/backup/data.sngz --file=/backup/data.tgz data

You should get the following output:

 
tar: data: Directory is new drwxr-xr-x root/root 0 2021-03-04 11:11 data/ -rw-r--r-- root/root 2084 2021-03-04 11:10 data/test1.txt -rw-r--r-- root/root 2084 2021-03-04 11:10 data/test2.txt -rw-r--r-- root/root 2084 2021-03-04 11:10 data/test3.txt -rw-r--r-- root/root 2084 2021-03-04 11:10 data/test4.txt -rw-r--r-- root/root 2084 2021-03-04 11:10 data/test5.txt -rw-r--r-- root/root 2084 2021-03-04 11:11 data/test6.txt

Now, list the content of the incremental backup data from data.tgz file using the following command:

 
tar --list --incremental --verbose --verbose --file /backup/data.tgz

You should get the following output:

 
drwxr-xr-x root/root 67 2021-03-04 11:11 data/ Y test1.txt Y test2.txt Y test3.txt Y test4.txt Y test5.txt Y test6.txt -rw-r--r-- root/root 2084 2021-03-04 11:10 data/test1.txt -rw-r--r-- root/root 2084 2021-03-04 11:10 data/test2.txt -rw-r--r-- root/root 2084 2021-03-04 11:10 data/test3.txt -rw-r--r-- root/root 2084 2021-03-04 11:10 data/test4.txt -rw-r--r-- root/root 2084 2021-03-04 11:10 data/test5.txt -rw-r--r-- root/root 2084 2021-03-04 11:11 data/test6.txt

At above output indicate a list of all files and directory included in the backup archive. The letter Y indicates if the file is present in the archive.

Читайте также:  Alt linux смена пароля root

Create Level 1 Incremental Backup

In this section, we will create a level 1 incremental backup. We will use data.sngz snapshot file to perform this backup and create a new backup archive file named data1.tgz.

Before creating the incremental backup, delete one file and create a new file inside the data directory.

 
rm -rf /backup/data/test2.txt cat /etc/sysctl.conf > /backup/data/test7.txt

Run the following command to perfrom the incremental backup:

 
cd /backup tar --verbose --verbose --create --gzip --listed-incremental=/backup/data.sngz --file=/backup/data1.tgz data

You should get the following output:

 
drwxr-xr-x root/root 0 2021-03-04 11:30 data/ -rw-r--r-- root/root 2084 2021-03-04 11:30 data/test7.txt

As you can see, the above command will backup only the recent change that we have made after taking a level 0 backup.

You can check it with the following command:

 
tar --list --incremental --verbose --verbose --file /backup/data1.tgz

You should get the following output:

 
drwxr-xr-x root/root 67 2021-03-04 11:30 data/ N test1.txt N test3.txt N test4.txt N test5.txt N test6.txt Y test7.txt -rw-r--r-- root/root 2084 2021-03-04 11:30 data/test7.txt

In the above output, the letter N indicates if the file is not included in the archive.

Restore the Backup with Tar Incremental Backup

In order to perform restoration operations, you will need to remove the data directory. You can delete it with the following command:

To restore the data directory, first you will need to extract the data directory from level 0 backup. Because level 0 backup is the base of the data directory.

You can do it with the following command:

 
cd /backup tar --extract --listed-incremental=/dev/null --file data.tgz

You can now check the restored files with the following command:

You should get the following output:

 
-rw-r--r-- 1 root root 2084 Mar 4 11:10 test1.txt -rw-r--r-- 1 root root 2084 Mar 4 11:10 test2.txt -rw-r--r-- 1 root root 2084 Mar 4 11:10 test3.txt -rw-r--r-- 1 root root 2084 Mar 4 11:10 test4.txt -rw-r--r-- 1 root root 2084 Mar 4 11:10 test5.txt -rw-r--r-- 1 root root 2084 Mar 4 11:11 test6.txt

Now, extract the data from level 1 incremental backup using the following command:

 
cd /backup tar --extract --listed-incremental=/dev/null --file data1.tgz

You can now verify the data directory using the following command:

Читайте также:  Proxy all traffic linux

You will see you all restored data in the following output:

 
-rw-r--r-- 1 root root 2084 Mar 4 11:10 test1.txt -rw-r--r-- 1 root root 2084 Mar 4 11:10 test3.txt -rw-r--r-- 1 root root 2084 Mar 4 11:10 test4.txt -rw-r--r-- 1 root root 2084 Mar 4 11:10 test5.txt -rw-r--r-- 1 root root 2084 Mar 4 11:11 test6.txt -rw-r--r-- 1 root root 2084 Mar 4 11:30 test7.txt

Conclusion

In the above guide, you learned how to create an incremental backup using the tar command. You also learned how to perform restore operation using the tar command. I hope this incremental backup guide will save your lot of time and disk space.

Thank you for helping us improve!

Источник

Простые инкрементальные бэкапы в 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 года.

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

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

Читайте также:  Older versions of linux mint

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

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

После того как у нас сделался бекап, он у нас зашифруется нашим 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

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

Источник

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