Btrfs установка и использование
Btrfs установка
Установите пакет пользовательских утилит.
pacman -S btrfs-progs arch-install-scripts
lsblk
- подсветить все разделы чтобы определиться, что монтировать.
# разбить диск, -z говорит обнулить таблицу разделов
cfdisk -z /dev/sda
Так как Btrfs не может содержать swap-файл, необходимо заранее позаботиться о разделе с подкачкой, если он вам нужен.
mkswap /dev/sda2
Создаём файловую систему на разделе. Для разделов от 1ГБ и меньше, чтобы более эффективно использовать пространство, рекомендуется передать ключ -M к параметрам mkfs.btrfs
.
При желании можно задать лэйбл ключом -L.
mkfs.btrfs /dev/sda<цифра>
mkfs.btrfs -L "root" /dev/sda<цифра>
Теперь монтируем.
mount /dev/sdb1 /mnt
Затем создадим два подтома под корень и домашние каталоги пользователей.
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
Просмотр субволумов.
btrfs subvolume list /mnt
Отмонтируем корень ФС.
umount /mnt
Для того, чтобы монтировать подтом подобно обычному разделу диска, команде mount нужно указывать опцию subvol.
Монтируем корень. Сжатие zstd, или lzo.
mount -o subvol=@,compress=zstd /dev/sdb1 /mnt
Создаём директорию и монтируем в неё наш будущий каталог пользователей.
mkdir /mnt/home
mount -o subvol=@home,compress=zstd /dev/sdb1 /mnt/home
Дальше действуем по вики, т.е. выбираем зеркала и ставим базовую систему. При генерации initramfs mkinitcpio будет ругаться на отсутствие fsck.btrfs - это нормальное явление. Уберём этот хук fsck
из конфига, т.к. для Btrfs он не требуется.
nano /etc/mkinitcpio.conf
Вот данная строка в файле.
HOOKS="base udev autodetect modconf block filesystems keyboard"
И пересоздадим initramfs.
mkinitcpio -p linux
И ещё момент по поводу загрузчика, не знаю как другие, а grub точно умеет грузиться с Btrfs, так что выбрать лучше именно его. Так же не забудьте установить пакет btrfs-progs и позаботиться о бэкапах.
Использование btrfs
Монтируем корень ФС.
mount /dev/sdb1 /mnt
Создавать снапшоты.
btrfs subvolume snapshot /mnt/@ /mnt/@_bac
btrfs subvolume snapshot /mnt/@home /mnt/@home_bac
btrfs subvolume list /mnt
Каталоги абсолютно идентичны, и пока мы не начнём изменять файлы, снимки места не занимают.
Удаление.
btrfs subvolume delete /mnt/@
Откат: грузимся с live CD, монтируем корень ФС и переименовываем подтома. Так же подтома можно переименовать прямо в рабочей системе, если загрузка удачна.
mount /dev/sdb1 /mnt
mv /mnt/@ /mnt/@_bad
mv /mnt/@_bac /mnt/@
mv /mnt/@home /mnt/@home_bad
mv /mnt/@home_bac /mnt/@home
Либо грузимся как обычно, а в меню grub указываем подтом с бэкапом rootflags=subvol=backup
.
Копирование при записи (CoW). Если использовать команду cp
с ключом --reflink=auto
, то копия файла не будет занимать место на диске. И впоследствии, допустим, при изменении скопированного файла, записываться на диск будут только изменённые блоки.
“Онлайн” - проверка ФС. При которой осуществляется чтение всех данных/метаданных с перепроверкой контрольных сумм, при наличии ошибок обнаружение их и исправление по возможности.
btrfs scrub start -B /
Если опустить ключ -B
, процесс уйдёт в фон, и о ходе выполнения можно будет узнать командой.
btrfs scrub status /
Пример вывода.
scrub status for 56edc366-a153-4eee-b2a6-471b7066b93d
scrub started at Sat Dec 14 06:37:19 2013 and finished after 3242 seconds
total bytes scrubbed: 222.45GB with 0 errors
Рекомендуется проводить проверку регулярно (еженедельно). “Оффлайн” - проверка ФС (на отмонтированном разделе). При отсутствии ошибок утилита возвратит 0.
btrfs check /dev/sda
Установка из существующей системы или с live usb
pacman -S btrfs-progs arch-install-scripts
lsblk
- подсветить все разделы что бы определиться что монтировать.
Так как Btrfs не может содержать swap-файл, необходимо заранее позаботиться о разделе с подкачкой, если он вам нужен.
mkswap /dev/sda2
Внимание! это отформатирует весь ваш диск, с потерей данных! В данном примере установка идет на весь диск, а не разделы, если вам нужен swap учтите этот момент.
mkfs.btrfs -f -L WD /dev/sdb
Монтируем.
mount /dev/sdb /mnt
Создадим два подтома под root @
и домашний каталог пользователя @home
.
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
И отмонтируем корень ФС.
umount /mnt
Монтируем корень.
mount -o subvol=@,compress=zstd /dev/sdb /mnt
Создаём директорию и монтируем в неё наш будущий каталог пользователей.
mkdir /mnt/home
mount -o subvol=@home,compress=zstd /dev/sdb /mnt/home
Устанавливаем базовые пакеты.
pacstrap /mnt base base-devel linux linux-headers xorg-xinit xorg-server grub zsh mc nano netctl wpa_supplicant dialog dhcpcd btrfs-progs
Создаём fstab.
genfstab -pU /mnt >> /mnt/etc/fstab
Проверяем.
cat /mnt/etc/fstab
Создаем директорию и монтируем boot, если нужно.
mount -t proc none /mnt/proc
mount -t sysfs none /mnt/sys
mount -o bind /dev /mnt/dev
cp -L /etc/resolv.conf /mnt/etc
swapon /dev/sda2
Начиная с ядра 5.0 можно создать swap-файл, swap-файл должен располагаться целиком на одном устройстве, создаваться с отключенным COW и сжатием.
truncate -s 0 /swapfile
chattr +C /swapfile
btrfs property set /swapfile compression none
fallocate /swapfile -l4g
chmod 600 /swapfile
mkswap /swapfile
lsattr /swapfile
swapon /swapfile
Проверим.
btrfs subvolume list /mnt
Входим в систему.
chroot /mnt /bin/zsh
Назначаем хост.
echo ctlos > /etc/hostname
Выбор часового пояса.
ln -sf /usr/share/zoneinfo/UTC /etc/localtime
hwclock --systohc --utc
timedatectl set-ntp true
# или
timedatectl set-timezone Europe/Moscow
Выберем локаль для системы.
sed -i "s/#\(en_US\.UTF-8\)/\1/" /etc/locale.gen
sed -i "s/#\(ru_RU\.UTF-8\)/\1/" /etc/locale.gen
locale-gen # Сгенерировать локали
Прописать в /etc/locale.conf
.
echo "LANG=ru_RU.UTF-8" > /etc/locale.conf
echo "LC_COLLATE=C" >> /etc/locale.conf
Русский шрифт в консоли.
echo "KEYMAP=ru" > /etc/vconsole.conf
echo "FONT=cyr-sun16" >> /etc/vconsole.conf
Создаём рам-диск mkinitcpio.
nano /etc/mkinitcpio.conf
В /etc/mkinitcpio.conf
, в разделе HOOKS, должен быть прописан хук keyboard
keymap
, убрать fsck
.
В разделе MODULES нужно прописать свой драйвер видеокарты: i915 для Intel, radeon для AMD, nouveau для Nvidia.
HOOKS=(base udev autodetect modconf block filesystems keyboard keymap)
mkinitcpio -p linux
Задать пароль root.
passwd
Создать пользователя.
useradd -m -g users -G wheel,audio,video,storage -s /bin/zsh st
И задать ему пароль.
passwd st
Расскомментировать в /etc/pacman.conf
.
[multilib]
Include = /etc/pacman.d/mirrorlist
Затем выполнить.
pacman-key --init
pacman-key --populate
pacman -Syy
Установка boot loaderа.
grub-install /dev/sdb
grub-mkconfig -o /boot/grub/grub.cfg