La mia idea attuale è creare un array software, classe RAID-6, con 4 unità membro, usando mdadm
.
In particolare, le unità sarebbero HDD da 1 TB su SATA in un piccolo server Dell T20.
Il sistema operativo è GNU/Linux Debian 8.6 (successivamente aggiornato:Jessie ⟶ Stretch ⟶ Buster)
Ciò farebbe 2 TB di spazio su disco con 2 TB di parità nel mio caso.
Mi piacerebbe anche averlo con la tabella delle partizioni GPT, affinché funzioni, non sono sicuro di come procedere specificamente supponendo che preferirei farlo esclusivamente dal terminale.
Dato che non ho mai creato un array RAID, potresti guidarmi su come dovrei procedere?
Note:
-
Questo array servirà solo per i soli dati. Nessun avvio o sistema operativo su di esso.
-
Ho optato per RAID-6 per lo scopo di questo array. Due guasti dell'unità che l'array deve essere in grado di sopravvivere. Dal momento che sono limitato dall'hardware a 4 unità, non c'è alternativa a RAID-6 che io sappia. (Per quanto brutto possa sembrare il rallentamento RAID-6, non importa in questo array.)
Risposta accettata:
In questa risposta, sia chiaro che tutti i dati verranno distrutti su tutti i membri dell'array (unità), quindi esegui prima il backup!
Apri il terminale e diventa root
(su
); se hai sudo
abilitato, puoi anche fare ad esempio sudo -i
; vedi man sudo
per tutte le opzioni):
sudo -i
Innanzitutto, dovremmo cancellare le unità, se prima c'erano dati e filesystem, cioè. Supponiamo di avere 4 membri:sdi
, sdj
, sdk
, sdl
. Allo scopo di avere un feedback visivo di questo processo, il pv
(visualizzatore di pipe ) è stato utilizzato qui:
pv < /dev/zero > /dev/sdi
pv < /dev/zero > /dev/sdj
pv < /dev/zero > /dev/sdk
pv < /dev/zero > /dev/sdl
In alternativa, per verificare semplicemente se non è rimasto nulla, puoi dare un'occhiata con GParted su tutte le unità e, se è presente una partizione con o senza filesystem, cancellarla potrebbe essere sufficiente, anche se io stesso preferisco quanto sopra azzerando tutto le unità coinvolte, ricorda di smontare tutte le partizioni prima di farlo, potrebbe essere fatto in modo simile a questi one-liner:
umount /dev/sdi?; wipefs --all --force /dev/sdi?; wipefs --all --force /dev/sdi
umount /dev/sdj?; wipefs --all --force /dev/sdj?; wipefs --all --force /dev/sdj
umount /dev/sdk?; wipefs --all --force /dev/sdk?; wipefs --all --force /dev/sdk
umount /dev/sdl?; wipefs --all --force /dev/sdl?; wipefs --all --force /dev/sdl
Quindi, inizializziamo tutte le unità con la tabella delle partizioni GUID (GPT) e dobbiamo partizionare tutte le unità, ma non farlo con GParted, perché creerebbe un filesystem nel processo, cosa che non vogliamo, usa gdisk
invece:
gdisk /dev/sdi
gdisk /dev/sdj
gdisk /dev/sdk
gdisk /dev/sdl
In tutti i casi utilizzare quanto segue:
o
Entra per la nuova tabella delle partizioni GUID (GPT) vuotay
Entra per confermare la tua decisionen
Entra per la nuova partizione
Invio per impostazione predefinita della prima partizione
Invio per default del primo settore
Invio per default dell'ultimo settorefd00
Entra per tipo RAID Linuxw
Entra per scrivere le modifichey
Entra per confermare la tua decisione
Puoi esaminare le unità ora:
mdadm --examine /dev/sdi /dev/sdj /dev/sdk /dev/sdl
Dovrebbe dire:
(type ee)
In tal caso, esaminiamo ora le partizioni:
mdadm --examine /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1
Dovrebbe dire:
No md superblock detected
In tal caso, possiamo creare l'array RAID6:
mdadm --create /dev/md0 --level=6 --raid-devices=4 /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1
Dovremmo aspettare fino a quando l'array non è completamente creato, questo processo possiamo facilmente watch
:
watch cat /proc/mdstat
Dopo la creazione dell'array, dovremmo esaminarne i dettagli:
mdadm --detail /dev/md0
Dovrebbe dire:
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Ora creiamo un filesystem sull'array, se usi ext4
, di seguito nascosto comando è meglio evitare, a causa di ext4lazyinit
richiederebbe una notevole quantità di tempo nel caso di un array di grandi dimensioni, da cui il nome "lazyinit “, quindi ti consiglio di evitare questo:
mkfs.ext4 /dev/md0
Invece, dovresti forzare un'inizializzazione istantanea completa (con lo 0% riservato a root
poiché è un array di dati):
mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0 /dev/md0
Specificando queste opzioni, gli inode e il journal verranno inizializzati immediatamente durante la creazione, utile per array più grandi.
Se hai scelto di prendere una scorciatoia e hai creato il ext4
filesystem con il "comando da evitare", nota che ext4lazyinit
ci vorrà una notevole quantità di tempo per inizializzare tutti gli inode, puoi guardarlo fino al termine, ad es. con iotop
o nmon
.
In ogni caso, scegli di eseguire l'inizializzazione del file system, dovresti montarlo dopo che ha terminato l'inizializzazione.
Ora creiamo una directory per questo array RAID6:
mkdir -p /mnt/raid6
E montalo semplicemente:
mount /dev/md0 /mnt/raid6
Dato che abbiamo essenzialmente finito, potremmo usare di nuovo GParted per verificare rapidamente se mostra linux-raid
filesystem, insieme al raid
flag su tutte le unità.
In tal caso, abbiamo creato correttamente l'array RAID6 con le partizioni GPT e ora possiamo copiare i file su di esso.
Guarda quale UUID è il md
il filesystem ha:
blkid /dev/md0
Copia l'UUID negli appunti.
Ora dobbiamo modificare fstab
, con il tuo editor di testo preferito, ho usato nano
, sebbene sudoedit
potrebbe essere meglio utilizzato:
nano /etc/fstab
E aggiungi una voce ad esso:
UUID=<the UUID you have in the clipboard> /mnt/raid6 ext4 defaults 0 0
Io stesso non consiglio di usare defaults
set di flag, volevo semplicemente che la linea non fosse eccessivamente complessa.
Ecco quali flag di montaggio utilizzo su un RAID dati di backup UPS (invece di defaults
):
nofail,nosuid,nodev,noexec,nouser,noatime,auto,async,rw,data=journal,errors=remount-ro
Puoi verificare se è corretto dopo aver salvato le modifiche:
mount -av | grep raid6
Dovrebbe dire:
already mounted
In tal caso, salviamo la configurazione dell'array; nel caso tu non abbia alcun md
dispositivo ancora creato, puoi semplicemente fare:
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
Nel caso ci siano array già esistenti, basta eseguire il comando precedente senza reindirizzare al file di configurazione:
mdadm --detail --scan
e aggiungi manualmente il nuovo array al file di configurazione.
Correlati:Ora di inizio del processo con fuso orario?
Alla fine, non dimenticare di aggiornare il tuo initramfs
, perché altrimenti il tuo nuovo array verrà assemblato automaticamente in sola lettura, probabilmente come /dev/md127
o simili:
update-initramfs -u -k all
Controlla se hai fatto tutto secondo i piani e, in tal caso, puoi riavviare:
reboot