Pull to refresh
2957.38
RUVDS.com
VDS/VPS-хостинг. Скидка 15% по коду HABR15

Тайм-капсула. Архив со сжатием файловой системы

Reading time7 min
Views11K


Тайм-капсула — слепок файловой системы (ФС), желательно с максимальным сжатием, на заданную дату/время. Используется для долговременного хранения в архиве, резервного копирования и восстановления в случае сбоя/потери данных. Нас интересует, как делать такие слепки самостоятельно и какие файлы получаются при этом.

Кто-то привык к обычному tar cvzf output.tar.gz /source/path для клонирования дисков, но есть более универсальный инструмент FSArchiver, который сохраняет файловые атрибуты, несколько файловых систем в одном архиве и контрольные суммы файлов с хорошим уровнем сжатия.

FSArchiver — архив файловой системы


FSArchiver делает копию файловой системы со сжатием в архив. Пакет присутствует во всех популярных дистрибутивах (Fedora, Debian, Ubuntu, OpenSUSE, ArchLinux, Gentoo).

sudo apt-get update
sudo apt-get install fsarchiver

В крайнем случае можно скачать исходники или бинарник из репозитория и распаковать в свою папку.



Утилита делает архив файловой системы, а не образ. Архив отличается от образа тем, что его можно распаковать на любом компьютере и накопителе, в том числе меньшего размера, чем оригинальный. Например, утилиты для резервного копирования вроде PartImage работают по другой схеме — они создают образ диска, а не архив ФС. Для установки этого образа нужно подгонять под него файловую систему, а на SSD меньшего размера он вообще не встанет.

Получение информации об установленных файловых системах:

$ sudo fsarchiver probe simple
[======DISK======] [=============NAME==============] [====SIZE====] [MAJ] [MIN]
[sda             ] [VMware Virtual S               ] [   500.00 GB] [  8] [  0]

[=====DEVICE=====] [==FILESYS==] [======LABEL======] [====SIZE====] [MAJ] [MIN] 
[loop0           ] [squashfs   ] [<unknown>        ] [     4.00 KB] [  7] [  0] 
[loop1           ] [squashfs   ] [<unknown>        ] [    61.89 MB] [  7] [  1] 
[loop2           ] [squashfs   ] [<unknown>        ] [   248.76 MB] [  7] [  2] 
[loop3           ] [squashfs   ] [<unknown>        ] [    81.26 MB] [  7] [  3] 
[loop4           ] [squashfs   ] [<unknown>        ] [   155.63 MB] [  7] [  4] 
[loop5           ] [squashfs   ] [<unknown>        ] [    43.63 MB] [  7] [  5] 
[loop6           ] [squashfs   ] [<unknown>        ] [    45.86 MB] [  7] [  6] 
[loop7           ] [squashfs   ] [<unknown>        ] [   284.00 KB] [  7] [  7] 
[loop8           ] [squashfs   ] [<unknown>        ] [    63.22 MB] [  7] [  8] 
[loop9           ] [squashfs   ] [<unknown>        ] [   284.00 KB] [  7] [  9] 
[loop10          ] [squashfs   ] [<unknown>        ] [    91.69 MB] [  7] [ 10] 
[loop11          ] [squashfs   ] [<unknown>        ] [    45.93 MB] [  7] [ 11] 
[loop12          ] [squashfs   ] [<unknown>        ] [   238.49 MB] [  7] [ 12] 
[loop13          ] [squashfs   ] [<unknown>        ] [   346.33 MB] [  7] [ 13] 
[sda1            ] [ext4       ] [<unknown>        ] [   220.60 GB] [  8] [  1] 
[sda2            ] [ext4       ] [<unknown>        ] [   286.00 MB] [  8] [  2] 
[sda3            ] [<unknown>  ] [<unknown>        ] [    95.00 MB] [  8] [  3] 
[sda4            ] [swap       ] [<unknown>        ] [     8.94 GB] [  8] [  4] 
[sda5            ] [ext4       ] [<unknown>        ] [   270.08 GB] [  8] [  5]

FSArchiver — простая и гибкая утилита, которая работает на уровне файлов и может восстановить данные даже в другой файловой системе, отличающейся от оригинала. То есть можно сделать бэкап всех файлов в системе EXT3 и распаковать их в ReiserFS, или наоборот. FSArchiver работает практически со всеми файловыми системами, которые поддерживают ядро Linux (ext2, ext3, ext4, reiserfs, reiser4, xfs, jfs, btrfs).

Например, архивация нескольких файловых систем в один файл:

fsarchiver savefs /mnt/backup/multple-filesystems.fsa /dev/sda1 /dev/sda2

В результате получается файл с расширением .fsa, внутри которого хранятся наши файловые системы.

Восстановление второй (1) файловой системы из архива:

fsarchiver restfs /mnt/backup/multple-filesystems.fsa id=1,dest=/dev/sdb1

Запрос информации об архиве:

fsarchiver archinfo /backup/backup-fsa/sysimg-t3p5g965-debian-20100131-0716.fsa

Пример выдачи
# fsarchiver archinfo /backup/backup-fsa/sysimg-t3p5g965-debian-20100131-0716.fsa
====================== archive information ======================
Archive type:                   filesystems
Filesystems count:              2
Archive id:                     4b610c6e
Archive file format:            FsArCh_002
Archive created with:           0.6.6
Archive creation date:          20100131-07:16:35
Archive label:                  debian-backup
Compression level:              7 (lzma level 1)
Encryption algorithm:           none

===================== filesystem information ====================
Filesystem id in archive:       0
Filesystem format:              ext3
Filesystem label:               boot
Filesystem uuid:                d76278bf-5e65-4568-a899-9558ce61bf06
Original device:                /dev/sda1
Original filesystem size:       961.18 MB (1007869952 bytes)
Space used in filesystem:       356.86 MB (374190080 bytes)

===================== filesystem information ====================
Filesystem id in archive:       1
Filesystem format:              ext3
Filesystem label:               debian
Filesystem uuid:                4b0da78f-7f02-4487-a1e2-774c9b412277
Original device:                /dev/vgmain/snapdeb
Original filesystem size:       11.81 GB (12682706944 bytes)
Space used in filesystem:       7.11 GB (7635599360 bytes)

При архивации сохраняются все стандартные атрибуты файлов Linux:

  • разрешения,
  • метки времени,
  • симлинки,
  • хардлинки,
  • расширенные атрибуты.

К сожалению, не поддерживаются атрибуты, специфические для конкретных файловых систем, таких как Btrfs.

Есть и некоторые другие ограничения: например, в FAT не поддерживаются загрузочные тома Windows, а клонирование NTFS декларируется как сугубо экспериментальная функция.

Другие функции:

  • несколько файловых систем на архив,
  • архивация ФС вместе с загрузчиком,
  • контрольные суммы для всего контента (заголовки, блоки данных, целые файлы),
  • восстановление повреждённого архива,
  • многопоточное сжатие lzo, gzip, bzip2, lzma/xz (самый медленный вариант — lzma/xz с максимальным уровнем компрессии).

Для защиты данных от повреждения FSArchiver использует два уровня контрольных сумм. В архив записывается 32-битный хеш для каждого блока и каждого файла. После восстановления 128-битная контрольная сумма всего архива сравнивается с оригинальной. В случае порчи одного файла остальные данные восстановятся без повреждений. Это отличает FSArchiver от обычных архиваторов, где один повреждённый байт портит все данные, записанные впоследствии.

▍ Для чего использовать


FSArchiver подходит для резервного копирования устройств, которые не примонтированы к системе или примонтированы в режиме read-only.

У него есть опция форсировать бэкап тома в режиме read-write, но здесь возможны проблемы с файлами, которые изменились во время процедуры резервного копирования. Для копирования динамического тома рекомендуется сначала сделать снапшот LVM:

lvcreate -L size -s -n snapname origlv

Это возможно только для логических томов LVM.

Ну или воспользоваться опцией для архивирования ФС в режиме read-write (если вы берёте риски на себя):

fsarchiver savefs /mnt/backup/multple-filesystems.fsa -A /dev/sda1 /dev/sda2

▍ Плюс шифрование


Получив итоговый файл, можно зашифровать его напрямую специализированной утилитой. Например, удобные инструменты для шифрования файлов — scrypt и age.

Хороший инструмент для безопасной передачи файлов — Taildrop от разработчиков сети Tailscale.


Как известно, Tailscale устанавливает зашифрованный туннель по протоколу WireGuard между отправителем и получателем в пиринговой mesh-сети. Центральные серверы в этой схеме отсутствуют. Таким образом, можно безопасно передавать файлы по туннелю между своими (или не своими) устройствами.

Тайм-капсулы для Windows


Теоретически, FSArchiver поддерживает операционные системы FAT и NTFS (экспериментально), так что можно сделать загрузочную флешку, загрузить FSArchiver и уже оттуда сделать копию файловой системы. Подробнее см. справку о клонировании NTFS.

В принципе, под Windows есть масса нативных инструментов для резервного копирования, в том числе клонирования и архивирования дисков. Среди них:


Но если запускать утилиту с загрузочной флешки, чтобы клонируемая система была в статичном режиме read-only, то в таком случае нет особой разницы, какой инструмент используется, нативный или нет. Главное, какие он поддерживает типы файловых систем.

Например, для восстановления данных с iOS и Android иногда используют инструмент UltData, который запускается из-под Windows и macOS.

Насколько крута ZFS


Когда мы говорим о сохранении изменений в ФС, нельзя не упомянуть о файловой системе ZFS, потому что там это буквально встроенное поведение по умолчанию.

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

Вот некоторые преимущества ZFS:

▍ Механизм копирования при записи


В отличие от обычных файловых систем, механизм «копирования при записи» в ZFS сначала записывает новую версию блока, а затем разблокирует старую версию.

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

Copy on Write (CoW) — фундаментальная основа всех уникальных функций ZFS.

▍ Прозрачное сжатие


Уровень компрессии можно задавать для каждого датасета:

zfs set compression=zstd hddPool/STALKERSoC

▍ Снапшоты


Тут тоже всё интуитивно понятно и просто. Снапшот отдельной папки с игрой:

zfs snapshot hddPool/STALKERSoC@AA2

Откат на предыдущую версию:

zfs rollback hddPool/STALKERSoC@AA2

Это далеко не полный список достоинств этой уникальной ФС, подробнее см. здесь.

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

Тайм-капсула как бизнес


Некоторые компании превратили софт для резервного копирования в облачную бизнес-модель. В принципе, это обычные хостеры, но они предлагают не просто хостинг, а «персональный облачный бэкап» как услугу. Например, такой сервис есть у Blackblaze. Пользователь ставит на своём компьютере программу, которая делает всё за него, включая автоматическую синхронизацию и резервное копирование.

За дополнительную плату ($2 в месяц) доступна версионность: старые версии файлов и удалённые файлы можно хранить до одного года вместо стандартных 30 дней. В условиях указано, что срок хранения можно продлить «до бесконечности». В принципе, нечто подобное предлагают и другие коммерческие сервисы для онлайн-бэкапов, такие как IDrive, Acronis Cyber Protect Home Office (бывший True Image), SpiderOak One Backup, OpenDrive и другие.

Понятно, что любая премиальная услуга стоит дороже, чем обычный хостинг. Версионность — стандартная функция той же ZFS или опенсорсного софта для хранения тайм-капсул и резервного копирования. Но для провайдера это лишняя возможность предложить «премиальную» услугу и взять дополнительную плату.

Если самостоятельно организовать хранилище, то оно может выйти дешевле и даже надёжнее, чем сторонний провайдер.

Telegram-канал с полезностями и уютный чат
Tags:
Hubs:
Total votes 44: ↑43 and ↓1+42
Comments19

Articles

Information

Website
ruvds.com
Registered
Founded
Employees
11–30 employees
Location
Россия
Representative
ruvds