L'autore di questo capitolo (CCD: configurazione) è Brian A. Seklecki <lavalamp@burghcom.com>
Il driver CCD consente all'utente di "concatenare" più dischi fisici tra loro formando un unico pseudo-volume. CCD consente inoltre di superare una limitazione di CMU RAIDFrame, che non permette di configurare RAID0 (file system su più dischi) su dischi di geometria differente. CCD consente inoltre di utilizzare un'"interleave" per migliorare le prestazioni diminuendo lo spreco di spazio (questa caratteristica non viene descritta nel presente esempio).
I passi necessari per la configurazione di CCD sono i seguenti:
Installazione dei dischi
Configurazione del supporto a CCD nel kernel
Creazione della disklabel per ogni volume membro del CCD
Creazione del file di configurazione del CCD
Inizializzazione del dispositivo CCD
Creazione di un file system 4.4BSD/UFS sul nuovo dispositivo CCD
Mount del file system CCD
Questo esempio fa riferimento all'impostazione di CCD su NetBSD/Sparc 1.5. Il CCD risiederà su quattro dischi SCSI in uno chassis esterno della Sun collegato al port esterno SCSI da 50 pin.
Questa fase dipende naturalmente dalla piattaforma e dall'hardware utilizzato.
Esempio di dmesg:
Disk #1: probe(esp0:0:0): max sync rate 10.00MB/s sd0 at scsibus0 target 0 lun 0: <SEAGATE, ST32430N SUN2.1G, 0444> SCSI2 0/direct fixed sd0: 2049 MB, 3992 cyl, 9 head, 116 sec, 512 bytes/sect x 4197405 sectors Disk #2 probe(esp0:1:0): max sync rate 10.00MB/s sd1 at scsibus0 target 1 lun 0: <SEAGATE, ST32430N SUN2.1G, 0444> SCSI2 0/direct fixed sd1: 2049 MB, 3992 cyl, 9 head, 116 sec, 512 bytes/sect x 4197405 sectors Disk #3 probe(esp0:2:0): max sync rate 10.00MB/s sd2 at scsibus0 target 2 lun 0: <SEAGATE, ST11200N SUN1.05, 9500> SCSI2 0/direct fixed sd2: 1005 MB, 1872 cyl, 15 head, 73 sec, 512 bytes/sect x 2059140 sectors Disk #4 probe(esp0:3:0): max sync rate 10.00MB/s sd3 at scsibus0 target 3 lun 0: <SEAGATE, ST11200N SUN1.05, 8808 > SCSI2 0 sd3: 1005 MB, 1872 cyl, 15 head, 73 sec, 512 bytes/sect x 2059140 sectors
Per il supporto ai dispositivi CCD è necessario attivare la seguente opzione nel file di configurazione del kernel (attivata di default in GENERIC):
pseudo-device ccd 4 # concatenated disk devices
Nel mio file di configurazione del kernel, codifico direttamente l'associazione tra gli "id" SCSI e i corrispondenti dispositivi /dev, per avere il massimo controllo:
sd0 at scsibus0 target 0 lun ? # SCSI disk drives sd1 at scsibus0 target 1 lun ? # SCSI disk drives sd2 at scsibus0 target 2 lun ? # SCSI disk drives sd3 at scsibus0 target 3 lun ? # SCSI disk drives sd4 at scsibus0 target 4 lun ? # SCSI disk drives sd5 at scsibus0 target 5 lun ? # SCSI disk drives sd6 at scsibus0 target 6 lun ? # SCSI disk drives
È necessario creare un file sistem speciale per ogni disco membro del CCD. Nel presente esempio, si dovrà creare la disklabel per:
/dev/rsd0c /dev/rsd1c /dev/rsd2c /dev/rsd3c
si ricordi di creare sempre la disklabel per il dispositivo a caratteri, non per quello a blocchi. Per esempio: /dev/r{s,w}d*
Nota: su tutte le piattaforme, la slice c è riservata e rappresenta l'intera partizione NetBSD.
Sulla piattaforma i386, la slice d è riservata e rappresenta l'intero disco.
Prima di creare le nuove disklabel si possono rimuovere quelle preesistenti con una serie di comandi simili ai seguenti:
Nota: sulla piattaforma i386, sostituire rsd#c a rsd#
# dd if=/dev/zero of=/dev/rsd0c bs=8k count=1 # dd if=/dev/zero of=/dev/rsd1 bs=8k count=1 # dd if=/dev/zero of=/dev/rsd2 bs=8k count=1 # dd if=/dev/zero of=/dev/rsd3 bs=8k count=1
La disklabel di default per i dischi sarà simile alla seguente:
# disklabel -r /dev/rsd0c [...snip...] bytes/sector: 512 sectors/track: 116 tracks/cylinder: 9 sectors/cylinder: 1044 cylinders: 3992 total sectors: 4197405 [..snip...] 3 partitions: # size offset fstype [fsize bsize cpg] c: 4197405 0 unused 1024 8192 # (Cyl. 0 - 4020*)
È necessario creare una "slice" nella partizione NetBSD che occupi l'intera partizione. La slice deve iniziare almeno un cilindro dopo l'inizio del disco o della partizione per lasciare spazio alla speciale disklabel richiesta da CCD. L'offset deve essere 1 x settori/cilindro. Pertanto, il valore di "size" deve essere uguale al numero di settori totali meno il numero di settori presenti in un cilindro.
Nota: accertarsi che l'offset di una slice di tipo "ccd" sia un multiplo del valore "settori/cilindro".
Modificare la disklabel di conseguenza, specificando il percorso del dispositivo a caratteri, non di quello a blocchi.
Nota: prima di iniziare l'editing delle disklabel, verificare che sia esportata la variabile di ambiente EDITOR.
# disklabel -e /dev/rsd0c
Nota: il tipo ("fstype") della slice deve essere ccd.
Poichè la partizione conterrà una slice sola, si può riciclare la slice c, che normalmente è riservata. La disklabel viene quindi impostata così:
3 partitions: # size offset fstype [fsize bsize cpg] c: 4196361 1044 ccd # (Cyl. 1 - 4020*)
È anche possibile impostare una slice diversa da c, come nell'esempio seguente:
3 partitions: # size offset fstype [fsize bsize cpg] a: 4196361 1044 ccd # (Cyl. 1 - 4020*) c: 4197405 0 unused 1024 8192 # (Cyl. 0 - 4020*)
Al termine del'operazione ci si assicuri di scrivere la disklabel, che deve superare i controlli di validità, pena il rifiuto da parte del comando disklabel.
Una volta terminata la creazione delle disklabel per tutti i dischi, si può passare alla scrittura del file di configurazione, che risiede nella directory /etc di default. Il formato è il seguente:
#ccd ileave flags component devices
Nota: per quanto riguarda il valore di "ileave", se viene messo zero allora i dischi vengono concatenati, ma se si usa un valore uguale al numero di settori/cilindro allora i dischi sono interlacciati.
Nell'esempio corrente, il contenuto del file è:
# more /etc/ccd.conf ccd0 0 none /dev/sd0c /dev/sd1c /dev/sd2c /dev/sd3c
Nota: il file di configurazione di CCD fa riferimento ai file system CCD appena creati. Bisogna utilizzare i dispositivi a caratteri, e non quelli a blocchi.
Dopo aver verificato la correttezza delle impostazioni appena effettuate, si può finalmente inizializzare il dispositivo usando il comando ccdconfig: Configure:
# ccdconfig -c -f /etc/ccd.conf
La configurazione si cancella con il flag -u:
# ccdconfig -u -f /etc/ccd.conf
L'inizializzazione del CCD attiverà i dispositivi /dev: /dev/{,r}ccd#:
# ls -la /dev/{,r}ccd0* brw-r----- 1 root operator 9, 0 Apr 28 21:35 /dev/ccd0a brw-r----- 1 root operator 9, 1 Apr 28 21:35 /dev/ccd0b brw-r----- 1 root operator 9, 2 May 12 00:10 /dev/ccd0c brw-r----- 1 root operator 9, 3 Apr 28 21:35 /dev/ccd0d brw-r----- 1 root operator 9, 4 Apr 28 21:35 /dev/ccd0e brw-r----- 1 root operator 9, 5 Apr 28 21:35 /dev/ccd0f brw-r----- 1 root operator 9, 6 Apr 28 21:35 /dev/ccd0g brw-r----- 1 root operator 9, 7 Apr 28 21:35 /dev/ccd0h crw-r----- 1 root operator 23, 0 Jun 12 20:40 /dev/rccd0a crw-r----- 1 root operator 23, 1 Apr 28 21:35 /dev/rccd0b crw-r----- 1 root operator 23, 2 Jun 12 20:58 /dev/rccd0c crw-r----- 1 root operator 23, 3 Apr 28 21:35 /dev/rccd0d crw-r----- 1 root operator 23, 4 Apr 28 21:35 /dev/rccd0e crw-r----- 1 root operator 23, 5 Apr 28 21:35 /dev/rccd0f crw-r----- 1 root operator 23, 6 Apr 28 21:35 /dev/rccd0g crw-r----- 1 root operator 23, 7 Apr 28 21:35 /dev/rccd0h
Ora si può creare la disklabel del nuovo disco virtuale associato con il CCD (usare il dispositivo a caratteri):
# disklabel -e /dev/rccd0c
Come in precedenza, visto che viene usata una slice sola è possibile riciclare la slice c oppure creare una slice separata.
# disklabel -r /dev/rccd0c # /dev/rccd0c: type: ccd disk: ccd label: default label flags: bytes/sector: 512 sectors/track: 2048 tracks/cylinder: 1 sectors/cylinder: 2048 cylinders: 6107 total sectors: 12508812 rpm: 3600 interleave: 1 trackskew: 0 cylinderskew: 0 headswitch: 0 # microseconds track-to-track seek: 0 # microseconds drivedata: 0 # size offset fstype [fsize bsize cpg] c: 12508812 0 4.2BSD 1024 8192 16 # (Cyl. 0 - 6107*)
Naturalmente bisogna anche creare il file system:
# newfs /dev/rccd0c Warning: 372 sector(s) in last cylinder unallocated /dev/rccd0c: 12508812 sectors in 6108 cylinders of 1 tracks, 2048 sectors 6107.8MB in 382 cyl groups (16 c/g, 16.00MB/g, 3968 i/g) super-block backups (for fsck -b #) at: [...]
Il file system del dispositivo CCD appena creato può essere montato su un punto di mount del sistema. Deve essere montata la slice etichettata ffs oppure 4.4BSD:
# mount /dev/ccd0c /mnt
Poi:
# export BLOCKSIZE=1024; df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/sd6a 376155 320290 37057 89% / /dev/ccd0c 6058800 1 5755859 0% /mnt
Al termine di questo esempio dovreste essere in grado di configurare un dispositivo CCD. Consultate le pagine di manuale per ulteriori dettagli sui comandi descritti in questo capitolo e per attivare automaticamente il dispositivo CCD all'avvio mediante i file RC.