Installazione di Parabola GNU/Linux-libre con LVM + RAID 1


Per ritornare ad avere un sistema pulito ho deciso di reinstallare tutto ma questa volta con una configurazione diversa.

Devo fare una premessa necessaria. Molti di voi si chiederanno perchè, o che cos’è LVM, RAID 1 e Parabola. Posso dare una risposta semplice ma incompleta per tutte e tre le cose.

Parabola

Parabola GNU/Linux-libre [0] è la versione completamente libera di Arch Linux ed è una delle pochissime distribuzioni di questo tipo [1]. Come suggerisce il nome, al posto di usare il kernel Linux, viene usato Linux-libre, cioè Linux senza blob binari, il che significa senza componenti proprietarie.

Ovviamente tutti i pacchetti che troverete sono software libero quindi scordatevi
certi programmi (o certo hardware [2]) che troverete (funzionante) su altre distribuzioni.

Oltre a questo Parabola ha anche dei repository custom con pacchetti non presenti su Arch Linux oppure con patch che vanno ad incrementare la sicurezza.

Ci tengo comunque a dire che le procedure scritte in questo articolo valgono per tutte le distribuzioni Arch-like (facendo minime modifiche dove opportuno).

RAID

Il RAID di livello 1 [3] consente di avere il mirroring in tempo reale di una o più partizioni su un minimo di due dischi. Questo significa che se ad esempio ho due dischi ed uno si rompe per qualche motivo, il sistema continuerà a funzionare perchè c’è sempre l’altro funzionante. Quindi i dischi sono sempre sincronizzati tra di loro.

Per utilizzare altri livelli RAID più sofisticati, di solito sono necessari più di due dischi.

LVM

LVM sta per Logical Volume Manager [4]. Questo consente di creare più partizioni logiche su una stessa partizione fisica, oltre che di ridimensionare queste partizioni a piacimento, e, volendo, estenderle su più dischi.

Perchè mettere insieme le tre cose

La configurazione che usavo precedentemente usava solo RAID 1, quindi c’era quasi da impazzire nel fare il resize senza perdere dati. Se per qualche motivo in futuro avrò bisogno di più (o meno) spazio da dedicare ad una partizione posso usare LVM, senza bisogno di fare un backup completo nel caso qualcosa vada storto. Inoltre se si rompe un disco non devo preoccuparmi, mi basta prendere un disco simile, montarlo e lasciare che RAID sincronizzi tutto. Infine l’utilizzo di Parabola non è solo dato dal motivo etico (nonostante sia il più importante) ma anche perchè mi interessa avere un sistema leggero e altamente personalizzabile.

N.D.R.

La scrittura di questo post è data dal fatto che nel tentare l’installazione seguendo l’atricolo Software RAID and LVM [5] si scopre che ci sono delle imprecisioni e contraddizioni (come si può vedere dalla discussione dell’articolo stesso [6]).

Di seguito trovere  l’obbiettivo da raggiungere e come raggiungerlo effettivamente.

Struttura da ottenere

La prima cosa che ho fatto è stata fare il backup completo di tutto il sistema su un hard disk esterno con il seguente one-liner preso da [7]

# rsync --delete -aAXv \
--exclude={"/dev/*","/proc/*","/sys/*","/tmp/*",\
"/run/*","/mnt/*","/media/*","/lost+found"} \
/ /path/to/backup/folder

Alla fine dell’installazione, le partizioni saranno di tipo GPT ed il bootloader sarà Syslinux (da quello che so scordatevi Winzozz con queste due configurazioni).

Ecco alcune imagini che dovrebbero chiarire:

Warining: le immagini non sono in scala e fatte alla buona. Potete riferivi alla discussione dell’articolo Software RAID and LVM, dove in  fondo alla pagina c’è uno schema corretto e simile al mio, anche se vengono utilizzati 3 dischi e le partizioni sono un po’ diverse.

Passiamo alla pratica

Partizionameno fisico

Assumendo che i vostri due dischi da partizionare siano /dev/sda e /dev/sdb, apriamo gdisk sul primo disco.

gdisk /dev/sda

Creiamo una nuova tabella delle partizioni. Da notare che ho inserito le misure in KB, per fare in modo di avere dimensioni esatte e non grossolane.

o
[Enter]

Creiamo le tre partizioni:

n
[Enter]
[Enter]
+131072K

n
[Enter]
[Enter]
+8388608K

n
[Enter]
[Enter]
[Enter]

Questo è quello che mi è risultato:

##### Result:
Command (? for help): p
Disk /dev/sda: 1250263728 sectors, 596.2 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): F27BE15B-20CB-45B7-A7E5-41CBE6F730BD
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 1250263694
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          264191   128.0 MiB   FD00  Linux RAID
   2          264192        17041407   8.0 GiB     FD00  Linux RAID
   3        17041408      1250263694   588.0 GiB   FD00  Linux RAID
#####

Copiamo la tabella delle partizioni sull’altro disco.

sgdisk --backup=table /dev/sda
sgdisk --load-backup=table /dev/sdb

Array RAID

Creiamo l’array RAID.

mdadm --create /dev/md0 --level=1 --verbose --raid-devices=2 /dev/sd[ab]3
mdadm --create /dev/md1 --level=1 --verbose --raid-devices=2 /dev/sd[ab]2
mdadm --create /dev/md2 --level=1 --metadata=1.0 --verbose --raid-devices=2 /dev/sd[ab]1

Partizionamento logico

Creiamo il volume fisico LVM su /dev/md0 e controlliamo il risultati.

pvcreate /dev/md0
pvdisplay

E questo è il mio risultato:

 --- Physical volume ---
  PV Name               /dev/md0
  VG Name               VolGroupArray
  PV Size               587.92 GiB / not usable 3.31 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              150507
  Free PE               14232
  Allocated PE          136275
  PV UUID               YfETpv-km7b-bDJk-pQfb-UAwC-i2ln-lZAIUw

Creiamo il volume group VolGroupArray.

vgcreate VolGroupArray /dev/md0

Creiamo le due partizioni logiche (logical volumes), lasciano il 10% di spazio libero per future evenienze e poi controlliamo il risultato. Da notare che la partizione logica di root è di 32 GB (cioè 33554432KB).

lvcreate -L 33554432K VolGroupArray -n lvroot
lvcreate -l +90%FREE VolGroupArray -n lvhome
lvdisplay
--- Logical volume ---
  LV Path                /dev/VolGroupArray/lvroot
  LV Name                lvroot
  VG Name                VolGroupArray
  LV UUID                EKkft9-7Kbg-IRAA-fHt4-1qi5-ooql-SAGXcT
  LV Write Access        read/write
  LV Creation host, time parabolaiso, 2016-11-12 19:05:42 +0100
  LV Status              available
  # open                 1
  LV Size                32.00 GiB
  Current LE             8192
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:0

  --- Logical volume ---
  LV Path                /dev/VolGroupArray/lvhome
  LV Name                lvhome
  VG Name                VolGroupArray
  LV UUID                XUp1y1-1vlp-WZoO-kee7-tDOE-uCvH-GkiOls
  LV Write Access        read/write
  LV Creation host, time parabolaiso, 2016-11-12 23:12:46 +0100
  LV Status              available
  # open                 1
  LV Size                500.32 GiB
  Current LE             128083
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:1

Facciamo il backup della configurazione RAID.

mdadm --examine --scan > /etc/mdadm.conf

Mettiamo un file system nell varie partizioni. Questo viene solitamente chiamato formattare le partizioni.

mkfs.ext4 /dev/mapper/VolGroupArray-lvroot
mkfs.ext4 /dev/mapper/VolGroupArray-lvhome
mkswap /dev/md1
mkfs.ext2 /dev/md2

Attiviamo la swap in modo che il sistema posssa rilevarla per metterla in fstab successivamente:

eval $(blkid | grep /dev/md2 | awk '{print $2}')
swapon -U "$UUID"

Aggiungiamo gli hook ed i moduli kernel seguenti (necessari per il RAID [8] e LVM [9]).

nano /etc/mkinitcpio.conf
        add "mdadm_udev" and "lvm2" after "udev", like so:
        HOOKS="base udev mdadm_udev lvm2 autodetect modconf block lvm2 filesystems keyboard fsck"
        as well as:
        MODULES="dm_mod dm_raid raid1"

Montiamo le partizioni.

mount /dev/mapper/VolGroupArray-lvroot /mnt
mkdir /mnt/home
mount /dev/mapper/VolGroupArray-lvhome /mnt/home
mkdir /mnt/boot
mount /dev/md2 /mnt/boot

Installazione sistema

Da qui possiamo fino ad Ultime cose fondamentali si tratta di cose che si trovano nella guida tradizionale d’installazione.

Quindi modifichiamo la mirror list a piacimento e poi installiamo tutti i pacchetti che ci interessa trovare al riavvio. Questi sono quelli che ho messo io:

pacstrap /mnt base base-devel spectrwm mutt iceweasel-hardening icedove
qemu bash-completion cutegram qtox cups openssh redshift
iceweasel-ublock-origin haveged file-roller

Generiamo il file fstab

genfstab -U /mnt >> /mnt/etc/fstab

Entriamo come chroot

arch-chroot /mnt

Impostiamo l’orologio.

ln -s /usr/share/zoneinfo/Europe/Rome /etc/localtime
hwclock --systohc

Attiviamo i locales che ci interessano e poi li generiamo

locale-gen
echo "LANG=en_US.UTF-8" > /etc/locale.conf
echo "KEYMAP=it" > /etc/vconsole.conf

Impostiamo l’host name.

echo "ppc" > /etc/hostname

Infine usciamo dal chroot

exit

Ultime cose fondamentali

Salviamo la configurazione RAID nel file che verrà usato dal sistema una volta installato.

mdadm --detail --scan >> /mnt/etc/mdadm.conf

Copiamo anche il file mkinitcpio modificato precedentemente.

cp /etc/mkinitcpio.conf /mnt/etc/mkinitcpio.conf

Torniamo ancora come chroot.

arch-chroot /mnt

Rigeneriamo la configurazione dei kernel

mkinitcpio -p linux-libre

Aggiungiamo la password di root

passwd

Installiamo ed attiviamo il bootloader su entrambi i dischi.

pacman -S syslinux gptfdisk
syslinux-install_update -i -a -m

Facciamo il backup dello schema delle partizioni.

mkdir /etc/partitions
sfdisk --dump /dev/sda > /etc/partitions/disk0.partitions
sfdisk --dump /dev/sdb > /etc/partitions/disk1.partitions

Infine modifichiamo la configurazione di Syslinux. Si tratta di modificare la entry all’interno di LABEL parabola, sostituendo: APPEND root=/dev/sda3 rw con APPEND root=/dev/mapper/VolGroupArray-lvroot rw nel file /boot/syslinux/syslinux.cfg. Se questo non viene fatto, non sarà possibile avviare il sistema.

Uscita e riavvio

exit
poweroff

Se tutto va bene dovreste trovarvi un sistema funzionante.

Ciao, alla prossima.

Fonti

[0]: https://parabola.nu
[1]: https://www.gnu.org/distros/free-distros.html
[2]: https://h-node.org/
[3]: https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_1
[4]: https://en.wikipedia.org/wiki/Logical_Volume_Manager_%28Linux%29
[5]: https://wiki.archlinux.org/index.php/Software_RAID_and_LVM
[6]: https://wiki.archlinux.org/index.php/Talk:Software_RAID_and_LVM
[7]: https://wiki.archlinux.org/index.php/Full_system_backup_with_rsync
[8]: https://wiki.archlinux.org/index.php/RAID#Add_mdadm_hook_to_mkinitcpio.conf
[9]: https://wiki.archlinux.org/index.php/LVM#Add_lvm2_hook_to_mkinitcpio.conf_for_root_on_LVM

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...