Capitolo 19. CCD: configurazione

Sommario
19.1. Installazione dei dischi
19.2. Configurazione del kernel
19.3. Scrittura delle disklabel
19.4. Configurazione del CCD
19.5. Inizializzazione del CCD
19.6. Creazione del file system sul dispositivo CCD
19.7. Montare il file system

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:

  1. Installazione dei dischi

  2. Configurazione del supporto a CCD nel kernel

  3. Creazione della disklabel per ogni volume membro del CCD

  4. Creazione del file di configurazione del CCD

  5. Inizializzazione del dispositivo CCD

  6. Creazione di un file system 4.4BSD/UFS sul nuovo dispositivo CCD

  7. 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.

19.1. Installazione dei dischi

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    

19.2. Configurazione del kernel

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    

19.3. Scrittura delle disklabel

È 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*

Prima di creare le nuove disklabel si possono rimuovere quelle preesistenti con una serie di comandi simili ai seguenti:

# 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.

Modificare la disklabel di conseguenza, specificando il percorso del dispositivo a caratteri, non di quello a blocchi.

# disklabel -e /dev/rsd0c    

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.

19.4. Configurazione del CCD

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    

Nell'esempio corrente, il contenuto del file è:

# more /etc/ccd.conf
ccd0  0  none /dev/sd0c /dev/sd1c /dev/sd2c /dev/sd3c    

19.5. Inizializzazione del CCD

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    

19.6. Creazione del file system sul dispositivo CCD

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:
[...]    

19.7. Montare il file system

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.