Differenze tra le versioni di "Installare Arch Linux su ZFS"
(10 versioni intermedie di 2 utenti non mostrate) | |||
Riga 15: | Riga 15: | ||
Copiare il contenuto del pacchetto in una directory di lavoro, es.: ''/root/media'' | Copiare il contenuto del pacchetto in una directory di lavoro, es.: ''/root/media'' | ||
# cp -r /usr/share/archiso/configs/releng /root/media | # cp -r /usr/share/archiso/configs/releng /root/media | ||
− | |||
Per aggiungere il supporto allo ZFS occorre: | Per aggiungere il supporto allo ZFS occorre: | ||
+ | * Importare la chiave pubblica del repository | ||
+ | # curl -L https://archzfs.com/archzfs.gpg | pacman-key -a - | ||
+ | # pacman-key --lsign-key $(curl -L https://git.io/JsfVS) | ||
+ | |||
* Modificare le seguenti righe al file '''pacman.conf''' di archiso | * Modificare le seguenti righe al file '''pacman.conf''' di archiso | ||
− | [ | + | [archzfs] |
SigLevel = Never | SigLevel = Never | ||
− | Server = | + | Server = https://archzfs.com/$repo/$arch |
* Aggiungere le seguenti righe al file ''packages.x86_64'' | * Aggiungere le seguenti righe al file ''packages.x86_64'' | ||
− | |||
− | |||
zfs-utils | zfs-utils | ||
− | zfs | + | zfs-dkms |
net-tools | net-tools | ||
Riga 44: | Riga 45: | ||
# systemctl start sshd.service | # systemctl start sshd.service | ||
− | == | + | == Preparazione del disco == |
− | Per | + | === Schede madri BIOS === |
+ | ==== 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 [https://wiki.archlinux.org/index.php/GUID_Partition_Table GPT]. | ||
+ | Sarà comunque necessario creare due partizioni: una per il Grub ed una per gli [http://it.wikipedia.org/wiki/ZFS_(file_system)#I_pool_dello_storage zpool]. | ||
+ | La prima, denominata [http://en.wikipedia.org/wiki/BIOS_Boot_partition 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 | ||
− | + | === Schede madri UEFI === | |
− | + | ==== Partizionamento ==== | |
− | + | '''NB: NON avendo un computer con scheda madre UEFI non ho potuto verificare questa procedura e non ne ho potuto testare il funzionamento''' | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | Col seguente comando verrà creata la partizione EFI (EF00) a partire dal 1MB, della grandezza di 512MB; il resto del disco resterà disponibile per lo i pool dello ZFS. | ||
+ | # sgdisk \ | ||
+ | --new=1:2048:1064960 --typecode=1:EF00 --change-name=1:"efi" \ | ||
+ | --largest-new=2 --typecode=2:BF01 --change-name=2:"zfs" /dev/sda | ||
− | # | + | La partizione '''EFI''' dovrà poi essere formattata in FAT32 |
− | + | # mkfs.vfat -T32 /dev/sda1 | |
− | # | + | == 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 | ||
+ | [archzfs] | ||
+ | Server = https://archzfs.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 | ||
− | + | === Installazione Grub === | |
− | + | ==== Sistema con BIOS ==== | |
− | # | + | # pacman -S grub |
− | + | # grub-mkconfig -o /boot/grub/grub.cfg | |
− | # grub-mkconfig -o /boot/grub/grub.cfg | + | # grub-install /dev/sda |
− | # | ||
+ | ==== Sistema UEFI ==== | ||
+ | '''NB: NON avendo un computer con scheda madre UEFI non ho potuto verificare questa procedura e non ne ho potuto testare il funzionamento''' | ||
+ | # pacman -S grub | ||
+ | # 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 | ||
+ | ==== Modifiche a Grub ==== | ||
+ | Per permettere il caricamento del sistema è necessario aggiungere ''zfs_force=1 zfs=bootfs'' alla riga di caricamento del kernel nel file ''/boot/grub/grub.cfg''. | ||
− | + | Esempio di configurazione | |
− | |||
+ | set timeout=2 | ||
+ | set default=0 | ||
+ | menuentry 'Arch Linux'{ | ||
+ | insmod gzio | ||
+ | insmod part_gpt | ||
+ | insmod zfs | ||
+ | set root='hd0,gpt2' | ||
+ | linux /ROOT@/boot/vmlinuz-linux zfs_force=1 zfs=bootfs root=ZFS=rpool/ROOT rw quiet | ||
+ | initrd /ROOT@/boot/initramfs-linux.img | ||
+ | } | ||
− | + | === Abilitare il servizio ZFS all'avvio === | |
+ | # systemctl enable zfs.service | ||
− | + | === Terminazione dell'installazione === | |
+ | Adesso è possibile uscire dal chroot, smontare il filesystem e riavviare il sistema. | ||
+ | # exit | ||
+ | # zfs unmount -a | ||
+ | # zfs set mountpoint=/ rpool | ||
+ | # cp /etc/zfs/rpool.cache /mnt/etc/zfs/rpool.cache | ||
+ | # zpool export rpool | ||
+ | # reboot | ||
+ | == Hostid == | ||
+ | Abilitato il servizio zfs, '''dopo il primo reboot''', per evitare problemi, è necessario specificare l'hostid e rigenerare il ramdisk. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
# hostid > /etc/hostid | # hostid > /etc/hostid | ||
# mkinitcpio -p linux | # mkinitcpio -p linux | ||
− | |||
= Trucchi = | = Trucchi = | ||
Limitare l'utilizzo di RAM | Limitare l'utilizzo di RAM | ||
# echo "options zfs zfs_arc_max=2147483648" > /etc/modprobe.d/zfs.conf | # echo "options zfs zfs_arc_max=2147483648" > /etc/modprobe.d/zfs.conf | ||
− | |||
= Bibliografia = | = Bibliografia = | ||
Riga 214: | Riga 201: | ||
https://bbs.archlinux.org/viewtopic.php?pid=1365007#p1365007 | https://bbs.archlinux.org/viewtopic.php?pid=1365007#p1365007 | ||
+ | |||
+ | [[Category: Howto]] |
Versione attuale delle 21:42, 27 feb 2023
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:
- Importare la chiave pubblica del repository
# curl -L https://archzfs.com/archzfs.gpg | pacman-key -a - # pacman-key --lsign-key $(curl -L https://git.io/JsfVS)
- Modificare le seguenti righe al file pacman.conf di archiso
[archzfs] SigLevel = Never Server = https://archzfs.com/$repo/$arch
- Aggiungere le seguenti righe al file packages.x86_64
zfs-utils zfs-dkms 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
Schede madri BIOS
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
Schede madri UEFI
Partizionamento
NB: NON avendo un computer con scheda madre UEFI non ho potuto verificare questa procedura e non ne ho potuto testare il funzionamento
Col seguente comando verrà creata la partizione EFI (EF00) a partire dal 1MB, della grandezza di 512MB; il resto del disco resterà disponibile per lo i pool dello ZFS.
# sgdisk \ --new=1:2048:1064960 --typecode=1:EF00 --change-name=1:"efi" \ --largest-new=2 --typecode=2:BF01 --change-name=2:"zfs" /dev/sda
La partizione EFI dovrà poi essere formattata in FAT32
# mkfs.vfat -T32 /dev/sda1
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
[archzfs] Server = https://archzfs.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
Installazione Grub
Sistema con BIOS
# pacman -S grub # grub-mkconfig -o /boot/grub/grub.cfg # grub-install /dev/sda
Sistema UEFI
NB: NON avendo un computer con scheda madre UEFI non ho potuto verificare questa procedura e non ne ho potuto testare il funzionamento
# pacman -S grub # 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
Modifiche a Grub
Per permettere il caricamento del sistema è necessario aggiungere zfs_force=1 zfs=bootfs alla riga di caricamento del kernel nel file /boot/grub/grub.cfg.
Esempio di configurazione
set timeout=2 set default=0 menuentry 'Arch Linux'{ insmod gzio insmod part_gpt insmod zfs set root='hd0,gpt2' linux /ROOT@/boot/vmlinuz-linux zfs_force=1 zfs=bootfs root=ZFS=rpool/ROOT rw quiet initrd /ROOT@/boot/initramfs-linux.img }
Abilitare il servizio ZFS all'avvio
# systemctl enable zfs.service
Terminazione dell'installazione
Adesso è possibile uscire dal chroot, smontare il filesystem e riavviare il sistema.
# exit # zfs unmount -a # zfs set mountpoint=/ rpool # cp /etc/zfs/rpool.cache /mnt/etc/zfs/rpool.cache # zpool export rpool # reboot
Hostid
Abilitato il servizio zfs, dopo il primo reboot, per evitare problemi, è necessario specificare l'hostid e rigenerare il ramdisk.
# 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