Hatena::ブログ(Diary)

てけらぼ このページをアンテナに追加 RSSフィード

人生ブレまくり

2008-04-21 家鯖は*度死ぬ

[]Ubuntu 8.04 Hardy Heron ServerととそしてITE8212 Raid

その家鯖にはDebian Sargeを入れていたのだが、そろそろリリース間近のUbuntu Serverを入れることにした。ブートドライブはSCSIの4GBのHDDで、それにRAIDカードを挿してサーバでっち上げていたが、どうしても動かしたかったOracle Database 10g XEがディスクは/var/lib以下に1.6GB食うわ、スワップは1.05GB以上要求するわで、そろそろこの構成も限界。起動ディスクはPATAに戻して、AHA-2940ごとSCSI環境はお払い箱にすることにした*1

もともと、UbuntuGutsyの起動CDで起動までは確認していたのだけど、問題は玄人志向製のATA133RAID-PCI2だった。以前はITE社からソースがリリースされているので、それを自家コンパイルして使っていたのだが、今回はどうやらカーネルツリーにITE社のドライバが収録されたらしいので期待してインストールして起動したところ、単なる二発積みのIDEインタフェースとして動かす分には問題ないものの、RAID動作させようとするとダメ。今回直ったかなと思いつつ、やっぱり素のままだとこんな調子だった。まずは、デフォルトSmart mode(RAIDカードとして動作)。

Apr 21 14:03:56 blue kernel: [   87.944210] pata_it821x: controller in smart mode.
Apr 21 14:03:56 blue kernel: [   87.944262] PCI: Found IRQ 11 for device 0000:00:0c.0
Apr 21 14:03:56 blue kernel: [   87.944296] PCI: Sharing IRQ 11 with 0000:00:09.1
Apr 21 14:03:56 blue kernel: [   87.944510] PCI: Setting latency timer of device 0000:00:0c.0 to 64
Apr 21 14:03:56 blue kernel: [   87.953593] scsi1 : pata_it821x
Apr 21 14:03:56 blue kernel: [   87.966270] scsi2 : pata_it821x
Apr 21 14:03:56 blue kernel: [   87.966469] ata1: PATA max MWDMA2 cmd 0x9c00 ctl 0xa000 bmdma 0xac00 irq 11
Apr 21 14:03:56 blue kernel: [   87.966485] ata2: PATA max MWDMA2 cmd 0xa400 ctl 0xa800 bmdma 0xac08 irq 11
Apr 21 14:03:56 blue kernel: [   89.183392] ata1.00: failed to IDENTIFY (INIT_DEV_PARAMS failed, err_mask=0x80)
Apr 21 14:03:56 blue kernel: [   89.183413] ata1: failed to recover some devices, retrying in 5 secs
Apr 21 14:03:56 blue kernel: [   95.392363] ata1.00: failed to IDENTIFY (INIT_DEV_PARAMS failed, err_mask=0x80)
Apr 21 14:03:56 blue kernel: [   95.392384] ata1: failed to recover some devices, retrying in 5 secs
Apr 21 14:03:56 blue kernel: [  101.601374] ata1.00: failed to IDENTIFY (INIT_DEV_PARAMS failed, err_mask=0x80)
Apr 21 14:03:56 blue kernel: [  101.601393] ata1: failed to recover some devices, retrying in 5 secs

なんか妙な認識をしようとしてこけている。

続いてPass throughモード(ATAカードとして動作)。

コマンドラインで modprobe pata_it821x noraid=1 とやるか、 /etc/modprobe.d/options に options pata_it821x noraid=1 とか書いてやって、update-initramfs -k all -c -t -vで更新した後*2ドライバを入れてやるとこうなる。

Apr 21 14:50:08 blue kernel: [   67.195034] pata_it821x: controller in smart mode.
Apr 21 14:50:08 blue kernel: [   67.195087] PCI: Found IRQ 11 for device 0000:00:0c.0
Apr 21 14:50:08 blue kernel: [   67.195122] PCI: Sharing IRQ 11 with 0000:00:09.1
Apr 21 14:50:08 blue kernel: [   67.204268] scsi1 : pata_it821x
Apr 21 14:50:08 blue kernel: [   67.206819] scsi2 : pata_it821x
Apr 21 14:50:08 blue kernel: [   67.206998] ata1: PATA max MWDMA2 cmd 0x9c00 ctl 0xa000 bmdma 0xac00 irq 11
Apr 21 14:50:08 blue kernel: [   67.207013] ata2: PATA max MWDMA2 cmd 0xa400 ctl 0xa800 bmdma 0xac08 irq 11

Apr 21 14:50:08 blue kernel: [   70.524660] sd 3:0:0:0: [sdb] 78165359 512-byte hardware sectors (40021 MB)
Apr 21 14:50:08 blue kernel: [   70.524741] sd 3:0:0:0: [sdb] Write Protect is off
Apr 21 14:50:08 blue kernel: [   70.524756] sd 3:0:0:0: [sdb] Mode Sense: 00 3a 00 00
Apr 21 14:50:08 blue kernel: [   70.524880] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
Apr 21 14:50:08 blue kernel: [   70.525107] sd 3:0:0:0: [sdb] 78165359 512-byte hardware sectors (40021 MB)
Apr 21 14:50:08 blue kernel: [   70.525180] sd 3:0:0:0: [sdb] Write Protect is off
Apr 21 14:50:08 blue kernel: [   70.525195] sd 3:0:0:0: [sdb] Mode Sense: 00 3a 00 00
Apr 21 14:50:08 blue kernel: [   70.525317] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or F
UA
Apr 21 14:50:08 blue kernel: [   70.525337]  sdb: sdb1 sdb2
Apr 21 14:50:08 blue kernel: [   70.565465] sd 3:0:0:0: [sdb] Attached SCSI disk

通常のIDEバスが2本追加されてそれぞれにディスクがぶら下がっている形ね*3


このITE8212は玄人志向だけじゃなくて、GIGABYTEのマザーボードGA-8I945Gにも搭載されていてちょっとした議論があったブツ*4なんだけど、そんなにマイナーでQAも通っていない状態とは思わず。

で、捨てる神あれば拾う神あり、でUbuntu本家Launchpadでパッチが提出されていた

ite8212ドライバはHerdyには収録されていない模様だがカーネルソースを取得するとdrivers/ide/pci/it821x.cとしてソースが入っていた。一方、pata_821xはdrivers/ata/pata_it821x.cにある。先のLaunchpadからパッチを転載しておく(自分のために)

diff -Nrup linux-2.6.24.3/drivers/ide/pci/it821x.c linux-2.6.24.3-it8212/drivers/ide/pci/it821x.c
--- linux-2.6.24.3/drivers/ide/pci/it821x.c	2008-02-26 03:20:20.000000000 +0300
+++ linux-2.6.24.3-it8212/drivers/ide/pci/it821x.c	2008-03-16 22:40:07.000000000 +0300
@@ -483,6 +483,10 @@ static void __devinit it821x_fixups(ide_
 			id->capability |= 3;		/* LBA28, DMA */
- 			id->command_set_2 |= 0x0400;	/* LBA48 valid */
- 			id->cfs_enable_2 |= 0x0400;	/* LBA48 on */
+ 			id->command_set_2 |= 0x4400;	/* LBA48 valid */
+ 			id->cfs_enable_2 |= 0x4400;	/* LBA48 on */
+			id->major_rev_num = 0x0010;	/* ATA major version num = 4 */
+			id->minor_rev_num = 0x0010;	/* ATA minor version num = 4 */
+			id->field_valid |= 6;		/* MWDMA & UDMA lists valid */
+			id->hw_config |= 0x6000;	/* ATA66 cable */
 			/* Reporting logic */
 			printk(KERN_INFO "%s: IT8212 %sRAID %d volume",
 				drive->name,
@@ -575,15 +579,14 @@ static void __devinit init_hwif_it821x(i
 			printk(KERN_WARNING "it821x: Revision 0x10, workarounds activated.\n");
 	}
 
-	if (idev->smart == 0) {
-		hwif->set_pio_mode = &it821x_set_pio_mode;
-		hwif->set_dma_mode = &it821x_set_dma_mode;
+	hwif->set_pio_mode = &it821x_set_pio_mode;
+	hwif->set_dma_mode = &it821x_set_dma_mode;
 
+	if (idev->smart == 0) {
 		/* MWDMA/PIO clock switching for pass through mode */
 		hwif->dma_start = &it821x_dma_start;
 		hwif->ide_dma_end = &it821x_dma_end;
-	} else
-		hwif->host_flags |= IDE_HFLAG_NO_SET_MODE;
+	}
 
 	if (hwif->dma_base == 0)
 		return;
diff -Nrup linux-2.6.24.3/drivers/ata/pata_it821x.c linux-2.6.24.3-it8212-libata/drivers/ata/pata_it821x.c
--- linux-2.6.24.3/drivers/ata/pata_it821x.c	2008-02-26 03:20:20.000000000 +0300
+++ linux-2.6.24.3-it8212-libata/drivers/ata/pata_it821x.c	2008-03-16 23:57:33.000000000 +0300
@@ -434,6 +434,34 @@ static unsigned int it821x_smart_qc_issu
 }
 
 /**
+ *	it821x_smart_post_internal_cmd  -  command post-fixups
+ *	@qc: command
+ *
+ *	Fixing identification data if contriller is in smart mode
+ */
+
+static void it821x_smart_post_internal_cmd(struct ata_queued_cmd *qc)
+{
+	struct ata_device *adev = qc->dev;
+	unsigned char model_num[ATA_ID_PROD_LEN + 1];
+
+	ata_bmdma_post_internal_cmd(qc);
+
+	if (qc->tf.command == ATA_CMD_ID_ATA) {
+ 		ata_id_c_string(adev->id, model_num, ATA_ID_PROD, sizeof(model_num));
+		if (strstr(model_num, "Integrated Technology Express")) {
+			printk(KERN_INFO "it821x: RAID volume: performing ID fixups...\n");
+			adev->id[80]  = 1<<4; /* Setting ATA major version to 4 */
+			adev->id[81]  = 1<<4; /* Setting ATA minor version to 4 */
+			adev->id[49] |= 0x0300; /* LBA & DMA supported */
+			adev->id[83] |= 0x4400; /* LBA48 supported */
+			adev->id[86] |= 0x4400; /* LBA48 enabled */
+		}
+	}
+	return;	
+}
+
+/**
  *	it821x_passthru_qc_issue_prot	-	wrap qc issue prot
  *	@qc: command
  *
@@ -633,7 +661,7 @@ static struct ata_port_operations it821x
 	.freeze		= ata_bmdma_freeze,
 	.thaw		= ata_bmdma_thaw,
 	.error_handler	= ata_bmdma_error_handler,
-	.post_internal_cmd = ata_bmdma_post_internal_cmd,
+	.post_internal_cmd = it821x_smart_post_internal_cmd,
 	.cable_detect	= ata_cable_unknown,
 
 	.bmdma_setup 	= ata_bmdma_setup,
@@ -715,6 +743,7 @@ static int it821x_init_one(struct pci_de
 		.flags = ATA_FLAG_SLAVE_POSS,
 		.pio_mask = 0x1f,
 		.mwdma_mask = 0x07,
+//		.udma_mask = ATA_UDMA6,
 		.port_ops = &it821x_smart_port_ops
 	};
 	static const struct ata_port_info info_passthru = {

明日あたりこのパッチをあてたドライバでっち上げる予定。

だけどこんなことしてたらまたOSのバージョンが上がったときに手数増えるんだよねぇ。

早いところ直してほしい。

ちなみに、ITE8212のRAID 1(Mirroring)はそのままPass Throughモードでアクセスしたときには通常のドライブで見えちゃいます。なので、このカードを使っていてStripingなしのMirroringで構成していた人は、仮にこのカードがつぶれて手に入らなくなってもドライブ自体はたぶん単独でマウントできるでしょう。そういう意味ではちょっと安心です。といいつつ、私自身は2枚目のこのカードを買ってしまったわけですが(980円)。*5

*1:とはいっても自前でパッチをあててビルドしたnetatalkとかsambaとかもあるので、それは追々追随することにする

*2:手順抜けていたので追加

*3:しかし、良く見たら noraid=1でも"Smart mode"になってるな。これって一体何なんだ。ほかにオプションがあるのかな?

*4:Stripingで組んでも性能がほとんど変わらず。読み込みだけが早くなるという・・・内部にバッファももってないから単にStripingしたところでそんなもんだと思うけど

*5:ほかにもエアリア SD-ATA8212-133Rとかいう名前でも出回っているらしいほか、Buffalo社のIFC-AT133RAID-Sも同じ石らしい。ほかにもまだありそうね。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証