Всем привет, на связи Уханов. Давно хотел написать заметку про BTRFS, но тема это огромная и когда-нибудь я её закончу. Сегодня же поговорим об установке ArchLinux на subvolume BTRFS. Почему я выбрал именно связку BTRFS + ArchLinux, а не Debian например? Ведь он мне так нравится, это Debian? Я ведь все проекты делаю именно на нём.
Ответ кроется в установщике — программе, которая даёт нам удобный набор инструментов для установки системы, но одновременно ограничивает наши возможности функционалом этих инструментов.
Файловая система BTRFS обладает огромным функционалом и рассказывать о ней можно очень долго. Меня на стадии установки системы интересуют два механизма: поддержка многодисковых конфигураций (multiple device support) и subvolumes. И вот именно на этом, начальном этапе Debian поставил меня в трудное положение: я могу отформатировать в BTRFS диски по-отдельности и никаких мне subvolume.
Потому я решил использовать ArchLinux — там нет инсталлятора и ничто не ограничит полёт фантазии. Приступим: у меня есть виртуальная машина с 4 дисками: их я использую для создания RAID10.
Настройка сети
Установку начнём с определения сетевого адаптера и получения ip адреса. В первом поможет команда
ip link
В её выводе мы увидим имя адаптера. В нашем случае это enp0s3. Так и запишем в параметрах dhcpcd
dhcpcd enp0s3
Ура, адрес получили. Настроим время:
timedatectl set-ntp true
Разметка дисков
До начала разбиения дисков, установка ничем не отличается от обычного сценария. А вот при настройке разделов возникают вопросы и было-бы неплохо понять некоторые моменты.
- Форматирование диска в BTRFS без создания разделов. Такой сценарий вполне возможен: вы форматировать в BTRFS диск без создания на нём разделов. Монтировать его будете так-же: без указания номера раздела — просто диск. Используя так называемые partitionless диски вы рискуете столкнуться с проблемами установки на них загрузчика.
- Раздел подкачки использовать необязательно — его можно заменить на файл подкачки. Это обеспечит вам некоторую свободу от отказа диска. В случае, если выйдет из строя диск с разделом подкачки, система завалится с отказом.
- Постарайтесь не выделять /usr в отдельный раздел — проблем будет меньше.
Создание разделов
Для управления разделами я предпочитаю пользоваться программой cfdisk. Быстро и просто создаём по одному разделу на каждом из четырёх наших дисков
Создание файловой системы
У нас есть четыре раздела по одному на диск и пришло время их отформатировать. Нам предстоит создать файловую систему и настроить RAID10. Нам для этого пригодится всего одна команда:
Начнём с подготовки массива под систему: вводим в консоль команду, которая соберёт первые два диска массив уровня RAID1.
mkfs.btrfs -L Archlinux -d raid10 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
Команда возвращает нам результат своей работы. По скриншоту видно, что я использовал ключ -f, что не обязательно в работе. Просто мои диски были ранее уже форматированы в btrfs.
При этом видно, что метаданные в чередовании не участвуют: только зеркалирование.
Создание subvolume
Теперь смонтируем всю эту музыку.
mount /dev/sda1 /mnt
Монтировать BTRFS можно используя любой раздел — участник массива. В нашем случае /dev/sda1.
Перейдём в каталог /mnt
cd /mnt
Создадим subvolume для корня системы, домашнего каталога, каталога var и для снапшотов (об этом потом).
btrfs subvolume create root
btrfs subvolume create var
btrfs subvolume create home
btrfs subvolume create snapshots
Проверим результат командой:
btrfs subvolume list /mnt
Теперь выйдем из каталога mnt и отмонтируем наш массив командой:
cd ..
umount /mnt
Монтирование и подготовка к установке
Нам предстоит смонтировать subvolume, который мы запланировали как корневой каталог, создать на нём точки монтирования и смонтировать туда остальные subvolume. Монтировать будем с опцией сжатия файловой системы zstd.
mount -o noatime,compress=zstd,subvol=root /dev/sda1 /mnt
Корень есть, создадим точки монтирования одной командой:
mkdir /mnt/{var,home,snapshots}
Монтируем оставшиеся:
mount -o noatime,compress=zstd,subvol=var /dev/sdc1 /mnt/var
mount -o noatime,compress=zstd,subvol=home /dev/sdc1 /mnt/home
mount -o noatime,compress=lzo,subvol=snapshots /dev/sda1 /mnt/snapshots
Результат можно посмотреть и командой mount и при помощи df.
Установка
Далее в принципе установка проходит штатно и можно ориентироваться на мою прошлую заметку .
После выполнения pacstrap мы получим предупреждения от mkinitcpio.
Не будем игнорировать предупреждения и установим необходимое командой:
pacman -S btrfs-progs
И добавим hook btrfs в mkinitcpio.conf:
nano /etc/mkinitcpio.conf
Последнее отличие будет в установке загрузчика. Нам потребуется установить загрузчик командой:
pacman -S grub-btrfs
Она потянет за собой и обычный Grub. Загрузчик устанавливаем по очереди на каждый диск — участник массива. Это позволит загрузить систему в случае выхода из строя любого из них.
Вместо заключения
Мы установили Archlinux на многодисковую конфигурацию BTRFS с использованием subvolume и уровнем отказоустойчивости RAID10. Главное отличие subvolume от разделов в том, что у них общее пространство и не будет ситуации с нехваткой места на каком-то разделе.
В следующий раз подробнее поговорим о функционале BTRFS и о том, что с ней можно делать.