
近年のWindowsにおける「ショートファイル」は本質的に何でしょうか
近年のWindowsにおける「ショートファイル」は本質的に何でしょうか?
近年のWindowsにおける「ショートファイル」は本質的に何でしょうか?
UNIXのファイルシステムなどで使われている、inodeに対するハードリンクのようなものと捉えれば良いでしょうか?
「ショートファイル」で検索すると、過去のWindowsやMS-DOSとの互換のために残された「8.3形式」のファイル名ということはすぐに調べがつきますので、ここではワードの意味をお聞きしているのではありません。
ロングネームに対するシンボリックリンクとして実装されているのか?それともロングネームとは本質的に等価なハードリンクとして実装されているのか?どちらでもないのなら、どういった形で実装されているのか?といった専門的なことが知りたいです。
この疑問を持った経緯は、よくある「WindowsXP高速化」などを謳ったサイトで、レジストリを変更して「8.3形式」を無効にすることで高速化が期待できるような記述を目撃したからなのです。
友人はこれを信じ込んでPCにあまり明るくないにも関わらず(ないからこそ、か?)何の疑問も抱かずレジストリをいじって悦に入っているのですが、もし「ショートファイル」が実態に対するハードリンクのようなものに過ぎず、参照をカウントされているだけの単なるリンクとして存在しているのならば、これを無効にすることでWindowsが高速化するなどというのは馬鹿馬鹿しい考えだと思います。
一度しか作られない、それも実態を伴わないリンクだとすると、これを無効化したところで人間が体感など到底できるはずもない程の差しか起きえないはずです。
参考となるサイト、技術書籍などでも結構です。Windowsのファイルシステムに詳しい方、専門の方のご意見をお待ちしております。
投稿日時 - 2009-02-12 16:57:28
VFAT と NTFS に言及すれば十分でしょうか. それでよければ, いずれも「長い名前のファイル (ディレクトリ) を作るときに, それに対応する 8.3形式のファイル名も作る」という実装です. なので, 「8.3形式を無効にする」と「8.3形式のファイル名を作る」時間が節約できます. だから, 理論的には「(特にファイルを作るときに) 高速化が期待できる」ということになります. 問題はどのくらいの時間が節約できるかですが, 「そのディレクトリにどのくらいの数のファイルがあるのか」と「そのディレクトリにあるファイルの名前が (先頭部分が) どのくらい似ているのか」に依存します. ファイルがたくさんあれば当然時間がかかりますし, 似た名前のファイルがたくさんある場合には, 8.3形式として使える名前をがんばって探す必要があるのでさらに時間がかかります. ま, これで体感できるほどの時間差があるかどうかは知りませんが.
以下実装上の話になりますが, VFAT に関してはとても簡単で, 事実上「長いファイル名が 8.3形式のファイル名のエイリアス」です. ディレクトリエントリーとしては, 長いファイル名のあとに 8.3形式のエントリーが作られ, 「ファイルの属性は 8.3形式のエントリーが全て担っている」ということで「事実上」と付けてみました.
NTFS は確か Microsoft が詳細を完全には出してなかったような気がするのですが, 「1つのファイルに対して複数の名前を与えることができる」という NTFS 機能をそのまま使って実装しているはずです. ただ, 名前の変更や移動に対応するため, 対応関係そのものは長いファイル名が持っているものと思われます.
いずれにしても「ファイルシステム上では、ショート形式のファイル名に相当するエントリみたいなものは一切ないです。」という #1 の話は間違っています.
VFAT の場合のディレクトリエントリーの例は挙げておきますね.
参考URL:http://www.ntfs.com/fat-filenames.htm
投稿日時 - 2009-02-12 22:32:13
これは本当に参考になりました。専門的な解説をしていただき感謝します。
リンク先もありがとうございます。
>問題はどのくらいの時間が節約できるかですが, 「そのディレクトリにどのくらいの数のファイルがあるのか」と「そのディレクトリにあるファイルの名前が (先頭部分が) どのくらい似ているのか」に依存します. ファイルがたくさんあれば当然時間がかかりますし, 似た名前のファイルがたくさんある場合には, 8.3形式として使える名前をがんばって探す必要があるのでさらに時間がかかります. ま, これで体感できるほどの時間差があるかどうかは知りませんが.
なるほど、尤もなお話です。
NTFSがファイル名などのエントリをどのように持っているのか存じませんが、ある程度固まったセクタに書き込まれているならば例え数万~数十万ファイルから新しく付けられる名前候補を探すのも(たとえHDDでも)ほんの数ミリセック単位だと思うのですが、これは考えが甘いでしょうか。
ファイルの実体のようにいろんな位置にバラバラ存在していると、HDDのシーク時間がボトルネックとなって急激にパフォーマンスが落ちそうですね。
少し突っ込んでNTFSについて勉強してみたいと思いました。
貴重なご意見に感謝いたします。
投稿日時 - 2009-02-15 16:02:48
このQ&Aは役に立ちましたか?
0人が「このQ&Aが役に立った」と投票しています
回答(2)
本当の実装の詳細についてはよく知らないのですが、
少なくともショート形式はハードリンクやシンボリックリンクなんかではありません。ファイルシステム上では、ショート形式のファイル名に相当するエントリみたいなものは一切ないです。
ファイルの操作関連のAPIで、指定されたファイル名が見つからなかった場合に、通常ならエラーを返すわけですが、
ショート形式が有効になっている場合は、エラーを返す前に、指定されたファイル名をショート形式だと思って、検索しなおす、ていうルーチンが呼ばれるんでしょう。
ショート形式とロング形式の対応を記憶するテーブルみたいのがどこにあるのか、あるいは、そもそもテーブルみたいなものはなくてショート形式が必要になったらその都度その場でショート形式のファイル名を生成しているのか、といったようなことは私は知りません。
投稿日時 - 2009-02-12 17:51:55
ご回答ありがとうございます。
>ファイルの操作関連のAPIで、指定されたファイル名が見つからなかった場合に、通常ならエラーを返すわけですが、
>ショート形式が有効になっている場合は、エラーを返す前に、指定されたファイル名をショート形式だと思って、検索しなおす、ていうルーチンが呼ばれるんでしょう。
これは rabbit_cat 様の想像でしょうか?
WindowsAPIの動作としてこのような挙動をすることが書かれたMSのドキュメントなどがありましたら、大変勉強になりますのでお示しいただけますと幸いです。
これが根拠ある事実ならば、たしかに動作が軽快になる可能性はありますね。
>ショート形式とロング形式の対応を記憶するテーブルみたいのがどこにあるのか、あるいは、そもそもテーブルみたいなものはなくてショート形式が必要になったらその都度その場でショート形式のファイル名を生成しているのか、といったようなことは私は知りません。
この部分は、実際にファイルを作成してみて、コマンドプロンプトの
dir /X #ショートファイルネームを表示
コマンドで確認してみました。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
の、NtfsDisable8dot3NameCreation キーの値が 0 (default) の場合は、ファイルやディレクトリが作られた段階でショートネームも作られていました。1の場合は作られません。
ためしにファイルをmoveしてみたらショートネームも一緒に移動するようです。ショートネームが無効な環境では、ファイルのmove時にショートネームもどこかへ消えてなくなります。この点ではたしかにソフトリンクともハードリンクとも違いますね。
ファイル名の属性、といったぐらいのイメージなのだろうか。いったいどう実装されているのか知的好奇心からとても気になります。
投稿日時 - 2009-02-12 19:29:35