Capítulo 19. CCD: configuração

Índice
19.1. Instalação dos discos
19.2. Configuração do kernel
19.3. Escrevendo os disklabels
19.4. Configuração do CCD
19.5. Inicialização do CCD
19.6. Criação do sistema de arquivos no dispositivo CCD
19.7. Montando o sistema de arquivos

O autor deste capítulo (CCD: configuração) é Brian A. Seklecki <lavalamp@burghcom.com>

O driver CCD permite ao usuário "concatenar" vários discos físicos entre si, formando um único pseudo-volume. CCD faculta, além disso, superar uma limitação do CMU RAIDFrame, que não permite configurar RAID0 (sistema de arquivos em vários discos) em discos de geometria diferente. CCD permite ainda utilizar um "interleave" para melhorar a performance, diminuindo o desperdício de espaço (esta característica não é descrita no presente exemplo).

Os passos necessários para a configuração do CCD são os seguintes:

  1. Instalação dos discos

  2. Configuração do suporte ao CCD no kernel

  3. Criação do disklabel para cada volume membro do CCD

  4. Criação do arquivo de configuração do CCD

  5. Inicialização do dispositivo CCD

  6. Criação de um sistema de arquivos 4.4BSD/UFS no novo dispositivo CCD

  7. Montagem do sistema de arquivos CCD

Este exemplo faz referência à configuração do CCD no NetBSD/Sparc 1.5. O CCD residirá em quatro discos SCSI em um chassis externo da Sun, conectado à porta externa SCSI de 50 pin.

19.1. Instalação dos discos

Esta fase depende naturalmente da plataforma e do hardware utilizado.

Exemplo de 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. Configuração do kernel

Para o suporte aos dispositivos CCD é necessário ativar a seguinte opção no arquivo de configuração do kernel (ativada por default no GENERIC):

pseudo-device  ccd  4    # concatenated disk devices    

No meu arquivo de configuração do kernel, codifico diretamente a associação entre os dispositivos correspondentes /dev, para ter o máximo controle:

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. Escrevendo os disklabels

É necessário criar um sistema de arquivos especial para cada disco membro do CCD. No presente exemplo, dever-se-á criar o disklabel para:

/dev/rsd0c
/dev/rsd1c
/dev/rsd2c
/dev/rsd3c    

Recorde-se de criar sempre o disklabel para o dispositivo de caracteres, não para o dispositivo de blocos. Por exemplo: /dev/r{s,w}d*

Antes de criar novos disklabels, podem-se remover os pré-existentes com uma série de comandos similares aos seguintes:

# 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
    

O disklabel por default para os discos será parecido com o seguinte:

# 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*)    

É necessário criar uma "repartição (slice)" na partição NetBSD que ocupe a partição inteira. A repartição deve iniciar-se pelo menos um cilindro depois do início do disco ou da partição para deixar espaço ao disklabel especial exigido pelo CCD. O offset deve ser 1 x setores/cilíndro. Portanto, o valor do "tamanho (size)" deve ser igual ao número de setores totais menos o número de setores presentes em um cilíndro.

Edite seus disklabels adequadamente. Assegure-se de especificar o caminho (path) para o device de caracteres, não o device de blocos.

# disklabel -e /dev/rsd0c    

Uma vez que a partição conterá uma só repartição, pode-se reciclar a repartição c, que normalmente fica reservada. O disklabel fica, portanto, assim colocado:

3 partitions:
#        size   offset    fstype   [fsize bsize   cpg]
  c:  4196361     1044       ccd                       # (Cyl. 1 - 4020*)    

Também é possível estabelecer uma repartição diferente da c, como no exemplo seguinte:

3 partitions:
#        size   offset    fstype   [fsize bsize   cpg]
  a:  4196361     1044       ccd                       # (Cyl. 1 - 4020*)
  c:  4197405       0     unused     1024  8192        # (Cyl. 0 - 4020*)    

Ao término da operação asseguremo-nos de gravar o disklabel, que deve passar pela checagem de validade, sob pena de rejeição do comando disklabel.

19.4. Configuração do CCD

Uma vez terminada a criação dos disklabels para todos os discos, pode-se passar à geração do arquivo de configuração, que reside por default no diretório /etc. O formato é o seguinte:

#ccd    ileave    flags   component    devices    

No exemplo corrente, o conteúdo do arquivo é:

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

19.5. Inicialização do CCD

Depois de ter verificado a correção das configurações recém efetivadas, pode-se finalmente inicializar o dispositivo usando o comando ccdconfig:

# ccdconfig -c -f /etc/ccd.conf    

A configuração pode ser cancelada com a flag -u:

# ccdconfig -u -f /etc/ccd.conf    

A inicialização do CCD ativará os dispositivos /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. Criação do sistema de arquivos no dispositivo CCD

Agora pode-se criar o disklabel do novo disco virtual associado ao CCD (usar o dispositivo de caracteres):

# disklabel -e /dev/rccd0c    

Como anteriormente, visto que é usada uma só repartição, é possível reciclar as repartição (slice)c ou criar uma repartição separada.

# 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 é necessário criar o sistema de arquivos:

# 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. Montando o sistema de arquivos

O sistema de arquivos do dispositivo CCD criado há pouco pode ser montado em um ponto de montagem do sistema. Deve ser montada a repartição etiquetada ffs ou 4.4BSD:

# mount /dev/ccd0c /mnt    

Depois:

# 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    

Ao término deste exemplo você deveria estar em condição de configurar um dispositivo CCD. Consulte as páginas do manual para detalhes adicionais sobre os comandos descritos nesse capítulo e para ativar automaticamente o dispositivo CCD na inicialização, mediante os arquivos RC.