Chapter 19. CCD の設定

目次
19.1. 装置の接続
19.2. カーネル対応の設定
19.3. CCD をする各ディスクにディスクラベルを書く
19.4. CCD 設定
19.5. CCD デバイスの初期化
19.6. 新しい CCD デバイス上に 4.4BSD/UFS ファイルシステムをつくる
19.7. ファイルシステムのマウント

この章 (CCD Configuration) は Brian A. Seklecki <lavalamp@burghcom.com> による寄稿です

CCD ドライバーはいくつかの物理ドライブを 1つの擬似ボリュームに"結合"するのに使えます。 CCD はまた、 CMU RAIDFrame の、 ジオメトリーの異なるディスクをまたぐ RAID0 (ディスクをまたぐファイルシステム)ができない特徴制限を乗り越えます また、 CCD はディスクのパフォーマンス増進のため 容量ロスを伴う(with a gained space loss) "インターリーブ" をさせることができます。 この例ではその機能については扱いません。

CCD の設定法は次の通りで:

  1. 装置の接続

  2. カーネル対応の設定

  3. CCD を構成する各ディスクにdisklabel を書き

  4. CCD conf ファイルを設定

  5. CCD デバイスを初期化

  6. 新しい CCD デバイス上に 4.4BSD/UFS ファイルシステムをつくり

  7. CDD ファイルシステムをマウント

この例では NetBSD/Sparc 1.5 で CCD 設定します。 CCD は 外部 50 ピン SCSI ポートにつなげた generic external Sun disk pack chassis の 4 つの SCSI ディスクに構築します。

19.1. 装置の接続

これはあなた自身の裁量で、 プラットホームやハードウェアーに依存します。

私の機械の 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. カーネル対応の設定

次のカーネル設定は CCD デバイスのサポートに 必要です。 GENERIC カーネルでは:

pseudo-device  ccd  4    # concatenated disk devices    

私のカーネル設定では、 SCSI ID と /dev デバイスエントリーの関係が、何らかの拍子におかしくならないように 固定させていて:

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. CCD をする各ディスクにディスクラベルを書く

CCD の各ディスクには、特殊なファイルシステムを構築することが 必要です。この例では、ディスクラベルを書く必要があるのは:

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

註: /dev/r{s,w}d*において、ディスクラベルは ブロックデバイスではなくキャラクターデバイスに行うこと を常に思い出してください

註: 全てのプラットホームにおいて、 c スライスは NetBSD パーティション全体を示し、予約されています。

CCD において、きっと、既に存在しているディスクラベルを 取り除きたいことと思います。 これは、 dd コマンドですることができて:

# dd if=/dev/zero of=/dev/rsd0 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
    

ディスクの標準ディスクラベルはきっとこのような感じで:

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

NetBSD パーティション上に パーティション全体を食い尽くす1つの "スライス" が必要でしょう。 スライスは、CCD のディスクラベルを置くための場所が要るため、 最低1シリンダー disk/partition 先頭より後ろの位置から 始まる必要があります。オフセットは 1x sectors/cylinder であるべきです(次の註をご覧ください)。 ゆえに、 "size" 値は "total sectors" から minus 1x "sectors/cylinder" を引いた値になるはずです。

註: "ccd" 型スライスの オフセットは "sectors/cylinder" 値の倍数である必要があります。

それに沿ってディスクラベルを編集してください。 path はブロックデバイスではなくて、 キャラクターデバイスを指定してください。

註: ディスクラベルの編集の前に export EDITOR=[あなたの好きなエディターの パス] をしてください。

# disklabel -e /dev/rsd0c    

註: スライスの fstype はccdであることが必要です。

このパーティションには1つのスライスしか置かないので(*****?用語逆?****) c スライスをリサイクルできます (普通は象徴的な使い方をするように 予約されています)。 ディスクラベルを次のように 変更してください:

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

オプションとして、 c 以外を使ってスライスの設定をすることができて、 次のような感じに状況に合わせて調節してください:

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

ラベルの書きこみは、作業が完成した段階で行ってください。 disklabel は、あなたのディスクラベルの健全性チェックをして、 通らなければ、再編集するように入力を求めます。

19.4. CCD 設定

全てのディスクに正しくラベルがつけられれば、 こんどは、設定ファイルを作る必要あります。設定ファイル はデフォルトで /etc にあります。 新しいものを作る必要があるかもしれません。 書式は:

#ccd    ileave    flags   component    devices    

註: "ileave" には、ディスクの結合では 0を使い、 インターリブではディスクの "sectors/track" 値を 使います。

この場合の例は:

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

註: CCD 設定ファイルは新しく作られた CCD ファイルシステムの デバイスファイルを参照します。 ここでは、ブロックデバイスを参照しないで、 代わりにキャラクターデバイスを使ってください。

19.5. CCD デバイスの初期化

いちど自信の持てる 健全な CCD 設定をすることができれば、 ccdconfig コマンドを使ってデバイスの初期化ができ: 設定するは:

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

設定解除には:

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

CCD デバイスの初期化で /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. 新しい CCD デバイス上に 4.4BSD/UFS ファイルシステムをつくる

CCD で組み合わせた、新しい仮想ディスクデバイスに ディスクラベルをつけます。キャラクターデバイスを使ってください:

# disklabel -e /dev/rccd0c    

また1スライスだけなので、 c スライスをリサイクルするか、 別のスライスを作ります。

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

それからファイルシステムはフォーマットすることが必要で:

# 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. ファイルシステムのマウント

一度 CCD デバイス上にファイルシステムが作られれば、 ファイルシステムをシステムのマウントポイントにマウントできます。 マウントするものは、ffs または 4.4BSD という型のスライスラベルのものである必要があり:

# mount /dev/ccd0c /mnt    

すると:

# 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    

おめでとうございます。 CCD が動作しています。 起動時に RC 経由でデバイスを初期化するための操作については マニュアルの残りの部分を調べてください。ここで出てきたコマンドの 詳しいことは、各マニュアルページをご覧ください。