RAIDframe 覚書 (NetBSD/i386) (NetBSD/amd64)

初回掲出日: 2018-07-01
最終更新日: 2023-06-17

ゴミ捨て場で拾ってきた、容量もバラバラな 3台の SATA ハードディスクを、以下のように wd1 wd2 wd3 として接続した。 (wd1 は以前から接続して使用しており今回 wd2 wd3 を接続した)

$ dmesg
〜
wd1: <Hitachi HDT725032VLA360>
〜
wd1: 298 GB, 620181 cyl, 16 head, 63 sec, 512 bytes/sect x 625142448 sectors
〜
wd2: <Hitachi HDP725050GLA360>
〜
wd2: 465 GB, 969021 cyl, 16 head, 63 sec, 512 bytes/sect x 976773168 sectors
〜
wd3: <ST3250820AS>
〜
wd3: 232 GB, 484406 cyl, 16 head, 63 sec, 512 bytes/sect x 488281250 sectors
〜

このままバラバラのパーティションとして使うのは芸が無い。 すなわち RAID にしてみたい。

そこで、最も小さい 232 GB に揃えて、組み合わせて RAID-5 にしてみる。
また wd1 と wd2 は、起動ディスクとしても用いることにする。

以下を参考にさせてもらう

● wd3 (232GB)

◎ MBR と disklabel のクリア

このディスクは以前 NTFS として使われていたようだが、おもむろに fdisk -u を実行すると、fdisk -u がデフォルトで提示する数字が、以前のパーティションの数字に引っ張られてしまうようだった。
そこで先に MBR の情報をクリアしてから行うことにした。
ここで、MBR の 512 バイトだけでなく、もう少しその先まで、1MB ぶんまでクリアすることにより、disklabel 情報もクリアする。

後から Chapter 16. NetBSD RAIDframe を見たら、まさに同じことをやっていた。

なお、くれぐれもクリアするディスク (ここでは wd3) を間違えてはならない。

(自アカウントが operator グループに属しているので、sudo 無しで disklabel 情報を表示できる。)
green$ disklabel wd3
# /dev/rwd3d:
〜
5 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 d: 488281250         0     unused      0     0        # (Cyl.      0 - 484406*)
 e: 488263482        63       NTFS                     # (Cyl.      0*- 484388*)
disklabel: boot block size 0
disklabel: super block size 0

green$ sudo dd if=/dev/zero of=/dev/wd3d bs=1048576 count=1
1+0 records in
1+0 records out
1048576 bytes transferred in 0.074 secs (14169945 bytes/sec)

green$ disklabel wd3
# /dev/rwd3d:
〜
4 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a: 488281250         0     4.2BSD      0     0     0  # (Cyl.      0 - 484406*)
 d: 488281250         0     unused      0     0        # (Cyl.      0 - 484406*)
disklabel: boot block size 0
disklabel: super block size 0

◎ fdisk

start が 63 なのは、先日別のマシンに NetBSD 8.0_RC1 をインストールしたときにも、インストーラにより 63 になっていたので、それに合わせた。
size が 488281186 なのは、488281250(総セクタ数) - 63 = 488281187 よりさらに 1 小さい数 (気分的に最後のセクタを空ける・気分的に偶数) とした。

green$ sudo fdisk -u wd3
fdisk: primary partition table invalid, no magic in sector 0
Disk: /dev/rwd3d
NetBSD disklabel disk geometry:
cylinders: 484406, heads: 16, sectors/track: 63 (1008 sectors/cylinder)
total sectors: 488281250, bytes/sector: 512

BIOS disk geometry:
cylinders: 1024, heads: 255, sectors/track: 63 (16065 sectors/cylinder)
total sectors: 488281250

Partitions aligned to 2048 sector boundaries, offset 2048

Do you want to change our idea of what BIOS thinks? [n] 

Partition table:
0: <UNUSED>
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>
Bootselector disabled.
No active partition.
Drive serial number: 0 (0x00000000)
Which partition do you want to change?: [none] 0↵
The data for partition 0 is:
<UNUSED>
sysid: [0..255 default: 169] 
start: [0..30394cyl default: 2048, 0cyl, 1MB] 63↵
size: [0..30394cyl default: 1985, 0cyl, 1MB] 488281186↵
bootmenu: [] 

Partition table:
0: NetBSD (sysid 169)
    start 63, size 488281186 (238419 MB, Cyls 0/1/1-30394/26/1)
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>
Bootselector disabled.
No active partition.
Drive serial number: 0 (0x00000000)
Which partition do you want to change?: [none] 

We haven't written the MBR back to disk yet.  This is your last chance.
Partition table:
0: NetBSD (sysid 169)
    start 63, size 488281186 (238419 MB, Cyls 0/1/1-30394/26/1)
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>
Bootselector disabled.
No active partition.
Drive serial number: 0 (0x00000000)
Should we write new partition table? [n] y↵

green$ disklabel wd3
# /dev/rwd3d:
〜
5 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 c: 488281186        63     unused      0     0        # (Cyl.      0*- 484406*)
 d: 488281250         0     unused      0     0        # (Cyl.      0 - 484406*)
 e: 488281186        63     4.2BSD      0     0     0  # (Cyl.      0*- 484406*)
disklabel: boot block size 0
disklabel: super block size 0

disklabel を見ると、 fdisk 前と同じ d パーティションに加え、c パーティションが出現しているが、e パーティションというのも出現している。 これはそのまま使えるのだろうか。

◎ disklabel

disklabel コマンドで disklabel を書いたことがない..

fstype が 4.2BSD となっているのを、RAID に変える。

後から how to install netbsd on raid1 using raidframe を見たら、まさに同じことをやっていた。 ただ、disklabel に -I オプションも必要だったかもしれない..

green$ sudo disklabel -i wd3
Enter '?' for help
partition>?↵
?	print this menu
A	adjust the label size to the max disk size
C	make partitions contiguous
E	print disk label and current partition table
I	change label information
L	list all known file system types
N	name the label
P	print current partition table
Q	quit
R	rounding (c)ylinders (s)ectors
W	write the current partition table
[a-p]	define named partition
partition>P↵
5 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 c: 488281186        63     unused      0     0        # (Cyl.      0*- 484406*)
 d: 488281250         0     unused      0     0        # (Cyl.      0 - 484406*)
 e: 488281186        63     4.2BSD      0     0     0  # (Cyl.      0*- 484406*)
partition>e↵
Filesystem type [4.2BSD]: ?↵
Supported file system types:
	4.1BSD		EFS		MINIX FSv3	UDF
	4.2BSD		Eighth Edition	MSDOS		unknown
	4.4LFS		FILECORE	NiLFS		unused
	ADOS		HFS		NTFS		Version 6
	Apple UFS	HPFS		RAID		Version 7
	boot		ISO9660		swap		vinum
	ccd		jfs		System V
	cgd		Linux Ext2	SysVBFS
Filesystem type [4.2BSD]: RAID↵
Start offset ('x' to start after partition 'x') [0.0625c, 63s, 0.03076171875M]: 
Partition size ('$' for all remaining) [484405.9375c, 488281186s, 238418.546875M]: 
 e: 488281186        63       RAID                     # (Cyl.      0*- 484406*)
partition>P↵
5 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 c: 488281186        63     unused      0     0        # (Cyl.      0*- 484406*)
 d: 488281250         0     unused      0     0        # (Cyl.      0 - 484406*)
 e: 488281186        63       RAID                     # (Cyl.      0*- 484406*)
partition>W↵
Label disk [n]?y↵
Label written
partition>^D

● wd2 (465GB)

◎ MBR と disklabel のクリア

green$ disklabel wd2
# /dev/rwd2d:
〜
6 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 d: 976773168         0     unused      0     0        # (Cyl.      0 - 969020)
 e:    204800      2048       NTFS                     # (Cyl.      2*-    205*)
 f: 976564224    206848       NTFS                     # (Cyl.    205*- 969018*)
disklabel: boot block size 0
disklabel: super block size 0

green$ sudo dd if=/dev/zero of=/dev/wd2d bs=1048576 count=1
1+0 records in
1+0 records out
1048576 bytes transferred in 0.061 secs (17189770 bytes/sec)

green$ disklabel wd2
# /dev/rwd2d:
〜
4 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a: 976773168         0     4.2BSD      0     0     0  # (Cyl.      0 - 969020)
 d: 976773168         0     unused      0     0        # (Cyl.      0 - 969020)
disklabel: boot block size 0
disklabel: super block size 0

◎ fdisk / disklabel

wd2 については、起動ディスクとしてセットアップするために、NetBSD のインストーラでパーティションの設定までやるという手がある。
そこで NetBSD 8.0_RC1 のインストール CD (自家ビルド) で起動して設定した。

MBR パーティションとして、入力単位をセクタ単位に設定して、開始セクタはデフォルトの 63 で、セクタ数を 976773104 とした。 976773104 というセクタ数は、976773168(総セクタ数) - 63 = 976773105 よりさらに 1 小さい数 (気分的に最後のセクタを空ける・気分的に偶数) とした。

disklabel について、細かい計算と説明は省くが、h パーティションを、wd3 の e パーティション (RAID) と同じ 488281186 セクタを確保する。 fstype もインストーラで「RAID」がメニューから選択できた。

installer

MBR パーティションと disklabel は、以下のようになった。

green$ fdisk wd2
Disk: /dev/rwd2
NetBSD disklabel disk geometry:
cylinders: 969021, heads: 16, sectors/track: 63 (1008 sectors/cylinder)
total sectors: 976773168, bytes/sector: 512

BIOS disk geometry:
cylinders: 1024, heads: 240, sectors/track: 63 (15120 sectors/cylinder)
total sectors: 976773168

Partitions aligned to 15120 sector boundaries, offset 63

Partition table:
0: NetBSD (sysid 169)
    bootmenu: NetBSD8
    start 63, size 976773104 (476940 MB, Cyls 0-64601/95/62), Active
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>
Bootselector disabled.
First active partition: 0
Drive serial number: 0 (0x00000000)

green$ disklabel wd2
# /dev/rwd2:
〜
16 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a:   4194304        63     4.2BSD   2048 16384     0  # (Cyl.      0*-   4161*)
 b:   4194304   4194367       swap                     # (Cyl.   4161*-   8322*)
 c: 976773104        63     unused      0     0        # (Cyl.      0*- 969020*)
 d: 976773168         0     unused      0     0        # (Cyl.      0 - 969020)
 e:  20971520   8388671     4.2BSD   2048 16384     0  # (Cyl.   8322*-  29127*)
 f: 107501070  29360191     4.2BSD   2048 16384     0  # (Cyl.  29127*- 135775*)
 g: 351630720 136861261     4.2BSD   4096 32768     0  # (Cyl. 135775*- 484615*)
 h: 488281186 488491981       RAID                     # (Cyl. 484615*- 969020*)

● wd1 (298GB)

wd1 は以前から使用していたが、今回パーティションを切り直すため、バックアップを取ってから以降の手順を行う。
(余談だがそもそも起動ドライブが wd1 だったのを、今回の手順で wd2 にインストールした NetBSD 8.0_RC1 を利用するように環境を切り替えている。)

これも、wd2 のようにいずれあらためて新たな起動ディスクとしてセットアップすることを考えているが、今はそうせず、起動ディスクとしたときを想定したパーティションを fdisk -u / disklabel で設定しておくことにする。

◎ MBR と disklabel のクリア

これも余談だが、ここで wd1 をクリアしないといけない所を、誤って (先ほど NetBSD を新規インストールした) wd2 をクリアしてしまった! そのため手順を戻ってやり直している。
それにしても、消してしまったのが、たいしてインストールを進めていなかった wd2 でよかった。 これが、既にデータが入っている wd0 だったら.. 想像しただけで恐ろしい。 修復するのに数週間〜数ヶ月かかった上に元通りの修復は出来なかったであろう。 この作業を行う時には、くれぐれも注意しなければならない。

green$ disklabel wd1
# /dev/rwd1:
〜
16 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a:   2097648        63     4.2BSD   2048 16384     0  # (Cyl.      0*-   2081*)
 b:  16778160   2097711       swap                     # (Cyl.   2081*-  18726*)
 c: 625142385        63     unused      0     0        # (Cyl.      0*- 620180)
 d: 625142448         0     unused      0     0        # (Cyl.      0 - 620180)
 e:  18874800  18875871     4.2BSD   2048 16384     0  # (Cyl.  18726*-  37451*)
 f:  20972448  37750671     4.2BSD   2048 16384     0  # (Cyl.  37451*-  58257*)
 g: 566419329  58723119     4.2BSD   4096 32768     0  # (Cyl.  58257*- 620180)

green$ sudo dd if=/dev/zero of=/dev/wd1d bs=1048576 count=1
1+0 records in
1+0 records out
1048576 bytes transferred in 0.072 secs (14563555 bytes/sec)

green$ disklabel wd1
# /dev/rwd1:
〜
4 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a: 625142448         0     4.2BSD      0     0     0  # (Cyl.      0 - 620180)
 d: 625142448         0     unused      0     0        # (Cyl.      0 - 620180)
disklabel: boot block size 0
disklabel: super block size 0

◎ fdisk

size が 625142384 なのは、625142448(総セクタ数) - 63 = 625142385 よりさらに 1 小さい数 (気分的に最後のセクタを空ける・気分的に偶数) とした。

green$ sudo fdisk -u wd1
〜 
fdisk: primary partition table invalid, no magic in sector 0
Disk: /dev/rwd1
NetBSD disklabel disk geometry:
cylinders: 620181, heads: 16, sectors/track: 63 (1008 sectors/cylinder)
total sectors: 625142448, bytes/sector: 512

BIOS disk geometry:
cylinders: 1024, heads: 255, sectors/track: 63 (16065 sectors/cylinder)
total sectors: 625142448

Partitions aligned to 2048 sector boundaries, offset 2048

Do you want to change our idea of what BIOS thinks? [n] 

Partition table:
0: <UNUSED>
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>
Bootselector disabled.
No active partition.
Drive serial number: 0 (0x00000000)
Which partition do you want to change?: [none] 0↵
The data for partition 0 is:
<UNUSED>
sysid: [0..255 default: 169] 
start: [0..38913cyl default: 2048, 0cyl, 1MB] 63↵
size: [0..38913cyl default: 1985, 0cyl, 1MB] 625142384↵
bootmenu: [] (space to clear)

Partition table:
0: NetBSD (sysid 169)
    start 63, size 625142384 (305245 MB, Cyls 0/1/1-38913/80/62)
        PBR is not bootable: All bytes are identical (0x00)
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>
Bootselector disabled.
No active partition.
Drive serial number: 0 (0x00000000)
Which partition do you want to change?: [none] 

We haven't written the MBR back to disk yet.  This is your last chance.
Partition table:
0: NetBSD (sysid 169)
    start 63, size 625142384 (305245 MB, Cyls 0/1/1-38913/80/62)
        PBR is not bootable: All bytes are identical (0x00)
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>
Bootselector disabled.
No active partition.
Drive serial number: 0 (0x00000000)
Should we write new partition table? [n] y↵

◎ disklabel

今度は単に fstype を書き換えるだけでなく、パーティションをサイズを指定して設定しなければならない。(やったことがない..)

細かい計算と説明は省くが、g パーティションを、wd3 の e パーティションや wd2 の h パーティションと同じ 488281186 セクタを確保する。
なお最後の g パーティションの size の入力で「$」とすると 488281187 となり MBR パーティションをはみ出してしまう。

green$ sudo disklabel -i wd1
Enter '?' for help
partition>?↵
?	print this menu
A	adjust the label size to the max disk size
C	make partitions contiguous
E	print disk label and current partition table
I	change label information
L	list all known file system types
N	name the label
P	print current partition table
Q	quit
R	rounding (c)ylinders (s)ectors
W	write the current partition table
[a-p]	define named partition
partition>P↵
5 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 c: 625142384        63     unused      0     0        # (Cyl.      0*- 620180*)
 d: 625142448         0     unused      0     0        # (Cyl.      0 - 620180)
 e: 625142384        63     4.2BSD      0     0     0  # (Cyl.      0*- 620180*)
partition>a↵
Filesystem type [unused]: ?↵
Supported file system types:
	4.1BSD		EFS		MINIX FSv3	UDF
	4.2BSD		Eighth Edition	MSDOS		unknown
	4.4LFS		FILECORE	NiLFS		unused
	ADOS		HFS		NTFS		Version 6
	Apple UFS	HPFS		RAID		Version 7
	boot		ISO9660		swap		vinum
	ccd		jfs		System V
	cgd		Linux Ext2	SysVBFS
Filesystem type [unused]: 4.2BSD↵
Start offset ('x' to start after partition 'x') [0c, 0s, 0M]: 63↵
Partition size ('$' for all remaining) [0c, 0s, 0M]: 4194304↵
 a:   4194304        63     4.2BSD      0     0     0  # (Cyl.      0*-   4161*)
partition>b↵
Filesystem type [unused]: swap↵
Start offset ('x' to start after partition 'x') [0c, 0s, 0M]: a↵
Partition size ('$' for all remaining) [0c, 0s, 0M]: 4194304↵
 b:   4194304   4194367       swap                     # (Cyl.   4161*-   8322*)
partition>e↵
Filesystem type [4.2BSD]: 
Start offset ('x' to start after partition 'x') [0.0625c, 63s, 0.03076171875M]: b↵
Partition size ('$' for all remaining) [620180.936507936450652778148651123046875c, 625142384s, 305245.3046875M]:
 20971520↵
 e:  20971520   8388671     4.2BSD      0     0     0  # (Cyl.   8322*-  29127*)
partition>f↵
Filesystem type [unused]: 4.2BSD↵
Start offset ('x' to start after partition 'x') [0c, 0s, 0M]: e↵
Partition size ('$' for all remaining) [0c, 0s, 0M]: 107501070↵
 f: 107501070  29360191     4.2BSD      0     0     0  # (Cyl.  29127*- 135775*)
partition>g↵
Filesystem type [unused]: RAID↵
Start offset ('x' to start after partition 'x') [0c, 0s, 0M]: f↵
Partition size ('$' for all remaining) [0c, 0s, 0M]: 488281186↵
 g: 488281186 136861261       RAID                     # (Cyl. 135775*- 620180*)
partition>W↵
Label disk [n]?y↵
Label written
partition>^D

green$ disklabel wd1
# /dev/rwd1:
〜
7 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a:   4194304        63     4.2BSD      0     0     0  # (Cyl.      0*-   4161*)
 b:   4194304   4194367       swap                     # (Cyl.   4161*-   8322*)
 c: 625142384        63     unused      0     0        # (Cyl.      0*- 620180*)
 d: 625142448         0     unused      0     0        # (Cyl.      0 - 620180)
 e:  20971520   8388671     4.2BSD      0     0     0  # (Cyl.   8322*-  29127*)
 f: 107501070  29360191     4.2BSD      0     0     0  # (Cyl.  29127*- 135775*)
 g: 488281186 136861261       RAID                     # (Cyl. 135775*- 620180*)

● raid5.conf の記述

ファイル名は raid5.conf でなくてもいいかもしれないが、以下のようにしてみた。

START array
1 3 0

START disks
/dev/wd1g
/dev/wd2h
/dev/wd3e

START layout
# sectPerSU SUsPerParityUnit SUsPerReconUnit RAID_level
32 1 1 5

START queue
fifo 100

特に START layout の最初の数字の最適値が分からないが、それも含めて raidctl(8) のディスク 3台の RAID-5 の例と同じにしてみた。

● raidctl の実行

green$ sudo raidctl -v -C raid5.conf raid0
Password: 〜

ん、raidctl -C 〜 の実行だけだと何も出ないの?

そこで以下を実行してみると..

green$ raidctl -s raid0
Components:
           /dev/wd1g: failed
           /dev/wd2h: optimal
           /dev/wd3e: optimal
No spares.
/dev/wd1g status is: failed.  Skipping label.
Component label for /dev/wd2h:
   Row: 0, Column: 0, Num Rows: 0, Num Columns: 0
   Version: 0, Serial Number: 0, Mod Counter: 6
   Clean: No, Status: 0
   sectPerSU: 0, SUsPerPU: 0, SUsPerRU: 0
   Queue size: 0, blocksize: 0, numBlocks: 0
   RAID Level: 
   Autoconfig: No
   Root partition: No
   Last configured as: raid0
Component label for /dev/wd3e:
   Row: 0, Column: 0, Num Rows: 0, Num Columns: 0
   Version: 0, Serial Number: 0, Mod Counter: 6
   Clean: No, Status: 0
   sectPerSU: 0, SUsPerPU: 0, SUsPerRU: 0
   Queue size: 0, blocksize: 0, numBlocks: 0
   RAID Level: 
   Autoconfig: No
   Root partition: No
   Last configured as: raid0
Parity status: DIRTY
Reconstruction is 100% complete.
Parity Re-write is 100% complete.
Copyback is 100% complete.

wd1g で fail している!?

/var/log/messages を見ても以下のようになっている。

〜
Jun 25 22:59:20 green /netbsd: Hosed component: /dev/wd1g
Jun 25 22:59:20 green /netbsd: Hosed component: /dev/wd1g
Jun 25 22:59:20 green /netbsd: raid0: Ignoring /dev/wd1g
Jun 25 22:59:20 green /netbsd: raid0: Component /dev/wd2h being configured at co
l: 1
Jun 25 22:59:20 green /netbsd:         Column: 0 Num Columns: 0
Jun 25 22:59:20 green /netbsd:         Version: 0 Serial Number: 0 Mod Counter: 0
Jun 25 22:59:20 green /netbsd:         Clean: No Status: 0
Jun 25 22:59:20 green /netbsd: Column out of alignment for: /dev/wd2h
Jun 25 22:59:20 green /netbsd: Number of columns do not match for: /dev/wd2h
Jun 25 22:59:20 green /netbsd: /dev/wd2h is not clean!
Jun 25 22:59:20 green /netbsd: raid0: Component /dev/wd3e being configured at col: 2
Jun 25 22:59:20 green /netbsd:         Column: 0 Num Columns: 0
Jun 25 22:59:20 green /netbsd:         Version: 0 Serial Number: 0 Mod Counter: 0
Jun 25 22:59:20 green /netbsd:         Clean: No Status: 0
Jun 25 22:59:20 green /netbsd: Column out of alignment for: /dev/wd3e
Jun 25 22:59:20 green /netbsd: Number of columns do not match for: /dev/wd3e
Jun 25 22:59:20 green /netbsd: /dev/wd3e is not clean!
Jun 25 22:59:20 green /netbsd: raid0: There were fatal errors
Jun 25 22:59:20 green /netbsd: raid0: Fatal errors being ignored.
Jun 25 22:59:20 green /netbsd: raid0: RAID Level 5
Jun 25 22:59:20 green /netbsd: raid0: Components: /dev/wd1g[**FAILED**] /dev/wd2h /dev/wd3e
Jun 25 22:59:20 green /netbsd: raid0: Total Sectors: 976562176 (476837 MB)

ここで時間がなくなったので、いったん shutdown している。

◎ 再挑戦

raidctl -C 〜 したディスクを、元に戻すには、raidctl(8) を見るに、以下のようにするのだろうか..

green$ sudo raidctl -v -u raid0
Password: 〜

またしても何も表示されないが、raidctl -s 〜 を実行すると以下のようになり、とりあえずこれでいい気がする。

green$ raidctl -s raid0
raidctl: ioctl (RAIDFRAME_GET_INFO) failed: Device not configured

/var/log/messages には何も出ていなかった。

さて、RAID となる各パーティションの先頭 1MBを、クリアしてからやってみるとどうなるか。

green$ disklabel wd1
〜
 g: 488281186 136861261       RAID                     # (Cyl. 135775*- 620180*)

green$ sudo dd if=/dev/zero of=/dev/wd1g bs=1048576 count=1
1+0 records in
1+0 records out
1048576 bytes transferred in 0.063 secs (16644063 bytes/sec)

green$ disklabel wd2
〜
 h: 488281186 488491981       RAID                     # (Cyl. 484615*- 969020*)

green$ sudo dd if=/dev/zero of=/dev/wd2h bs=1048576 count=1
1+0 records in
1+0 records out
1048576 bytes transferred in 0.063 secs (16644063 bytes/sec)

green$ disklabel wd3
〜
 e: 488281186        63       RAID                     # (Cyl.      0*- 484406*)

green$ sudo dd if=/dev/zero of=/dev/wd3e bs=1048576 count=1
dd: /dev/wd3e: Read-only file system
1+0 records in
0+0 records out
0 bytes transferred in 0.002 secs (0 bytes/sec)

そして..

green$ sudo raidctl -v -C raid5.conf raid0

またしても何も出ないが..

green$ raidctl -v -s raid0
Components:
           /dev/wd1g: optimal
           /dev/wd2h: optimal
           /dev/wd3e: failed
No spares.
Component label for /dev/wd1g:
   Row: 0, Column: 0, Num Rows: 0, Num Columns: 0
   Version: 0, Serial Number: 0, Mod Counter: 6
   Clean: No, Status: 0
   sectPerSU: 0, SUsPerPU: 0, SUsPerRU: 0
   Queue size: 0, blocksize: 0, numBlocks: 0
   RAID Level: 
   Autoconfig: No
   Root partition: No
   Last configured as: raid0
Component label for /dev/wd2h:
   Row: 0, Column: 0, Num Rows: 0, Num Columns: 0
   Version: 0, Serial Number: 0, Mod Counter: 6
   Clean: No, Status: 0
   sectPerSU: 0, SUsPerPU: 0, SUsPerRU: 0
   Queue size: 0, blocksize: 0, numBlocks: 0
   RAID Level: 
   Autoconfig: No
   Root partition: No
   Last configured as: raid0
/dev/wd3e status is: failed.  Skipping label.
Parity status: DIRTY
Reconstruction is 100% complete.
Parity Re-write is 100% complete.
Copyback is 100% complete.

今度は wd3e で fail している!?
wd1g は大丈夫そうなのに..

◎ 再々挑戦

それから何回 dd したり fdisk / disklabel したり raidctl -C 〜 / raidctl -u したであろうか..

どうしようもないので、これが最後の手段と思って、wd3 の全領域と、 wd2 及び wd1 の RAID 領域を、ゼロクリアしてみた。 (どれも 232GB くらいあるので少し時間かかる)

これにより、wd3 については fdisk / disklabel を今一度やり直す必要がある。

green$ date ; sudo dd if=/dev/zero of=/dev/rwd3d bs=128000 ; date
水 6月 27 05:24:27 JST 2018
〜
dd: /dev/rwd3d: end of device
1953126+0 records in
1953125+0 records out
250000000000 bytes transferred in 3675.840 secs (68011665 bytes/sec)
水 6月 27 06:25:43 JST 2018
green$ date ; sudo dd if=/dev/zero of=/dev/rwd2h bs=1048576 ; date
水 6月 27 12:23:59 JST 2018
dd: /dev/rwd2h: short write on character device
dd: /dev/rwd2h: end of device
238419+0 records in
238418+1 records out
249999967232 bytes transferred in 3792.729 secs (65915589 bytes/sec)
水 6月 27 13:27:11 JST 2018
green$ date ; sudo dd if=/dev/zero of=/dev/rwd1g bs=1048576 ; date
水 6月 27 12:25:07 JST 2018
dd: /dev/rwd1g: short write on character device
dd: /dev/rwd1g: end of device
238419+0 records in
238418+1 records out
249999967232 bytes transferred in 4452.242 secs (56151477 bytes/sec)
水 6月 27 13:39:19 JST 2018
wd3 のディスク ST3250820AS はすごいぴったりしたバイト数だったんだな.. 「250GB のディスクだ!」といいたいんだろうか (実際は 232GB)

その後も色々試しているが、その過程で、wd3 の MBR パーティションの start を 63 と 2048 の両方で試して、dd で内容を見てみて、disklabel 情報は、MBR パーティションの先頭を 512 バイトスキップした所から書き込まれているらしいことを知ったりした。

最終的には、以下のように、wd3 の MBR パーティションと disklabel は、先ほどと同じ数値で設定し直し、

green$ sudo dd if=/dev/zero of=/dev/wd3d bs=1048576 count=1024
〜
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 33.567 secs (31988018 bytes/sec)

green$ sudo fdisk -u wd3
fdisk: primary partition table invalid, no magic in sector 0
Disk: /dev/rwd3
NetBSD disklabel disk geometry:
cylinders: 484406, heads: 16, sectors/track: 63 (1008 sectors/cylinder)
total sectors: 488281250, bytes/sector: 512

BIOS disk geometry:
cylinders: 1024, heads: 240, sectors/track: 63 (15120 sectors/cylinder)
total sectors: 488281250

Partitions aligned to 2048 sector boundaries, offset 2048

Do you want to change our idea of what BIOS thinks? [n] 

Partition table:
0: <UNUSED>
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>
Bootselector disabled.
No active partition.
Drive serial number: 0 (0x00000000)
Which partition do you want to change?: [none] 0↵
The data for partition 0 is:
<UNUSED>
sysid: [0..255 default: 169] 
start: [0..32294cyl default: 2048, 0cyl, 1MB] 63↵
size: [0..32294cyl default: 1985, 0cyl, 1MB] 488281186↵
bootmenu: [] (space to clear)

Partition table:
0: NetBSD (sysid 169)
    start 63, size 488281186 (238419 MB, Cyls 0/1/1-32293/176/1)
        PBR is not bootable: All bytes are identical (0x00)
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>
Bootselector disabled.
No active partition.
Drive serial number: 0 (0x00000000)
Which partition do you want to change?: [none] 

We haven't written the MBR back to disk yet.  This is your last chance.
Partition table:
0: NetBSD (sysid 169)
    start 63, size 488281186 (238419 MB, Cyls 0/1/1-32293/176/1)
        PBR is not bootable: All bytes are identical (0x00)
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>
Bootselector disabled.
No active partition.
Drive serial number: 0 (0x00000000)
Should we write new partition table? [n] y↵

green$ sudo disklabel -i -I wd3
Enter '?' for help
partition>P↵
5 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 c: 488281186        63     unused      0     0        # (Cyl.      0*- 484406*)
 d: 488281250         0     unused      0     0        # (Cyl.      0 - 484406*)
 e: 488281186        63     4.2BSD      0     0     0  # (Cyl.      0*- 484406*)
partition>e
Filesystem type [4.2BSD]: RAID↵
Start offset ('x' to start after partition 'x') [0.0625c, 63s, 0.03076171875M]: 
Partition size ('$' for all remaining) [484405.9384920634911395609378814697265625c, 488281186s, 238418.5478515625M]: 
 e: 488281186        63       RAID                     # (Cyl.      0*- 484406*)
partition>W↵
Label disk [n]?y↵
Label written
partition>Q↵

green$ disklabel wd3
# /dev/rwd3:
〜
5 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 c: 488281186        63     unused      0     0        # (Cyl.      0*- 484406*)
 d: 488281250         0     unused      0     0        # (Cyl.      0 - 484406*)
 e: 488281186        63       RAID                     # (Cyl.      0*- 484406*)

どうなるか

green$ sudo raidctl -v -C raid5.conf raid0

green$ raidctl -v -s raid0
Components:
           /dev/wd1g: optimal
           /dev/wd2h: optimal
           /dev/wd3e: optimal
No spares.
Component label for /dev/wd1g:
   Row: 0, Column: 0, Num Rows: 0, Num Columns: 0
   Version: 0, Serial Number: 0, Mod Counter: 6
   Clean: No, Status: 0
   sectPerSU: 0, SUsPerPU: 0, SUsPerRU: 0
   Queue size: 0, blocksize: 0, numBlocks: 0
   RAID Level: 
   Autoconfig: No
   Root partition: No
   Last configured as: raid0
Component label for /dev/wd2h:
   Row: 0, Column: 0, Num Rows: 0, Num Columns: 0
   Version: 0, Serial Number: 0, Mod Counter: 6
   Clean: No, Status: 0
   sectPerSU: 0, SUsPerPU: 0, SUsPerRU: 0
   Queue size: 0, blocksize: 0, numBlocks: 0
   RAID Level: 
   Autoconfig: No
   Root partition: No
   Last configured as: raid0
Component label for /dev/wd3e:
   Row: 0, Column: 0, Num Rows: 0, Num Columns: 0
   Version: 0, Serial Number: 0, Mod Counter: 6
   Clean: No, Status: 0
   sectPerSU: 0, SUsPerPU: 0, SUsPerRU: 0
   Queue size: 0, blocksize: 0, numBlocks: 0
   RAID Level: 
   Autoconfig: No
   Root partition: No
   Last configured as: raid0
Parity status: DIRTY
Reconstruction is 100% complete.
Parity Re-write is 100% complete.
Copyback is 100% complete.

おおお、今度こそ通った!?

続いて、

green$ sudo raidctl -v -I 20180627 raid0

そして

green$ sudo raidctl -v -i raid0
Initiating re-write of parity
Parity Re-write status:
 37% |**************                         | ETA:    53:27 \

ここは時間がかかる。

 99% |***************************************| ETA:    00:01 |

..表示は 99% だけど終了したもよう。

raid0 が出現した!

green$ disklabel raid0
# /dev/rraid0:
type: RAID
disk: raid0
label: fictitious
flags:
bytes/sector: 512
sectors/track: 64
tracks/cylinder: 12
sectors/cylinder: 768
cylinders: 1271565
total sectors: 976562240
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0		# microseconds
track-to-track seek: 0	# microseconds
drivedata: 0 

4 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a: 976562240         0     4.2BSD      0     0     0  # (Cyl.      0 - 1271565*)
 d: 976562240         0     unused      0     0        # (Cyl.      0 - 1271565*)
disklabel: boot block size 0
disklabel: super block size 0

ここで時間が無くなり一旦 shutdown した。

● 再起動しても raid0 が見えるようにする

一旦 shutdown すると、そのままでは raid0 は見えなくなるようだ。

green$ raidctl -v -s raid0
raidctl: ioctl (RAIDFRAME_GET_INFO) failed: Device not configured

green$ disklabel raid0
disklabel: ioctl DIOCGDINFO: Invalid argument

再び見えるようにするには、raidctl -c を使えばいいんだろうか..

green$ sudo raidctl -v -c raid5.conf raid0

green$ raidctl -v -s raid0
Components:
           /dev/wd1g: optimal
           /dev/wd2h: optimal
           /dev/wd3e: optimal
No spares.
Component label for /dev/wd1g:
   Row: 0, Column: 0, Num Rows: 1, Num Columns: 3
   Version: 2, Serial Number: 20180627, Mod Counter: 28
   Clean: No, Status: 0
   sectPerSU: 32, SUsPerPU: 1, SUsPerRU: 1
   Queue size: 100, blocksize: 512, numBlocks: 488281120
   RAID Level: 5
   Autoconfig: No
   Root partition: No
   Last configured as: raid0
Component label for /dev/wd2h:
   Row: 0, Column: 1, Num Rows: 1, Num Columns: 3
   Version: 2, Serial Number: 20180627, Mod Counter: 28
   Clean: No, Status: 0
   sectPerSU: 32, SUsPerPU: 1, SUsPerRU: 1
   Queue size: 100, blocksize: 512, numBlocks: 488281120
   RAID Level: 5
   Autoconfig: No
   Root partition: No
   Last configured as: raid0
Component label for /dev/wd3e:
   Row: 0, Column: 2, Num Rows: 1, Num Columns: 3
   Version: 2, Serial Number: 20180627, Mod Counter: 28
   Clean: No, Status: 0
   sectPerSU: 32, SUsPerPU: 1, SUsPerRU: 1
   Queue size: 100, blocksize: 512, numBlocks: 488281120
   RAID Level: 5
   Autoconfig: No
   Root partition: No
   Last configured as: raid0
Parity status: clean
Reconstruction is 100% complete.
Parity Re-write is 100% complete.
Copyback is 100% complete.

うまくいったように見える?

そして、再起動しても raid0 が残るようにするには、raidctl -A 〜 をするようだ。
参考にした web では -A root としているものが多いが、これは古い指定で、今の raidctl では -A forceroot に相当するのだという (-A root は後方互換)。
そして今回は、root device にするつもりはないので、-A yes でいいだろうか。

green$ sudo raidctl -v -A yes raid0
raid0: Autoconfigure: Yes
raid0: Root: No

ここで再起動を試すべき気もするが、横で走っている別件のビルドが終わっていない都合で、後で再起動することにする。

● ファイルシステムにする

パーティションを作成するにはやはり fdisk / disklabel の手順を踏めばいいのだろうか..

◎ fdisk

ここまでの各ディスクと同様に、start を 63 とした。
976562176 という size は、976562240(総セクタ数) - 63 = 976562177 よりさらに 1 小さい数 (気分的に最後のセクタを空ける・気分的に偶数) とした。

green$ sudo fdisk -u raid0
fdisk: primary partition table invalid, no magic in sector 0
fdisk: Cannot determine the number of heads
Disk: /dev/rraid0
NetBSD disklabel disk geometry:
cylinders: 1271565, heads: 12, sectors/track: 64 (768 sectors/cylinder)
total sectors: 976562240, bytes/sector: 512

BIOS disk geometry:
cylinders: 1023, heads: 255, sectors/track: 63 (16065 sectors/cylinder)
total sectors: 976562240

Partitions aligned to 2048 sector boundaries, offset 2048

Do you want to change our idea of what BIOS thinks? [n] 

Partition table:
0: <UNUSED>
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>
Bootselector disabled.
No active partition.
Drive serial number: 0 (0x00000000)
Which partition do you want to change?: [none] 0↵
The data for partition 0 is:
<UNUSED>
sysid: [0..255 default: 169] 
start: [0..60788cyl default: 2048, 0cyl, 1MB] 63↵
size: [0..60788cyl default: 1985, 0cyl, 1MB] 976562176↵
bootmenu: [] (space to clear)

Partition table:
0: NetBSD (sysid 169)
    start 63, size 976562176 (476837 MB, Cyls 0/1/1-60788/47/58)
        PBR is not bootable: All bytes are identical (0x00)
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>
Bootselector disabled.
No active partition.
Drive serial number: 0 (0x00000000)
Which partition do you want to change?: [none] 

We haven't written the MBR back to disk yet.  This is your last chance.
Partition table:
0: NetBSD (sysid 169)
    start 63, size 976562176 (476837 MB, Cyls 0/1/1-60788/47/58)
        PBR is not bootable: All bytes are identical (0x00)
1: <UNUSED>
2: <UNUSED>
3: <UNUSED>
Bootselector disabled.
No active partition.
Drive serial number: 0 (0x00000000)
Should we write new partition table? [n] y↵

◎ disklabel

raid0e が出現したし、fstype も 4.2BSD になっているので変える必要がないのだが、この disklabel はディスクに書き込まれていない気がする。

green$ disklabel raid0
# /dev/rraid0:
〜
5 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 c: 976562176        63     unused      0     0        # (Cyl.      0*- 1271565*)
 d: 976562240         0     unused      0     0        # (Cyl.      0 - 1271565*)
 e: 976562176        63     4.2BSD      0     0     0  # (Cyl.      0*- 1271565*)
disklabel: boot block size 0
disklabel: super block size 0

green$ disklabel -r raid0
disklabel: could not read existing label

disklabel raid0 だと情報が出るが disklabel -r raid0 だと出ていない。

明示的に Write した方がいいんだろうか..よく分からん。

green$ sudo disklabel -i -I raid0
Enter '?' for help
partition>P↵
5 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 c: 976562176        63     unused      0     0        # (Cyl.      0*- 1271565*)
 d: 976562240         0     unused      0     0        # (Cyl.      0 - 1271565*)
 e: 976562176        63     4.2BSD      0     0     0  # (Cyl.      0*- 1271565*)
partition>e↵
Filesystem type [4.2BSD]: 
Start offset ('x' to start after partition 'x') [0.08203125c, 63s, 0.03076171875M]: 
Partition size ('$' for all remaining) [1271565.33333333325572311878204345703125c, 976562176s, 476837M]: 
partition>W↵
Label disk [n]?y↵
Label written
partition>Q↵

green$ disklabel -r raid0
# /dev/rraid0:
type: RAID
disk: raid0
label: fictitious
flags:
bytes/sector: 512
sectors/track: 64
tracks/cylinder: 12
sectors/cylinder: 768
cylinders: 1271565
total sectors: 976562240
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0		# microseconds
track-to-track seek: 0	# microseconds
drivedata: 0 

5 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 c: 976562176        63     unused      0     0        # (Cyl.      0*- 1271565*)
 d: 976562240         0     unused      0     0        # (Cyl.      0 - 1271565*)
 e: 976562176        63     4.2BSD      0     0     0  # (Cyl.      0*- 1271565*)

green$ disklabel raid0
# /dev/rraid0:
type: RAID
disk: raid0
label: fictitious
flags:
bytes/sector: 512
sectors/track: 64
tracks/cylinder: 12
sectors/cylinder: 768
cylinders: 1271565
total sectors: 976562240
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0		# microseconds
track-to-track seek: 0	# microseconds
drivedata: 0 

5 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 c: 976562176        63     unused      0     0        # (Cyl.      0*- 1271565*)
 d: 976562240         0     unused      0     0        # (Cyl.      0 - 1271565*)
 e: 976562176        63     4.2BSD      0     0     0  # (Cyl.      0*- 1271565*)

disklabel -r raid0 でも disklabel raid0 と同じ情報が出るようになった。

◎ newfs

newfs のコマンドラインを、NetBSD のインストーラで出ていた画面を写真撮影していたのでそれも参考にする。

newfs

block size や fragment size は、newfs(8) と見比べるに、明示的に指定しなくても newfs コマンドがよきに計らってくれるように思う。

green$ sudo newfs -O 2 /dev/rraid0e
/dev/rraid0e: 476837.0MB (976562176 sectors) block size 32768, fragment size 4096
	using 643 cylinder groups of 741.59MB, 23731 blks, 46848 inodes.
super-block backups (for fsck_ffs -b #) at:
192, 1518976, 3037760, 4556544, 6075328, 7594112, 9112896, 10631680, 12150464,
...............................................................................

newfs コマンドがすごく遅い気がしたのだが (数十秒かかった)、そんなものだろうか..

◎ mount (fstab)

/etc/fstab にエントリを書いてから mount してみることにするか。
以下の行を /etc/fstab に追記する。 マウントポイント名をとりあえず安直に /raid5 とする。 (後述するがこの行は書き間違えている)

/dev/raid0		/raid5	ffs	rw,log		 1 2

忘れずに /raid5 ディレクトリを作成したら、

green$ sudo mkdir /raid5

green$ ls -ld /raid5
drwxr-xr-x  2 root  wheel  512 Jul  1 21:16 /raid5

いよいよ

green$ sudo mount /raid5
mount_ffs: /dev/raid0 on /raid5: incorrect super block

ええ〜。

参考サイトを見ると、fsck をかけている例がある。 そんなの必要なんだろうか。

green$ sudo fsck /dev/rraid0e
** /dev/rraid0e
** File system is clean; not checking

green$ sudo fsck -f /dev/rraid0e
** /dev/rraid0e
** File system is already clean
** Last Mounted on 
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups
1 files, 1 used, 120177252 free (12 frags, 15022155 blocks, 0.0% fragmentation)

今度こそ

green$ sudo mount /raid5
mount_ffs: /dev/raid0 on /raid5: incorrect super block

ダメだ、ここまで来て..

と思って、よく見たら fstab で、/dev/raid0e でないといけないのに /dev/raid0 としていた。
修正。

/dev/raid0e		/raid5	ffs	rw,log		 1 2

今度はあっさり(?)いけた。 結局 fsck は必要だったんだろうか。

green$ sudo mount /raid5

green$ df -h /raid5
Filesystem         Size       Used      Avail %Cap Mounted on
/dev/raid0e        458G        64M       435G   0% /raid5

◎ 再起動

fstab も設定したので、再起動すれば、マウントまで行われているはずである。

green# reboot

起動時に raid0 を認識し /var/log/messages には次のように出ていた。

〜
Jul  1 21:36:52 green /netbsd: raid0: RAID Level 5
Jul  1 21:36:52 green /netbsd: raid0: Components: /dev/wd1g /dev/wd2h /dev/wd3e
Jul  1 21:36:52 green /netbsd: raid0: Total Sectors: 976562240 (476837 MB)
〜

起動時に出る /dev/rraid0: Parity status: clean のメッセージが頼もしい。

boot message

自動的に /raid5 のマウントまでいけた。

green$ df -h /raid5
Filesystem         Size       Used      Avail %Cap Mounted on
/dev/raid0e        458G        64M       435G   0% /raid5

green$ mount
〜
/dev/raid0e on /raid5 type ffs (log, local)
〜

● ちょっとベンチマーク

RAID-5 や RAIDframe は遅いという噂があるが、本当だろうか。

以下、そのままの順での実験記録である。

/dev/rraid0 からのシーケンシャル読み込み。 かなり速いようだが見間違えていないだろうか。

green$ dd if=/dev/rraid0d of=/dev/null bs=1048576 count=1024
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 8.306 secs (129273034 bytes/sec)

/raid5 へ大きいファイルをシーケンシャル書き込み。 ちょっと遅いか。

green$ sudo dd if=/dev/zero of=/raid5/zero1g.bin bs=1048576 count=1024
Password: 
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 117.480 secs (9139783 bytes/sec)

raid0 を構成している各ディスクのシーケンシャル読み込み。
やはりいずれも、組み上がった後の RAID-5 の方が速い!

green$ dd if=/dev/rwd3e of=/dev/null bs=1048576 count=1024
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 12.770 secs (84083149 bytes/sec)

green$ dd if=/dev/rwd3d of=/dev/null bs=1048576 count=1024
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 12.770 secs (84083149 bytes/sec)

green$ dd if=/dev/rwd2h of=/dev/null bs=1048576 count=1024
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 13.065 secs (82184601 bytes/sec)

green$ dd if=/dev/rwd2d of=/dev/null bs=1048576 count=1024
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 11.679 secs (91937822 bytes/sec)

green$ dd if=/dev/rwd1g of=/dev/null bs=1048576 count=1024
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 15.507 secs (69242395 bytes/sec)

green$ dd if=/dev/rwd1d of=/dev/null bs=1048576 count=1024
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 14.459 secs (74261140 bytes/sec)

wd2 に NetBSD をインストールするとき、/nbk という名の通常パーティションも作っていた。 そこへ大きいファイルをシーケンシャル書き込み。
うーむ、こちらは /nbk の方が /raid5 より 8.9 倍くらい速い。

green$ sudo dd if=/dev/zero of=/nbk/zero1g.bin bs=1048576 count=1024
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 13.139 secs (81721731 bytes/sec)

先ほど作った /raid5/zero1g.bin ファイルと、/nbk/zero1g.bin ファイルのシーケンシャル読み込みだが、キャッシュに乗っているだろうか。

green$ dd if=/raid5/zero1g.bin of=/dev/null bs=1048576
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 1.771 secs (606291261 bytes/sec)

green$ dd if=/nbk/zero1g.bin of=/dev/null bs=1048576
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 1.739 secs (617447857 bytes/sec)

そこで、また再起動してまた試行した。

やはり /raid5 は、シーケンシャル読み込みはもとのディスクより速く (参考値: 1.43 倍)、シーケンシャル書き込みはかなり遅い (参考値: 0.11 倍) ようだ。

green$ dd if=/raid5/zero1g.bin of=/dev/null bs=1048576
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 8.458 secs (126949849 bytes/sec)

green$ dd if=/nbk/zero1g.bin of=/dev/null bs=1048576
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 12.107 secs (88687686 bytes/sec)

● 余談

最後に見返して、画面写真の所で、重大な事に気づいた。

NetBSD/amd64 をインストールしてたつもりだったのに、NetBSD/i386 になってるじゃん!!

そういえば以前の環境 (NetBSD/amd64) でビルドしたバイナリが動かなくて何でだろうと思ってた。

インストールし直しか..

● 2023-06-17 追記 (ドライブ番号がずれても raidctl -c とかやり直さなくてもいいという話)

当 PC に SATA カードと SSD を増設することにした。

しかしそうすると、ドライブの番号 (wd0 といったもの) が、増設カードのドライブなのに、先頭に割り込んでしまい、既存のドライブの番号がずれてしまった。
そのため起動もしなくなる。

起動しなくなるのは /etc/fstab を書き換えれば良さそうだが..

RAIDframe についても、(この覚書の上の方で) 初期化する時に raid5.conf で /dev/wd1g といったドライブ名を指定しているので、一度 RAIDframe を解除してやり直さないといけない気がする。 したのだが..

以下、しなくてもよかったと思われる作業がかなり入っている..

上の方で使用した raid5.conf の再掲 (抜粋):

〜

START disks
/dev/wd1g
/dev/wd2h
/dev/wd3e

〜

まさにこの覚書を読み返しながら、久々に raidctl -s を実行してみると..

環境が移り変わり、自アカウントが operator グループに属さなくなったので、raidctl -s 等の実行にも sudo が必要になった。 また、OS が NetBSD/i386 だったものが NetBSD/amd64 になっている。 このように環境が移り変わっても、RAIDframe の構成はそのまま受け継がれて使用可能なのだった。
green$ raidctl -s raid0
raidctl: Unable to open device file: raid0: Permission denied

green$ sudo raidctl -s raid0
Password: 〜↵
Components:
           /dev/wd1g: optimal
           /dev/wd2h: optimal
           /dev/wd3e: optimal
No spares.
Component label for /dev/wd1g:
   Row: 0, Column: 0, Num Rows: 1, Num Columns: 3
   Version: 2, Serial Number: 20180627, Mod Counter: 43966
   Clean: No, Status: 0
   sectPerSU: 32, SUsPerPU: 1, SUsPerRU: 1
   Queue size: 100, blocksize: 512, numBlocks: 488281120
   RAID Level: 5
   Autoconfig: Yes
   Root partition: No
   Last configured as: raid0
Component label for /dev/wd2h:
   Row: 0, Column: 1, Num Rows: 1, Num Columns: 3
wheel:*:0:root,nsmrtks
daemon:*:1:daemon
kmem:*:2:root
sys:*:3:root
tty:*:4:root
   Version: 2, Serial Number: 20180627, Mod Counter: 43966
   Clean: No, Status: 0
   sectPerSU: 32, SUsPerPU: 1, SUsPerRU: 1
   Queue size: 100, blocksize: 512, numBlocks: 488281120
   RAID Level: 5
   Autoconfig: Yes
   Root partition: No
   Last configured as: raid0
Component label for /dev/wd3e:
   Row: 0, Column: 2, Num Rows: 1, Num Columns: 3
   Version: 2, Serial Number: 20180627, Mod Counter: 43966
   Clean: No, Status: 0
   sectPerSU: 32, SUsPerPU: 1, SUsPerRU: 1
   Queue size: 100, blocksize: 512, numBlocks: 488281120
   RAID Level: 5
   Autoconfig: Yes
   Root partition: No
   Last configured as: raid0
Parity status: clean
Reconstruction is 100% complete.
Parity Re-write is 100% complete.
Copyback is 100% complete.

さて、まず RAIDframe のファイルシステムを umount して、/etc/fstab でも 自動的にマウントされないようにする。
というより、umount が Device busy と言われてしまうので (gvfsd-trash なるものが使用している?)、先に /etc/fstab で無効化して、再起動した。

/dev/raid0e	/raid5		ffs	rw,log		 1 2

#/dev/raid0e	/raid5		ffs	rw,log		 1 2

RAIDframe のディスクを解除するには、raidctl -u (既出) でいいだろうか。

一般論でいうと、事前にバックアップを取っておくべきだが、この RAID にあるデータは全て、別の場所にも同内容が存在しているので、今回バックアップを取っていない。
green$ sudo raidctl -v -u raid0

green$ sudo raidctl -s raid0
raidctl: ioctl (RAIDFRAME_GET_INFO) failed: Device not configured

続いて、詳細は省くが、増設 SATA カードの SSD を有効にしても起動できるように、ぶっつけだが、/etc/fstab を、それを見越して書き換える。
詳細は省くとはいえ、肝要なのは以下の部分となる。 他にも一旦コメントアウトした部分がある。

〜
/dev/wd4a	/		ffs	rw,log		 1 1
/dev/wd4b	none		swap	sw,dp		 0 0
〜

〜
/dev/wd6a	/		ffs	rw,log		 1 1
/dev/wd6b	none		swap	sw,dp		 0 0
〜

シャットダウン・電源を切って、増設 SATA カードの SSD の電源を接続し、再び電源を入れると、無事に起動した。
/etc/fstab の一旦コメントアウトした部分も、適切に書き換えて再び有効化した。

さて、本題の RAIDframe の再有効化だが、念の為 disklabel を確認した上..

green$ sudo disklabel wd3
〜
 g: 488281186 136861261       RAID                     # (Cyl. 135775*- 620180*)
green$ sudo disklabel wd4
〜
 h: 488281186 488491981       RAID                     # (Cyl. 484615*- 969020*)
green$ sudo disklabel wd5
〜
 e: 488281186        63       RAID                     # (Cyl.      0*- 484406*)

以下のような raid5_2023.conf を用意した。 (START disks の下の 3行を raid5.conf に対し変更している)

START array
1 3 0

START disks
/dev/wd3g
/dev/wd4h
/dev/wd5e

START layout
# sectPerSU SUsPerParityUnit SUsPerReconUnit RAID_level
32 1 1 5

START queue
fifo 100

そうして、raidctl -c raid5_2023.conf を実行する..

green$ sudo raidctl -v -c raid5_2023.conf raid0
raidctl: ioctl (RAIDFRAME_CONFIGURE) failed: Invalid argument

ムムッ..

green$ sudo raidctl -v -c raid5_2023.conf raid0
raidctl: ioctl (RAIDFRAME_CONFIGURE) failed: Invalid argument

green$ sudo raidctl -v -C raid5_2023.conf raid0
raidctl: ioctl (RAIDFRAME_CONFIGURE) failed: Invalid argument

ダメなのか..

ところが、ここで何気に raidctl -s を実行してみると..

green$ sudo raidctl -v -s raid0
Components:
           /dev/wd3g: optimal
           /dev/wd4h: optimal
           /dev/wd5e: optimal
No spares.
Component label for /dev/wd3g:
   Row: 0, Column: 0, Num Rows: 1, Num Columns: 3
   Version: 2, Serial Number: 20180627, Mod Counter: 44085
   Clean: No, Status: 0
   sectPerSU: 32, SUsPerPU: 1, SUsPerRU: 1
   Queue size: 100, blocksize: 512, numBlocks: 488281120
   RAID Level: 5
   Autoconfig: Yes
   Root partition: No
   Last configured as: raid0
Component label for /dev/wd4h:
   Row: 0, Column: 1, Num Rows: 1, Num Columns: 3
   Version: 2, Serial Number: 20180627, Mod Counter: 44085
   Clean: No, Status: 0
   sectPerSU: 32, SUsPerPU: 1, SUsPerRU: 1
   Queue size: 100, blocksize: 512, numBlocks: 488281120
   RAID Level: 5
   Autoconfig: Yes
   Root partition: No
   Last configured as: raid0
Component label for /dev/wd5e:
   Row: 0, Column: 2, Num Rows: 1, Num Columns: 3
   Version: 2, Serial Number: 20180627, Mod Counter: 44085
   Clean: No, Status: 0
   sectPerSU: 32, SUsPerPU: 1, SUsPerRU: 1
   Queue size: 100, blocksize: 512, numBlocks: 488281120
   RAID Level: 5
   Autoconfig: Yes
   Root partition: No
   Last configured as: raid0
Parity status: clean
Reconstruction is 100% complete.
Parity Re-write is 100% complete.
Copyback is 100% complete.

んっ、ディスクが 3台とも新しい名前になった上 optimal となってるし、正常作動してるの??

raidctl -u なぞしてみると..

green$ sudo raidctl -v -u raid0

green$ sudo raidctl -v -s raid0
raidctl: ioctl (RAIDFRAME_GET_INFO) failed: Device not configured

もう一度 raidctl -C してみると.. (本当は -c にしたかったが間違えて -C にしてしまった)

green$ sudo raidctl -v -C raid5_2023.conf raid0

何も(エラーも)出ないが、raidctl -s を実行してみると..

green$ sudo raidctl -v -s raid0
Components:
           /dev/wd3g: optimal
           /dev/wd4h: optimal
           /dev/wd5e: optimal
No spares.
Component label for /dev/wd3g:
   Row: 0, Column: 0, Num Rows: 1, Num Columns: 3
   Version: 2, Serial Number: 20180627, Mod Counter: 44103
   Clean: No, Status: 0
   sectPerSU: 32, SUsPerPU: 1, SUsPerRU: 1
   Queue size: 100, blocksize: 512, numBlocks: 488281120
   RAID Level: 5
   Autoconfig: Yes
   Root partition: No
   Last configured as: raid0
Component label for /dev/wd4h:
   Row: 0, Column: 1, Num Rows: 1, Num Columns: 3
   Version: 2, Serial Number: 20180627, Mod Counter: 44103
   Clean: No, Status: 0
   sectPerSU: 32, SUsPerPU: 1, SUsPerRU: 1
   Queue size: 100, blocksize: 512, numBlocks: 488281120
   RAID Level: 5
   Autoconfig: Yes
   Root partition: No
   Last configured as: raid0
Component label for /dev/wd5e:
   Row: 0, Column: 2, Num Rows: 1, Num Columns: 3
   Version: 2, Serial Number: 20180627, Mod Counter: 44103
   Clean: No, Status: 0
   sectPerSU: 32, SUsPerPU: 1, SUsPerRU: 1
   Queue size: 100, blocksize: 512, numBlocks: 488281120
   RAID Level: 5
   Autoconfig: Yes
   Root partition: No
   Last configured as: raid0
Parity status: clean
Reconstruction is 100% complete.
Parity Re-write is 100% complete.
Copyback is 100% complete.

正常に思える。

ここで、もしやと思った。 /var/log/messages を見てみる。

〜
Jun 17 20:46:28 green syslogd[1462]: Exiting on signal 15
Jun 17 20:50:13 green syslogd[1324]: restart
〜
Jun 17 20:50:14 green /netbsd: [   1.0000000] NetBSD 10.99.4 (GENERIC) #45: Fri Apr 28 19:44:23 JST 2023
〜
Jun 17 20:50:14 green /netbsd: [   3.3574869] raid0: RAID Level 5
Jun 17 20:50:14 green /netbsd: [   3.3574869] raid0: Components: /dev/wd3g /dev/wd4h /dev/wd5e
Jun 17 20:50:14 green /netbsd: [   3.3574869] raid0: Total Sectors: 976562240 (476837 MB)
〜

再起動した時点で、RAID を、付け変わったドライブ番号で認識している??

raidctl -c や -C でエラーが出たのは、そのせい!?

〜
Jun 17 21:25:48 green /netbsd: [ 1802.5462924] raid0: Device already configured!
Jun 17 21:25:48 green /netbsd: [ 1912.3875243] raid0: Device already configured!
Jun 17 21:25:48 green /netbsd: [ 1916.3575698] raid0: Device already configured!
Jun 17 21:25:48 green /netbsd: [ 2153.1001767] raid0: detached
〜

もしかして、実は何もしなくてもよかった!?
大山鳴動鼠一匹??

もうこのまま放っておこうと思ったが、後学のために、もう 1度だけ、SSD を取り外して、/etc/fstab も以前の状態にして、起動してみる。

さっき raid5_2023.conf で新しいデバイス名で raidctl -c とか -C とかしたのに、ブートメッセージに /dev/rraid0: Parity status: clean とか出ているし、

Parity status: clean

ていうかブート画面をスクロールバックすると (さっきの /var/log/messages と同等)、raid0 の Components が、何もしてないのに、元に戻っている。

raid0 Components

面倒なことをしてきたがこれで最後のはずなので、/etc/fstab を最終形態にし、SSD を再び取り付けて、起動してみる。

今度は raid0 の Components をスクロールバックで見つけられなかったが、/dev/rraid0e: file system is clean だし (さっきも出てたと思う)、

file system is clean

/dev/rraid0: Parity status: clean も出てるし、

Parity status: clean

そしてというか、/var/log/messages で、raid0 の Components が、何もしてないのに、やはり自動的に付け替わっているのを確認した。

〜
Jun 17 22:12:26 green /netbsd: [   3.3403016] raid0: RAID Level 5
Jun 17 22:12:26 green /netbsd: [   3.3403016] raid0: Components: /dev/wd3g /dev/wd4h /dev/wd5e
Jun 17 22:12:26 green /netbsd: [   3.3403016] raid0: Total Sectors: 976562240 (476837 MB)
〜

そうして、RAID パーティションのファイルが正しく見えているっぽいことも確認した。

green$ df -h /raid5
Filesystem     Size   Used  Avail %Cap Mounted on
/dev/raid0e    458G   403G    32G  92% /raid5

green$ ls -a /raid5/
.               ..              backups_arc     directory.txt   directory.txt~

green$ less /raid5/directory.txt
〜

やはり、RAIDframe の構成ディスクは、移動しても(ずれても)、自動的に見つけてくれるということかな〜?

以上


index