Как я делаю бекапы домашней системы Linux: простой пример инкрементального rsync + btrfs с zstd сжатием

от автора

Бекапы делать важно — пожалуйста делайте бекапы, иначе потеряете данные. Многие люди уже потеряли данные, а вы будьте умнее.

Мой скрипт:

# Start this script from the git folder of this script # This script accept path to the partition to backup (mounted) # Use this script NOT from the system you want to backup - boot from another system  if [ -z "$1" ]; then echo "Missing path of the source (what to backup)" exit 1 fi  BEFORE=$(df -h)  STARTED=$(date)  DATE=`date "+%Y-%m-%d"`  p=$(pwd)  cd $1 # Because rsync --exclude-from accepts only relative pathes, not absolute  rsync --archive --acls --xattrs --delete --progress --verbose --exclude-from=$p/exclude.txt --filter=':- .gitignore' --link-dest=$p/last --mkpath $1 $p/$DATE  ln --symbolic --force --no-dereference $DATE last  echo "Started at:   " $STARTED echo "Current time: " $(date)  echo "Before:  $BEFORE  Now: "  df -h  cd -  # How to restore: # # rsync --archive --acls --xattrs --progress --verbose <from> <to> # /etc/fstab: alter UUID # grub install (if new SSD) https://wiki.gentoo.org/wiki/Grub: #     grub-install # Note that if SSD is more than 2 GB - you cannot use MBR, only GPT with EFI partition (Thinkpag T430 supports UEFI boot) # emerge-webrsync # emerge --sync guru   # Documentation: # https://jumpcloud.com/blog/how-to-backup-linux-system-rsync # https://wiki.archlinux.org/title/rsync

Тут не просто копирование (с атрибутами — исполняемый файл или нет, чтение/запись) но и использование хардлинков с предыдущего бекапа — если файл не изменился — места в новом бекапе он не займёт — то есть в папке нового бекапа будут все файлы, но часть из них может быть хардлинками предыдущего бекапа. Хардлинки выглядят как обычные файлы. Это и имеется в виду под словом «инкрементально».

Из man:

—link-dest=DIR          hardlink to files in DIR when unchanged

Для экономии места и скорости — мы не хотим бекапить кеш и прочие ненужные файлы, мой exclude.txt:

dev/* proc/* sys/* run/* # Если всё-же запустили на рабочей системе, раньше я так делал  var/db/repos/gentoo var/db/repos/guru var/cache/distfiles/  tmp/* var/tmp  lost+found mnt/*  home/vitaly/.npm/ home/vitaly/.cache/  home/vitaly/.zoom/  home/vitaly/.mozilla/firefox/*/storage home/vitaly/.config/google-chrome/ home/vitaly/.config/chromium/ home/vitaly/.config/Microsoft/Microsoft Teams/ home/vitaly/.config/teams-for-linux/ home/vitaly/.config/Slack/ home/vitaly/.thumbnails/  home/vitaly/.cache/ home/vitaly/.local/share/TelegramDesktop/tdata/user_data/cache/ home/vitaly/.local/share/TelegramDesktop/tdata/user_data/media_cache/ home/vitaly/.local/share/Steam/ home/vitaly/.googleearth/Cache/ home/vitaly/.local/share/OMaps/ home/vitaly/.config/Audius/Cache/ home/vitaly/.config/YandexMusic/Cache/ home/vitaly/.config/vesktop/sessionData/Cache/ home/vitaly/.config/bilibili/Cache/ home/vitaly/.local/share/Trash/  home/vitaly/go/pkg/mod/cache/ home/vitaly/.cargo/registry/  home/vitaly/record/out/  home/vitaly/Desktop/unreal-5-4-4/

Также игнорируются файлы из .gitignore каждой папки.

Скрипт показывает df -h до и после — чтобы увидеть сколько места занял бекап.

Бекапить надо с другой системы; ну или желательно — рабочая система ведь создаёт файлы для процессов, а их бекапить смысла нет.

Бекаплю на отдельный старый HDD отформатированный в BTRFS — чтобы использовать ZSTD сжатие.

sudo apt install btrfs-progs -y # https://details.nl/install-and-use-btrfs-on-ubuntu-20-04-lts  sudo mkfs.btrfs /dev/sdX # Partitions are not needed  sudo mount -o compress-force=zstd:15 /dev/sdX /mnt # Max compression level is 15 # Дефолтное сжатие можно добавить в fstab

После бекапа можно увидеть как хорошо сжалось:

sudo apt install btrfs-compsize sudo compsize /mnt

Пример вывода:

   Processed 54036 files, 42027 regular extents (42028 refs), 27150 inline.    Type       Perc     Disk Usage   Uncompressed Referenced    TOTAL       73%      211G         289G         289G    zstd        28%       42M         148M         148M    none       100%      174G         174G         174G

Главное тут Perc — чем ниже этот процент тем лучше.

Для каждой папки с конфигами я использую git репозиторий — и вот такой подход для бекапа всей системы. Знаю есть много инструментов для бекапа, но у меня пока так просто — инкрементальный бекап через rsync в btrfs с максимальным сжатием.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Хорошее решение для бекапа всей системы?

87.5% Хорошее решение7
12.5% Плохое решение (пишите в коментарии как можно лучше)1

Проголосовали 8 пользователей. Воздержались 12 пользователей.

ссылка на оригинал статьи https://habr.com/ru/articles/929182/