Глава 14. Конфигурация Concatenated Disk Device (CCD)

Глава 14. Конфигурация Concatenated Disk Device (CCD)

Русский перевод: Михаил Сгибнев

Драйвер CCD позволяет пользователю «объединять» несколько физических дисков в один псевдо-диск. В то время, когда RAIDframe (смотри Глава 15, NetBSD RAIDframe) позволяет организовывать массивы RAID level 0 только с одинаковой геометрией, CCD позволяет преодолевать эти ограничения. При работе с CCD возможно «чередование» дисков для повышения быстродействия, но с потерей дискового пространства. В этом примере такую возможность мы не рассматриваем.

Для установка CCD необходимо выполнить несколько шагов:

  1. Установить физический носитель

  2. Сконфигурировать ядро

  3. Метку каждого диска присоединить к CCD

  4. Создать файл конфигурации CCD

  5. Инициализировать устройство CCD

  6. Создать файловую систему на новом устройстве CCD

  7. Примонтировать файловую систему CCD

В этом примере CCD устанавливается на NetBSD/sparc 1.5. CCD будет занимать 4 SCSI диска внешней корзины Sun, подсоединенной через стандартный 50 пиновый разьем SCSI.

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

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

14.3. Присоединяем метку каждого диска к CCD

Каждый диск, входящий в CCD, нуждается в специализированной файловой системе. В этом примере, для disklabel:

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

Замечание

Всегда помните, что метка диска -- признак символьного устройства, а не блочного.

Замечание

На всех платформах слайс c является символической записью NetBSD и зарезервирован.

Вероятнее всего Вы захотите удалить старые разделы на дисках, отведенных под CCD. Делается это с помощью команды dd(1):

# dd if=/dev/zero of=/dev/rsd0c bs=8k count=1
# dd if=/dev/zero of=/dev/rsd1c bs=8k count=1
# dd if=/dev/zero of=/dev/rsd2c bs=8k count=1
# dd if=/dev/zero of=/dev/rsd3c bs=8k count=1

Если Ваша архитектура подразумевает использование MBR (Master Boot Record) и кроме NetBSD на диске могут оказаться разделы других систем, таких как Windows или Linux, то можно убрать MBR и все разделы с диска, используя команду:

# dd if=/dev/zero of=/dev/rsd0d bs=8k count=1
# dd if=/dev/zero of=/dev/rsd1d bs=8k count=1
# dd if=/dev/zero of=/dev/rsd2d bs=8k count=1
# dd if=/dev/zero of=/dev/rsd3d bs=8k count=1 

После выполнения этой операции все данные на диске окажутся недоступными. Обратите внимание на занимающий весь диск слайс d на платформе i386 (и некоторых других) и c на остальных (например на sparc). Смотрите «kern.rawpartition» sysctl - "3" для "d", "2" для "c".

По умолчанию метка для диска будет выглядеть примерно так:

# disklabel -r sd0
[...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. Смещение должно быть кратно отношению «sectors/cylinder», поэтому «size» будет равен «total sectors» за вычетом 1x «sectors/cylinder». Отредактируйте метку диска соответственно:

# disklabel -e sd0

Замечание

Смещение слайса типа «ccd» должно соответствовать значению «sectors/cylinder»

Замечание

Выполните export EDITOR=[path to your favorite editor] перед редактированием метки диска.

Замечание

Тип слайса должен быть указан как ccd.

Поскольку у нас будет только один слайс на разделе, то Вы можете использовать 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 попросит вас подтвердить изменения, проявите благоразумие в этом вопросе и вспомните, все ли правильно вы сделали?

14.4. Конфигурирование CCD

Как только все диски соответствующим образом размечены, необходимо создать файл конфигурации /etc/ccd.conf. Этот файл не создается по умолчанию, поэтому вам необходимо создать его. Формат файла представлен ниже:

#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. Не используйте здесь блочное устройство, необходимо указывать символьное.

14.5. Инициализация устройства CCD

Как только вы почувствовали, что конфигурирование произведено правильно, можно инициализировать устройство, используя команду ccdconfig(8). Конфигурируем:

# 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

14.6. Создание файловой системы 4.2BSD/UFS на новом устройстве CCD device

Теперь можно создавать разделы на новом виртуальном диске, ассоциированным с устройством CCD.

# disklabel -e ccd0

Поскольку у нас один слайс, будем использовать слайс c или создадим отдельный слайс для использования:

# disklabel -r ccd0
# /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:
[...]

14.7. Монтирование файловой системы

После создания файловой системы на устройстве CCD она может быть примонтирована обычным образом. Монтируем слайс ffs или 4.2BSD:

# 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. Для конфигурирования устройства CCD при начальной загрузке, добавьте опцию ccd=yes в файл /etc/rc.conf. Вы должны добавить следущую строку в /etc/fstab для монтирования файловой системы при загрузке:

/dev/ccd0c /home ffs  rw,softdep 1 2 
Обновлено: 16.03.2015