PC-9821/9801シリーズ用 FDISKに代わるディスク管理ツール

「fdsk98」 バージョン0.92

Copyright (C) 2021 まりも

1.はじめに

 Windows 9xのFDISKコマンドやMS-DOS 5,6のformat /h コマンドは、それらが登場した時代にはなかった大容量ストレージに適用すると、さまざまな問題が発生し、まともには使用できません。また仕様上、FAT以外のファイルシステムの領域の解放や属性変更ができないなどの制約があります。たとえば以下のようなことです。

 こうしたことから、Windows9x のDOSモードのFDISKに代わるディスク領域管理ツールが必要とされていました。FDISK後に実行するWindows用FORMATコマンドについては、不都合があまりに大きかったので、代替品として "formatX" というものを2001年から作ってありましたが、FDISKの代替となるものがこれまでずっと存在していませんでした。

 本ツールでは、領域の新規作成、削除、ディスクボリウム全体の消去、 98形式フォーマットがただしく行えるようにしました。 またPC-98上でいながら、PC/AT FDISK形式(Vista/7以降の仕様)のフォーマット やその領域の作成、削除もできるようにしました。

 本ツール fdsk98 は、こうしたFDISKの問題を解消するだけでなく、領域管理に関連する機能をまとめることで、わたしが過去に公開した以下の関連ツールの統合をはかっています(これらは今後削除の予定)。

2.使い方

2.0 準備

 アーカイブを解凍すると、次のファイルがあります。

その他に、以下のいずれか1つのファイルを各自で用意する必要があります。

 これらは固定ディスク起動メニュー(または相当のもの)が含まれるものです。 固定ディスク起動メニューはNECの著作物であり、ブートローダはKATO Takenori 氏の著作物ですので、本プログラムには初期状態では含むことができません。このため、上記のファイルのいずれかから抽出してそれをfdsk98に取り込んで使うという方式をとっています。カレントディレクトリに上記のいずれかを置いた状態にしてください。

2.1 SetFdskの適用

 カレントディレクトリに上記のいずれかと 未処理のfdsk98.exeを置いた状態で、 SetFdskを実行します。すると固定ディスク起動メニューのコードが抽出されて取り込まれます。HDFORMATまたはDISKINITを読み込んだ場合には、
  ディスク番号表記を#0から始まるようにしますか?(y/n)  

という問いが出ます。ここで y で答えると、固定ディスク起動メニューの起動時に表示されるディスクの番号が、#0から始まるようになります。SCSIの場合、そのID番号と#番号とが一致するようになります。このようなイメージです。このほうが勘違いによる誤操作を起こしにくくなるので個人的には推奨しますが、変更されるのは困るという方は n で答えてください。 バージョン0.88からはさらにカスタマイズできる機能があります(詳細は 4.を参照)。

 なお、この初期設定処理を行わない状態でも fdsk98 は使用できます。ただし毎回警告が出るほか、ブートのためのコードがないわけですから、この状態で98形式フォーマットを適用してもブートできるようになりません(他のブートできる環境から認識はおそらくできます)。初期設定済みのfdsk98.exeのファイルのタイムスタンプはもとと同じです。タイプスタンプでは区別つきません。

2.2 実行開始

 fdsk98を実行するとBIOS管理下にある接続ディスクドライブの一覧が出ます。ディスクドライブの名称は「内蔵固定n台目」、あるいは「SCSI固定 ID=n」といった表記になります。[DA/UA]の値はその識別のための番地です。物理的なディスクドライブがどれになるかは容量などで判断してください。先頭に「*」アスタリスクがついているのは、そのディスクドライブからブートしたことを示します。間違って起動ドライブを初期化したりしないように表示しています。フロッピードライブからDOSを起動している場合にはアスタリスクはつきません。なおこのツールでは容量表記は情報単位のメガバイトをMBと書いていますが、MiBと書くのと同じ意味で使用しています。

 その右の「ドライブ文字」と書かれている欄は、そのディスクドライブの領域にMS-DOSが現在割り当てているドライブ文字を示しています。最大4個までの表示となります。意図したディスクドライブでないものにボリウム初期化や領域解放をしないよう、バージョン0.85からこれを表示するようにしました。なおMS-DOS 3.10以前のDOSではこの機能に対応しないので空白となります。FreeDOS(98)ではこの機能の基になるファンクションはサポートされているはずです。PC/AT FDISK形式のディスクドライブでも空白です。DOSドライブレター割り当て中のディスクドライブをボリウム初期化しても、再起動しない限りこの表示は残りますので注意してください。

 その右の「形式」の項目は、通常次のいずれかです。

 「DISK署名」はPC-98とPC/ATとでは該当する場所が異なる情報ですが、タイプを識別のうえ表示しています。DOSやWindows 9x,NTで使っている限りはディスク署名の値は" --- "または"(未署名)"となっていますが、Windows2000稼働機に接続した履歴があると特定の値になり、通常ずっとそのままです。

 「C/H/S」は DISK BIOSの返すシリンダ/ヘッド/セクタ数のことです。LenはBIOSが返すセクタ長で、通常は512バイトですが、256バイトの場合もあります。本ツールは基本的に512バイトのディスクドライブに対応します。256バイトのものでは確保容量が2047MB以上のときまたはFAT32のときに動作結果がどうなるか不明です(そもそもWindows が対応していないため)。

2.3 最初のコマンドメニュー

 ディスクドライブ一覧から、管理を行いたい対象のものを1つ選ぶと、
  「ディスク管理領域のコマンドを←→キーで選択し,ENTERを押してください.[ESC]で終了.  
と表示され、その次の行に
  装置選択に戻る  領域確保  領域解放  領域状態変更  ボリウム管理  
と表示されます。これらのうちからコマンドをひとつ選んでください。デフォルトは領域確保です。

2.4 ボリウム管理

「ボリウム管理」を選ぶと、その次の行に
  IPL・起動メニュー更新  フォーマット形式初期化  ディスク署名変更 戻る  

と表示されます。これらは領域の有無に関係なくボリウム全体の属性を変更するものです。デフォルトの「フォーマット形式初期化」を選ぶと、またメニューが出ます。
  フォーマット形式を←→キーで選択後,ENTERを押してください.  

次の行には
  PC/AT FDISK形式フォーマット  NEC PC-98形式フォーマット  未使用状態にする  

の3つの選択肢が表示されます。「未使用状態にする」とはディスクドライブの 先頭部にゼロを埋めてまっさらな状態にするものです。これで通常はどんなシステムも入っていないとみなされるようになります。「PC/AT FDISK形式フォーマット」を選ぶと、98上にもかかわらず、PC/ATのMBR形式 のディスク管理となります。後述するように領域の確保や削除もMBR形式として扱います。

 ただしMBR形式の管理といっても、Windows Vista/7 以降の新方式に基づくものとなります。2000年頃以前のCHSパーティション管理方式に対応したパーティション 境界にはなっていませんので、古いPC、古いOSを使う際にはご注意ください。

 通常は「NEC PC-98形式フォーマット」を選ぶことで、98で起動可能なディスクフォーマットとなります。

 これ以降に進むと、以前のデータは消されてしまいますのでご注意ください。 数行上に「選択中」とあるディスクドライブでよいのかを確認してからYを押してください。いずれの3タイプでも初期化が済むとキー押しを促すメッセージが出ます。そこでキーを押すと、実行開始時点のドライブ一覧に戻ります。

 「IPL・起動メニュー更新」は、領域の情報は保持したまま、IPLコードと、PC-98の場合は固定ディスク起動メニュー(またはブートローダ)のコードが更新されます。これらがなにかの理由で壊れた際の復旧用です。起動メニューの書き直しにより「IPLware」も入れ直しということになりますのでご注意下さい。 バージョン0.70からは「IPLwareアプリケーション」が既に存在している場合には、起動メニューの書き換えがあってもIPLwareを保持するようにしました。ただしIPLwareと互換性のない(内部リビジョンンが古いDOSに付属の)起動メニュー(バージョン2.60以前)を初期設定で入れてしまった場合には、IPLwareも固定ディスク起動メニューも起動しなくなる可能性があります。

 PC/ATの場合はもともと入っていたIPLコードが本ツール内蔵のものと置き換わることになりますので、基本的には適用してはいけません。PC/ATでは使用するOSの世代によってさまざまなIPLがあり、不用意に更新するとOSが起動できなくなります。たとえばLinuxをインストールしてあるディスクドライブでは適用してはいけません。

 「ディスク署名変更」はそのとおりの機能です。Windows 2000が物理ディスクの識別に必要な署名は、通常は絶対に変更してはいけないものですから不用意に変更を試さないでください。署名を初期化(ゼロ)にしなければならない状況というのは、(1)丸ごとディスクをコピーした結果同一の署名のものが複数あるので片方を初期化したい場合、(2)同一署名値が複数ある状態でWindows2000を誤って起動させたため、片方のディスクの署名が変化し、起動できなくなった場合、だけです。詳しくはこちらの文書を参照してください。

2.5 領域管理

 PC-98形式でフォーマットされているディスクドライブを選択すると、
  ディスク管理領域のコマンドを←→キーで選択し,ENTERを押してください.[ESC]で終了.  

と表示され、その次の行に
  装置選択に戻る  領域確保  領域解放  領域状態変更  ボリウム管理  

と表示されます。ここでデフォルトの領域確保を選ぶと、パーティションと空きエリアの混ざったリストが表示されます。空きエリアは複数に分散している場合もあります。↑↓キーでいずれかの空きエリアを選びENTERを押すと、
  確保したい容量(単位MiB)を入力してください==>  
と促されます。 ここで6桁までの10進数で容量を指定してENTERを押してください。容量は基本的には1MB単位ですが、32253MBを超える大容量のディスクドライブでは、BIOSの管理する1シリンダのバイト数が1MBを超えてしまうことから、1MBよりも粗い単位となります。このため指定した容量よりも小さい値で切られることがあります。小さすぎる値を指定すると、受け付けず、再度入力を要求されます。入力を省略してENTERを押すこともできます。省略の場合や、0を入力した場合、可能な容量よりも大きな値を指定した場合は、その可能最大の容量と解釈します。

 確保容量が512MB以上となる場合は
  ファイルシステム(FAT)形式を←→キーで選択後,ENTERを押してください.  

と表示されます。FAT16/12とFAT32が選べるわけです。ただし2048MB以上の領域ではFAT16/12を選んだとしても強制的にFAT32の属性になります。また512MB未満ではこの選択肢は出ずに強制的にFAT16となります。FAT12となるのは確保容量が10MB以下 となった場合のみです。

 続いて98形式の場合には、領域名の入力になります。任意の半角16文字相当までの名前を指定できます。入力を省略してENTERを押すこともできます。その場合は、「MS-DOS x.xx」という、現在のDOSバージョンの数値が入った名前となります。

 領域確保に成功すると、パーティションの再表示が行われますので、いま作ったものが存在するか確認してください。引き続き同じコマンドメニューとなります。領域確保をキャンセルしたりエラーが出た場合もそこに戻ります。この状態から領域確保を連続で行ったり、次に述べるように領域を解放することもできます。

「領域解放」を選択すると、領域一覧のプルダウンメニューが出ますので、黄色反転しているカーソルを↑↓キーで動かし、対象パーティションを選択してください。
   変更結果を書き込みます.よろしいですか(y/n)  

と確認が出ます。yを押すと削除が実行されます。nを押すと初期のディスクドライブ選択まで戻ります。yを押すと再びディスク管理コマンド選択のメニューに戻るので続けて領域解放はできます。

2.6 領域状態変更

 ここで「領域状態変更」を選択すると、パーティションの再表示が行われ、次の行に
  装置選択に戻る  アクティブ切替  ブート可切替  領域名変更  FSIDの直接変更  

 という選択肢が出ます。アクティブやブート可属性の切り替えは、NECのDOSのformatコマンドにもあったのと同じ機能ですが、FAT以外の領域にも適用できます。黄色反転のカーソルで選んだパーティションでENTERを押すと、属性のところの[A]がトグル操作で変化します。[A]のときアクティブ、[ ]空欄のとき非アクティブです。ブート可否についても同様ですが[B]という表示になります。

 領域名変更を選択すると、領域名を入力してくださいと出ますので、最大16バイトの文字列を入力してください。16文字以上は切られるだけでなく、20文字以上の長さを入力すると異常動作の原因となるので注意してください。入力後ENTERを押すとパーティションの再表示がなされ、領域名が変化していることがわかります。いずれにしても領域状態変更を行った後は、初期のディスクドライブ選択に戻ります。

 なおFSIDの直接変更というのは、98のシステムに相当詳しい方以外は選ばないでください。パーティション表示の右端でFileSystem と書かれている16進数2桁の数値がFSIDで、ファイルシステムの種別を意味します。例えばFAT16はA1, FAT32はE1が標準です。領域の解放と確保を行わずに領域のファイルシステムを変更したいような場合だけに使用してください。

2.7 動作の中断

 コマンド待ちのときにESCキーを押すと、そのコマンドを取消して、1つ前のメニュー階層に戻るか、プログラム実行をすぐに中断するかします。yes/noを尋ねられるときは、nまたはESCを押せばその処理はキャンセルされます。いまのバージョンでは処理時間の長い機能のものはありません。ESCキーはすぐに反応します。

2.8 領域確保後のフォーマットについて

・FAT16では領域確保後のフォーマットは「基本的には」必要ありません

・FAT12とFAT32ではそれが必要となります(領域確保時に注意表示が出ます)

 Windows9xではFDISK とformatが別々で、FDISKでは、領域確保だけをおこない、一旦再起動後に、ドライブ文字が確定し、そのドライブの中身のフォーマットは format.comに任せていました。本ツールもこれを踏襲しており、FAT12とFAT32では別のフォーマットツールである 「formatx」 を直後に実行することでフォーマットが完成します。またはいったん再起動後にWindows 9x付属のformat.comを適用することもできます(容量が過大でないかぎり)。

 この仕様はMS-DOS 5〜6の format /h を知っている人には不便に思えますので、FAT16の領域については、領域の確保と同時にフォーマットも行っています。再起動後にすぐ認識できます。

 しかしFAT16でも formatx でフォーマットしたほうがよい場合があります。MS-DOS 3.30では、容量が65〜128MBのときには特別なFAT16フォーマットとなっていました。これは物理セクタ長をみかけ2048バイトにして扱うことでセクタ数16bitの範囲内で扱うことができるフォーマットです。ところがMS-DOS 5.0やそれ以降のDOSではあまり都合の良い形式とは言えません。Windows9xでは認識が危うくなります。そのため本ツールではこのフォーマットを行いません。MS-DOS 3.30でこの容量帯の認識ができるようにしたい場合は、formatx で /h オプションを指定して対象領域をフォーマットしなおして下さい。

 容量11MB〜64MBについても、DOSのformat /hではルートディクトリの個数上限が 大きく確保できるという違いがあります。その必要がある場合も formatx /h で フォーマットしてください。

2.9 シリンダ表示モード

 起動時コマンドラインオプションとして -c をつけると、98形式のディスクドライブについては、シリンダ単位で扱うことができるようになります。 オプション文字は/ でも構いませんし cは大文字でも構いません。

 まず領域の開始・終了アドレスが十進数のシリンダ番号表記になります。領域確保時の入力では、開始と終了のシリンダ番号が尋ねられます。なお終了シリンダ番号は実は本当の終了シリンダ番号+1を示しています。ある領域の終了とひとつ後ろの領域の開始とが同じ値に表示されても、重複はなく、心配要りません。終了よりも終了+1のほうがプログラム上は扱いやすいため、そのようにしているだけです。

 PC/AT FDISK形式の場合にはシリンダ表示モードは機能しません。

 バージョン0.6〜0.89のシリンダ表示モードではFAT16が正しくフォーマットされていませんでした(formatxを適用すれば問題ない)。

3.諸注意

・fdsk98.exeの圧縮(lzexe,diet,exepackなどの適用)をしないでください。
初期設定時に起動メニューを取り込む位置がわからなくなってしまうためです。初期設定をしたあとは圧縮しても構いませんが、そのことを忘れないようにしてください。

・Conv98AT適用のディスクドライブは、本ツールでは98形式として扱われます。
PC/ATFDISK形式としては扱えません。

・自動起動の設定は、領域確保、領域解放を行うと、リセットされます。固定ディスク起動メニュー実行時に改めて設定しなおしてください。

・PC/AT FDISK形式で領域確保しても、98上のDOSからはアクセスできません。
DOSではデバイスドライバが必要ですが、FAT32まで対応の適当なデバイスドライバが存在していないと思います。Windowsでは概ねアクセスできます(Windowsのバージョンごとに扱い方が異なりますが)。

・FreeBSD(98)のブートセレクタのバイナリ FreeBSD.MBRの入手先は以下のところです。
https://drive.google.com/drive/folders/1BZ7b4an5o_EI9lKoyU6RzOlsZ4AADlFJ
FreeBSD.MBRは98形式のディスクドライブの先頭から9216バイト程度をファイル化しただけのものですので、別のIPLやブートセレクタでも、同じイメージでこのファイル名にして置いておけば、fdsk98に組み込むことができます。

・最小容量単位は BIOSの1シリンダのサイズに依存します。
例えば H:Sが255:255のときは32MB以下の容量値を指定することができません。

・コンパクトフラッシュ(CF)のドライブについて。
98のIDEドライブとしてCFを使用した場合、大抵の物はまともに動作しません。「CFリセット」という事象を引き起こします。これはフォーマット中にも起こり得ます。またHDDと互換性が高いはずのSSDでも、一部のATAコマンドを実装していないことから、98のIDE接続で使用不可能なものが存在しています。ご注意下さい。

・セクタ長256バイトのディスクドライブには極力使用しないでください。
何が起こるかわかりません。NECおよびMicrosoftによってもともと仕様が定義されていことが多々あるためです。(4.3GB以上の対応、ディスク署名、FAT32など)

・多数のディスクドライブにわたって連続操作で領域の確保と解放を繰り返したあとに、万一、領域名や領域のアドレス範囲に異常な値が表示されるようになった場合は、ESCを押して即時中止してください。その状況でディスクに書き込むと全損となります。領域管理操作は、必要最小限のオペレーションとし、その都度プロフラムを一旦終了させたほうが安全です。

3.1 既知の問題(2021-4-20追記)

 パーティションテーブルが想定外の状態のときの処理が厳重ではありません。このためもともとパーティションテーブルに以下のような異常があると、おかしな動作となります。そのまま領域の削除・確保を行うと、その操作に失敗するのではなく、パーティションテーブルが全壊となる恐れがあります。もしそのような状態となった場合はESCを押して操作回避してください。パーティションテーブルが正常なら起こらないのでバグとはしません。なおここで言う「アドレス」はシリンダ番地ですが、ディスクのBIOS C:H:S パラメータによって変動するアドレスです。

・ディスクアドレスがシリンダ単位の境界でない(端数のヘッド、セクタ番地がある)場合
・パーティションテーブル格納順がアドレス昇順でない場合
・複数のパーティションで占有アドレスに重複がある場合
・パーティション間に微少容量のギャップがある場合(十分大きな空きなら無問題)
・ディスク容量が最終領域の最後のアドレスよりも小さい場合

とくに4,5番目の状態は容易に起こりえます。DISK BIOSのCHSパラメータが変動したときです。SCSIアダプタのつなぎ替え、拙作ソフト併用ではIDEでEXIDE32Gの設定忘れ、EXIDE**のパラメータモード変更などを行うと起こります。

4.SETFDSKによる設定

 バージョン0.88より設定できる項目が追加されました。ディスクドライブや領域の表示ウィンドウの枠に丸みを持たせたり、色を変えることができます。Setfdsk.exeと fdsk98.exe の両方のバージョンが 0.88 以上の場合に機能します。バージョン不一致の場合でも、設定できないだけでとくに問題はありません。

5.お約束

 このソフトウェアは、フリーソフトウェアです。コピーすることは自由です。但し使用するためには下記のことに十分留意して下さい。

 プログラムは、ある程度のテストを経て公開していますが、動作が完璧に 行なわれるということを、作者は保証するものではありません。またユーザの誤操作も想定されます。領域のデータが消えた、ハードディスクから起動できなくなった、などのトラブルには一切応じないものとします。

 システムが起動しなくなったことにや、それに付随した逸失利益、精神的 損害について、FDSK98の作者である私は、一切責任は負わないものとします。これらの点を了承できない方には、使用(ソースファイル含む)を認めません。

 このソフトウェアを、不特定多数のダウンロードできる場所へ無断転載することは、いっさい禁止とします。

        まりも(DOSsoft) 連絡先メールアドレスはホームページ上で

■ 更新履歴

2021-01-25 0.50 formatx依存版 新規作成・公開
2021-01-26 0.60 256B/sへの対応、起動メニューを勝手に更新してしまうバグを修正
         SetfdskがHDMENU.EXEからデータを見つけられなかったのを修正
2021-01-27 0.70 起動メニュー更新時にIPLwareを抹消せず飛び先を保つようにした
2021-01-27 0.71 setfdsk.exeでの設定が一度だけしかできなかったのを修正
2021-01-28 0.80 指定容量より必ずしも1MB減らないように変更
         256B/sのときPC/AT FDISK形式フォーマットをしないようにした
         FreeBSD.MBRのデータをディスク署名まで読んでしまうバグを修正
2021-01-29 0.81 領域確保・解放時に自動起動をリセットとする、無署名時の表示の変更
2021-01-30 0.85 ディスクドライブ一覧に、割当中のDOSドライブ文字を表示するようにした。
2021-02-01 0.86 Win2000ディスク署名が変更できないことがあったのを修正
2021-02-06 0.87 98依存全角文字罫線を使わないように、シリンダ番号を10進数表示にした
2021-02-07 0.88 領域確保時シリンダ番号入力が10進数でなかったバグを修正、setfdsk機能追加
2021-02-07 0.89 フォーマット形式初期化がディスクに反映されないバグ(0.86から?)を修正
2021-02-08 0.90 シリンダ番号指定のフォーマットはこのバージョンから正式対応とする
         (〜0.89までは領域は確保されても中身が正しくフォーマットされない)
2021-02-08 0.91 メモリリークのため終了時ハングアップする可能性があったのを修正
2021-02-09 0.92 IPL更新ができていなかったのを修正,初期化時はIPLwareを引継がない仕様に変更

[戻る]