Backup one directory 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 года.

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

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

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

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

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

Читайте также:  Где хранятся команды linux

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

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

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

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

Источник

How to backup your home directory in Linux

Feature image for the article about how to backup your home directory in Linux

Got the itch for a little Linux distro-hopping? I know the feeling. We get spoiled with so many wonderful new Linux distribution releases throughout the year. It’s hard to resist the temptation. I typically first spin them up in VirtualBox. When it’s time to upgrade your daily driver PC, just make sure to first backup your personal data. This article explains step-by-step how to backup your home directory in Linux. We’ll use the rsync program in combination with an external USB drive.

Background

Throughout the year, several new Linux distributions release a new version. At the time of this writing Fedora 34 and Ubuntu 21.04 just got released. Within the next few months we can expect to see the release of openSUSE 15.3 and Debian 11.

Each time you read a Linux distribution’s installation or upgrade instructions, it emphasizes to always first backup your personal data. This makes sense, because if the installation or upgrade goes wrong, you might loose your personal data. However, most of these instructions unfortunately do not explain how to actually perform the backup of your personal data.

That’s where this article comes it. You’ll learn how to backup the home directory of your currently installed Linux system. Why the home ( /home ) directory? Assuming that you use Linux as a desktop PC, the home directory holds your personal data, so that’s the one to backup. In case you run Linux as a server, you might want to backup a different directory. For example /var/www for a web server.

What do you need

For backing up the home directory on your Linux system, we’ll use the rsync program. As the backup destination, we’ll use an external USB drive.

Читайте также:  Linux root samsung galaxy

Think of rsync as the Swiss army knife for copying files, both locally and remotely. Because rsync is such a popular and versatile tool, the majority of Linux distributions install it by default. To verify the availability of rsync on your Linux system, run the command:

This should output the location of the rsync, if installed. For example: /usr/bin/rsync . When the output does not show anything, then rsync is not installed on your Linux system. No problem, because we can quickly take care of this:

  • Ubuntu/Debian: sudo apt install rsync
  • openSUSE: sudo zypper install rsync
  • Fedora: sudo dnf install rsync

This article assumes that your USB drive is formatted using the EXT4 file system and mounted to directory /mnt/usbdrive . These previously published tutorials explain how you can do this:

Before you backup the home directory of your Linux system to the USB drive, make sure your personal data actually fits on the USB drive. Run the following command to determine the size of all data that resides in your home directory:

Backup the home directory of your Linux system

To backup the home directory of your Linux system with rsync, use the following rsync command syntax:

This copies all files and directories from the [SOURCE DIR] recursively to the [DESTINATION DIR] . While copying the data, rsync preserves information such as:

During the copy operation, rsync outputs and updates a progress bar. Especially handy when copying a larger set of files and directories.

The lost+found directory is located at the root directory of a partition on EXT based file systems. In case you mounted your Linux home directory on a separate partition, you should exclude it from the backup. This directory is only used by the fsck program to store potentially corrupted files.

Similar for the .cache directory. Applications store non-essential data in this directory. Your web browser caches web page data here to load the page faster on a subsequent visit, to name just one example. Not really needed in your backup, so this directory can be excluded.

In our example, we want to backup our /home directory (source) to the external USB drive mounted at /mnt/usbdrive (destination). The following command handles this backup operation:

Make sure to add the forward slash ( / ) at the end of the source and destination directories.

Terminal screenshot that shows the rsync command for creating a backup of the home directory of your Linux system, to an external USB drive.

Restore the home directory of your Linux system

Once you completed the new installation of your preferred Linux distribution, you can easily restore the backup of your home directory with rsync. Just run the same command that you used for the backup and simply swap the [SOURCE DIR] and [DESTINATION DIR] :

In fact, we can shorten this a bit. The data on your external USB drive won’t have a .cache directory. So there is no need to exclude it. It will have a lost+found directory though, because the external USB is EXT4 formatted. The final command to restore the home directory of your Linux system with rsync:

Again, make sure to add the forward slash ( / ) at the end of the source and destination directories.

Читайте также:  Installing software using linux

Terminal screenshot that shows the rsync command to restore the backup of your Linux home directory.

Wrap up

After working your way through this article, you learned how to backup the home directory of your Linux system to an external USB drive. The perfect first step before upgrading or installing a new Linux distribution on your PC.

Assuming that you mounted your external USB drive to /mnt/usbdrive , the command to backup your Linux home directory is:

To restore the contents of the backed up home directory to your newly installed or upgrade Linux system, you can run a similar command. You just need to swap the directory names. Optionally, you can also skip the exclusion of the .cache directory:

To emphasize one more time: don’t forget to add the forward slash ( / ) at the end of the source and destination directories.

PragmaticLinux

Long term Linux enthusiast, open source software developer and technical writer.

Источник

How to automatically backup files and directories in Linux

How to automatically backup files and directories in Linux - images/logos/linux.jpg

This article presents how to automatically backup files and directory in Linux. This method I am using to backup the ADMFactory.com blog.

Backup script

Step 1 — archive the content

Backing up your files using tar is very simple using the following command:

# tar -cvpzf /backup/backupfilename.tar.gz /data/directory

A real example would be backing up the HTML folder for your website, my case:

# tar -cvpzf /backup/admfactory.com.tar.gz /var/www/html

Note: make sure the destination folder exists first. If not create it using the following command:

Tar command explained

  • tar = Tape archive
  • c = Create
  • v = Verbose mode will print all files that are archived.
  • p = Preserving files and directory permissions.
  • z = This will tell tar that to compress the files.
  • f = It allows tar to get the file name.

Step 2 — create backup script

Now let’s add tar command in a bash script to make this backup process automatic. Also it good to add some dynamic value in the name to make sure there is no overwriting of backup files. e.g.

Create the file using vi editor and paste below script.

Paste the following script and change your details.

#!/bin/bash TIME=`date +%b-%d-%y` # This Command will read the date. FILENAME=backup-admfactory-$TIME.tar.gz # The filename including the date. SRCDIR=/var/www/html # Source backup folder. DESDIR=/backup # Destination of backup file. tar -cpzf $DESDIR/$FILENAME $SRCDIR

Note: I removed the v parameter for tar command line as is not needed.

Automation

In Linux, we can easily use the cron jobs in order to schedule task.

The cron jobs line has 6 parts see below explanation:

Minutes Hours Day of Month Month Day of Week Command 0 to 59 0 to 23 1 to 31 1 to 12 0 to 6 Shell Command

Open crontab editor utility:

Note: the edit rules are similar with vi editor.

Paste the following text in the editor:

# M H DOM M DOW CMND 00 04 * * * /bin/bash /backup.sh

This will run the script every day at 04:00:00.

For example, if you want to run the script only twice a week:

# M H DOM M DOW CMND 00 04 * * 1,5 /bin/bash /backup.sh

This will run the script at 04:00:00 every Monday and Friday.

Note: the only risk that can occur is to get out of disk memory if the source folder is big.

Источник

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