ファイルサイズの合計とディスク使用量が違う!?ドライブ容量を確保する方法とデータ重複除去 | WindowsTips

ファイルサイズの合計とディスク使用量が違う!?ドライブ容量を確保する方法とデータ重複除去 | WindowsTips

「ファイルサーバの空き容量が無い」

「どうせ不要なファイル大量に保存してるんじゃないの?」

クラウドストレージがこれだけ普及していても、社内にファイルサーバを保有しているという企業は少なくないと思います。
容量だけならNASでもいいけど、アクセス権限管理を個別にやるのはめんどくさいし、ActiveDirectoryと連動させられます。
オンプレでサーバを保持するとバックアップ管理や停電等による電源管理等色々ついて回るわけですが、ドメインコントローラーやウィルスソフトの配布だったりの役割も兼ねることができる等、運用上のメリットもあるし、何より保管ファイルが多すぎて移行が容易ではなく、喫緊で困っていないので据え置きという状況もあるのではないかと思います。

そして最も頭が痛いのがストレージ容量の問題です。
これはクラウドだからとかオンプレだからというのではなく、サーバでもクライアントでも昔から必ず出てくる問題です。

SE時代にも周囲に口酸っぱく言ってきましたが、「ストレージは無限ではない」ということを多くの人は都合よく忘れます。
版数を上げて別名保存、バックアップを保存、何かにつけて保存。
保存することが悪いわけではないのですが、その後始末となると急に我がことでは無くなるのです。

私の場合、パソコンのローカルにはソフト以外のファイルは基本保存しないし、デスクトップは付箋等以外のものはショートカットも含めて絶対に置かない、ファイルの版数が上がったら2世代以上前のバックアップは削除、サイズの小さい大量のファイルはZIPに纏める等、この分野だけは徹底していました。
尚、電子環境を一旦離れた実生活には一切この徹底が反映されていない模様です。

それ故にストレージ容量が不足したと言われたら、条件反射的に「不要なファイルを消すなり移動するなりしてください。話はそれからだ。」となります。

消しても消しても増えない空き容量

と言いながらもそこはしがない情シス屋。
ディスククォータもままならない程未整理且つ権限が複雑に付けられたファイルサーバのどこにいらないファイルがあるか点検してまわってみます。

そしたら出てくる出てくる、写真と思われる数MBのJPGファイルが1,000件とか2,000件単位で保存されていたり、デジタルハンディで撮影した社内行事のムービーファイルが未圧縮でゴロゴロしてたり、長期間触れていない「保存用」フォルダや「old」「不要」(じゃあとっとと消せよ!)などというフォルダ名を付けたものなど有象無象。
階層深くに眠っていてもはや誰も存在すら覚えていないであろうファイルもあります。

アーカイブと称して外付けHDDに移動させつつ、各部署にもフォルダ整理を一斉通達して大掃除を開始します。

ちなみに弊社で使っているファイルサーバはWindowsServer2012R2で、ストレージは「重複除去」を有効にしています。
重複除去とはWindowsServer2012以降に実装されている機能で、同一のデータを統合してストレージ領域を有効に使用するためのものです。
サーバに保存されたファイルはチャンクと呼ばれる32~128KBのデータに分割され、他のチャンクと一致する場合はデータを削除した上で同一のチャンクのリンクを記憶します。
例えばファイル名が違うだけで中身が同じファイル等であっても、この方法であれば領域を節約することが可能になります。

「重複除去」のおかげで容量を節約できているのですが、逆に保存しているファイルを移動したり削除しても、ファイルサイズ通りの空き容量は確保できません。

せっせとファイルを動かしていくのですが、なかなか空き容量は増えません。
その間もファイルを追加されたりするので、空き容量は増えたり減ったりのいたちごっこです。

ドライブの使用領域 > ファイルサイズの合計(それも300GBも)

「空ける端から保存していきやがって!」と思っていたのですが、800GBのドライブ領域に対して約100GBのファイルを移動させてみても空き容量はいっこうに増えません。
さすがにおかしいと思って、ドライブ全体の保存ファイルのサイズを計測してみました。
結果は500GBでした。

え?

ファイルは500GBしか使っていなくて、800GBのドライブの使用率が99.9%?

全社依頼前のファイルサイズの合計は確かに800GB以上ありました。
私がやった以外に、全社合わせて300GB以上のファイルをファイルサーバから逃がしたことになります。
それなのに空き容量は数MBのまま。

…ファイルを移動させる手を止めて、技術的な調査に取り掛かることになりました。

ということで、長いイントロがやっと終わってここから本題です。

ファイルサイズの合計とディスク使用量が違う

パソコンにも当てはまる原因

(ドライブ毎の)ゴミ箱

とりあえず初歩的なところからいってみます。
「ファイルサイズの合計」を図った方法はDIRコマンドです。
コマンドプロンプトから以下のコマンドを実行します。

>dir /s /a-d

コマンドのリファレンスは他の詳しいサイトに譲りますが、カレントディレクトリ配下のサブディレクトリも含めてファイル名とサイズ、作成年月日などを取得します。

このコマンドの一つの難点として、権限の無いフォルダの容量は出てこないということが挙げられます。
その代表が「ゴミ箱」です。

ゴミ箱については今さら説明するまでもないですが、保存されている場所はCドライブだけとは限りません。
Dドライブのゴミ箱も空にしてあげなければいけません。

システムドライブ以外のゴミ箱を空にするのに一番簡単なのは「ディスククリーンアップ」です。
エクスプローラーからドライブ右クリック→プロパティでプロパティを表示して以下の画面を出して、「ディスククリーンアップ」を選びます。
※イメージは実サーバのものではないので容量等が本文と異なります。

「ゴミ箱」が表示されるので、チェックして「OK」を押せば完了です。

尚、WindowsServer2012は標準で「ディスククリーンアップ」は表示されていません。
「ディスククリーンアップ」を表示させるためには以下手順が必要です。

1.管理者でPowerShellを起動
2.以下コマンドを実行
>Add-WindowsFeature Desktop-Experience
3.サーバー再起動

再起動が難しいサーバの場合、コマンドプロンプトでゴミ箱を空にすることもできます。
管理者でコマンドプロンプトを起動して以下コマンドを実行します。
※ドライブレターは環境に合わせます。

>rd /s D:\$Recycle.Bin

ちなみにこれでは問題は解消しませんでした。

共有フォルダのシャドウコピー

サーバに共有フォルダを設定している場合、共有フォルダ内のファイルを誤って削除したり上書いてしまった場合にデータを戻すための機能として「共有フォルダのシャドウコピー」があります。
仕組みはバックアップとは異なるのですが、元ファイルのデータが保存されるという意味ではディスク容量を必要とします。

保存先となるフォルダはデフォルトであれば「System Volume Information」になり、ここも権限なしで容量が表示されない隠しフォルダです。
コマンドプロンプトから以下コマンドを実行することで共有フォルダのシャドウコピーのサイズを確認することができます。

>vssadmin List ShadowStorage

実行結果はこんな感じです。


「シャドウ コピーの記憶域の使用領域」が保存されているシャドウコピーの容量です。

ちなみにシャドウコピーを削除する場合は以下のコマンドを実行します。
※ドライブレターは環境に合わせます。

>vssadmin delete shadows /for=D: /all

これも全く保存されていなかったのでパスです。

Pagefile.sysとかhiberfil.sysとか

仮想メモリのページングファイルや休止状態やスリープ状態のメモリ内容をHDDに退避するファイルです。
ページングファイルは昔からある話なので詳細は割愛します。
これらも対象のドライブには存在しませんでした。

インデックスファイル

もう一度先ほどのドライブのプロパティを見てみます。


「このドライブ上のファイルに対し、プロパティだけでなくコンテンツにもインデックスを付ける」というチェックがあります。

Windows8以降からあるチェックで、エクスプローラーでファイル検索を行う際の速度向上のためにインデックスを作るものです。

実際そこまでWindowsのファイル検索を多用することは無いし、インデックスが無くても検索できないことは無いですし、高性能なSSD等であればインデックスの必要性はあまりありません。

そしてインデックスを作成するということは一応ドライブ容量を食います。
ファイル数が多ければ尚更です。
とはいえたかがインデックスですから数百GBもの容量を食うことはありません。

ディスク障害

ハードディスクの一部で障害が発生してファイル保存ができない状態にある場合、ファイルサイズの合計とディスク使用量の差が発生する可能性があります。
チェックディスクでディスクのエラーチェックを行うことができます。

コマンドプロンプトから以下コマンドを実行します。
※ドライブレターは環境に合わせます

>chkdsk d: /r

チェックディスクはサーバ負荷が高くなるのと、システムドライブ(Cドライブ)の場合起動時に実行されるので即時実行はできません。
詳しい使い方は別のサイトに譲りますが、ディスクのマウントが解除される場合があるなど取り扱いには注意が必要です。

実行の結果、ディスク障害は発生していませんでした。

クラスタのサイズの問題

これも昔からある問題ではあるのですが、HDDへデータ保存を行う際にWindowsの標準的なファイルシステムであるNTFSの標準の場合、最小の保存領域は4KBです。
実ファイルのサイズが4KB未満であったとしても、ディスク上は4KBの領域を必要とします。
この誤差の積み重ねによってファイルサイズの合計とディスク使用量の差異が発生するというものです。

この問題はファイルの圧縮などで解消できるだけではなく、前述の「重複除去」を使っているためディスク上のサイズはむしろ恐ろしく圧縮されています。
それに300GBもの誤差を産みだそうとすると凄まじい量の細かいファイルが存在しなければいけませんが、先ほどのDIRコマンドで確認してもそこまでおかしなファイルはありません。

ここまでの内容はサーバーに限らず、パソコンでも同様の対策をとることができますので、ドライブ容量の確保の際に参考にしていただければと思います。

逆に言えばこの辺りは比較的早期に調査して該当しないことがわかっていました。
それでは何がそんなに容量を圧迫しているのでしょうか。

圧縮機能が領域を圧迫していた!?

原因は「データ重複除去」

確認できている情報をもう一度確認してみます。
ディスクの空き容量はほぼ全くなく、800GB全てが使用されています。
しかし把握てきているファイルサイズは500Bです。

素直に考えれば発見できていない大きなファイルが存在しているということです。
もう一度確認してみると、フォルダの中を確認できていない場所がありました。
シャドウコピーの保存先にもなっている「System Volume Information」です。

バックアップが確実に取れていることを確認した上で、フォルダ権限を変更して中身を確認してみました。

ありました。

D:\System Volume Information\Dedup\ChunkStore

犯人は「データ重複除去」で作成されるチャンクの情報、チャンクストアでした。
チャンクストアの中身は779GBもあったのです。

チャンクストアは勝手に消えない

データ重複除去は前述の通りチャンクが同一のものを纏めて管理しますが、そのリンク情報が保存されるのがチャンクストアです。

しかし実ファイルが削除されてもチャンクストアは勝手になくなったりはしません。
チャンクストアは週に一回再作成されますが、それまでの間ディスク容量は変わりません。
それも自動実行される際に、チャンクストア内のデータが5%以上変更されないと再作成されないのです。

起こっていた状況は、チャンクストアが再作成されないまま延々と溜まり続け、チャンクストアそのものがディスク容量を食いつくしてしまっていたのです。

そこからファイルをどれだけ動かしても後の祭りです。
ディスク容量は新たなチャンクストアを作成できないほど切迫していたのです。

ちなみにファイルサイズの合計が500GBといいましたが、データ重複除去の結果、ディスク上のサイズはわずか10GB程度になっていました。
ここまで圧縮されたファイルをいくら動かしても容量は空きません。

コマンド1つで驚きの空き容量に

仕方ないのでPowerShellから以下のコマンドを手動実行しました。

>Start-DedupJob D: –Type GarbageCollection

コマンドが流れ始めて数十分、ディスク使用量はみるみる減っていき一時間そこらで100GB以上が空きました。
ちなみにその時点ではコマンドは終了していないので、まだまだ容量は減っていきます。

まとめ

ストレージは有限である

なんとか事なきを得ました。
データ重複除去の機能を正しく理解していなかったこと自体問題ですが、一番の問題は一声で300GBを破棄できるほどファイルサーバに不要なファイルを溜め込んでいたことではないかと思います。

どれだけ高い圧縮率であったとしても、結局ストレージは有限です。
ディスク容量が不足すれば追加することはできますが、正しく管理できていないのであれば追加は永遠に続きます。

集中管理が難しく、各自の管理を徹底しないと無秩序になるファイルサーバ。
容量が無くなっても本来情シスではどうにもできません。
適切でない容量しかないのであれば改善しなくてはいけないですが、そもそも「適切な容量」とはどのようなものでしょうか。

「適切な容量」を考えるためには、まずファイルサーバの使用方法を定めなくてはいけません。
永続的な保管領域として考えてしまえば無限に容量を増加させなくてはいけませんが、あくまで共有のためのワークスペースであるとすれば一定以上に古いファイルは別の媒体にアーカイブするべきでしょう。

ルールが守られるかどうか難しいかもしれませんが、まずはルールを策定し、ルールが守られていないのに容量が不足しているのであれば「まずはルールを守ること」を対策とすることができるようになります。

PC・スマデバカテゴリの最新記事