Chapter 18. CCD 设定

Table of Contents
18.1. 安装实际的媒体
18.2. 核心支持的设定
18.3. 对 CCD 的成员做 disklabel
18.4. 设定 CCD
18.5. 初始化 CCD 装置
18.6. 在新的 CCD 装置产生 4.4BSD/UFS 档案系统
18.7. 挂上档案系统

这一章 (CCD 设定) 由 Brian A. Seklecki <lavalamp@burghcom.com> 提供

CCD 驱动程序允许使用者"串连"数个实体 硬盘成为一个虚拟的装置。CCD 也让你跨越 CMU RAIDFrame 的 限制,可以让你在 RAID0 (file system spanning across disks) 中使用不同几何数据的硬盘。CCD 也允许你使用"插页" 来改善硬盘的效能。这个范例将不包括此项特征。

要设定 CCD 需要这些步骤:

  1. 安装实质媒体

  2. 设定核心支持

  3. 对 CCD 的成员做 disklabel

  4. 设定 CCD 的设定档

  5. 初始化 CCD 装置

  6. 在新的 CCD 装置产生 4.4BSD/UFS 档案系统

  7. 挂上 CDD 档案系统

这个 CCD 的设定范例是在 NetBSD/Sparc 1.5 下作测试的。 CCD 需要 4 个 SCSI 硬盘,使用一般的 Sun 外接盒,连接到外部 的 50 针 SCSI 接头。

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

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

18.3. 对 CCD 的成员做 disklabel

CCD 的每一成员硬盘需要建立一个特殊的档案系统。在此 范例中,我将需要做 disklabel:

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

Note: 记得要 disklabel character 装置,而不是 block 装置, 例如 /dev/r{s,w}d*

Note: 在所有的平台上,c slice 是保留作为 整个 NetBSD 分割区的代号。

在 CCD 中,你可能需要移除在硬盘上现有的 disklabel。可以 使用 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 看起来像这样:

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

你需要建立一个 "slice",使用整个 NetBSD 分割区。在分割区/硬盘中,必须至少保留一个磁柱 作为 slice 的开始,用来提供空间给 CCD disklabel 使用。 起始点应该是 1x 扇区/磁柱。因此,"size" 值应该是"全部扇区"减去 1x "扇区/磁柱"

依此编辑你的 disklabel。要确定指明的路径是 character 装置,而不是 block 装置。

Note: 在编辑 disklabel 之前,设定 export EDITOR=[你喜爱的编辑器]

# disklabel -e /dev/rsd0c
    

Note: slice 的 fstype 必须是 ccd

因为这个分割区只有一个 slice,你可以直接使用 c slice(通常被保留不用)。 更改你的 disklabel 像这样:

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

选择性地,你可以设定一个有别于 c 的 slice 来使用,简单的修改像这样:

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 会拒绝你的动作, 并提示你是否要重新编辑。

18.4. 设定 CCD

在所有的硬盘做完适当的编辑后,你需要产生一个设定档。 设定文件预设在 /etc 目录中。 你可以建立一个新的。格式为:

#ccd    ileave    flags   component    devices
    

在此范例中:

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

Note: 新建的 CCD 档案系统参考 CCD 设定文件来使用装置。要确定 要使用 character 装置而不是 block 装置。

18.5. 初始化 CCD 装置

当你完成了 CCD 的设定,你可以用 ccdconfig 来初始化装置: 设定:

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

解除设定:

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

/dev/{,r}ccd#: 初始化 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
    

18.6. 在新的 CCD 装置产生 4.4BSD/UFS 档案系统

你现在可以对新的虚拟磁盘进行 disklabel。 确定使用 character 装置:

# disklabel -e /dev/rccd0c
    

再一次地,这将只需要一个 slice,所以你可以直接利用 c slice 或另外建立一个 slice。

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

The filesystem will then need formatted:

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

18.7. 挂上档案系统

你必须在 CCD 装置上建立档案系统,可以将此档案系统挂在 系统上的任何挂入点。必须确定挂上标记档案系统类型为 ffs4.4BSD 的 slice:

# mount /dev/ccd0c /mnt
    

Then:

# 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 做初始化的动作。更进一步的 说明,请参考相关的在线手册。