一覧 検索 最終更新 改名 | ヘルプ | 最終更新のRSS |

NEC Express5800/110Gd/ATAドライバによるHDD相性問題 のバックアップソース(No.14)

&size(24){''ATA ドライバによる HD ドライブ相性問題''};
~
*目次 [#contents]
#contents
*技術情報 [#techinfo]
Seagate 製 [[Barracuda 7200.7 (160GB):http://www.seagate.com/support/disc/manuals/sata/cuda7200_sata_pm.pdf]] / [[Barracuda 7200.7 Plus (200GB):http://www.seagate.com/support/disc/manuals/ata/cuda7200pm.pdf]] 、日立 (HGST) 製 [[P7K500:http://www.hitachigst.com/portal/site/jp/menuitem.7f60d6528bc4715c21386293eac4f0a0/]] シリーズ等と、Intel 製等の [[ATA ドライバとの相性問題:http://www.hitachigst.com/hddt/knowtree.nsf/cffe836ed7c12018862565b000530c74/b531b8bce8745fb78825740f00580e23?OpenDocument]]が報告されている。
-対象ドライブ
--Seagate: ST3160827AS / ST3160023AS / ST3160021AS 等
--Seagete: ST3200822A / ST3200021A 等
--HGST: HDP7250xxGLA360/380 等

-原因
--LBA28/48bit を動的に切り替えるドライバで、LBA28 でセクタアドレス 0x0FFFFFFF (規格外)を指定した時にエラーとなる。
--HDDの仕様は規格に準拠しているが、ドライバが規格に違反したセクタアドレスを指定する為に発生する。
--純粋にドライバ・ソフトの問題であり、チップセットとは無関係である。

-障害内容
--ビッグ・ドライブ(通常137GB)境界を跨いでFormatするとフリーズする、CHKDSKでエラーになる等。
--[[DiskProbe:http://itaya.corso-b.net/TIPS/DiskProbe/index.html]] にてセクタ 268435455 (0xFFFFFFF) を読むと、エラー/セクタ0と同じ内容/ランダムに内容が変わる等。
--CygwinやUNIX環境では「dd if=/dev/sda bs=512 count=128 skip=268435400 > /dev/null」でエラー?

-対策
--Windows 添付の ATA ドライバ (Vista用AHCI/IDE、XP用IDE)を使用する。
---Windows XP では、BIOS で AHCI を無効にしていれば発生しない。
--[[IMSM (Intel® Matrix Strage Manager):http://www.intel.com/jp/support/chipsets/imsm/index.htm]] 8.0 以降の AHCI ドライバなら修正されている。
バージョン9.xからIRST (Intel® Rapid Storage Technology)に名称が変更された。
---2011年3月現在、Intelのサイトに公開されているIRSTのバージョンは[[10.1.0.1008:http://downloadcenter.intel.com/filter_results.aspx?strTypes=all&ProductID=2101&lang=jpn&strOSs=All]]である。
---IntelサイトのIMSM [[8.2.0.1001:http://downloadcenter.intel.com/Filter_Results.aspx?strOSs=All&strTypes=all&ProductID=2101&OSFullName=&lang=jpn&sType=prev]] には、HDDがスタンバイからのスピンアップ時に、プチ・フリーズ現象が有った。
---ASUSのサイトには、Intelのサイトに存在しない [[8.0.0.1039:ftp://ftp.asus.com/pub/ASUS/misc/utils/IMSM_V8001039_XPVista.zip]] があり、これにはプチ・フリーズ現象は無い。
ASUSが不具合を発見して、Intelに報告したという経緯があるらしい。
--Linux 系では ATA ドライバ (libata) にパッチを当てる。(Kernel v2.6.27 以降で[[修正済みかも?:http://www.linuxhq.com/kernel/v2.6/27/include/linux/ata.h]])
ata.h 内 (block + n_block -1) の -1 を取る。
 static inline int lba_28_ok(u64 block, u32 n_block)
 {
 	/* check the ending block number */
 	return ((block + n_block - 1) < ((u64)1 << 28)) && (n_block <= 256);
 }

--FreeBSD 系では 6.3-Release / 7.0-Release、FreeNAS 系では 0.69Beta 以降で、[[ソースコードが修正されている:http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/dev/ata/ata-all.c#rev1.280]]。
/sys/dev/ata/ata-all.c
 --- src/sys/dev/ata/ata-all.c  2007/02/23 16:25:08     1.279
 +++ src/sys/dev/ata/ata-all.c  2007/10/04 19:17:15     1.280
 @@ -25,7 +25,7 @@
   */
 
  #include <sys/cdefs.h>
 -__FBSDID("$FreeBSD: /usr/local/www/cvsroot/FreeBSD/src/sys/dev/ata/ata-all.c,v 1.279 2007/02/23 16:25:08 jhb Exp $");
 +__FBSDID("$FreeBSD: /usr/local/www/cvsroot/FreeBSD/src/sys/dev/ata/ata-all.c,v 1.280 2007/10/04 19:17:15 sos Exp $");
 
  #include "opt_ata.h"
  #include <sys/param.h>
 @@ -738,7 +738,7 @@ ata_modify_if_48bit(struct ata_request *
 
      atadev->flags &= ~ATA_D_48BIT_ACTIVE;
 
 -    if ((request->u.ata.lba >= ATA_MAX_28BIT_LBA ||
 +    if (((request->u.ata.lba + request->u.ata.count) >= ATA_MAX_28BIT_LBA ||
         request->u.ata.count > 256) &&
        atadev->param.support.command2 & ATA_SUPPORT_ADDRESS48) {

---FreeBSD 系では、2004年10月に Snap Shot で不具合が指摘されたが、正式のRelease版には盛り込まれないという不幸な歴史があった。
/usr/src/sys/dev/ata/ata-lowlevel.c
 --- ata-lowlevel.c.orig Fri Oct 29 12:06:09 2004
 +++ ata-lowlevel.c      Fri Oct 29 12:05:38 2004
 @@ -700,7 +700,7 @@
      ATA_IDX_OUTB(atadev->channel, ATA_ALTSTAT, ATA_A_4BIT);
 
      /* only use 48bit addressing if needed (avoid bugs and overhead) */
 -    if ((lba > 268435455 || count > 256) && atadev->param &&
 +    if ((lba > 268435454 || count > 256) && atadev->param &&
         atadev->param->support.command2 & ATA_SUPPORT_ADDRESS48) {
 
         /* translate command into 48bit version */

*2ch 過去ログ [#log2ch]

[[P7K500問題検証 2:http://pc11.2ch.net/test/read.cgi/jisaku/1206092743/]] &ref(1206092743.html,,html);
[[【format X】P7K500問題検証【CHKDSK X】:http://pc11.2ch.net/test/read.cgi/jisaku/1203690780/]] &ref(1203690780.html,,html);

//*リンク [#link]

//↓ ウイルス対策の為、コメントアウト
//[[AHCI スレ 過去ログ:http://devel.s201.xrea.com/]]

(HTML conversion costs 0.005 sec.)