リロード | 新規新規 編集編集 差分差分 添付添付 バックアップバックアップ | 一覧 検索 最終更新 凍結 複製 改名 | ヘルプ | 最終更新のRSS |

 
ATAドライバによるHDD相性問題 
http://wiki.nothing.sh/1915.html

█ ATAドライバによるHDD相性問題

Last-modified: 2012-05-06 (日) 08:50:50 / Short URL: http://wiki.nothing.sh/1915.html / add to hatena bookmark 1(1) users / add to livedoor clip - users

ATA ドライバによる HD ドライブ相性問題

目次

技術情報

Seagate 製 Barracuda 7200.7 (160GB) / Barracuda 7200.7 Plus (200GB) 、日立 (HGST) 製 P7K500 シリーズ等と、Intel 製等の ATA ドライバとの相性問題が報告されている。

  • 対象ドライブ
    • Seagate: ST3160827AS / ST3160023AS / ST3160021AS 等
    • Seagete: ST3200822A / ST3200021A 等
    • HGST: HDP7250xxGLA360/380 等
  • 原因
    • LBA28/48bit を動的に切り替えるドライバで、LBA28 でセクタアドレス 0x0FFFFFFF (規格外)を指定した時にエラーとなる。
    • HDDの仕様は規格に準拠しているが、ドライバが規格に違反したセクタアドレスを指定する為に発生する。
    • 純粋にドライバ・ソフトの問題であり、チップセットとは無関係である。
  • 障害内容
    • ビッグ・ドライブ(通常137GB)境界を跨いでFormatするとフリーズする、CHKDSKでエラーになる等。
    • DiskProbe にてセクタ 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) 8.0 以降の AHCI ドライバなら修正されている。
      バージョン9.xからIRST (Intel® Rapid Storage Technology)に名称が変更された。
      • 2012年2月現在、Intelのサイトに公開されているIRSTのバージョンは10.8.0.1003である。
      • IntelサイトのIMSM 8.2.0.1001 には、HDDがスタンバイからのスピンアップ時に、プチ・フリーズ現象が有った。
      • ASUSのサイトには、Intelのサイトに存在しない 8.0.0.1039 があり、これにはプチ・フリーズ現象は無い。
        ASUSが不具合を発見して、Intelに報告したという経緯があるらしい。
    • Linux 系では ATA ドライバ (libata) にパッチを当てる。(Kernel v2.6.27 以降で修正済みかも?)
      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 以降で、ソースコードが修正されている
    /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 過去ログ

P7K500問題検証 2 filehtml
【format X】P7K500問題検証【CHKDSK X】 filehtml


添付ファイル: file1206092743.html 4581件 [詳細] file1203690780.html 3922件 [詳細]
(HTML conversion costs 0.024 sec.)