Installare Arch Linux su ZFS
Requisiti
- Un sistema funzionante con Arch Linux x86_64
- Almeno 4 GB di RAM
Installation media
Dato che lo ZFS non è ufficialmente supportato da nessuna distribuzione Linux, tantomento da Arch, sarà necessario realizzare un'immagine live creata appositamente per questo scopo.
Archiso
A tale scopo, Arch Linux mette a disposizione un pacchetto, denominato Archiso, contenente una serie di script per la realizzazione di supporti per l'installazione.
# pacman -S archiso
Copiare il contenuto del pacchetto in una directory di lavoro, es.: /root/media
# cp -r /usr/share/archiso/configs/releng /root/media
Per aggiungere il supporto allo ZFS occorre:
- Modificare le seguenti righe al file pacman.conf di archiso
[demz-repo-core] SigLevel = Never Server = http://demizerone.com/$repo/$arch
- Aggiungere le seguenti righe al file packages.x86_64
spl-utils spl zfs-utils zfs net-tools
- Lanciare lo script
# ./build.sh -v
L'immagine sarà generata nella directory /root/media/out
Boot col nuovo supporto (CD/USB)
Effettuare il boot e scegliere l'architettura x86_64, ZFS non è ben supportato su i686.
SSH
Si consiglia di abilitare il demone ssh ed effettuare il processo di installazione collegandosi da un altro computer così da poter effettuare copia ed incolla da questa o altre guide.
# systemctl enable sshd.service # systemctl start sshd.service
Preparazione del disco
Cenni di teoria
Per fare a meno della tradizionale partizione di /boot ed utilizzare ZFS come unico filesystem si consiglia di partizionare il disco secondo il nuovo formato GPT.
Sarà comunque necessario creare due partizioni: una per il Grub ed una per gli zpool.
La prima, denominata Bios Grub Partition, è concettualmente l'equivalente del MBR nei sistemi GPT. A differenza del MBR, la Bios Grub Partition può però essere sufficientemente grande da contenere il codice per il supporto allo ZFS. Il vantaggio sta nel fatto che a differenza della tradizionale partizione /boot dove risiedono anche kernel e ramdisk, il contenuto di quest'ultima cambia esclusivamente nei rari casi di upgrade del Grub.
Partizionamento
Col seguente comando verrà creata la partizione di Grub (EF02) a partire dal 1MB, della grandezza di 64MB; il resto del disco resterà disponibile per lo i pool dello ZFS. Se avete più dischi da utilizzare in raid, questa operazione andrà ripetuta per ciascun disco.
# sgdisk \ --new=1:2048:133120 --typecode=1:EF02 --change-name=1:"grub" \ --largest-new=2 --typecode=2:BF01 --change-name=2:"zfs" /dev/sda
ZFS pool
Creazione del pool principale
# zpool create rpool sda2
Inizialmente il pool sarà montato in /rpool, per i nostri scopi avremo bisogno di spostarlo in /mnt
# zfs unmount rpool # zfs set mountpoint=/mnt/ rpool
Creazione del root dataset rpool/ROOT (necessario per il boot del sistema)
# zfs create -o mountpoint=legacy rpool/ROOT # zpool set bootfs=rpool/ROOT rpool
Montaggio del filesystem
# mount -t zfs rpool/ROOT /mnt
In aggiunta al root dataset è possibile crearne altri al fine di ottimizzare l'ordine del sistema, es.:
# zfs create rpool/home # zfs create rpool/usr/src # zfs create rpool/var # zfs create rpool/srv
NB: /bin, /boot, /sbin, /etc, /dev, /sys e /proc devono stare nel root dataset, non possono essere parte di sub-dataset.
zpool cache
Configurare la cache degli zpool
# zpool set cachefile=/etc/zfs/rpool.cache rpool
Copiare il file di cache nel sistema dove dovremo eseguire il chroot per l'installazione.
# mkdir -p /mnt/etc/zfs # cp /etc/zfs/rpool.cache /mnt/etc/zfs/rpool.cache
Installazione
Pacchetti base
# pacstrap /mnt base base-devel net-tools
Chroot
Effettuare il chroot nel nuovo sistama
# arch-chroot /mnt
Configurazione del sistema di base
Aggiungere la seguente riga nel file /etc/fstab per il mountpoint del filesystem
rpool/ROOT / zfs noatime 0 0
Editare il file /etc/mkinitcpio.conf aggiungendo zfs prima del filesystem e spostare keyboard prima di zfs, in modo che il vostro HOOKS assomigli a qualcosa di questo tipo
HOOKS="base udev autodetect modconf block keyboard zfs filesystems"
Aggiungere il repository per lo zfs nel pacman.conf del sistema Arch sotto chroot
[demz-repo-core] Server = http://demizerone.com/$repo/$arch SigLevel = Never
Installare il supporto per lo ZFS
# pacman -Sy # pacman -S archzfs
In caso di necessità è possibile rigenerare il ramdisk col seguente comando
# mkinitcpio -p linux
Impostare il fuso orario
# ln -s /usr/share/zoneinfo/Europe/Rome /etc/localtime
Impostare la mappatura della tastiera
# echo KEYMAP=it > /etc/vconsole.conf
Boot loader
Installazione del boot loader
- Sistema con BIOS normale
# pacman -S grub # grub-mkconfig -o /boot/grub/grub.cfg # grub-install /dev/sda
- Sistema UEFI
Per l'installazione su sistemi EFI
# mkdir /boot/EFI
# mount /dev/sda1 /boot/EFI # grub-install --target=x86_64-efi --efi-directory=$esp --bootloader-id=grub --recheck --debug # grub-mkconfig -o /boot/grub/grub.cfg
Add
zfs=bootfs
to the kernel line of grub.cfg
- systemctl enable zfs.service
- exit
- zfs unmount -a
- zfs set mountpoint=/ rpool
- cp /etc/zfs/rpool.cache /mnt/etc/zfs/rpool.cache
- zpool export rpool
After the first boot
If everything went fine up to this point, your system will boot. Once. For your system to be able to reboot without issues, you need to enable the zfs service and set the hostid. When running ZFS on root, the machine's hostid will not be available at the time of mounting the root filesystem. There are two solutions to this. You can either place your spl hostid in the kernel parameters in your boot loader. For example, adding spl.spl_hostid=0x00bab10c. The other solution is to make sure that there is a hostid in /etc/hostid, and then regenerate the initramfs image. Which will copy the hostid into the initramfs image.
# hostid > /etc/hostid # mkinitcpio -p linux
Trucchi
Limitare l'utilizzo di RAM
# echo "options zfs zfs_arc_max=2147483648" > /etc/modprobe.d/zfs.conf
Bibliografia
https://github.com/pendor/gentoo-zfs-install/blob/master/install/GentooInstall.mdown
https://github.com/zfsonlinux/pkg-zfs/wiki/HOWTO-install-Ubuntu-to-a-Native-ZFS-Root-Filesystem
http://www.howtoforge.com/a-beginners-guide-to-btrfs
https://wiki.archlinux.org/index.php/Installing_Arch_Linux_on_ZFS
https://bbs.archlinux.org/viewtopic.php?pid=1365007#p1365007