最近、2件続けて読めなくなったMO(光磁気ディスク)の修復に取り組む機会があり、MOのファイルシステムについて、いくつか調べてわかったことをここにまとめておきます。なお、MOの解析および修復にはshifuji氏制作のフリーソフト「MOデバッガー」を利用させていただきました。便利なツールを開発された氏に感謝します。
| LBA(16進数) | ブロック数 | 内容(クリックでダンプ表示) | 補足 |
|---|---|---|---|
| 0000 | 1 | IPL | ブートローダ |
| 0001〜00DA | 218 | FAT | ブロック使用状況 |
| 00DB〜01B4 | 218 | 予備FAT | (上記backup) |
| 01B5〜01D4 | 32 | ルートディレクトリ | ファイル名、サイズ、作成日など |
| 01D5〜01DC | 8 | ファイル本体 | program.htm |
| 01DD〜01E4 | 8 | サブディレクトリ | test |
| 01E5〜0294 | 176 | ファイル本体 | test内のgazou.jpg |
| 0295〜029C | 8 | ファイル本体 | 制御pro.asm |
![]() | FATは8ブロック単位(512×8=4096バイト)を1クラスタとし、各クラスタの使用状況を順に2バイトのコードで示します。 図の最初のコードFFF8(MO上の記録は86系おなじみのローバイト、ハイバイトの順)は先頭ブロックのサイン。以下は第1クラスタ(ルートディレクトリのエリア)、第2クラスタ(上記program.htmの記録エリア)、第3クラスタと順に使用状況、すなわち、FFFFは終了クラスタ(そのクラスタでファイルが完結していることを意味します)、それ以外は継続するクラスタの番号を示しています。 たとえば、コード0005はそのクラスタのファイルの続きが第5クラスタにあることを示し、第4クラスタから始まるファイルが0005,0006,…,0019クラスタまで続くことがわかります。なお、0000は未使用領域であることを示します。 |
![]() | ルートディレクトリにはファイル名、ファイルの種類、作成年月日・時分やファイルの所在場所(先頭クラスタ番号)、サイズなどが記録されています。左図はその主な様子を示します。 ファイルprogram.htmについてみると、種類はコード20(通常の読み書き可能なファイルを示す)、先頭クラスタ番号が0002、ファイルサイズが(00000BEF)16=3055バイトであることがわかります。2つ目のtestについては、種類が10(サブディレクトリを意味します)、先頭クラスタが0003、ファイルサイズはディレクトリなので0になっています。3つ目は「制御pro.asm」のようにファイル名に全角文字を含む場合で、ディレクトリ情報エリアを倍取り、長いファイル名が記録できるようになっています。 |
![]() | ファイルprogram.htmの冒頭部分です。ルートディレクトリでこのファイルが0002クラスタに記録されていることがわかりましたが、LBAは01C5+(クラスタ番号)×8で計算でき、01d5からファイルが記録されていることが推測できました。HTMLのテキストファイルなので、右のASCII欄でファイルの様子が確認できます。 |
![]() | サブディレクトリtestの様子です。本ディレクトリおよび親ディレクトリの所在およびファイルgazou.jpgの情報が書かれています。 ちなみに、 ・本ディレクトリ(.)の先頭クラスタ…0003 ・親ディレクトリ(..)の先頭クラスタ…0000 ・ファイルgazou.jpgの先頭クラスタ…0004 となっています。 |
MOデバッガーを起動すると、右図のようなウィンドウが表示されます。LBA欄に数値を入れ、「Read」をクリックするとその内容が表示されます。また、「Write」をクリックすると内容を書き換えることができます。MOが読めなくなったといっても全てのブロックが壊れているわけではないので、壊れたブロックを見つけ、それを修復すればよいのです。今回は、たまたま2種類のブロックの破壊に遭遇しましたが、その対処の様子を簡単に記しておきます。| ホームへ |