Fsarchiver – это бесплатная программная утилита, которая позволяет нам создавать резервные копии на уровне файлов одной или нескольких файловых систем в одном архиве.

Одним из больших преимуществ такого типа резервного копирования является то, что мы можем восстановить его в файловой системе, меньшей чем исходная (но, конечно, достаточно большой, чтобы содержать все файлы); это обычно невозможно при выполнении резервного копирования на уровне блоков с использованием таких инструментов, как partclone или dd.

В этой статье мы узнаем, как установить и использовать приложение fsarchiver и его основные функции.

Как установить Fsarchiver в Linux

Установка fsarchiver очень проста. Приложение упаковано и доступно в репозиториях наиболее используемых дистрибутивов Linux, и готово к установке. Последняя версия программы 0.8.5; чтобы установить его на Fedora, мы запускаем следующую команду:

sudo dnf install fsarchiver

На Debian и производные, в зависимости от наших предпочтений, мы можем использовать aptitude или apt-get:

sudo apt install fsarchiver

Fsarchiver доступен в Extra репозитории ArchLinux; мы можем использовать pacman для его установки:

sudo pacman -S fsarchiver

Создание резервной копии с помощью Fsarchiver

Прежде всего, перед созданием резервной копии файловой системы мы должны быть уверены, что она не смонтирована или, по крайней мере она смонтирована в режиме только для чтения. Если указана соответствующая опция, fsarchiver может работать и на смонтированных файловых системах, но если мы хотим, чтобы наша резервная копия была согласованной, нам следует избежать этого сценария: если мы используем логические тома lvm, мы можем создать снимок файловой системы и запустить fsarchiver, в противном случае мы должны создать резервную копию из «live» среды.

FSArchiver поддерживает несколько типов файловых систем, таких как ext4, ext3, xfs, btrfs, reiserfs. Приложение может работать в многопоточном режиме и по умолчанию настроено на сохранение стандартных и расширенных атрибутов файлов, используемых SELinux и ACL(Список контроля доступа). Файлы, содержащиеся в архиве, могут быть проверены с помощью контрольной суммы.

Для создания архива нам нужно использовать подкоманду savefs и указать имя архива который будет создан, и исходную файловую систему, из которой мы хотим сделать резервную копию.

Для резервного копирования файловой системы ext4 на устройстве /dev/sda3 мы запустим вот такую команду:

sudo fsarchiver savefs -v /path/to/backup.fsa /dev/sda3

Синтаксис программы очень прост. Единственная опция, которую мы предоставили в приведенном выше примере -v: это заставит программу работать в подробном режиме, и мы сможем увидеть операцию, выполняемую для каждого файла, и ее ход.

В качестве первого аргумента команды мы указали путь к архиву резервной копии и использовали .fsa суффикс после его имени. Использование суффикса произвольно: это просто соглашение, но может быть полезно, чтобы легко запомнить как был создан файл.

После запуска команды, первое что сделает программа, – проанализирует файловую систему. Затем она продолжит фактическую операцию резервного копирования, как мы можем видеть из вывода:

Analysing filesystem on /dev/sda3...
====================== archiving filesystem /dev/sda3 ======================
-[00][ 0%][DIR ] /
-[00][ 0%][DIR ] /lost+found
-[00][ 0%][DIR ] /egdoc
-[00][ 0%][DIR ] /egdoc/Templates
-[00][ 0%][DIR ] /egdoc/Documents
-[00][ 0%][DIR ] /egdoc/Music
[...]

Хранение нескольких файловых систем в одном архиве

Хорошей особенностью fsarchiver является возможность хранить несколько файловых систем в одном архиве. Если происходит что-то плохое, и нам нужно восстановиться из резервной копии, все что нам нужно сделать, – это сослаться на файловую систему по ее индексу внутри архива. Для резервного копирования сразу нескольких файловых систем мы просто указываем их одну за другой:

sudo fsarchive savefs -v /path/to/backup.fsa /dev/sda2 /dev/sda3

Использование сжатия

Мы почти всегда хотим, чтобы наш архив резервных копий был сжат, чтобы сэкономить место. Fsarchiver поддерживает два варианта управления сжатием:

-z (–compress)
-Z (–zstd)

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

Сжатие с опцией -z

–compress – Вариант (-z) принимает степень сжатия от 0 до 9. Каждый уровень соответствует алгоритму сжатия, используемому в определенном режиме:

0 Использовать lz4 алгоритм
1 Использовать lzo с уровнем сжатия-3
2 Использовать gzip с уровнем сжатия-3
3 Использовать gzip с уровнем сжатия-6
4 Использовать gzip с уровнем сжатия-9
5 Использовать bzip2 алгоритм с уровнем-2
6 Использовать bzip2 алгоритм с уровнем-5
7 Использовать lzma с уровнем сжатия-1
8 Использовать lzma с уровнем сжатия-6
9 Использовать lzma с уровнем сжатия-9

Чем выше значение, которое мы предоставляем опции -z, тем лучше сжатие которое мы получим, за счет увеличения времени и использования памяти. Меньшие значения вместо этого будут создавать большие архивы за меньшее время и с меньшим использованием ресурсов.

Сжатие с опцией -Z

Другой параметр, который мы можем использовать для указания уровня сжатия с помощью fsarchiver, это –zstd. Эта опция принимает диапазон значений от 0 до 22. Уровень, передаваемый параметру, не будет определять, какой алгоритм используется, но он будет просто использоваться в качестве zstd уровня сжатия.

Исключить файлы из резервной копии

В некоторых случаях мы можем захотеть исключить определенные файлы из резервной копии по разным причинам. Например, при создании резервной копии корневого раздела системы мы хотим исключить так называемые псевдофайловые системы, такие как /dev и /proc, которые являются представлениями устройств и процессов, управляемых ядром.

Чтобы исключить файлы из резервной копии, мы должны использовать опцию -e (сокращение от –exclude) и предоставить шаблон исключения. Файлы и каталоги, соответствующие этому шаблону, будут исключены из резервной копии.

Скажем, например мы хотим исключить любой файл с расширением «.bk» из нашей резервной копии, мы запустим:

sudo fsarchiver savefs -v /path/to/backup.fsa /dev/sda3 --exclude="*.bk"

Работа в многопоточном режиме

Как уже упоминалось выше, fsarchiver может создавать или восстанавливать резервные копии в многопоточном режиме на машинах с несколькими ядрами ЦП. Опция, которая управляет этой функцией – -j( –jobs): она принимает количество потоков для использования в качестве аргумента. Рекомендуемое значение обычно равно количеству доступных логических процессоров – 1.

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

Шифрование архива резервной копии

Fsarchiver имеет возможность шифровать данные, сохраненные в архиве резервных копий. Чтобы использовать эту функцию, мы должны использовать опцию -c или ее длинную форму: –cryptpass и передать пароль шифрования в качестве аргумента. Пароль может содержать от 6 до 64 символов или один тире ( -). Если последнее предусмотрено, пользователю будет предложено ввести пароль в интерактивном режиме:

sudo fsarchiver savefs -v /path/to/backup.fsa /dev/sda3 --cryptpass -
Enter password:
Confirm password:
Analysing filesystem on /dev/sda3...
[...]

Та же опция и пароль должны быть использованы при восстановлении резервной копии.

Проверить существующий архив

До сих пор мы видели, как создать резервный архив. После того, как архив создастся, мы можем проверить его содержимое с помощью FSArchiver выделенной субкоманды: archinfo. Все что мы должны сделать, это передать путь к архиву в качестве аргумента. Следуя нашему предыдущему примеру, мы запустим:

fsarchiver archinfo /path/to/backup.fsa

Вывод команды будет выглядеть примерно так:

====================== archive information ======================
Archive type: filesystems
Filesystems count: 2
Archive id: 5e7934e4
Archive file format: FsArCh_002
Archive created with: 0.8.5
Archive creation date: 2020-03-20_19-51-05
Archive label:
Minimum fsarchiver version: 0.6.4.0
Compression level: 8 (zstd level 8)
Encryption algorithm: none

===================== filesystem information ====================
Filesystem id in archive: 0
Filesystem format: ext4
Filesystem label:
Filesystem uuid: 69d250a7-16d0-47fd-8ca2-6513d32c1e5a
Original device: /dev/sda2
Original filesystem size: 34.20 GB (36722737152 bytes)
Space used in filesystem: 6.15 GB (6608547840 bytes)

===================== filesystem information ====================
Filesystem id in archive: 1
Filesystem format: ext4
Filesystem label:
Filesystem uuid: ec7d21e9-56b8-4fef-abc7-d9da2a4ad45c
Original device: /dev/sda3
Original filesystem size: 14.70 GB (15786254336 bytes)
Space used in filesystem: 3.29 GB (3536240640 bytes)

В первом разделе вывода мы находим общую информацию об архиве, как дату создания и уровень сжатия; после этого мы можем получить информацию для каждой файловой системы, сохраненной в архиве. Среди прочего мы можем видеть числовой идентификатор, присвоенный файловой системе, ее UUID формат, (в данном случае ext4), путь к исходному устройству, общий размер файловой системы и используемое на нем пространство. Возможность идентифицировать файловые системы по идентификатору необходима для восстановления резервной копии: как это сделать, мы увидим в следующем разделе.

Восстановление резервной копии

Чтобы восстановить резервную копию, созданную с помощью fsarchiver, мы должны использовать подкоманду restfs. В качестве первого аргумента мы указываем путь к резервной копии архива, идентификатор архива файловой системы, которую мы хотим восстановить, и целевое устройство. Следуя приведенному выше примеру для восстановления резервной копии, которую мы сделали для файловой системы на /dev/sda2 устройстве, мы запустим:

sudo fsarchiver restfs /path/to/backup.fsa id=0,dest=/dev/sda2

Чтобы восстановить несколько резервных копий в их соответствующие места назначения, нам нужно только повторить id,dest шаблон:

sudo fsarchiver restfs /path/to/backup.fsa id=0,dest=/dev/sda2 id=1,dest=/dev/sda3

С помощью приведенной выше команды мы восстановим первую резервную копию в архиве в /dev/sda2 раздел, а вторую – /dev/sda3.

Очень важно отметить, что при восстановлении fsarchiver не только восстанавливает файлы, но и воссоздает исходную файловую систему. Это очень полезно, потому что например, устраняет необходимость корректировать файл /etc/fstab, который обычно должен обновляться новыми файловыми системами UUID.

Вывод

В Linux существует множество решений для резервного копирования с открытым исходным кодом; в этой статье мы говорили fsarchiver. Мы увидели, как установить программу в наиболее распространенных дистрибутивах Linux, и как использовать ее для создания резервной копии, которая также может быть зашифрована. Мы увидели, как проверить архив резервных копий и как восстановить содержащиеся в нем файловые системы.

А как вы делаете резервные копии? Какими инструментами пользуетесь?