Skip to content

Latest commit

 

History

History
306 lines (215 loc) · 9.34 KB

zfs_on_arch_linux_ru.md

File metadata and controls

306 lines (215 loc) · 9.34 KB
# Еще один гид по zfs на Arch Linux
# навеян https://wiki.archlinux.org/index.php/Installing_Arch_Linux_on_ZFS
# и FreeBSD zfs мануалами

# Переход на zfs c работающей системы
# Создаем на новом диске разделы (с помощью fdisk неважно)
# Разметка gpt 
# Если ставить с нуля с CD диска то его надо сделать, вот так. 
# https://ramsdenj.com/2016/06/23/arch-linux-on-zfs-part-1-embed-zfs-in-archiso.html
# Работает проверено.

# загрузка bios grub 
# У кого Efi, можно вместо Bios boot сделать Efi раздел, побольше конечно
# В моем случае 2 раздела BIOS boot и Solaris root


#ВНИМАНИЕ
# Есть особенность про которую никто не рассказывает. Возможно такое поведение  grub,
# по-крайней мере на Freebsd такого точно не было.
# Я создаю файловые системы обычно так  в пуле tank


tank-
    |root    /
    |usr    /usr
    |tmp    /tmp
    |var    /var
    |home

# Особенность такова, что такая схема почему-то не работает, вываливается в initramfs shell с ошибкой:

# mounted successfully but /sbin/init does not exist

# Решение простое
# системные разделы создаем вложенные,  тогда все ок, не забываем хуки mkinitcpio.conf - zfs usr
# Работает c grub . Остальные разделы неважно где, возможно нужет только /usr вложенный.


tank-
    |root-      /
        |usr    /usr
        |tmp    /tmp
        |var    /var
        |home

# Можно использовать parted
# parted --script /dev/sdx mklabel gpt mkpart non-fs 0% 2 mkpart primary 2 100% set 1 bios_grub on set 2 boot on
# Но я размечаю gdisk или fdisk, схема по мануалу, т.к. не нашел Solaris Root тип раздела, команда выше bp мануала делает его EFI boot
# У gdisk все проще bf00 
Part     Size   Type
----     ----   -------------------------
   1       2M   BIOS boot partition (ef02)
   2     XXXG   Solaris Root (bf00)




# На рабочей системе ставлю из AUR. Кто хочет может из репозитория. 
# Если новая установка со сделаного CD, то не надо, потому коммент.


#yaourt -S zfs-linux


# zfs module load

modprobe zfs


# Создаем пул. Отключаем  неподдерживаемые опции grub и настраиваем производительность.

# Безопасный вариант:
# 
# sudo zpool create -R /mnt -O mountpoint=none -O atime=off -O relatime=on -O compression=lz4 -o ashift=12   \
# -o feature@multi_vdev_crash_dump=disabled \
# -o feature@large_dnode=disabled           \
# -o feature@sha512=disabled                \
# -o feature@skein=disabled                 \
# -o feature@edonr=disabled \
# tank /dev/disk/by-id/ata-WDC_WDXXXXX-XXXXX_XX-XXXXXXXXX-part2

#Мой вариант, который работает в системе, без отключенных фич
sudo zpool create -R /mnt -O mountpoint=none -O atime=off -O relatime=on -O compression=lz4 -o ashift=12   \
tank /dev/disk/by-id/ata-WDC_WDXXXXX-XXXXX_XX-XXXXXXXXX-part2 


# Создаем подтома, точка монтирования для root, остальные наследуется,
# но можно указать для несистемных другую 
zfs create -o mountpoint=/ tank/root
zfs create  tank/root/usr  
zfs create  tank/root/var 
zfs create  tank/root/tmp  
zfs create  tank/root/home
zpool set bootfs=tank/root tank


# Экспортируем пул, можно наверно и без этого, делаю как советует мануал
zpool export tank

# Импортируем пул /mnt altroot
zpool import -d /dev/disk/by-id  -R /mnt tank


# Копируем zpool кэш 
mkdir -p /mnt/etc/zfs
cp /etc/zfs/zpool.cache /mnt/etc/zfs/zpool.cache

# Или
#if zpool.cache not exist, set zpool cache file after install zfs package in arch-chroot


# Показываем точки монтирования
zfs mount

# Монтируем, если нет
zfs mount -a


#Установка системы

pacstrap /mnt base base-devel vim mc bash-completion sudo  git wget grub 

# Генерирую пример файла fstab. Он не используется в моем случае.
genfstab -U /mnt >> /mnt/etc/fstab.sample

arch-chroot /mnt bash

# --------------- Только для примера
# Setup from repo does not work. GPG keys error. You need set Trustall to the repo. 

# vim /etc/pacman.conf
# # add lines

# [archzfs]
# Server = http://archzfs.com/$repo/x86_64
# ---------------
# # add unofficial repo key  check  
# # to solve keyserver problems time, etc go https://wiki.archlinux.org/index.php/Pacman/Package_signing
# gpg --recv-keys  5E1ABF240EE7A126
# pacman-key -r 5E1ABF240EE7A126
# ---------------

# Создаем пользователя
useradd -m -s /bin/bash -G wheel myuser

# Пароли
passwd myuser
passwd root


# Sudo 

visudo

# ---------------
Uncomment
%wheel ALL=(ALL) NOPASSWD: ALL
# ---------------

# Установка yaourt 
su - myuser
cd /tmp
git clone https://aur.archlinux.org/package-query.git
git clone https://aur.archlinux.org/yaourt.git
cd /tmp/package-query
makepkg -si  --noconfirm
cd /tmp/yaourt
makepkg -si  --noconfirm

# Установка zfs в chroot
yaourt -S zfs-linux --noconfirm 

# Устанавливаем zfs кэш (если файла не было, см. выше). 
# zpool set cachefile=/etc/zfs/zpool.cache tank


# Создаем хуки для initramfs

vim /etc/mkinitcpio.conf

# Меняем
#----------------
HOOKS=(base udev autodetect modconf block keyboard zfs filesystems usr shutdown)
COMPRESSION="lz4"
# ---------------

# Генерируем образ initramfs
mkinitcpio -p linux

# --------------- Пример только для systemd initramfs
# Можнно использовать systemd initramfs вместо обычного, хуки другие:
# HOOKS=(base systemd autodetect modconf block keyboard filesystems sd-zfs) 
# Но надо ставить пакет
# yaourt -S mkinitcpio-sd-zfs

#vim /etc/default/grub

# Параметры для ядра  
# https://github.com/dasJ/sd-zfs
# may set root=zfs:AUTO  zfs_force=1 zfs_ignorecache=1
# 1. автопоиск root 2 принудительный импорт pool 3  игнорировать zfs cache
# GRUB_CMDLINE_LINUX_DEFAULT="quiet root=zfs:tank/root"
# ---------------


# ставим grub 

grub-install /dev/sda
# ошибка
# grub-install: error: failed to get canonical path of `/dev/ata-WDC_WDXXXXX-XXXXX_XX-XXXXXXXXX-part2`

# Исправление
ZPOOL_VDEV_NAME_PATH=1 grub-install /dev/sda

#Installing for i386-pc platform.
#Installation finished. No error reported.

# Но можно по-другому:
# ln -s /dev/sda3 /dev/ata-WDC_WDXXXXX-XXXXX_XX-XXXXXXXXX-part2
# затем 
# grub-install /dev/sda

# Пример генерации конфига grub /boot/grub/grub.cfg. Первый рабочий, остальное варианты.

vim /etc/grub.d/40_custom
 
# ---------------

# (0) Arch Linux zfs # Наш случай
menuentry "Arch Linux ZFS" {
    search -u UUID
    # Naming scheme: 
    # linux /zfspart1/zfspart2/@/bootdirectory/kernel
    # initrd /zfspart1/zfspart2/@/bootdirectory/initramfs-linux.img
    linux /root/@/boot/vmlinuz-linux zfs=tank/root rw
    initrd /root/@/boot/initramfs-linux.img
}

# (50) Arch Linux zfs  # Еще один пример
menuentry "Arch zfs2" {
   load_video
   set gfxpayload=keep
   insmod gzio
   insmod part_gpt
   insmod zfs
   search -u 111111111111111111111000
   linux /root/@/boot/vmlinuz-linux root=ZFS=tank/root rw zfs=tank/root zfs_force=1 
   initrd /root/@/boot/initramfs-linux.img
}

# (60) Arch Linux # Если отдельная партиция boot c ext4
menuentry "Arch Linux zfs3" {
    linux /boot/vmlinuz-linux zfs=tank/root rw
    initrd /boot/initramfs-linux.img
}
# ---------------

vim /etc/default/grub
# Коментируем приоритет 0 и выставляем название нашего menuentry
# GRUB_DEFAULT=0
GRUB_DEFAULT='Arch Linux ZFS'

# Генерируем Grub config

# grub-mkconfig -o /boot/grub/grub.cfg 
# ошибка 

# Решение
ZPOOL_VDEV_NAME_PATH=1 grub-mkconfig -o /boot/grub/grub.cfg


# Generating grub configuration file ...
# Found linux image: /boot/vmlinuz-linux
# Found initrd image(s) in /boot: initramfs-linux.img

# Устанавливаем время, etc
ln -f -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime

# Локали
vim /etc/locale.gen

locale-gen
echo "LANG=en_US.UTF-8" >> locale.conf

# Важно!!! Разрешаем zfs службы 
systemctl enable zfs.target 
systemctl enable zfs-import-cache
systemctl enable zfs-mount


# Выходим из chroot
exit


# Отмонируем /mnt/boot (если  boot раздел legacy c ext4)

# Важно!!! Экспорт пула
zfs umount -a
zpool export tank

# Перезагрузка

reboot