Установка (перенос) системы linux на btrfs subvolume
Версия stable: 20250212_01
Рекомендуется ознакомление с инструкцией в docx или pdf
GITFLIC: https://gitflic.ru/user/medved0001
Вконтакте: https://vk.com/medved0001
Описание
Не все инсталляторы linux могут установить систему на btrfs subvolume.
Данная инструкция и скрипт предназначены для переноса системы (установленной на btrfs раздел) на btrfs subvolume.
Скрипт проверен на Debian 12.6 и Astra linux 1.8.
Приведу пример на основе live инсталлятора astra linux 1.8.
По любым вопросам и проблемам со скриптом обращайтесь в личные сообщения Вконтакте.
Инструкция
Установка системы
1.Выберите ручную разметку диска
2.Разметьте диск.
На текущем этапе нужно создать btrfs
раздел с точкой монтирования корня /
и не создавать дополнительные subvolume
. На текущий момент инсталлятор не поддерживает прямую установку системы в subvolume
.
Пример разметки есть в файле инструкции
3.Начните установку системы.
4.Дождитесь завершения установки и не перезагружайте компьютер.
Скрипт с автовыполнением по заданным параметрам
Скачайте скрипт btrfs-autocreate-subvol.sh
. Скрипт необходимо запустить с параметрами.
Допустимые параметры запуска:
-f
) Автоматический выбор первого доступного btrfs раздела. Если этот параметр не указан, то должен быть указан -sbp.-neb "Значение"
) Имя efi загрузчика для установки grub. Обязательный параметр.-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 -neb "astralinux" -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"
Решение возможной проблемы создания EFI записи
В связи с существованием различных специфичных реализаций UEFI, на некоторых платах/виртуальных машинах при выполнении команды grub-install
может не добавится загрузочная запись. По умолчанию UEFI
обычно ищет /EFI/boot/bootx64.efi
на ESP
разделе.
Варианты решения (Зависит от реализации UEFI
):
1.Добавить запись через
BIOS
, указав нужный файл загрузчика (если поддерживается);2.Заменить файл
/boot/efi/EFI/boot/bootx64.efi
файлом созданным grub (например/boot/efi/EFI/astralinux/grubx64.efi
). Если смонтированESP
раздел, то/boot/efi
в пути не будет;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
Описание
Установка (перенос) системы linux на btrfs subvolume