Windows Updateを確実に実行するための「予約済み記憶域」
パーティションやファイルとしては見ることができない!?
今回の記事では、前回(次期Windows 10では領域確保でストレージ32GB機でも確実にアップデート)の続きとして、現在プレビュー版が公開中の19H1に実装された「予約済み記憶域」(Reserved Storage)を調べていく。この予約済み記憶域は、Windows Update時などに必要な作業領域を確保するためのものだ。
問題は、どういう方法で記憶域の容量を確保しているかである。Windows 10上でパーティションを調べたが、特に新しいものは作られておらず、別パーティションを確保しているというわけでもないようだ(Unix系OSでは、パーティションを使って、スワップ領域やテンポラリーディレクトリーの容量を確保する)。
また、あらかじめ大きなファイルを作っておいて、その中に入れるという手法でもない。ドライブ内のファイルをファイルサイズで検索してみたが、予約済み記憶域の容量に相当するような大きさのファイルは存在しなかった。
予約済み記憶域に関しては「設定」→「システム」→「ストレージ」→「システムと予約済み」に表示されるほか、「同」→「一時ファイル」にも、「最大××MBが再利用可能でない場合があります」などと、空き領域が増えない可能性を表示する(どちらも予約済み記憶域が実装されてない状態では表示されない)。
ここから推測すると、予約済み記憶域はNTFSの機能を拡張する形で実装されていて、そこに保存されるファイルは、見かけ上、普通のファイルでしかないのに、他のファイルとは違って、予約済み記憶域で確保した領域からドライブ上の記憶領域が割り当てられるのだと考えられる。
fsutil.exeを使ってファイルシステムをチェック
NTFSの「予約クラスター」で領域確保?
そこで、ファイルシステム関係のコマンド、fsutilを使って起動ドライブを調べてみた。すると、「予約済み記憶域」を有効にしたシステムでは、NTFSの「予約クラスター」が増えていた。予約クラスターを調べるには、
fsutil volume allocationreport c:
としてコマンドを実行する。先頭にクラスター割り当てなどの表示がある。システムにより予約クラスターの量は違うが、19H1で予約済み記憶域が設定されていない場合には、
Total clusters:30,890,162 (126,526,103,552 bytes) 117.8GB
Free clusters:18,407,606 (75,397,554,176 bytes) 70.2GB
Reserved clusters:24,073 (98,603,008 bytes) 94.0MB
Allocated clusters:12,482,556 (51,128,549,376 bytes) 47.6GB
Cluster Size:4096Bytes
と、24,073クラスター(94.0MBであるのに対して、設定されている場合は、
Total clusters:29,068,551 (119,064,784,896 bytes) 110.9GB
Free clusters:21,103,352 (86,439,329,792 bytes) 80.5GB
Reserved clusters:843,419 (3,454,644,224 bytes) 3.2GB
Allocated clusters:7,965,428 (32,626,393,088 bytes) 30.4GB
Cluster Size:4096Bytes
と3.2GBも予約クラスターがあるのだ。この表示は、「設定」→「システム」→「ストレージ」→「システムと予約済み」に表示される予約済み記憶域の数字と近いものだ。
つまり、予約済み記憶域は、この予約クラスターを使って実現しているようだ。NTFSの予約クラスターとは、圧縮ファイルなどを利用する場合など、NTFSが作業に必要なクラスターを確保しておくための機能である。
予約クラスターは、伸張したクラスタなどに対して読み書きの処理が行われている間に該当クラスターを格納するために使われる。予約クラスターは、圧縮ファイル専用というわけではなく、このほかに$MFT(マスターファイルテーブル。NTFSでファイルを管理するための情報の1つ)領域を拡張する場合などにも使われる。
作業上、$MFTや伸張されたクラスターなどは、ディスク上に記憶しなければならず、この操作ができないとNTFSが処理を完了できなくなり、最悪システムがデッドロック状態に陥ってしまう。このため、あらかじめクラスターを予約領域として確保し、作業領域が確保できることを保証しておく。
隠しファイルなど違うのは、NTFS自体が未割り当てのクラスターとして領域を管理するところにある。つまり、空き容量を減らすもののファイルとしては存在していないため、ファイルやフォルダーなどへの割り当てクラスターを合計した総利用容量には含まれない。
予約済み記憶域とは、必要な容量のクラスターを予約クラスターとすることで、ドライブの空き容量からは除外され、通常のファイル書き込み操作などで使われてしまうこともない。おそらく、一時ファイルに対しては、専用のAPIを使うなどし予約クラスターを使ってファイルを作成するか、あるいは一時ファイルであることを示すフラグなどがあるのかもしれない(これについては別の機会に調べたい)。
この連載の記事
-
第424回
PC
Windowsの基本機能であるクリップボードについてあらためて整理 -
第423回
PC
PowerShellの今を見る 2つあるPowerShellはどっち使えばいい? -
第422回
PC
Windows 11の目玉機能が早くも終了、Windows Subsystem for Android(WSA)を振り返る -
第421回
PC
進化しているPowerToys LANで接続したマシンでキーボード/マウス共有機能などが追加 -
第420回
PC
Windowsプレビュー版に搭載されたsudoを試す -
第419回
PC
Windows Insider Previewが変わって、今秋登場のWindows 11 Ver.24H2の新機能が見えてきた? -
第418回
PC
Windows 11のスマートフォン連携は新機能が追加されるなど、いまだ進化している -
第417回
PC
Windows 11のスマートフォン連携機能をあらためて使ってみる -
第416回
PC
Windowsセキュリティ(Defender)をコマンドラインで扱う -
第415回
PC
ConvertFrom-Stringを使って、テキストデータをテンプレートで読み込む -
第414回
スマホ
Windows Subsytem for Linux(WSL)が昨年9月のアップデートでファイアウォール対応になった - この連載の一覧へ