Unencrypted Arch Linux + BTRFS as ROOT + rEFInd
Пред-условия этой заметки
- Наличие установочного USB (Bootable USB drive: Arch Linux, Rufus)
- Motherboard boot mode: x64 UEFI
- ОС на одном диске (будет 2 раздела)
- Без шифрования и secure-boot
Ну че, народ, погнали!
https://coub.com/view/9juiz80
- Выполнить шаги с 1.1 по 1.8 из официальной инструкции до пункта о разметке диска
1. Выбрать диск
- ВНИМАТЕЛЬНО, выбрать диск на накоторый будет установлена система. Для просмотра дисков можно использовать утилиты:
lsblk
,blkid
,fdisk -l
- Пусть целевым диском будет SSD
nvme0n1
, тогда сохранить диск в переменную окружения:export DISK="/dev/nvme0n1"
2. Удалить старую разметку (желательно, на всякий случай)
wipefs -af $DISK sgdisk --zap-all --clear $DISK partprobe $DISK
3. Выполнить разметку
parted -s $DISK mklabel gpt parted -s $DISK mkpart primary fat32 1MiB 1025MiB parted -s $DISK set 1 esp on parted -s $DISK mkpart primary $FILESYSTEM 1025MiB 100%
4. Форматировать разделы
Предупреждение: разделы для SSD имеют префикс `p`, SATA как правило не имеют; проверьте одной из утилит, например fdisk -l
mkfs.fat -F32 ${DISK}p1
mkfs.btrfs -f ${DISK}p2
5. Сконфигурировать разделы BTRFS
Примонтировать раздел диска в папку /mnt
mount ${DISK}p2 /mnt
Создать корневой раздел BTRFS (/
)
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@snapshots btrfs subvolume create /mnt/@home btrfs subvolume create /mnt/@libvirt btrfs subvolume create /mnt/@cache btrfs subvolume create /mnt/@log btrfs subvolume create /mnt/@tmp
Структура под-раздел : точка монтирования
@snapshots
:/.snapshots
@home
:/home
@libvirt
:/var/lib/libvirt
(виртуальные машины)@cache
:/var/cache
@log
:/var/log
@tmp
:/var/tmp
Исключение @tmp
и @log
облегчит последующую работу в "recovery mode" после отката всей системы (корневого раздела /
)
Размонтировать для последующей работы с созданными разделами
umount /mnt
6. Монтировать разделы
export MY_OPT="rw,noatime,compress-force=zstd,space_cache=v2"
mount -o ${MY_OPT},subvol=@ ${DISK}p2 /mnt
mkdir -p /mnt/{.snapshots,home,var/lib/libvirt,var/cache,var/log,var/tmp}
mount -o ${MY_OPT},subvol=@snapshots ${DISK}p2 /mnt/.snapshots mount -o ${MY_OPT},subvol=@home ${DISK}p2 /mnt/home mount -o ${MY_OPT},subvol=@libvirt ${DISK}p2 /mnt/var/lib/libvirt mount -o ${MY_OPT},subvol=@cache ${DISK}p2 /mnt/var/cache mount -o ${MY_OPT},subvol=@log ${DISK}p2 /mnt/var/log mount -o ${MY_OPT},subvol=@tmp ${DISK}p2 /mnt/var/tmp
mkdir -p /mnt/boot/efi mount ${DISK}p1 /mnt/boot/efi
7. Установить систему
pacstrap /mnt base base-devel btrfs-progs linux-lts linux-lts-headers linux-firmware networkmanager sudo
Конфигурация
1. Сгенерировать fstab
genfstab -U /mnt >> /mnt/etc/fstab
2. arch-chroot
Выполнить шаги 3.1 - 3.6 из официальной инструкции
# Тайм-зона export TIMEZONE="Europe/Amsterdam" <- заменить на свою ln -sf /usr/share/zoneinfo/$TIMEZONE /etc/localtime hwclock --systohc # Локализация, английский приоритетный export locale="ru_RU.UTF-8 UTF-8" sed -i "s/^#\(${locale}\)/\1/" /etc/locale.gen export locale="en_US.UTF-8 UTF-8" sed -i "s/^#\(${locale}\)/\1/" /etc/locale.gen echo "LANG=${locale}" > /etc/locale.conf locale-gen # Установить имя машины echo $HOSTNAME > /etc/hostname # Пароль root пользователя passwd # Создать пользователя export USERNAME="hikkidev" <- заменить на свой useradd -m -G wheel -s /bin/bash $USERNAME passwd $USERNAME # Привилегии sudo для группы wheel echo "%wheel ALL=(ALL) ALL" > /etc/sudoers.d/wheel # Заводим интернет systemctl enable NetworkManager
pacman -S refind efibootmgr tree btop bat eza tree
3. Настройка загрузчика rEFInd
Определить PARTUUID
основного раздела, куда установлена система, в данном случае это ${DISK}p2
:
blkid -s PARTUUID /dev/nvme0n1p2 -o value
Сохранить значение в переменную:
export MYUUID=$(blkid -s PARTUUID /dev/nvme0n1p2 -o value)
Установить загрузчик
refind-install
Отредактировать основные параметры загрузчика в refind.conf
, файл как правило находится где-то в esp/EFI/refind/
/boot/EFI/refind/refind.conf /boot/efi/EFI/BOOT/refind.conf
- Включить поддержку схемы именования ядер Arch Linux для их автоматического обнаружения, раскоментировав или дописав:
extra_kernel_version_strings "linux,linux-lts,linux-zen,linux-rt,linux-rt-lts,linux-hardened"
- Включить автоматическое обнаружение ядра на под-разделе BTRFS, раскоментировав или дописав:
also_scan_dirs +,boot,@/boot
- Удалить или закоментировать примеры manual stanza в конце файла
- Дописать в конце файла (что такое manual stanza):
include stanzas.conf
Cоздать файл stanzas.conf
в папке с refind.conf
(подробнее):
cat > stanzas.conf <<EOF menuentry "Arch Linux LTS" { icon /EFI/refind/icons/os_arch.png volume primary loader /@/boot/vmlinuz-linux-lts initrd /@/boot/initramfs-linux-lts.img options "root=PARTUUID=$MYUUID rw rootflags=subvol=@" submenuentry "Boot - fallback" { initrd /@/boot/initramfs-linux-lts-fallback.img } } EOF
mv stanzas.conf <path to refind>/
Отредактировать параметры ядра поумолчанию в refind_linux.conf для автоматически обнаруженных ядер.
Как правило файл лежит тут: /boot/refind_linux.conf
echo "\"Boot DEFAULT\" \"root=PARTUUID=$MYUUID rw rootflags=subvol=@ initrd=@\boot\initramfs-%v.img\"" > /boot/refind_linux.conf
Убедиться, что запись rEFInd была добавлена в загрузчик UEFI первой, выполнив:
efibootmgr
exit umount -R /mnt reboot
Вход в систему + Snapper
После входа в систему рекомендую настроить BTRFS snapshots сразу
sudo pacman -S snapper snap-pac
sudo umount /.snapshots sudo rm -rf /.snapshots
sudo snapper -c root create-config /
sudo btrfs subvolume delete /.snapshots
sudo mkdir /.snapshots sudo mount -a sudo chmod 750 /.snapshots sudo chown :wheel /.snapshots
sudo snapper -c root create -d "Clean system install"
Редактировать конфиг здесь: /etc/snapper/configs/root
Включить systemd таймеры для автоматического запуска снимков и периодической очистки старых:
sudo systemctl enable --now snapper-timeline.timer sudo systemctl enable --now snapper-cleanup.timer