README.md

Установка (перенос) системы linux на btrfs subvolume

Установка/переустановка загрузчика grub с установленной на btrfs subvolume системой (смотрите параметры скрипта)

Управление снимками на btrfs

Версия stable: 20260211_01

Рекомендуется ознакомление с инструкцией в docx или pdf

GITFLIC: https://gitflic.ru/user/medved0001
Вконтакте: https://vk.com/medved0001
Статья на Habr: Habr

Описание

Не все инсталляторы linux могут установить систему на btrfs subvolume.

Данная инструкция и скрипт предназначены для переноса системы (установленной на btrfs раздел) на btrfs subvolume.

Также есть параметр только для установки/переустановки загрузчика grub.

Скрипт может не удовлетворять всем вашим потребностям. Например, не поддерживается работа с шифрованными разделами (LUKS) и системой установленной в MBR режиме.

Скрипт создает плоскую структуру subvolume (все subvolume расположены в корне раздела). Вложенные subvolume, где используется путь вместо имени, не допускаются.

Работа скрипта проверена на live инсталляторе:

  • Astra linux 1.8.4.48;
  • ALTLinux 11.2.

Проверен перенос систем:

  • Astra linux 1.8.4.48;
  • Debian 13;
  • ALTLinux 11.

ОС, установка которых выполняется не из live системы (например, установщик Debian installer), необходимо установить выполнив разбивку по аналогии с инструкцией, создав как минимум ESP раздел с точкой монтирования /boot/efi и btrfs раздел c точкой монтирования корня /. После установки перезагрузитесь в live систему и выполните скрипт.

Приведу пример установки Astra linux 1.8.

По любым вопросам и проблемам со скриптом обращайтесь в личные сообщения Вконтакте.

Инструкция к скрипту btrfs-autocreate-subvol

Установка системы

1.Выберите ручную разметку диска и откройте программу разметки.

Рекомендуется использовать последнее доступное ядро, т.к. в новых версиях обычно есть различные улучшения для btrfs. Пакет btrfs-progs в репозитории обычно соответствует последней доступной версии ядра.

2.Разметьте диск.

Обязательно создайте ESP раздел /boot/efi. Перенос установленной системы в MBR режиме не поддерживается.

На текущем этапе нужно создать btrfs раздел с точкой монтирования корня / и не создавать дополнительные subvolume. На 10.01.2026 инсталлятор не поддерживает прямую установку системы в subvolume.

Пример разметки есть в файле инструкции

3.Отключите перезагрузку ПК после завершения установки и начните установку системы.

4.Дождитесь завершения установки и не перезагружайте компьютер.

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

Скачайте скрипт btrfs-autocreate-subvol.sh и запустите его с параметрами.

Допустимые параметры запуска:

Переустановка GRUB

  • -rg "Значение"). Параметр для переустановки grub (Перенос системы на subvolume будет пропущен). В значении необходимо указать имя subvolume в котором находится система. Пример команды: ./btrfs-autocreate-subvol.sh -f -neb "astra" -ceb -rg "@"

Необязательные параметры при переносе

  • -amf) (alter move files) Альтернативный перенос файлов в subvolume. По умолчанию файлы в subvolume переносятся в рамках подключенного корневого раздела btrfs. Если вы укажите этот параметр, то каждый subvolume, перед переносом в него файлов, будет монтироваться в отдельный каталог с указанными вами параметрами монтирования для subvolume (могут быть применены не все параметры монтирования, т. к. subvolume будет смонтирован без отключения корня btrfs раздела).

  • -im) (installer mode) Параметр считывающий UUID системного btrfs и efi разделов из файла. Используется при установке системы. Если файл /tmp/uuid-system-part существует, то первая строка будет взята для определения системного btrfs раздела, а вторая для efi раздела. Подробно про внедрение данного скрипта в live installer astra linux будет описано в скрипте astra linux create iso.

  • -nsa) (no security attribute) Не выставлять атрибут безопасности security.PDPL на корень btrfs раздела для Astra linux. Укажите этот параметр, только если не будете использовать МКЦ/МРД. Без security.PDPL на Astra linux не будет работать МКЦ/МРД, но корректно восстанавливается снимок через Timeshift. Для работы со снимками, с учетом МКЦ/МРД, используйте родные команды btrfs или написанный мной скрипт btrfs-snapshot.

  • -mb "Значение") (mount btrfs) Добавить в fstab монтирование корня btrfs раздела по указанному вами пути. Путь должен начинаться со знака / и содержать только допустимые символы: A-Z a-z 0-9 . / _ -. Полезно при ручном создании/восстановлении снапшотов. При использовании Timeshift не нужно.

  • -ceb) (copy efi boot) Заменить файл /EFI/boot/bootx64.efi в ESP разделе файлом grubx64.efi созданным при установке grub.

Обязательные параметры при переносе

  • -f) (first) Автоматический выбор первого доступного btrfs раздела. Если этот параметр не указан, то должен быть указан -sbp.

  • -neb "Значение") (name efi boot) Имя efi загрузчика для установки grub. Обязательный параметр. Имена текущих загрузочных записей вы можете посмотреть через команду efibootmgr. Начиная с astralinux 1.8.3 в системе используется наименование загрузочной записи astra.

  • -sbp "Значение") (select btrfs part) Имя btrfs раздела с системой (например, nvme0n1p4). Если параметр не указан, то должен быть указан параметр -f.

  • -sp "Значение") (subvolume param) Значение в специальном формате для добавления строки монтирования в fstab и создания указанных subvolume (точка монтирования;имя subvolume;параметры монтирования;признак использования nocow;тип сжатия). Если не будет указан параметр -sp с точкой монтирования корня /, то будет использоваться значение по умолчанию: /;@;defaults;0;.

1)-Точка монтирования — Обязательное поле. Допустимые символы: A-Za-zА-Яа-я0-9./@_-

2)-Имя subvolume — Обязательное поле. Скрипт создает плоскую структуру subvolume (все subvolume расположены в корне раздела). Вложенные subvolume, где используется путь вместо имени, не допускаются. Допустимые символы: A-Za-z0-9.@_-

3)-Параметры монтирования — Необязательное поле. Если не указать, то будет использоваться defaults.

Многие параметры, например, nodatacow, nodatasum, compress не могут быть выставлены для отдельных subvolume, а применяются ко всей файловой системе.

Список всех параметров монтирования: https://btrfs.readthedocs.io/en/latest/Administration.html

4)-Признак использования nocow — Обязательное поле (0/1):

0 - Не выполнять изменения;

1 - Выставить атрибут nocow для subvolume. Атрибут добавляется командой chattr +C. nocow отключает копирование при записи и сжатие.

5)-Тип сжатия — Необязательное поле. Может принимать следующие значения:

lzo

zlib

zstd

no - отключить сжатие (эквивалент chattr +m)

пустое значение - ничего не делать

Если значение сжатия указано, то будет добавлен атрибут файловой системы командой: btrfs property set <PATH> compression <VALUE>. Атрибут установленный через btrfs property имеет приоритет над глобальными настройками монтирования, т.е., при установлении атрибута, параметр сжатия в fstab для этого subvolume учитываться не будет.

Рекомендуется:

  • вынести /home, /tmp, /var/cache, /var/log, /var/tmp в отдельные subvolume;
  • к /tmp, /var/cache, /var/log, /var/tmp указать признак использования nocow со значением 1;
  • Если используется swap файл, создать его на отдельном subvolume с применением nocow.

Пример полной команды: ./btrfs-autocreate-subvol.sh -f -ceb -neb "astra" -sp "/;@;;0;" -sp "/home;@home;;0;" -sp "/tmp;@tmp;;1;" -sp "/var/cache;@varcache;;1;" -sp "/var/log;@varlog;;1;" -sp "/var/tmp;@vartmp;;1;" -sp "/swap;@swap;;1;"

Пример полной команды: ./btrfs-autocreate-subvol.sh -f -ceb -neb "astra" -sp "/;@;space_cache=v2,nodiscard,relatime,compress=zstd;0;" -sp "/home;@home;nodiscard,relatime;0;" -sp "/tmp;@tmp;nodiscard,relatime;1;" -sp "/var/cache;@varcache;nodiscard,noatime;1;" -sp "/var/log;@varlog;nodiscard,noatime;1;" -sp "/var/tmp;@vartmp;nodiscard,relatime;1;" -sp "/swap;@swap;nodiscard,noatime;1;"

Если в переносимой системе будет найден вложенный subvolume var/lib/portables или var/lib/machines, создаваемые утилитами из пакета systemd-container, то он будет удален, если пуст, и создан пустой каталог по этому пути.

Перед переносом файлов создается снимок корня раздела. Если во время переноса будет ошибка, то будет запущено удаление содержимого в корне раздела, кроме созданного до переноса снимка корня.

Решение возможной проблемы создания EFI записи

В связи с существованием различных специфичных реализаций UEFI, на некоторых платах/виртуальных машинах при выполнении команды grub-install может не добавится загрузочная запись. По умолчанию UEFI обычно ищет /EFI/boot/bootx64.efi на ESP разделе.

Варианты решения (Зависит от реализации UEFI):

  • 1.Добавить запись через BIOS, указав нужный файл загрузчика (если поддерживается вашим BIOS);

  • 2.Заменить файл /boot/efi/EFI/boot/bootx64.efi файлом созданным grub (например /boot/efi/EFI/astra/grubx64.efi). Если смонтирован ESP раздел, то /boot/efi в пути не будет (можете использовать опцию -ceb при запуске скрипта);

  • 3.Оставить в каталоге /boot/efi/EFI только один загрузчик (Если смонтирован ESP раздел, то /boot/efi в пути не будет);

  • 4.Попробовать добавить запись через команду:

Внимание! Известны случаи повреждения firmware при использовании efibootmgr на некоторых устройствах с Phoenix UEFI.

efibootmgr -c -d /dev/sda -p 4 -L "ALTLinux" -l "\EFI\altlinux\grub64.efi"

  • 5.Для VirtualBox:

1-ый вариант выполнить в ещё загруженной системе:

  • echo "fs0:\EFI\altlinux\grubx64.efi" > /boot/efi/startup.nsh

Или то же самое сделать потом, из EFI Shell:

  • echo "fs0:\EFI\altlinux\grubx64.efi" > fs0:\startup.nsh

2-ый вариант выполнить замену файла /boot/efi/EFI/boot/bootx64.efi файлом созданным grub.

Подробнее про UEFI можно прочитать тут:

https://www.altlinux.org/UEFI

https://wiki.astralinux.ru/pages/viewpage.action?pageId=371804424

Управление снимками с помощью btrfs-snapshot

Рекомендуется ознакомление с инструкцией в docx/pdf.

Написанный мною скрипт для управления снимками btrfs. Работает на Astra linux с включенным МКЦ/МРД (не нужно отключать security.PDPL на корне раздела).

Скрипт работает с плоской структурой subvolume и снимков (все subvolume и снимки расположены в корне раздела). Вложенные, где используется путь вместо имени, не допускаются.

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

По умолчанию для неинтерактивного режима используется файл /etc/fstab в качестве источника subvolume и UUID разделов на которых они расположены.

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

export file_btrfs_part_list="путь-к-файлу"

В файле должна быть таже структура, что и в fstab, например:

UUID=98fb74e2-513c-4492-9df5-50c49e3a1539 / btrfs subvol=@

Параметры скрипта:

Создание снимка (-crw и -cro):

  • ./btrfs-snapshot.sh -crw "Имя-subvolume" - Будет создан снимок (чтение/запись) с именем “@snapshot_дата-время_имя-subvolume”.

  • ./btrfs-snapshot.sh -cro "Имя-subvolume" - Будет создан снимок (только чтение) с именем “@snapshot_дата-время_имя-subvolume”.

Восстановление снимка (--restore и --restore-last):

  • ./btrfs-snapshot.sh --restore "Имя-снимка" - Будет восстановлен снимок с указанным именем вместо subvolume указанного в конце имени снимка.

  • ./btrfs-snapshot.sh --restore-last "Имя-subvolume" - Будет восстановлен последний по дате снимок к указанному subvolume.

Список снимков (--list-snapshots):

  • ./btrfs-snapshot.sh --list-snapshots "Имя-subvolume" - Будет показан список снимков для указанного вами subvolume.

Перезагрузка после восстановления (–reboot должен быть указан до параметра –restore или –restore-last):

  • ./btrfs-snapshot.sh --reboot --restore "Имя-снимка" - Будет восстановлен снимок с указанным именем вместо subvolume указанного в конце имени снимка и выполнена перезагрузка

  • ./btrfs-snapshot.sh --reboot --restore-last "Имя-subvolume" - Будет восстановлен последний по дате снимок к указанному subvolume и выполнена перезагрузка

Список параметров запуска (-h или --help):

  • ./btrfs-snapshot.sh --help - Будет показан список параметров запуска.

Интерактивный режим (-i):

  • ./btrfs-snapshot.sh -i - Запуск скрипта в интерактивном режиме. При запуске в live системе доступен только интерактивный режим и он запускается по умолчанию.

Резервные копии системы с помощью Timeshift

Timeshift — удобная программа для создания резервных копий.Программа поддерживает несколько режимов работы:

  • 1.RSYNC

  • Снимки создаются путём копирования системных файлов при помощи rsync и создания жёстких ссылок на неизмененные файлы из предыдущего снимка;

  • Все файлы копируются при создании первого снимка. Последующие снимки являются инкрементальными. Неизменные файлы будут связаны с предыдущим снимком, если он доступен;

  • Системный раздел может быть отформатирован в любой файловой системе. Резервный раздел может быть отформатирован в любой файловой системе Linux, поддерживающей жесткие ссылки. Сохранение снимков на несистемный или внешний диск позволяет восстановить систему, даже если системный диск повреждён;

  • Можно задать исключения для файлов и каталогов для экономии дискового пространства.

  • 2.BTRFS

  • Снимки создаются с использованием встроенных средств файловой системы BTRFS;

  • Снимки создаются и восстанавливаются мгновенно (атомарная транзакция на уровне файловой системы);

  • Снимки сохраняются на том же диске, с которого они созданы (системном диске). Хранение на других дисках не поддерживается. Если системный диск выйдет из строя, снимки, хранящиеся на нём, будут потеряны вместе с системой;

  • Снимок можно передать на другой btrfs раздел (локально или через ssh) или сохранить в файл для последующего восстановления на другом ПК на диск с btrfs разделом. (ищите информацию о btrfs send и btrfs receive). Передаваемый через btrfs send снимок должен быть в режиме readonly. https://help.ubuntu.ru/wiki/btrfs.

  • Нет возможности исключать файлы и каталоги;

  • Размер снимков BTRFS изначально равен нулю. При изменении системных файлов, данные записываются в новые блоки данных, которые занимают дисковое пространство (копирование при записи). Файлы в снимке продолжают указывать на исходные блоки данных;

  • ОС должна быть установлена на раздел BTRFS с разбивкой на подразделы @ и @home.

Сборка deb пакета Timeshift для Astra/Debian из исходников

ВАЖНО: Timeshift создает, но не восстанавливает снимки на Astra linux в связи с особенностями МКЦ/МРД и меткой безопасности на корне раздела. На Astra linux рекомендуется управлять снимками вручную через команды btrfs.

  • 1.Скачайте исходный код Timeshift: https://github.com/linuxmint/timeshift

  • 2.Скачайте пакет timeshift_*.debian.tar.xz с файлами для сборки пакета: https://packages.debian.org/ru/sid/timeshift

  • 3.Распакуйте архив с исходным кодом Timeshift, например в $HOME/temp/timeshift-master

  • 4.Распакуйте содержимое архива timeshift_*.debian.tar.xz (каталог debian) в каталог с исходным кодом Timeshift с заменой всех файлов кроме changelog.

  • 5.В файле control по желанию вы можете поменять следующее:

  • В Maintainer и Uploaders поменять имя/почту. Например: local build <build@loc.local>;

  • В Build-Depends добавить строку gzip;
  • В Depends добавить строки debianutils и btrfs-progs | btrfs-tools.

  • 6.Если вы хотите, чтобы Timeshift создавал readonly снимки (рекомендуемое поведение. btrfs send работает только с readonly снимками), то внесите изменения в файл */src/Core/Main.vala:

  • Добавьте в строку содержащую btrfs subvolume snapshot параметр -r. Пример полной строки:

string cmd = "btrfs subvolume snapshot -r '%s' '%s' \n".printf(src_path, dst_path);

Для установки чтение/запись на subvolume вручную: sudo btrfs property set -ts <путь_к_снапшоту> ro false

Для установки только чтение на subvolume вручную: sudo btrfs property set -ts <путь_к_снапшоту> ro true

  • 7.Установите в систему необходимые для сборки пакеты:

apt update && apt -y install devscripts

apt update && apt -y install debhelper autotools-dev libgtk-3-dev pkg-config intltool fakeroot

apt update && apt -y install meson help2man gettext valac libvte-2.91-dev libgee-0.8-dev libjson-glib-dev libxapp-dev

  • 8.Запустите терминал в каталоге исходного кода Timeshift и выполните команду:

fakeroot ./debian/rules binary

Эта команда запустит компиляцию Timeshift и сборку пакета.

На выходе получаем deb пакет.

Резервные копии с помощью Snapper+snapper-rollback+Btrfs Assistant

Важно: Мне писали, что связка Snapper+snapper-rollback работает на Astra linux с МКЦ. Сам я не настраивал и не проверял данное решение.

Ссылка: snapper-rollback
Ссылка: snapper-in-debian-guide

Btrfs Assistant - это инструмент управления файловой системой BTRFS с графическим интерфейсом, который упрощает управление метаданными, снапшотами и другими функциями BTRFS. Современный фронтенд для Snapper и инструментов обслуживания Btrfs.

Инструкцию по компиляции Btrfs Assistant из исходников для Debian-based систем смотрите в pdf/docx файле.

Резервные копии с помощью easy-btrfs

easy-btrfs также, как и TimeShift не может восстанавливать снимки на Astra linux с security.PDPL (МКЦ/МРД).

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

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

Т.к. создаваемые easy-btrfs и TimeShift каталоги не имеют нужных атрибутов, то перенести в них subvolume у которых имеется security.PDPL атрибут (в котором записаны значения МКЦ/МРД) невозможно. В связи с чем алгоритмы, которые используют вложенную структуру хранения не будут работать.

Без security.PDPL, а также в других системах, easy-btrfs является еще одним вариантом для управления снимками.

Ссылка: easy-btrfs

Описание
Установка (перенос) системы linux на btrfs subvolume
Релизы
2026-02-11
последний
Конвейеры
0 успешных
0 с ошибкой
Разработчики