Всем привет, на связи Уханов. Давно хотел написать заметку про BTRFS, но тема это огромная и когда-нибудь я её закончу. Сегодня же поговорим об установке ArchLinux на subvolume BTRFS. Почему я выбрал именно связку BTRFS + ArchLinux, а не Debian например? Ведь он мне так нравится, это Debian? Я ведь все проекты делаю именно на нём.

Ответ кроется в установщике — программе, которая даёт нам удобный набор инструментов для установки системы, но одновременно ограничивает наши возможности функционалом этих инструментов.

Файловая система BTRFS обладает огромным функционалом и рассказывать о ней можно очень долго. Меня на стадии установки системы интересуют два механизма: поддержка многодисковых конфигураций (multiple device support) и subvolumes. И вот именно на этом, начальном этапе Debian поставил меня в трудное положение: я могу отформатировать в BTRFS диски по-отдельности и никаких мне subvolume.

Alt text

Потому я решил использовать ArchLinux — там нет инсталлятора и ничто не ограничит полёт фантазии. Приступим: у меня есть виртуальная машина с 4 дисками: их я использую для создания RAID10.

Alt text

Настройка сети

Установку начнём с определения сетевого адаптера и получения ip адреса. В первом поможет команда

ip link

В её выводе мы увидим имя адаптера. В нашем случае это enp0s3. Так и запишем в параметрах dhcpcd

dhcpcd enp0s3

Alt text

Ура, адрес получили. Настроим время:

timedatectl set-ntp true 

Разметка дисков

До начала разбиения дисков, установка ничем не отличается от обычного сценария. А вот при настройке разделов возникают вопросы и было-бы неплохо понять некоторые моменты.

  • Форматирование диска в BTRFS без создания разделов. Такой сценарий вполне возможен: вы форматировать в BTRFS диск без создания на нём разделов. Монтировать его будете так-же: без указания номера раздела — просто диск. Используя так называемые partitionless диски вы рискуете столкнуться с проблемами установки на них загрузчика.
  • Раздел подкачки использовать необязательно — его можно заменить на файл подкачки. Это обеспечит вам некоторую свободу от отказа диска. В случае, если выйдет из строя диск с разделом подкачки, система завалится с отказом.
  • Постарайтесь не выделять /usr в отдельный раздел — проблем будет меньше.

Создание разделов

Для управления разделами я предпочитаю пользоваться программой cfdisk. Быстро и просто создаём по одному разделу на каждом из четырёх наших дисков

Alt text

Создание файловой системы

У нас есть четыре раздела по одному на диск и пришло время их отформатировать. Нам предстоит создать файловую систему и настроить RAID10. Нам для этого пригодится всего одна команда:

Начнём с подготовки массива под систему: вводим в консоль команду, которая соберёт первые два диска массив уровня RAID1.

mkfs.btrfs -L Archlinux -d raid10 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1

Команда возвращает нам результат своей работы. По скриншоту видно, что я использовал ключ -f, что не обязательно в работе. Просто мои диски были ранее уже форматированы в btrfs.

Alt text

При этом видно, что метаданные в чередовании не участвуют: только зеркалирование.

Создание 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

Alt text

Теперь выйдем из каталога 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.

Alt text

Установка

Далее в принципе установка проходит штатно и можно ориентироваться на мою прошлую заметку .

После выполнения pacstrap мы получим предупреждения от mkinitcpio.

Alt text

Не будем игнорировать предупреждения и установим необходимое командой:

pacman -S btrfs-progs

И добавим hook btrfs в mkinitcpio.conf:

nano /etc/mkinitcpio.conf

Alt text

Последнее отличие будет в установке загрузчика. Нам потребуется установить загрузчик командой:

pacman -S grub-btrfs

Она потянет за собой и обычный Grub. Загрузчик устанавливаем по очереди на каждый диск — участник массива. Это позволит загрузить систему в случае выхода из строя любого из них.

Вместо заключения

Мы установили Archlinux на многодисковую конфигурацию BTRFS с использованием subvolume и уровнем отказоустойчивости RAID10. Главное отличие subvolume от разделов в том, что у них общее пространство и не будет ситуации с нехваткой места на каком-то разделе.

Alt text

В следующий раз подробнее поговорим о функционале BTRFS и о том, что с ней можно делать.