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

Кто-то привык к обычному 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-канал с полезностями и уютный чат

Комментарии (17)


  1. LevOrdabesov
    26.10.2022 15:27
    +1

    И до сих пор на живую не умеет, ридонли ему. Шёл 22 год. Эх.

    Для домашего Windows ПК есть home-freeware чудесный EaseUs ToDo backup. На живую умеет. Можно добавить в список.


  1. fk0
    26.10.2022 16:15

    dump и restore есть в любом юниксе и куда более пригодны для практического создания бэкапов, чем tar и тем более вот это.


  1. fk0
    26.10.2022 16:17

    Некоторые компании превратили софт для резервного копирования в облачную бизнес-модель.

    Ага, закачать бесплатно, а скачать обратно -- за круглую сумму, и/или на 90% всегда будет возникать ошибка.

    Из приличных таких компаний только Amazon, но там создание архива само по себе больно муторное занятие. И да, архивы дешевле чем S3, последнее дешевле чем EBS, а EBS дешевле хостинга.


    1. FreeNickname
      26.10.2022 20:54

      Ага, закачать бесплатно, а скачать обратно -- за круглую сумму, и/или на 90% всегда будет возникать ошибка.

      А Backblaze попадает в эту категорию? Я сам не пользовался, но рассматривал, но слышал хвалебные отзывы, вот и интересно. Восстановление бесплатное (можно скачать, можно получить USB-диск за деньги, которые вернут после возврата диска, но не знаю, работает ли за пределами США), абонентка.
      Вроде бы, перестали работать в России в последнее время, но я в целом интересуюсь.


    1. mumische
      27.10.2022 07:40

      У нас например для хранения в облаке Veeam Cloud Connect подключён, тарифицируется только по количеству виртуалок и объёму.


  1. denis-isaev
    26.10.2022 18:30

    Есть ли что-то наподобие KLS Backup для linux?
    Хочется иметь различные профили бекапов с различными настройками сборки/фильтрации файлов для бекапа и различными планировщиками + понятный GUI.
    В линуксе или клиент-серверный энтерпрайз с мануалами по 100 страниц или что-то совсем простое, а середину пока так и не нашел.


    1. LevOrdabesov
      26.10.2022 22:37

      Proxmox?


      1. denis-isaev
        26.10.2022 22:40

        Открыл их сайт, а там datacenter, remote, certificates, etc. Мне для десктопа и личного пользования )


        1. LevOrdabesov
          26.10.2022 22:50

          Urbackup? У него, правда, тоже клиент-серверная архитектура


          1. denis-isaev
            26.10.2022 22:54

            Ну да, он тоже выглядит монстром как для домашней бекапилки и заточен под массивы серверов. В домашней бекапилке хочется упор на другие фичи. Под виндой мне KLS казался отличным решением. Это одна из тех совфтин, аналог которой за годы на линуксе так и не нашел :(


    1. engine9
      26.10.2022 23:28

      1. denis-isaev
        26.10.2022 23:48

        У него настроек почти никаких нет. По крайней мере в гуях. Нельзя, к примеру, указать корневую диру, а в ней настроить исключения. К примеру бекапить рекурсивно диру projects, исключая .git на любом уровне вложенности, но не в случае с дирой important_project/.git ))


        1. engine9
          27.10.2022 09:25

          А через исключения тоже так не сделать? --exclude '.git/*' а важную папку прописать, наоборот, через включение --include

          Как я понимаю этих включений исключений может быть много в одной команде, я не спец по этой программе, не подскажу возможны ли их конфликты (исключений и включений). Но я думаю, что "для себя, для семьи" можно что-нибудь накостылить, например запуская rsync c разными опциями последовательно по скрипту.


          1. denis-isaev
            27.10.2022 12:25

            Накостылить и через консольку можно. Хочется решение, которое можно будет дать в пользование тем, кто в консоль не умеет ) KLS портанули бы )


    1. thevlad
      27.10.2022 00:02
      +1

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


      1. denis-isaev
        27.10.2022 02:58
        +1

        Ну так-то и rsync это умеет. Но чтобы все эти фичи были интегрированы в юзабельный gui, такого не встречал.


  1. Worky
    27.10.2022 22:58

    Чем tar не угодил по копированию всей фс?

    https://help.ubuntu.com/community/BackupYourSystem/TAR