Установка (перенос) системы linux на btrfs subvolume
Установка/переустановка загрузчика grub с установленной на btrfs subvolume системой (смотрите параметры скрипта)
Версия stable: 20250919_01
Рекомендуется ознакомление с инструкцией в docx или pdf
GITFLIC: https://gitflic.ru/user/medved0001
Вконтакте: https://vk.com/medved0001
Описание
Не все инсталляторы linux могут установить систему на btrfs subvolume.
Данная инструкция и скрипт предназначены для переноса системы (установленной на btrfs раздел) на btrfs subvolume.
Также есть параметр только для установки/переустановки загрузчика grub.
Работа скрипта проверена на live инсталляторе 1.8.3.
Проверен перенос систем:
- Astra linux 1.8.3;
- Debian 12.6.
Приведу пример установки Astra linux 1.8.3.
По любым вопросам и проблемам со скриптом обращайтесь в личные сообщения Вконтакте.
Инструкция
Установка системы
1.Выберите ручную разметку диска
2.Разметьте диск.
На текущем этапе нужно создать btrfs раздел с точкой монтирования корня / и не создавать дополнительные subvolume. На текущий момент инсталлятор не поддерживает прямую установку системы в subvolume.
Пример разметки есть в файле инструкции
3.Начните установку системы.
4.Дождитесь завершения установки и не перезагружайте компьютер.
Скрипт с автовыполнением по заданным параметрам
Скачайте скрипт btrfs-autocreate-subvol.sh. Скрипт необходимо запустить с параметрами.
Допустимые параметры запуска:
-
-im) Параметр считывающий UUID системного btrfs и efi разделов из файла. Используется при установке системы. Если файл/tmp/uuid-system-partсуществует, то первая строка будет взята для определениясистемного btrfs раздела, а вторая дляefi раздела. Подробно про внедрение данного скрипта вlive installer astra linuxбудет описано в скриптеastra linux create iso. -
-f) Автоматический выбор первого доступного btrfs раздела. Если этот параметр не указан, то должен быть указан-sbp. -
-mb) Добавить в fstab монтирование корня btrfs раздела в/mnt/root_btrfs. Полезно для быстрого доступа к корню раздела для создания/восстановления снапшотов. -
-ncs \"Значение\"). Параметр для переустановки grub (Перенос системы на subvolume будет пропущен). В значении необходимо указать имя subvolume в котором находится система. Пример команды:./btrfs-autocreate-subvol.sh -f -neb "astra" -ceb -ncs "@" -
-ceb) Заменить файл/EFI/boot/bootx64.efiвESPразделе файломgrubx64.efiсозданным при установке grub. -
-neb "Значение") Имя efi загрузчика для установки grub. Обязательный параметр. Имена текущих загрузочных записей вы можете посмотреть через командуefibootmgr. -
-sbp "Значение") Имя btrfs раздела с системой (например, nvme0n1p4). Если параметр не указан, то должен быть указан параметр -f. -
-sp "Значение") Значение в специальном формате для добавления строки монтирования в fstab (точка монтирования;имя subvolume;параметры монтирования;признак использования nocow).
Точка монтирования и имя subvolume обязательны для заполнения.
Параметры монтирования можно не указывать, тогда будет использоваться defaults
Признак использования nocow может принимать значение 0/1
- 0 - не использовать nocow
- 1 - выставить атрибут nocow для subvolume
Если запись с точкой монтирования корня / не будет указана, то будет использоваться значение /;@;defaults;0
Например: -sp "/;@;relatime,ssd,discard=async,space_cache=v2;0" -sp "/home;@home;;0"
Рекомендуется:
- вынести
/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 -mb -ceb -neb "astra" -sp "/;@;relatime,ssd,discard=async,space_cache=v2;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 -mb -ceb -neb "astra" -sp "/;@;defaults,space_cache=v2,nodiscard,relatime;0" -sp "/home;@home;defaults,space_cache=v2,nodiscard,relatime;0" -sp "/tmp;@tmp;defaults,space_cache=v2,nodiscard,relatime;1" -sp "/var/cache;@varcache;defaults,space_cache=v2,nodiscard,noatime;1" -sp "/var/log;@varlog;defaults,space_cache=v2,nodiscard,noatime;1" -sp "/var/tmp;@vartmp;defaults,space_cache=v2,nodiscard,relatime;1" -sp "/swap;@swap;defaults,space_cache=v2,nodiscard,noatime;1" -sp "/test1;@test1;;1"
Решение возможной проблемы создания 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://wiki.astralinux.ru/pages/viewpage.action?pageId=371804424
Описание
Установка (перенос) системы linux на btrfs subvolume