[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:09576] Re: 8G over disk setup
佐野@浜松です。
-> 武藤@イソターネット協会 さん:
> 結局13.6Gの件ですが、Logicalパーティションを作ると駄目みたいです。
> Logicalパーティションが1024シリンダを超えるところに現れると
> 何かマズいらしく、Physicalパーティションで作ったところ問題が出ませんでした。
後で (1024シリンダを越えるところに書き込もうとした時に) 問題が出る
可能性が高そうです。
Primary パーティションのテーブルは MBR (先頭の 512byte) 内ですが
Logical パーティションのテーブルは Extended パーティションの中の
それぞれの Logical パーティションの前に作られますから、、、
(後はおわかりですよね)
> #でも4つまでしか作れない。。。/varを分けたいのに。
というだけでは済まないでしょう。
> 最初はcfdiskで試し、失敗したので諦めながらfdiskも実行したのでした。
とりあえずインストールできてしまえば sfdisk も使えるので、
BIOS = LARGE, C/H/S=1653/255/63 な状態で 200MByte 程度の
「緊急起動用 root」を作ってしまって (後で何か起きた時にも
役に立つでしょう) そこにとりあえず最小限のシステムを構築
してしまうというのはいかが ?
fdisk は特に大容量 HDD を相手にする時はなるべく使わないように
していったほうが良いでしょう。現時点で知られている問題は無い
みたいですが、コードのメンテがしばらく前から止まっています。
fdisk を 4GB 以上に対応させるパッチを書いた本人が、もうあの
コードで作業するのは嫌だからゼロから作り直したと sfdisk.c の
コメントに書いています。
# 私自身もこれからなるべく sfdisk を使っていこうと思っている
# のですが、まだ bo なので実際には使ったことが無いです。 ^^;;
ただ、 hamm のインストーラディスクには cfdisk と fdisk しか
ありませんから、せめて cfdisk にしましょう。
> 正確には2014MBですね。
> 「hda: Maxtor 91360D8, 2014MB w/256kB Cache, CHS=1653/255/63」
> (LBA起動時)
これを出しているのは、 ide.c の
printk ("%s: %.40s, %ldMB w/%dkB Cache, CHS=%d/%d/%d",
drive->name, id->model, current_capacity(drive)/2048L, id->buf_size/2,
drive->bios_cyl, drive->bios_head, drive->bios_sect);
ですね。これでみると、 current_capacity(drive)/2048L -> 2014
ですからセクター数は 2048*2014 = 4124672 (or +2047) のあたりに
ありそうです。
で、問題なのは、 C*H*S から計算されるセクター数より LBA セクター数と
して HDD から渡されるセクター数が小さい場合には current_capacity() で
if (id->lba_capacity >= capacity) {
drive->cyl = id->lba_capacity / (drive->head * drive->sect);
capacity = id->lba_capacity;
drive->select.b.lba = 1;
}
に該当せず、 drive->select.b.lba = 0 のままになってしまうことですね。
このフラッグが 1 にならないと、 do_rw_disk() のコメントにあるように
READ/WRITE で LBA アクセスではなく CHS アクセスが使われます。
この時 IDE コントローラが 1024 を越えるシリンダへのアクセスを
ちゃんと HDD に伝えてくれれば良いですが、マザーボードによっては
それをしない場合もあるような、、、 (普通はそういう HDD なら LBA
アクセスを使うからという理由なのかもしれませんが)
/*
* do_rw_disk() issues READ and WRITE commands to a disk,
* using LBA if supported, or CHS otherwise, to address sectors.
* It also takes care of issuing special DRIVE_CMDs.
*/
既に鍋谷@阪大さんが
| この意味ありげな 2014 という数字は、ハードディスクのジャンパ
| の設定が関係あるかもしれません。ジャンパの設定で、わざと 2GB
| しか認識させないセーフモードがあったりします。
と書かれていましたが、私もこの可能性が高いと思います。このせいで
LBA アクセスできなくなっているのではないでしょうか。
「緊急用 root 」へ最小限のシステムをインストールしてから、
hdparm をインストールして hdparm -i /dev/hda で確認してみて
下さい。 ( hdparm には -g や -v などのオプションもあります)
> LBAの状態でディスクを空にした状態で
> cfdisk -P s /dev/hda
> # Type FirstSector LastSector Offset Length Filesystem Type (ID) Flags
> ----------------------------------------------------------------------
> Pri/Log 0 26555444 0#2655445 Free Space
> None(00)
> です。cfdisk -P tだと全部0ですね(空にしてるから当然か)。
cfdisk.c のコードを見ましたが、ここで LastSector / Length として
表示している数値は clear_p_info() の中で C/H/S から計算していますね。
やはりカーネル起動時の 2014MB に相当するセクター数しか HDD から
渡されていないのではないかと思います。 hdparm -i /dev/hda の結果を
見ればセクター数が確認できます。
> ディスクパーティションの書き込みに失敗してしまうと
> FATAL ERROR: Cannot read disk drive
> となってしまってcfdiskでの調査は出来ませんです。
cfdisk -z /dev/hda で起動することは可能ですか ?
> Debian 2.0インストーラから起動したddでは
> dd if=/dev/zero of=/dev/hda bs=512 count=1
> はUsageが出てきてしまって動きませんでした。
> 他にMBRをクリアする良い方法はありますか?
> MS-DOSのFDISKだとどうなるんだろう…。
笹山さんの書かれたとおりリダイレクトして
dd bs=512 count=1 </dev/zero >/dev/hda としてみては ?
# レスキューディスクの root.bin をループバックでマウントして
# ls -i bin すると dd は cat, ls, cp, date など他の 28 の
# コマンドとハードリンクされていることがわかりますね。
> うー、これはちと辛いですね。すぐに使えるLinux環境はノート
> しかないのです。
とりあえずトラブル対策用に「緊急用ルート」を作ったほうが
インストールディスクだけでどうにかしようとするより何かと便利
でしょうし、早道だったりするかもしれませんよ。
LBA アクセスできるようになっても C/H/S が変更されなければ
そのまま使えるかもしれませんし、もしアクセス方法の変更でその
パーティションが使えなくなったとしても、その時点でトラブル
対策の必要も無くなっているわけですから問題無いでしょう。
> sano> MBR を dd でゼロクリアして、 cfdisk -z /dev/hda または
> sano> cfdisk -z -c 1653 -h 255 -s 63 /dev/hda で cfdisk を起動すれば
> sano> パーティション設定後 W で書き込みできたりしませんか ?
> dd がうまく出来ないのが問題なのかもしれませんが、
> どちらを試してもやはりFATAL ERRORが出てしまうようです。うーん。
HDD に LBA アクセスできないのが原因だとすれば、 1024 シリンダを
越える領域に書き込みできないのは仕方無いですね。
ジャンパーの設定で LBA capacity を本来の値に変更できれば
良いのでしょうが、もしできなければカーネルにパッチを当てる
必要があるかもしれません。 LBA を使うかどうかの制御は
ブートオプションではできないみたいですから。
あるいは、マザーボードを交換してみるか、、、
--
public: <xlj06203@xxxxxxxxxxx>
office: <sano@xxxxxxxxxxxxxxxxxxxxxxxxxx>