Найти в Дзене

Snapshots на Btrfs

Добрый день дорогой читатель, данное повествование не является истиной в последней инстанции, это некая инструкция по работе со Snapshot'ами на файловой системы Btrfs (в основном для собственного использования) с пояснениями и все возможными мыслями. Действия будут происходить на виртуальной машине с Arch Linux (KVM/QEMU) для наглядности. Btrfs предоставляет мощный механизм создания снимков состояния (snapshots),
который работает на уровне файловых экстентов (частей файлов), а не на уровне блоков диска. Это делает создание снимков практически мгновенным и очень эффективным с точки зрения использования дискового пространства. Снимки (Snapshots) в Btrfs это, по сути, особый тип подтома (subvolume), который разделяет данные с исходным подтомом (или другим снапшотом) на момент своего создания. Работа со снимками (snapshots) на RAID-массиве организованный средствами Btrfs ничем не отличается от работы со снимками на обычном однодисковом Btrfs-томе. Механизм RAID прозрачен для файловой сис
Оглавление

Добрый день дорогой читатель, данное повествование не является истиной в последней инстанции, это некая инструкция по работе со Snapshot'ами на файловой системы Btrfs (в основном для собственного использования) с пояснениями и все возможными мыслями. Действия будут происходить на виртуальной машине с Arch Linux (KVM/QEMU) для наглядности.

Btrfs предоставляет мощный механизм создания снимков состояния (snapshots),
который работает на уровне файловых экстентов (частей файлов), а не на уровне блоков диска. Это делает создание снимков практически мгновенным и очень эффективным с точки зрения использования дискового пространства.

Снимки (Snapshots) в Btrfs это, по сути, особый тип подтома (subvolume), который разделяет данные с исходным подтомом (или другим снапшотом) на момент своего создания.

Работа со снимками (snapshots) на RAID-массиве организованный средствами Btrfs ничем не отличается от работы со снимками на обычном однодисковом Btrfs-томе. Механизм RAID прозрачен для файловой системы.

Ключевая особенность — это использование механизма Copy-On-Write (CoW), который означает:

  • Мгновенное создание: При создании снимка данные физически не копируются. Новый снимок просто содержит ссылки на те же блоки данных на диске, что и оригинал.
  • Эффективное использование места: Дополнительное место на диске начинает расходоваться только тогда, когда вы изменяете или удаляете файл в оригинальном подтоме или в его снимке.
  • Сохранение оригинальных данных: При изменении файла изменённые данные записываются в новое место, а старые данные остаются нетронутыми и доступными через снимок.

Основные понятия

  • Подтом (Subvolume): Независимая иерархия файлов и директорий внутри Btrfs-раздела, похожая на отдельную файловую систему или логический том (но реализованная более гибко). Снапшоты всегда делаются с подтомов.
  • Снимок (Snapshot): Тот же подтом, но с начальным содержимым, скопированным (логически) из другого подтома.

Что ж, довольно теории перейдем к практике. Предварительно подготовив btrfs раздел с подтомами (например из прошлой статьи Subvolume в Btrfs).

И так у нас имеется диск /dev/sdb отформатированный в Btrfs с созданными на нем подтомами (subvolume) @audio @video @soft @photo

Для работы со снимками и подтомами корневой подтом(ID5) должен быть смонтирован. Выполним условие с помощью команды монтирования:

sudo mount /dev/vdb /mnt/date

аналогичным образом смонтированы под тома, напомню команды

sudo mount -o subvol=@video /dev/vdb /mnt/video
sudo mount -o subvol=@audio /dev/vdb /mnt/audio
sudo mount -o subvol=@soft /dev/vdb /mnt/soft
sudo mount -o subvol=@photo /dev/vdb /mnt/photo

проверим все ли смонтировано командами

sudo lsblk /dev/sdb

или

sudo mount | grep /devsdb

и так все смонтировано и готово к работе

Создание снимков

Поговорим о снимках, они могут быть двух типов:

  • Снимок только для чтения (рекомендуется для бэкапов). Это безопасно, так как снимок нельзя случайно изменить.
    Синтаксис:
    btrfs subvolume snapshot -r [путь_оригинала] [путь_снимка]
    - r - снимок только для чтения
  • Снимок для чтения и записи (для создания рабочей копии или отката) Это позволяет вам работать с копией данных независимо от оригинала.
    Синтаксис:
    btrfs subvolume snapshot [путь_оригинала] [путь_снимка]

приступим, сделаем снимок с подтома @soft только для чтения и назовем его например @soft_backup-26-11-2025, выполнив следующую команду:

sudo btrfs subvolume snapshot -r /mnt/date/@soft /mnt/date/@soft_backup-26-11-2025

выполнив команду ниже увидим что появился новый подтом хотя это снимок тома

sudo btrfs subvolume list /mnt/date
-2

ну и самое главное давайте посмотрим детальную информацию подтома и снимка и сравним их выполнив следующие команды

sudo btrfs subvolume show /mnt/date/@soft
sudo btrfs subvolume show /mnt/date/@soft_backup-26-11-2025

и разберем их

-3

детальная информация за острим внимание на некоторых параметрах.

name - как уже догадались это имя подтома или снимка
UUID - аналогично, идентификатор подтома или снимка
Parent UUID - у снимка он заполнен это идентификатор подтома или снимка с которого снят снимок, то бишь идентификатор родительского подтома или снимка
Flags: readonly - говорит о том что снимок сделан только для чтения (то есть это backup)

сделаем снимок-копию подтома например @photo но с возможностью его изменять параллельно оригиналу

sudo btrfs subvolume snapshot /mnt/date/@photo /mnt/date/@photo_copy

посмотрим детали и сравним

sudo btrfs subvolume show /mnt/data/@photo
sudo btrfs subvolume show /mnt/data/@photo_copy
-4

ну и конечно же сравним детали снимков

sudo btrfs subvolume show /mnt/data/@soft_copy
sudo btrfs subvolume show /mnt/data/@video_backup-26-11-2025
-5

как видно из детальных параметров подтома @photo имеет снимок @photo_copy об этом нам говорит параметр snapshots, детальная информация снимка где параметр flags пустой говорит о том что снимок сделан как копия и его возможно изменять, то есть по сути напоминает скопированную директорию командой cp только средствами файловой системы Btrfs.

Ниже на скриншоте продемонстрировано что с ними можно работать независимо

-6

Удаление снимков

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

sudo btrfs subvolume delete /mnt/date/@photo_copy

Восстановление данных из снимка

Напрямую "откатить" активную файловую систему на место снимка одной командой нельзя (в отличие от LVM). Вместо этого вы работаете со снимком как с обычной директорией:

  • Копирование файлов: Вы можете просто скопировать нужные файлы или директории из папки снимка обратно в рабочий подтом, используя стандартные команды cp.
  • Замена подтома (продвинутый способ): Если нужно откатить весь подтом к состоянию снимка, процесс сложнее тут уже включаем логику:

вариант 1

Переименовываем текущий "поврежденный" "mysite" (на случай, если понадобится что-то оттуда вытащить)

sudo mv /mnt/date/@soft /mnt/date/@soft_broken

Переименовываем нужный снимок, чтобы он стал новым "soft"

sudo mv /mnt/date/@soft_backup-26-11-2025 /mnt/date/@soft

Если "поврежденный" не нужен удаляем его

sudo btrfs subvolume delete /mnt/data/@soft_broken

либо вариант 2

sudo btrfs subvolume delete /mnt/date/@soft

при удалеии тома снимки томов остаются действующими и делаем снимок со снимка только для чтения как копию

sudo btrfs subvolume snapshot /mnt/date/@soft_backup-26-11-2025 /mnt/date/@soft
-7

на скриншоте выше воспользовался вариантом 2, для наглядности выполнено дополнительно информативные команды для понимания.

Для системного раздела (корневой ФС) это требует загрузки с LiveCD или специфических утилит вроде snapper или более скромной по функционалу timeshift.

Резервное копирование снимков (btrfs send/receive)

Самая мощная функция Btrfs - возможность инкрементально отправлять снимки на другой Btrfs-том. Вы можете отправить разницу между двумя последовательными снимками на другой диск или даже на удаленный сервер.

Отправка снимка на внешний(другой) диск, предварительно смонтированный в /mnt/external_backup
Сначала отправляем первый (полный) снимок:

sudo btrfs send /mnt/date/soft_backup-26-11-2025 | sudo btrfs receive /mnt/external_backup

# Затем отправляем только изменения между первым и вторым снимком (инкрементально):

sudo btrfs send -p /mnt/date/soft_backup-26-11-2025 /mnt/date/soft_backup-27-11-2025 | sudo btrfs receive /mnt/external_backup
-8

Это позволяет создавать очень быстрые и компактные инкрементальные бэкапы всей подтомов файловой системы.

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