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:
Instalação dos discos
Configuração do suporte ao CCD no kernel
Criação do disklabel para cada volume membro do CCD
Criação do arquivo de configuração do CCD
Inicialização do dispositivo CCD
Criação de um sistema de arquivos 4.4BSD/UFS no novo dispositivo CCD
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.
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
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
É 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*
Nota: em todas as plataformas, a repartição c é reservada e representa a partição do NetBSD inteira.
Na plataforma i386 a repartição d é reservada e representa o disco inteiro.
Antes de criar novos disklabels, podem-se remover os pré-existentes com uma série de comandos similares aos seguintes:
Nota: na plataforma i386, substituir rsd#c por 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
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.
Nota: certificar-se de que o offset de uma repartição do tipo "ccd" seja um múltiplo do valor "setores/cilíndro".
Edite seus disklabels adequadamente. Assegure-se de especificar o caminho (path) para o device de caracteres, não o device de blocos.
Nota: antes de iniciar a edição dos disklabels, verificar para que seja exportada a variável de ambiente EDITOR.
# disklabel -e /dev/rsd0c
Nota: o tipo ("fstype") da repartição deve ser ccd.
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.
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
Nota: no que diz respeito ao valor do "ileave", se é definido como zero, então os discos são concatenados. Mas se usamos um valor igual ao número de setores/cilíndro, então os discos ficam intercalados.
No exemplo corrente, o conteúdo do arquivo é:
# more /etc/ccd.conf ccd0 0 none /dev/sd0c /dev/sd1c /dev/sd2c /dev/sd3c
Nota: o arquivo de configuração do CCD faz referência aos sistemas de arquivos CCD recém criados. É necessário utilizar os dispositivos de caracteres e não os de blocos.
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
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: [...]
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.