ぴょぴょぴょ? - Linuxとかプログラミングの覚え書き - このページをアンテナに追加 RSSフィード

2010-06-26

PCがHDD容量を誤認識する場合の対処方法

|  PCがHDD容量を誤認識する場合の対処方法を含むブックマーク  PCがHDD容量を誤認識する場合の対処方法のブックマークコメント

HDD関連のトラブルとして、HDD容量が正しく認識されない、という類の事故があります。たとえば

  • 新品の1TBのHDDなのに、BIOSとかOSは33MBのHDDとして認識している。初期不良?相性問題?
  • 普段使っているHDDを外して、別PCにつないだら、HDD容量を正しく認識しなくなった。HDDこわれた?
  • いつも使っているHDDが突然認識されなくなった。BIOSの画面で確認するとHDD容量が大幅に減っているように見える。データ消失

といったものです。

この手のトラブルは、実は簡単に復旧できる場合が多いです。知ってて損は無い情報なので、以下原因と復旧方法を説明します。

HPA (Hidden Protected Area)

HDDにはHPAと呼ばれる、隠し領域*1が設定できます。HPAとして設定した領域は、BIOSから無視され、OSからもアクセスすることはできません。通常の使い方だと、例えばノートPCリカバリ用のファイルを置く領域がHPAになっていたりします。

そして

といったキッカケでHPA勝手に設定されると、前述の"HDD容量が正しく認識されない系"のトラブルが発生します。

このような場合は、以下の手順で HPA を無効にするだけで復旧できます。

Step-1) HPA領域の確認

KNOPPIX等の適当LinuxPCブートして、 hdparm コマンドHPA の設定状況を調べます。

$ sudo hdparm  -N /dev/sdb
/dev/sdb:
 max sectors   = 65134/1953525168, HPA is enabled

このように "HPA is enabled"とでれば HPA が有効になっていて、隠し領域が設定されています。上記の例だと、1953525168セクタ中 65134セクタだけが利用できる状態で、残りのセクタOSからも BIOSからも見えません。

HPAが設定されると、 fdisk コマンドの出力も、以下のようになります。

$ LANG=C sudo /sbin/fdisk -l /dev/sdb

Disk /dev/sdb: 33 MB, 33348608 bytes
255 heads, 63 sectors/track, 4 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: ********

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1       60000   481949968+  83  Linux
Partition 1 has different physical/logical endings:
     phys=(1023, 254, 63) logical=(59999, 254, 63)
/dev/sdb2           60001      121601   494810032+  83  Linux
Partition 2 has different physical/logical beginnings (non-Linux?):
     phys=(1023, 254, 63) logical=(60000, 0, 1)
Partition 2 has different physical/logical endings:
     phys=(1023, 254, 63) logical=(121600, 254, 63)

この例だと、HDD自体は1TBあるのですが、HPAが設定されているため、先頭の33MBしか見えない状況になっています。

この場合HPAの設定を削除するだけで、正常な状態に戻ります。

Step-2) HPAの削除

hdparamコマンドいっぱつです。これで、HPAが無効になります。

$ sudo hdparm  -N -p1953525168  /dev/sdb/dev/sdb:
 setting max visible sectors to 1953525168 (permanent)
 max sectors   = 1953525168/1953525168, HPA is disabled

あとはPC再起動するだけです。簡単ですね。

2010/07/22 追記その1

hdparmの-N オプションの詳細については、

http://manpages.ubuntu.com/manpages/jaunty/man8/hdparm.8.html

あたりをご覧ください。

2010/07/22 追記その2

上記のLinuxを使う方法以外に、

HDAT2というソフトを使ってHPAエリアの削除→HPA無効化を設定

する方法もあるとのことです。

コメントをくださった、まさむねさん、ありがとうございました。

*1:隠しセクタとか隠しパーティションと呼ぶ場合もあります。

まさむねまさむね 2010/07/20 19:13 はじめまして。
先日購入したHDDがまさにこの記事と同じ現象になってしまいました。1TBなのに33MBしか認識してくれません。
いろいろネットで調べてるんですが
解決に値するページはここ以外ない感じです。
しかし、私はLinuxに関しては全くの初心者ですし
書いてある通りにやっていくしか、なかなかできない状態です。
Kinoppix601日本語版をダウンロードして試そうとしても
hdparmが見つからず、hdparmをダウンロードしてインストールしようにも今度はmakeコマンドが見つからず・・・。
結局puppylinuxにはインストールされてるようで、やっと実行しようとしましたが
今度は-Nのオプションがどう探しても見つかりません。
hdparmコマンドの説明のページを見ても -N オプションについては記載されてません。海外のサイトでも見つけれませんでした。
慣れないLinuxな為か何をやってもうまくいかず
ちょっと途方にくれてる感じです。
こちらはお願いしかできませんが
何か解決に向けてアドバイスなどありましたら教えてくださると大変助かります。
コマンド一つ叩くのも簡単ではありませんね…;;

まさむねまさむね 2010/07/21 14:33 半泣きでしたが何とか復旧できました。
HDAT2というソフトを使ってHPAエリアの削除→HPA無効化を設定できました。
TestDiskを利用してCHSも設定しなおしてもう大丈夫と思っていたところ
BIOSがCHSを勝手に書き換えていたことが判明。
シリンダ数も最大65535までしか認識できず
結局セクタ数で帳尻合わせして1TBが無事使用できてるようです。
コメント欄汚し、そして一人であたふたして申し訳ありませんでした〜^^;

pyopyopyopyopyopyo 2010/07/22 01:44 "-N"オプションについては、hdparmのversion 9.27であればマニュアルに記載があります。ただ日本語への翻訳が追いついていないようで、英語版マニュアルを見る必要があります。

あとLinuxを使う方法以外にも、HDAT2というソフトを使う方法がある、ということですね。それはそれで貴重な情報です。本文にも追記しておきますね。ありがとうございました。

saijyoh_739saijyoh_739 2011/06/05 15:14 PuppyLinux 4.3.1に入っているhtparmはv7.7なので、その機能は持ってませんよ。

# hdparm -v 2>&1 | head -2 | tail -1
hdparm - get/set hard disk parameters - version v7.7
# hdparm -V
hdparm v7.7

makeは開発用パッケージを入れないと使えないLinuxが多いのでソフトの構築・再構築する場合には必要に応じて開発パッケージを導入する必要があります。

トラックバック - http://d.hatena.ne.jp/pyopyopyo/20100626/p1
リンク元