[GUIDA] Bcache, luks e btrfs: Archlinux on steroids [parte I]

By j0lly, ven 14 giugno 2013, in category Sysadmin

archlinux, bcache, internals, kernel

Per inaugurare il ritorno ad Archlinux, ho deciso di scrivere un articolo sulla mia attuale installazione! Ho deciso di scrivere questa guida per chiunque voglia cimentarsi con il nuovissimo modulo Kernel (che sarà ufficialmente supportato solo dalla versione 3.10) bcache, che introduce il caching dinamico di un hard disk col supporto di una SSD.

bcache

Il modulo in questione è pensato per chi ha una piccola SSD (magari saldata sulla motherboard come me) da sfruttare al meglio. Fino a poco tempo fa installavo la Root direttamente su SSD, per lasciare la Home sull'HDD. È vero che spesso nella Home esistono files come iso, musica, video, immagini e vari file binari che non giovano delle scritture random delle SSD, ma il caching può comunque servire a velocizzare tutti i files di configurazione all'interno della Home del nostro utente. Visto che ero in ballo con una bella installazione complessa, ho deciso di fare le cose per bene, aggiungendo una full encryption del disco e un filesystem che, posso dirlo, sembra davvero una scelta azzeccatissima: btrfs! Ho utilizzato un paio di guide poco complesse da seguire, ma non credo esista qualcosa in italiano per cui ho deciso di raccogliere tutto in una guida.

PARTE I

PARTE II

PARTE III

E qui le guide:

https://wiki.archlinux.org/index.php/Installing_on_Btrfs_root https://wiki.archlinux.org/index.php/Bcache https://wiki.archlinux.org/index.php/Dm-crypt_with_LUKS http://forums.gentoo.org/viewtopic-t-959542.html

Prima di tutto.. la mia attuale configurazione:

┌──[j0lly@TheH0le]──[~]
└── uname -mnr 
TheH0le 3.9.0-1-ARCH-01423-gbfd2858-dirty x86_64

HDD 500Gb + SSD 24Gb

┌──[j0lly@TheH0le]──[~]
└── lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

sda 8:0 0 465,8G 0 disk
├─sda1 8:1 0 2M 0 part                            [GRUB RESERVED]
├─sda2 8:2 0 509M 0 part                          [UEFI RESERVED]
├─sda3 8:3 0 500M 0 part /boot
├─sda4 8:4 0 1G 0 part                            [RECOVER PARTITION]
├─sda5 8:5 0 455,8G 0 part
└─bcache0 254:0 0 455,8G 0 disk
    └─btrfs1 253:0 0 455,8G 0 crypt /
sdb 8:16 0 22,4G 0 disk
├─sdb1 8:17 0 8G 0 part
    └─cryptswap 253:1 0 8G 0 crypt [SWAP]
└─sdb2 8:18 0 14,4G 0 part
    └─bcache0 254:0 0 455,8G 0 disk
        └─btrfs1 253:0 0 455,8G 0 crypt /

Per cominciare ho preparato il disco seguendo i consigli della guida Arch su bcache: fare un'installazione base sull'SSD, per poi allineare il tutto sull'HDD; la procedura sembrerebbe macchinosa ma, dato che per bootare un disco preparato per il caching con bcache è necessario un modulo kernel che non è attualmente supportato nella versione mainstream del kernel, è necessario compilarlo da un ambiente Linux preesistente e, dato che per Arch abbiamo un comodo pacchetto su AUR che applica le patch desiderate, la scelta si può fare ad occhi chiusi ;).

Se siete in grado di produrre una iso con un kernel patchato (che velocizzerebbe l'installazione e manterrebbe un sistema "recovery" su chiavetta) siete sicuramente avvantaggiati e, dato che ho smadonnato per due giorni cercando di mettere il kernel nella maledetta iso arch, non sarò io a spiegarvi come (dato che ho fallito miseramente). Prima di tutto installiamo Arch dalla Iso (procedure ben documentata nel wiki). Non perdete tempo in fronzoli per l'installazione su SSD dato che servirà da ponte per la vera installazione; l'unico accorgimento che posso dare è quello di creare una partizione di boot da riciclare per l'altra installazione (io l'ho messa su HDD). Dopo aver terminato e restartato il nuovo sistema da SSD, potete procedere scaricando i pacchetti AUR per compilarli:

┌──[j0lly@TheH0le]──[~]
└── mkdir sources && cd sources

┌──[j0lly@TheH0le]──[~/sources]
└── wget https://aur.archlinux.org/packages/li/linux-bcache-git/linux-bcache-git.tar.gz -O - | tar xzvf -

┌──[j0lly@TheH0le]──[~/sources]
└── wget https://aur.archlinux.org/packages/bc/bcache-tools-git/bcache-tools-git.tar.gz -O - | tar xzvf -

Controllate le dipendenze dei pacchetti (ce n'è qualcuna), e quando siete pronti lanciate makepkg -s. dopo un'estenuante attesa avrete il vostro bel kernel _patchato; _installatelo, aggiornate il conf di grub (grub-mkconfig) e fate un reboot con il kernel nuovo di zecca...

Il mio schema di partizionamento è stato dettato da alcuni importanti fattori, con accorgimenti da tenere in considerazione:

Dopo aver deciso il layout_ create le partizioni sull'HDD con gdisk. Per generare il container (la partizione che tiene i dati, in contrapposizione con quella che fa da cache) detto _backing device, _utilizzate il tool make-bcache:

┌──[j0lly@TheH0le]──[~]
└── make-bcache --bdev --block 512 /dev/sd*

Con questa sintassi bcache-tool formatta una partizione (o un disk raw) per il formato bcache, aggiungendo i suo metadata ed headers. Ho specificato 512 come block size perché la mia ssd dava problemi con il default block size, ma è il caso che leggiate la documentazione e le possibili implicazioni. Alla creazione, il device viene automaticamente registrato e nella directory /dev avrete un nuovo Block Device chiamato /dev/bcache*. La registrazione dei devices bcache va fatta ad ogni boot, questo anche per facilitare l'aggiunta o la cancellazione di caching devices (ssd); non preoccupatevi però, perché nel pacchetto bcache-tools è compreso un hook per il kernel da dare in pasto a mkinitcpio che registrerà automaticamente tutti i vostri device bcache al boot. Il parametro da appendere in /etc/mkinitcpio.conf è, manco a dirlo, bcache:

[...] block bcache 
[...] filesystems 
[...]

Bcache va posizionato dopo l'Hook dei block devices, ma prima dei filesystems.

Il dispositivo bcache è pronto ed è giunto il momento di utilizzare cryptsetup per cifrare la partizione, dove creerete più avanti il filesystem con btrfs. Per creare un volume crittografato, dovete utilizzare la suite cryptsetup. Le ozioni sono molte e dell'alto della mia ignoranza ho preferito mantenere lo standard della guida Arch su Luks (nei riferimenti):

┌──[j0lly@TheH0le]──[~]
└── cryptsetup --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 5000 --use-random --verify-passphrase luksFormat /dev/bacache0

Salvatevi la password in un antro oscuro e non disperate: è sempre bene avere una password "incazzata" per il recovery; tanto meglio anzi, dato che Luks permette di avere fino ad 8 "chiavi" per apre i contenitori cifrati; è perfino possibile utilizzare immagini e binari e, mettendoli su una chiavetta per essere letti in automatico all'avvio, potrete scordarvi della password in tranquillità (sempre che le abbiate salvate in un luogo sicuro ;)).

Ok, ora che abbiamo il nostro container cifrato, lo possiamo aprire:

┌──[j0lly@TheH0le]──[~]
└── cryptsetup luksOpen /dev/bcache0 btrfs

Dove _btrfs _sta significare il nome del device mapper che verrà creato all'apertura del volume (/dev/mapper/btrfs). La prima parte della guida termina qui, ma la seconda è già quasi pronta ;) Per chi volesse cominciare subito, ricordatevi di segnare la password per il volume crittografato, oltre a tutti i nomi simbolici che avete dato nella vostra configurazione.

A presto!