SSブログ

消えたファイルを救え(月刊ASCII 1992年5月号7) [月刊アスキー廃棄(スクラップ)]

特集の「これで分かった PC-9801&MS-DOS」をスクラップする。
今回は「消えたファイルを救え」をスクラップする。
ASCII1992(05)c08消えたファイルを救え_W520.jpg
 しまった。ハードディスクの作業用ディレクトリのファイルを全部消してしまった。ああ.なんてことをしてしまったんだろう.どうしよう.Bドライブのフロッピーにあるファイルを消そうとしただけなのに……カレントディレクトリを間違えた.
 ここでいかりや長介が出てきて,こりゃダメだ、次行ってみよう,とか言って舞台が回ったらいいのに,と暗い気持ちになっていると,机の上のパソコンから紫の煙がたち上った。ああ、電源のショートか,ついていない.
 と思っていると,部屋中にたちこめた紫煙の中に,怪しい人影.

●ヒドゥンファイルの秘密はね
■ 何者.
◆ フロッピーの妖精だ。
■ ああ、こんなものが見えるようじゃ,ついにおれの頭もくるったかな?
◆ どうした。何か困ったことがあるのか?
■ えーい,ままよ.仕事中のファイルを消してしまったんだよ。ああ.
◆ お前のなくしたのは,金のファイルか,銀のファイルか?
■ …….まじめにやる気,あるの?
◆ 説明しなさい。
■ 夜中にへんなかっこしているくせに偉そうだな。まあ、いい。やけくそだ。ちょっと付き合ってみるか.
 とにかく,原稿を出すために空のフロッピーを作ろうとしただけなんだよ。余計なことをしなきゃよかった.いらないファイルを消そうとして,ついついカレントのディレクトリで"del *.*"を実行しちゃったんだ。
◆ で,願いごとはなんだ.
■ ファイルを戻してほしい。
◆ それだけで,いいのか?
■ 十分,それで十分.
◆ ほれ。
■ えっ?あれ,ファイルが戻ってる.
◆ お安いごよう.
■ すごいなぁ.どうやったの.
◆ undelete[26]を使えば,ちょちょいのちょいだ.
■ 全部,消しちゃったんだよ.それをどうやって戻したの.
◆ 説明してやろう.ファイルを削除したといっても,ほんとうに全部消してしまっているのではないのだ.
■ でも、何もなかったよ.dirをとっても何もでなかったし.
◆ あまいな.dirで表示されないと,何も存在しないとでもいうのか.おまえはヒドゥンファイルというのを知っているか?
■ なに,それ.
◆ なに、こんなことも知らないのか。それはあまりにヒドゥン.
■ ひどいシャレ,……だから,説明してくれよ。
◆ ためしに,適当なファイルを作ってみなさい.
■ 分かった,分かった.ほれ.aaaというファイルを作ったぞ.
◆ 投げやりなファイルだなぁ。まあ,いい.そこで,“attrib +H aaa”と実行してみなさい.
■ やったよ.
◆ じゃあ,dirをとってみなさい.
■ あれ、なくなっている.
◆ どうだね。この状況を君はどう説明するのだ。aaaファイルは存在しないというのか?
■ 僕をバカにしているな.これは単に見えなくしているだけだろ。お前はメフィストかよ.
◆ 教えてほしいのか,ほしくないのか?
■ 分かったよ。で,Hはたぶんさっきの“hidden"の“H”で,それに+をつけたということは,その属性を持たせたということだろう?
◆ なかなかするどいな。こんどは,aaaを削除してみろ。
■ あれ,「ファイルが見つからない」と言ってる.
◆ ふふふ。dirで見えなくて,しかも削除もできないファイルは存在するかな?あるものはない,ないものはある.
■ こんどは,マクベスかよ。でも,あるのはある。ふふん,分かったぞ.削除したファイルは,属性がヒドゥンになっているんだな.
◆ ブー.
■ 何者だ,お前は.悲嘆にくれている俺をもてあそんでいるだけなんじゃないだろうな.
◆ いや,大事な教訓を与えたのだ。気がつかないのか。属性をヒドゥンに変えておけば,うっかりの削除からファイルを救えるのだ。
■ 知らないと思って,またへんあー,なことを吹き込もうとしているな.見えもしないファイルがあっても何の役にも立たないじゃないか
◆ 浅はかなやつ。たとえば,VZエディターを立ち上げて,ファイラーで見てみろ。
■ あれ,aaaがあるぞ.あれあれ,普通のファイルと同じように編集もできる.セーブもできる.いったい,どうなっているんだ?
◆ MS-DOSのcommand.comがファイルの属性を見て,これは表示するとか,これは削除できないとか判断してからコマンドに渡しているのだ。だから,VZから直接アクセスすると普通のファイルとして扱えるのだ。試しに削除してみな.
■ 削除もできた.へーっ。といあれ,うことは,大事なファイルは,とりあえず属性をattribコマンドでヒドゥンにしておいて,編集はエディタかなにかでやればいいわけだ。すると,うっかり“del *.*”をやってしまっても,そのファイルだけは助かる.ただし,セーブすると属性が解除されることもあるようだ.
◆ ふっ、ちょっとは賢くなったようだな.ひとつだけつけ加えておくと,それは,あくまで一時的な方法だ。ヒドゥンにしたファイルに気づかず,うっかりフォーマットしたりしないように,せいぜ い注意することだな.

●undeleteの秘密はね
■ でも、さっきの削除の話は,まだなにも分からないよ.
◆ さっきは関係ないと言ったが,実は,まったく関係ないわけでもない.
■ もう、いったいどっちなんだよ.
◆ 教えてほしいのか、ほしくないのか? ■ 分かった,分かった.おとなしくするから,続けてくれよ。
◆ 削除といっても,ほんとうに跡形もなくディスク上から消し去ってしまうのではない。ファイルの情報の一部を変えてしまうだけなのだ。
■ それが,さっきのファイル属性を変えるだけで一見なくなってしまう話と似ているところだな.
◆ そうだ。しかし、削除の場合は,書き換える場所が違うのだ。具体的には,そのファイル名の最初の1文字だけだ.
■ ようするに,ファイル本体のほうは,なにも削除されていないんだね。
◆ ピンポン
■ ということは,その情報を元に戻してやればいい.
◆ グレート.
■ しかし,だまされないぞ.その情報が削除されてしまっているわけだろ.削除された情報を元に戻すことなんてできるわけないじゃないか.
◆ うーん,いいところに気がついたね.たしかにそうなのだ。だから,そのファイル名の先頭の文字は,復活させる際に教えてやらなければならない。
 だけど,その情報さえあれば,小さなファイルだったら,だいたい連続したクラスタ[23]にあるので,undeleteががんばれば復活できる可能性が高い。ところが,大きなファイルや,何度も書き込んだディスクの場合は,クラスタが不連続になっている可能性が高いので,復活できる可能性はさがる.
■ たくさんのファイルをいっぺんに削除してしまった場合,1文字にしろ,めんどくさいよ。その先頭の文字の情報をどこかに持っていれば,いいわけだろう?
◆ 実は,それをこっそり保存しておくという大事な仕事をしているコマンドがある.それがmirror[25]だ。
■ そういえば、僕のautoexec.batの最後に,“mirror /TA /TB /TC"という行があったぞ.
◆ それだ,それ。それがあったから,すべてのファイルを消しても,“undelete /all”で復活できるのだ。これなら,一撃だ.
■ へー。そんなに簡単なの.
◆ mirrorを常駐させていたのが、幸いしたな.

26 UNDELETE
 誰もが必ず一度は体験する、うっかりびっくりの大失敗がファイルの誤消去.従来、そうしたミスをカバーするためのコマンドがMS-DOSに標準的に用意されていなかったため,これまで多くの市販,あるいはフリーソフトウェアのファイル復活ツールが発表されてきた.
 MS-DOSにおけるファイルの削除は,ディスクから完全にファイルの中身を消してしまうことを意味してはいない。実際には,ディレクトリ情報内のファイル名の頭1文字をE5Hというコードに替え,FATの情報を消去するだけなので,ファイルの中身そのものは削除後もそのまま残っているのである。したがって,消されたファイルの復活を試みるには,削除前のFAT,およびディレクトリ情報の内容が再現できればいい,ということになる.
 DOS 5で登場したUNDELETEコマンドは,MIRRORコマンドと併用することにより,きわめて強力なファイル復活ツールとして機能する.
 MIRRORを/Tスイッチとともに起動させ,メモリに常駐させておけば,削除されたファイルの復活情報は,常にディスク上のPCTRACKR.DELというファイルに書き込まれていく(図4)。そのため、うっかり消去してしまった場合でも,ファイルの上書きさえされていなければ,ほぼ100%の確率で復活が期待できるのだ.
 ただし,MIRRORコマンドが常駐していないときには,UNDELETEはエコロジーIIなどと同様に,ディスクに置かれていたファイルの痕跡を,クラスタごとにたどりながら復活を試みることになる(/DOSスイッチでの起動).
 これは,いうなれば,戸籍が完全に消滅した住民を足跡だけで追跡するようなもので、困難な仕事といわざるを得ない.そのうえ,この作業だけではクラスタごとのファイルのつながりまでは追いきれず,頻繁に書き消しを繰り返しているディスクで,サイズの大きなファイルを誤消去した場合などは、完全な形での復活はまず不可能となってしまうのだ。
 やはり,消されたファイルの完全な形での復活には,MIRROR /Tコマンドによる復活情報の保存が不可欠なのである。


ASCII1992(05)c33ハード図4_W520.jpg
ASCII1992(05)c33ハード図5_W419.jpg
23 クラスタ
 ディスクの最小記録単位を「セクタ」という.2HDのフロッピーディスクの場合,1トラックには1024bytesのセク夕が8つ並んでいる.もっとも,セクタという言葉が意味を持つのは,アセンブラ言語でファイル操作をするプログラムを組むような方に限られる.一方,ファイルの最小記録単位である「クラスタ」のほうは重要だ.最小記録単位であるから、1つのファイルのサイズはこれより小さくならない.たとえ2bytesのファイルであっても,ディスク上では1クラスタ,すなわち数Kbytesを占有することになる.したがって,クラスタは小さいほど.ディスク空間の無駄は少なくなる.
 ちなみに2HDのフロッピーでは1クラスタ=1セクタだが,40MbytesのSASIのハードディスクでは1クラスタ=16セクタ,100MbytesのSCSIハードディスクでは1クラスタ=4セクタである.
 無駄と分かっていてどうしてクラスタサイズを大きくするのかというと,それは、クラスタの数が増えすぎると,クラスタを管理するためのFAT(次項参照)が大きくなる,空いているクラスタを探すのに時間がかかるなどの弊害が出てくるからである.クラスタの数を一定数に抑えるために,大容量のハードディスクほど,クラスタのサイズが大きくなっていく。
 クラスタは,次項で解説するFATとも緊密な関係にあるので,併せて読んでみてほしい。

 クラスタサイズを気にしてパソコンを使っていた。
25 MIRROR
 DOS 5で追加されたUNDELETE,およびUNFORMAT.いずれの機能も、このMIRROR.COMなくしては語れない.MIRRORコマンドは,ファイル復活成否のカギを握るともいうべき重要なコマンドである.
 MIRRORの主な機能を挙げていくと次のようになる.

◆パラメータなしでの起動
 この場合,MIRRORはカレントドライブのディスクに収められているFATとルートディレクトリ情報の内容を、復活情報としてMIRROR.FILというファイルに出力する.
 このファイルがあると,別項のUNFORMATコマンドによってFATとルートディレクトリ情報をMIRROR実行時の状態に戻すことができる.
 もっとも,DOS 5ではFORMATコマンドが自動的にこれと同じ作業を行なってくれるため,「うっかりフォーマット」対策としては特別意味のあることではない.しかし,ディスクがFORMAT以外の原因で壊れた場合(たとえばソフトウェアの暴走によるクラッシュ)では,MIRROR.FILがあればUNFORMATマンドで復旧できる可能性があるので,大事なディスクならこまめにMIRROR.FILを更新しておいたほうがいいだろう.
 なお,日本電気版のDOS 5では,ハードディスクに対してMIRRORをかけることはできないが,エプソン版では可能になっている.

◆/Tスイッチによる起動
 MIRRORの第2の機能として、メモリへの常駐モードがある./Tスイッチにドライブ番号を指定することで,MIRRORはメモリに常駐し,ファイルが削除されると,そのファイルに関するFATとディレクトリ情報をPCTRACKR.DELというファイルに記録してくれるのだ。MIRRORを常駐モードで使うことのメリットは,この処理をリアルタイムで行なってくれるところにある(図4).つまり「しまった!」と思った次の瞬間には,もうUNDELETEを使う準備ができているということだ
 MIRRORのメモリ常駐サイズは,たったの6Kbytes.フリーエリアを大きく広げられるDOS 5のことを考えれば,この程度の占有量は大した問題にはならないだろう。ぜひ,AUTOEXEC.BATで組み込み,毎回常駐させるようにしたい。また、この機能は,日本電気版でもハードディスクに対して行なうことができる.

◆/PARTNスイッチによる起動
 ハードディスクのパーティション情報(パーティションごとのOS,ドライブの種類など)を他のドライブのフロッピーディスクにPARTNSAV.FILというファイル名で保存する。保存されるパーティションの内容は,UNFORMATを/PARTNスイッチとともに起動することにより復活させることが可能になる(図5)。うっかり「領域解放」をしてしまったときでも,パーティション情報が保存してあれば復旧が可能なので,必ず実行しておきたいコマンドである.
■ 万が一,フォーマットしてしまったときはどうすればいいの?
◆ 謙虚になったな。フォーマットでもだいじょうぶだ.
■ そうだと思った.unformat[27]というコマンドがあったからね。これで,ハードディスクをまちがってフォーマットしてしまっても,だいじょうぶ.
◆ ふふふ。あまいな。すべてのMS-DOS5がHDDもunformatできると思うと,とんでもない痛い目に遭うぞ。98の世界はそれほど簡単にはいかないのだ。なぜか,unformatはフロッピーしかできない。
■ うーん,ディープ.98の世界の奥の深さを学んだような気がする.

27 FORMATとUNFORMAT
 フロッピーディスクにハードディスク,それに加えて最近注目の3.5インチ光ディスクすべてのディスクはフォーマット,すなわち初期化しなくては使うことができない.そのフォーマットをすべてのディスクに対して行なうための外部コマンドがFORMAT.EXEだ.
 DOS 5のFORMATコマンドで強化された点は,まず3.5インチ光ディスクの初期化ができるようになったことと,/Qスイッチによる高速フォーマットの追加。そして,次が売り物,ディスク上のファイル情報を自動的に未使用領域に退避させることにより,一度フォーマットしてしまったディスク上のファイルの復活,すなわちUNFORMATを正式にサポートしたことにあるといえる。
 ディスクのフォーマットとは,白紙にマス目を書いていく作業だと考えると理解しやすい。とはいえ,DOS5のFORMATコマンドによるディスクの再フォーマットでは,ブートセクタとFAT,ルートディレクトリ情報の初期化のみ行ない,ディスクの内容そのものは手つかずで残っていることに注目したい
 つまり,UNFORMATが行なっている作業は,ディスクのファイル情報(FAT,ルートディレクトリ情報)を,そのまま再現しているだけなのだ(図6).
 このUNFORMAT UNDELETEにより,融通の利かない石頭のMS-DOSといった汚名を返上できるようになったのは喜ばしいことである.


ASCII1992(05)c34ハード図6_W389.jpg
ハードディスクが飛んだ時は好機ととらえた。削除、書き込みを繰り返してノストラダムスの出番となるようなハードディスクを再フォーマットしてファイルを再書き込みすることで整理できた。

nice!(0)  コメント(0)