Esperimenti col RAID di Linux
In attesa che mi ritorni il disco da 4T (la mia solita fortuna: lo avevo appena riempito per poco più di metà e ZAP! errori a ripetizione) ho pensato di fare qualche esperimento col RAID, così che quando tornerà non dovrò perdere troppo tempo coi restriping (che su dischi da 4T possono essere "impegnativi").
Inizio creando i file per simulare i dischi e li assegno ad altrettanti loop device:
[root@arwen ~]# for T in $(seq 1 6); do dd if=/dev/zero of=/home/test$T.dat bs=1G count=1; losetup /dev/loop$T /home/test$T.dat; done 1+0 record dentro 1+0 record fuori 1073741824 byte (1,1 GB) copiati, 2,05573 s, 522 MB/s 1+0 record dentro 1+0 record fuori 1073741824 byte (1,1 GB) copiati, 3,35956 s, 320 MB/s 1+0 record dentro 1+0 record fuori 1073741824 byte (1,1 GB) copiati, 5,52633 s, 194 MB/s 1+0 record dentro 1+0 record fuori 1073741824 byte (1,1 GB) copiati, 3,39929 s, 316 MB/s 1+0 record dentro 1+0 record fuori 1073741824 byte (1,1 GB) copiati, 3,91915 s, 274 MB/s 1+0 record dentro 1+0 record fuori 1073741824 byte (1,1 GB) copiati, 6,40068 s, 168 MB/s
Ora creo il RAID5 con solo due dischi e ci metto un filesystem di prova:
[root@arwen ~]# mdadm --create --level=5 --raid-devices=2 /dev/md0 /dev/loop[12] mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. [root@arwen ~]# mke2fs /dev/md0 mke2fs 1.42.5 (29-Jul-2012) Etichetta del filesystem= OS type: Linux Dimensione blocco=4096 (log=2) Dimensione frammento=4096 (log=2) Stride=128 blocks, Stripe width=128 blocks 65536 inodes, 261888 blocks 13094 blocks (5.00%) reserved for the super user Primo blocco dati=0 Maximum filesystem blocks=268435456 8 gruppi di blocchi 32768 blocchi per gruppo, 32768 frammenti per gruppo 8192 inode per gruppo Backup del superblocco salvati nei blocchi: 32768, 98304, 163840, 229376 Allocating group tables: fatto Scrittura delle tavole degli inode: fatto Scrittura delle informazioni dei superblocchi e dell'accounting del filesystem: fatto [root@arwen ~]# mount /dev/md0 /media/floppy [root@arwen ~]# dd if=/dev/urandom of=/media/floppy/testfile.dat bs=128k count=1k 1024+0 record dentro 1024+0 record fuori 134217728 byte (134 MB) copiati, 8,59498 s, 15,6 MB/s [root@arwen ~]# md5sum /media/floppy/testfile.dat b86cbca40ec49f37aadfc4e3f94d8a15 /media/floppy/testfile.dat
Ed ora inizia la parte divertente.
Prima di tutto verifico che il RAID5 di due dischi si comporti come un RAID1:
[root@arwen ~]# mdadm --fail /dev/md0 /dev/loop2 mdadm: set /dev/loop2 faulty in /dev/md0 [root@arwen ~]# umount /media/floppy [root@arwen ~]# mount /dev/md0 /media/floppy [root@arwen ~]# md5sum /media/floppy/testfile.dat b86cbca40ec49f37aadfc4e3f94d8a15 /media/floppy/testfile.dat [root@arwen ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 loop2[2](F) loop1[0] 1047552 blocks super 1.2 level 5, 512k chunk, algorithm 2 [2/1] [U_] unused devices:
E fin qui tutto OK come previsto.
Ora gli dico che ho provveduto a sostituire il "disco guasto":
[root@arwen ~]# mdadm --zero-superblock /home/test2.dat [root@arwen ~]# mdadm /dev/md0 --remove /dev/loop2 mdadm: hot removed /dev/loop2 from /dev/md0 [root@arwen ~]# mdadm /dev/md0 --add /dev/loop2 mdadm: added /dev/loop2 [root@arwen ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 loop2[2] loop1[0] 1047552 blocks super 1.2 level 5, 512k chunk, algorithm 2 [2/1] [U_] [======>..............] recovery = 31.2% (327380/1047552) finish=0.1min speed=109126K/sec unused devices:
Prima ricostruzione necessaria. Ma OK: vuol dire che effettivamente i dati ci sono ancora tutti o non potrebbe ricostruire
Aggiungo un disco come hot spare (per abitudine i dischi successivi li acquisto sempre "con calma", così dilaziono la spesa e li ho tutti di lotti diversi, minimizzando la possibilità che se ne guastino due insieme per problemi legati alla produzione). Tanto dovrebbero ancora bastarmi i 4T disponibili (le ultime parole famose... comunque al limite me la cavo al prezzo di un restriping). Usare RAID6 sarebbe anche più sicuro, ma poi potrei avere problemi aggiungendo i dischi successivi -- preferisco rimanere sul sicuro.
[root@arwen ~]# mdadm /dev/md0 --add /dev/loop3 mdadm: added /dev/loop3 [root@arwen ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 loop3[3](S) loop2[2] loop1[0] 1047552 blocks super 1.2 level 5, 512k chunk, algorithm 2 [2/2] [UU] unused devices:
Effettivamente il terzo disco viene aggiunto come spare, quindi a questo punto ho un RAID5 che in realtà è un RAID1 più un hot spare.
Ora aggiungo un altro paio di dischi, tanto per arrivare ai canonici 5 ed espando il RAID:
[root@arwen ~]# mdadm /dev/md0 --add /dev/loop4 mdadm: added /dev/loop4 [root@arwen ~]# mdadm /dev/md0 --add /dev/loop5 mdadm: added /dev/loop5 [root@arwen ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 loop5[5](S) loop4[4](S) loop3[3](S) loop2[2] loop1[0] 1047552 blocks super 1.2 level 5, 512k chunk, algorithm 2 [2/2] [UU] unused devices: [root@arwen ~]# umount /media/floppy [root@arwen ~]# mdadm --grow /dev/md0 --raid-devices=5 mdadm: Need to backup 2048K of critical section.. [root@arwen ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 loop5[5] loop4[4] loop3[3] loop2[2] loop1[0] 1047552 blocks super 1.2 level 5, 512k chunk, algorithm 2 [5/5] [UUUUU] [>....................] reshape = 4.4% (47104/1047552) finish=0.3min speed=45056K/sec unused devices:
Da notare che durante il restripe viene effettuato il backup di un paio di mega di dati. Dovrò verificare se si tratta di una dimensione fissa o se varia con la dimensione del RAID...
Ridimensiono il filesystem:
[root@arwen ~]# resize2fs /dev/md0 resize2fs 1.42.5 (29-Jul-2012) resize2fs: Dispositivo o risorsa occupata durante l'apertura di /dev/md0 Impossibile trovare un valido superblocco per il filesystem.
OPS! Chell'è? No way. Vediamo se con un bel reboot si sistema... Dopo il reboot:
[root@arwen ~]# for T in `seq 1 6`; do losetup /dev/loop$T /home/test$T.dat; done [root@arwen ~]# mdadm --assemble /dev/md0 /dev/loop[12345] mdadm: /dev/md0 has been started with 5 drives. [root@arwen ~]# e2fsck /dev/md0 e2fsck 1.42.5 (29-Jul-2012) /dev/md0 non è stato smontato in maniera corretta, controllo forzato. Passo 1: Controllo di inode, blocco(i) e dimensioni Passo 2: Analisi della struttura delle directory Passo 3: Controllo della connettività di directory Pass 4: Controllo del numero dei riferimenti Pass 5: Checking gruppo summary information /dev/md0: 12/65536 files (0.0% non-contiguous), 37244/261888 blocks [root@arwen ~]# resize2fs /dev/md0 resize2fs 1.42.5 (29-Jul-2012) Resizing the filesystem on /dev/md0 to 1047552 (4k) blocks. The filesystem on /dev/md0 is now 1047552 blocks long. [root@arwen ~]# mount /dev/md0 /media/floppy [root@arwen ~]# md5sum /media/floppy/testfile.dat b86cbca40ec49f37aadfc4e3f94d8a15 /media/floppy/testfile.dat
Fiu.... Pare proprio che tutto sia OK... Se me lo avesse fatto sul RAID coi dati buoni mi sarebbe venuto un coccolone...
Ora posso distruggere il tutto...
[root@arwen ~]# mdadm --stop /dev/md0 [root@arwen ~]# losetup -D [root@arwen ~]rm -f /home/test[123456].dat
Se dovesse tornare a dire che è "busy", con un riavvio (dopo essersi accertati che che sia tutto smontato) si risolve. Certo che mi piacerebbe capire che cosa lo tiene occupato...
Commenti
Prestazioni 7k4000: RAID5 con solo 2 dischi
Finalmente ho iniziato a provare il RAID effettivo con i primi due dischi da 4T.
Intanto, la ricostruzione iniziale richiede circa 500' (circa 8 ore, in idle)... Temevo peggio.
Poi, trasferire un file (un'immagine iso da 4G, quindi trasferimento lineare) dall'SSD interno al RAID mi ha dato un transfer rate di più di 140M/s sustained (a rebuild in corso! ma comunque influenzato anche dal caching grazie ai 16G di RAM...).
Un test sicuramente più serio è quello da bonnie++ :
Quindi, per una scrittura a blocchi, un bel 126MB/s sustained usando il 7% della CPU... Dovrò ricordarmi di verificare l'uso della CPU quando avrò almeno 3 dischi in RAID5 (ora è praticamente un RAID1).
Da RAID1 a RAID5
Finalmente (dopo essermi beccato anche una truffa da un venditore online: non pagate mai con ricarica Postamat e sentitevi liberi di "pensare male" di chi ve lo chiede!) è arrivato il terzo disco da 4TB. Dopo un bel check offline con SMART, oggi lo metto online:
Quindi:
Seguirà (terminato il reshape...) un ulteriore test con Bonnie++ per vedere quanto il RAID5 impatti le prestazioni rispetto al RAID1.
Più veloce del previsto
La ricostruzione è terminata in meno di 24 ore (la stima iniziale era "un tantino" pessimista), e come promesso ecco i risultati di una nuova esecuzione di Bonnie++ :
Si può facilmente notare come sia leggermente più lento e più pesante per I/O singoli, mentre per scritture sequenziali a blocchi è leggermente più veloce (ma l'uso della CPU passa da un misero 7% al 25%). In lettura il collo di bottiglia è la CPU.