眠い。
glantank# uname -a NetBSD glantank 4.99.3 NetBSD 4.99.3 (HDL_G) #0: Sun Oct 15 23:22:53 JST 2006 tokuda@MacBook.local:/Users/tokuda/NetBSD/o/20061014/evbarm/sys/arch/evbarm/compile/HDL_G evbarm glantank# fdisk wd0 Disk: /dev/rwd0c NetBSD disklabel disk geometry: cylinders: 29104, heads: 16, sectors/track: 63 (1008 sectors/cylinder) total sectors: 29336832 BIOS disk geometry: cylinders: 1024, heads: 255, sectors/track: 63 (16065 sectors/cylinder) total sectors: 29336832 Partition table: 0: Linux native (sysid 131) start 63, size 48132 (24 MB, Cyls 0-3) 1: NetBSD (sysid 169) start 48195, size 29288637 (14301 MB, Cyls 3-1826/34/1) 2:3: glantank# disklabel wd0 # /dev/rwd0c: type: SCSI disk: mydisk label: fictitious flags: bytes/sector: 512 sectors/track: 32 tracks/cylinder: 64 sectors/cylinder: 2048 cylinders: 14324 total sectors: 29336832 rpm: 3600 interleave: 1 trackskew: 0 cylinderskew: 0 headswitch: 0 # microseconds track-to-track seek: 0 # microseconds drivedata: 0 6 partitions: # size offset fstype [fsize bsize cpg/sgs] a: 29163520 48195 4.2BSD 2048 16384 29152 # (Cyl. 23*- 14263*) b: 125117 29211715 swap # (Cyl. 14263*- 14324*) c: 29288637 48195 unused 0 0 # (Cyl. 23*- 14324*) d: 29336832 0 unused 0 0 # (Cyl. 0 - 14324*) e: 48132 63 Linux Ext2 0 0 # (Cyl. 0*- 23*) glantank#
二台目のHDDのジャンパがMasterになっていたので起動の途中で止まっていた。
dmesgをのせておきます。15GのHDDがwd0, 40GのHDDがwd1です。うーむ。40GのHDDで起動ドライブを作って15GのドライブとRAID1を組むのが良かったな。
glantank# dmesg Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 The NetBSD Foundation, Inc. All rights reserved. Copyright (c) 1982, 1986, 1989, 1991, 1993 The Regents of the University of California. All rights reserved. NetBSD 4.99.3 (HDL_G) #0: Sun Oct 15 23:22:53 JST 2006 tokuda@MacBook.local:/Users/tokuda/NetBSD/o/20061014/evbarm/sys/arch/evbarm/compile/HDL_G total memory = 128 MB avail memory = 118 MB mainbus0 (root) cpu0 at mainbus0: i80219 400MHz step A-0 (XScale core) cpu0: DC enabled IC enabled WB enabled LABT branch prediction enabled cpu0: 32KB/32B 32-way Instruction cache cpu0: 32KB/32B 32-way write-back-locking Data cache obio0 at mainbus0 com0 at obio0 addr 0xfe800000 xint 3: ns16550a, working fifo com0: console btn0 at obio0 addr 0xfe8d0002 xint 3 iopxs0 at mainbus0: i80219 I/O Processor, acting as PCI host iopxs0: configuring PCI bus iopiic0 at iopxs0: I2C controller iic0 at iopiic0: I2C bus rs5c372rtc0 at iic0 addr 0x32: RICOH RS5C372[AB] Real-time Clock iopiic1 at iopxs0: I2C controller iic1 at iopiic1: I2C bus pci0 at iopxs0 bus 0 pci0: i/o space, memory space enabled, rd/line, rd/mult, wr/inv ok wm0 at pci0 dev 1 function 0: Intel i82541GI 1000BASE-T Ethernet, rev. 5 wm0: interrupting at irq 27 wm0: 32-bit 33MHz PCI bus wm0: 64 word (6 address bits) MicroWire EEPROM wm0: Ethernet address 00:a0:b0:75:ef:75 igphy0 at wm0 phy 1: Intel IGP01E1000 Gigabit PHY, rev. 0 igphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto acardide0 at pci0 dev 2 function 0 acardide0: Acard ATP865-A Ultra133 IDE Controller (rev. 0x10) acardide0: bus-master DMA support present acardide0: primary channel wired to native-PCI mode acardide0: using irq 28 for native-PCI interrupt atabus0 at acardide0 channel 0 acardide0: secondary channel wired to native-PCI mode atabus1 at acardide0 channel 1 ohci0 at pci0 dev 3 function 0: NEC USB Host Controller (rev. 0x43) ohci0: interrupting at irq 29 ohci0: OHCI version 1.0 usb0 at ohci0: USB revision 1.0 uhub0 at usb0 uhub0: NEC OHCI root hub, class 9/0, rev 1.00/1.00, addr 1 uhub0: 3 ports with 3 removable, self powered ohci1 at pci0 dev 3 function 1: NEC USB Host Controller (rev. 0x43) ohci1: interrupting at irq 29 ohci1: OHCI version 1.0 usb1 at ohci1: USB revision 1.0 uhub1 at usb1 uhub1: NEC OHCI root hub, class 9/0, rev 1.00/1.00, addr 1 uhub1: 2 ports with 2 removable, self powered ehci0 at pci0 dev 3 function 2: NEC USB Host Controller (rev. 0x04) ehci0: interrupting at irq 29 ehci0: BIOS has given up ownership ehci0: EHCI version 1.0 ehci0: companion controllers, 3 ports each: ohci0 ohci1 usb2 at ehci0: USB revision 2.0 uhub2 at usb2 uhub2: NEC EHCI root hub, class 9/0, rev 2.00/1.00, addr 1 uhub2: 5 ports with 5 removable, self powered clock: hz=100 stathz=0 profhz=0 wd0 at atabus0 drive 0:wd0: drive supports 16-sector PIO transfers, LBA addressing wd0: 14324 MB, 29104 cyl, 16 head, 63 sec, 512 bytes/sect x 29336832 sectors wd0: 32-bit data port wd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 4 (Ultra/66) wd1 at atabus0 drive 1: wd1: drive supports 16-sector PIO transfers, LBA addressing wd1: 38166 MB, 77545 cyl, 16 head, 63 sec, 512 bytes/sect x 78165360 sectors wd1: 32-bit data port wd1: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 5 (Ultra/100) wd0(acardide0:0:0): using PIO mode 4, DMA mode 2, Ultra-DMA mode 4 (Ultra/66) (using DMA) wd1(acardide0:0:1): using PIO mode 4, DMA mode 2, Ultra-DMA mode 5 (Ultra/100) (using DMA) boot device: root on wd0a dumps on wd0b root file system type: ffs glantank#
昨日の続きでGLANTankでRAIDframeを使おうと挑戦してみました。
raidctlコマンドを駆使していくわけですが、なぜかraidctl -C raid.conf raid0というしょっぱなのコマンドがエラーになってしまいます。
嫌な予感がしてkernelのconfファイルであるHDL_Gを読んでみたところ、raid関連がコメントアウトされていました。いやぁ、恥ずかしいミスです。
手順としては、二台目のRAID1の片割れを作って、そこからブートして、一台目をRAIDに参加させるという感じのようです。
どちらのHDDからも起動させるためには二台目にもext3な区画を作ってkernelを置いてやる必要があります。
で、ext3なファイルシステムを作るコマンドが...
今から作るんですが、面倒です。素直にHDDはずしてi386マシンにつなぐのが一番早いと思いつつ、GLANTankにpkgsrcを展開していたりして。
pkgsrcでe2fsprogsを作った後、wd1にext3なファイルシステムをつくって、kernelをコピー。
wd0の電源を抜いてリブート。
raid0aからブートさせたら見事に起動しました。
glantank# uname -a NetBSD glantank 4.99.3 NetBSD 4.99.3 (HDL_G) #1: Wed Dec 13 01:23:04 JST 2006 tokuda@MacBook.local:/Users/tokuda/NetBSD/o/20061014/evbarm/sys/arch/evbarm/compile/HDL_G evbarm glantank# mount /dev/raid0a on / type ffs (local) glantank#
しかしあれだ、デフォルトではwd0aから起動しようとするので自分でroot deviceを指定する必要があって、つまりシリアルケーブル必須ということになって、raid0aから起動するようなkernelの設定にしておかねばイカンですなぁ。
あとはRAID1対応になったwd1を新wd0として接続し、旧wd0を新wd1として接続したあと新wd0と同じ作業を行ってRAID1対応させないといけないってことか。
先は長いなぁ。
Dec 13 23:52:29 glantank /netbsd: raid0: RAID Level 1 Dec 13 23:52:29 glantank /netbsd: raid0: Components: component0[**FAILED**] /dev/wd0a Dec 13 23:52:29 glantank /netbsd: raid0: Total Sectors: 29163392 (14239 MB) Dec 13 23:52:29 glantank /netbsd: boot device: raid0 Dec 13 23:52:29 glantank /netbsd: root on wd0a dumps on wd0b Dec 13 23:52:29 glantank /netbsd: no file system for wd0 (dev 0x1000) Dec 13 23:52:29 glantank /netbsd: cannot mount root, error = 79 Dec 13 23:52:29 glantank /netbsd: root device (default wd0a): raid0a Dec 13 23:52:29 glantank /netbsd: dump device (default raid0b): wd0b Dec 13 23:52:29 glantank /netbsd: file system (default generic): Dec 13 23:52:29 glantank /netbsd: root on raid0a dumps on wd0b Dec 13 23:52:29 glantank /netbsd: root file system type: ffs Dec 13 23:52:29 glantank /netbsd: init path (default /sbin/init): Dec 13 23:52:29 glantank /netbsd: init: trying /sbin/init Dec 13 23:52:30 glantank savecore: /netbsd: kvm_openfiles: /netbsd: No such file or directory Dec 13 23:52:32 glantank /netbsd: raid0: Error re-writing parity!
swapファイルは一時的で消えてなくなるものであり、永続性が必要ないという性質を持っています。
したがって、swapをRAID配下に置くことは、RAID処理が必要な分だけパフォーマンスが低下することを考慮すると意味が無いことであると考えることができます。
しかし一方で、RAID配下にないswap領域が置かれているディスクが故障した場合、swapファイルの書き込みや読み込みに異常が発生し、OSが不正に停止 (panicなど) する可能性があります。場合によってはpanicのせいでファイルが失われる可能性もあるでしょう。
swap領域のRAID化は、swapファイルの一時性の面からするとパフォーマンス低下がデメリットなる一方で、ハードディスク故障時の業務継続性と信頼性でメリットがあるといえるでしょう。
さて、RAID1を導入するということは信頼性重視にほかなりませんから、たまに発生するswap時のパフォーマンスを気にするよりも故障時の信頼性を重視する方が首尾一貫した考え方であるといえるでしょう。
これは大容量メモリと高性能CPUを搭載したいわゆるPCの世界では正論なのですが、まだまだメモリも少なくswapも発生しがちでCPUも有効活用したい組込の分野では悩ましいところかもしれません。
などと真面目ぶって書いてきましたが、実際の所よくわかってなかったりするんだなこれが。
NetBSD/macppcを地味に入れて、パッケージを作って、さーてCyrusの設定だと思ったらcyradmでタイトルのエラーが。
さっさと復旧しないとメールが何通たまっているか...
ブロックで遊んでいますが、数日をかけて拡張し続けている飛行機は、非常に大きく、形も複雑になってきました。以前は単純な形状の飛行機だったのですが、最近は二つの頭を持つような変わった形になってきています。
また、壊れやすい部分を補強したり、合体して大きくなるようなストーリーも含んでいるようです。
すごい。
半分だけRAID1化していたもう一方をRAID1化しました。
手順としては、wd1をwd0となるようにジャンパをSlaveからMasterにします。wd0をwd1にする、といってもすでにdisklabelは全く同じ大きさにしてあるので4.2BSDからRAID0に変更するだけです。
で、raidctl -aコマンドを使ってスペアディスクとしてwd1aを追加、raidctl -f, raidctl -Fで再構築をさせます。その後はReconstructionが終わるのを待ち、リブートします。
見事にRAID1化されました。
単体ディスクの起動テストの前に、rc.confを書き換えてシングルユーザモードで起動するように変更します。これは、ディスクに書き込みがおこらないようにするためにやっています。
そして、片方のHDDの電源を抜いて起動をします。それぞれのHDDで実施すればテスト完了です。
あと、作業中にシリアルケーブルが抜けました。そうするとdb>に落ちますね。これってOBS266でも同じ現象になっていて、なにかおまじないが必要だったような気がします。
最後に、root deviceをraid0aに指定したkernelをext3な区画に置いて、起動時の対話的な入力なしにOSがあがるようにしました。
課題は残されましたが、なにはともあれRAID1化が完了しました。良い経験でした。
課題をつらつらと。
まぁ、つまり機会を見て大きなHDDを二つ買ってきてもう一度RAID1の構築をすることになりそうですね。
メールはこちらへ...[BSD小僧 (tokuda @(at) tokuda .(dot) net)]
この日記は、GNSを使用して作成されています。