ハードウェアの安全な取り外しでのエラーを何とかする(Windows)

外付けハードディスクなどをいきなり抜いてしまうと、ファイルの操作中だった場合には破損してしまいますが、タスクトレイにある安全な取り外しから行えば、そういった不安なく取り外すことができます。

しかし、結構な頻度でエラーが出る事がありますので、その確認方法などを記載します。

「このデバイスは現在使用中です。デバイスを使用しているプログラムまたはウィンドウを閉じてから、再試行してください。」みたいなエラーが出る場合は試してみてください。

安全な取り外し

タスクトレイの以下が「安全な取り外し」です。

取り外してみましょう。

このとおり。

ただし、これは一時的なものである場合がほとんどなので、何度か試すか、数分待ってから再度実行すれば取り外せる事も多いです。

リソースモニターから確認(Windows標準ツール)

タスクマネージャからは「リソースモニター」というツールにアクセスでき、ここで開かれているファイルやプロセスなどを確認できます。

Windows最下部の「タスクバー」を右クリックし、「タスクマネージャ」をクリックします。

タスクマネージャを起動するとこんな感じです。

上部のタブを「パフォーマンス」に切り替えます。

下部の「リソースモニターを開く」をクリックします。

「ディスク」タブをクリックします。

色々表示されますが、一覧上部の「ファイル」をクリックすると並び替えされます。

ここで表示されるのは、「現在読み書きが発生しているファイル」のため、テキストエディタなどで開いているだけのファイルなどは表示されませんが、裏でコピーが行われている途中などの確認はこれで行なえます。

パラパラと切り替わってしまって確認できない場合は上部の「監視」から「監視の停止」をすると、現在の状態で止まります。

再び再開する場合は「監視の開始」をクリックします。

OpenedFilesView(フリーソフト)

「OpenedFilesView」というフリーソフトを使うと、読み書きが発生しているかどうかに関わらず、開かれているファイルとプロセスなどの詳細が確認できます。

OpenedFilesView - View opened/locked files in your system (sharing violation issues)
Displays the list of all opened files on your system and allows you to close files for solving sharing violation problems.

起動するとこんな感じです。

一覧の表題「フルパス」をクリックすると開かれているファイルのパス順で並び替えできます。

確認する場合は「フルパス」の項目で「外そうとしているドライブ」のドライブレターを見ます。

以下の例では「W」というドライブを外そうとした時の例です。

ファイル名まで出ない場合がありますが、対象のドライブで開かれている項目は右クリックしてプロパティを確認してみましょう。

上記のプロパティを確認したところです。

実行ファイルなどが確認でき、この例では「サクラエディタ」なので、サクラエディタで開かれているタブを閉じたり、サクラエディタ自体を終了させることでドライブがはずせるようになります。

排他制御が有効な場合(他のソフトから読み書きさせない)は、上記と同じファイルですが、ファイル名まで表示されました。

サクラエディタの設定箇所は以下です(デフォルトは「しない」)

開かれているファイルがわかったので、閉じて再び「安全な取り外し」をすると成功しました。

OpenedFilesViewでのプロセス操作

右クリックからプロセスの操作もできるのでメモしておきます。

どうしても「安全な取り外し」ができない場合に試す操作です。

以下は試した方が良い順番で記載しました。

Bring Process To Front

対象プロセスのウィンドウを最前面に持ってきます。

バックグラウンドで動作するようなプロセスは何も起きませんが、テキストエディタなどであれば、そのウィンドウが最前面に来ますので、開いているファイルを閉じましょう。

Bring Processes Of Selected Files

開いてるファイルを閉じます。

サクラエディタで開いているテキストファイルの場合、個々のタブの「X」をクリックし、そのタブ(ファイル)を閉じるのと同じ動作です。

プロセス自体は終了せず、ファイルだけ閉じられます。

選択したファイルのハンドルを閉じる

開いているプロセスに、「終了してください」と伝えます。
強制でないので、暴走してるようなプロセスには無視されてしまいます。

サクラエディタの例だと、サクラエディタ自体を通常の操作で終了する動作と同じです。

複数のファイルが開かれている場合は、そのプロセス自体終了するので全部閉じられます。

選択したファイルのプロセスのキル

開いているプロセスを強制終了させます。

未保存のデータがあった場合は失われてしまうため、先に他の操作を試し、どうしてもだめな場合はこれで強制終了させます。

その他

Windowsのインデックス

WindowsのPC(マイコンピュータ)からドライブを右クリックして「プロパティ」を見ると「このドライブ上のファイルに対し、プロパティだけでなくコンテンツにもインデックスを付ける」というチェックボックスがありますが、これがONの場合も取り外しができない場合が多くなります。

チェックをOFFにして「OK」もしくは「適用」ボタンでインデックス対象から外すことができます。

ファイル数が多いと非常に長い時間かかりますので適用したら放置しておきましょう。

Windowsのドライブのインデックス無効化

ドライブにアクセスするソフトの終了

例えばファイル検索ソフト「Everything」が常駐しているとドライブの取り外しができない事があります。

Everythingの検索書式とドライブやNASの追加や除外フィルタ(ファイル検索ソフト)
MFTを利用した超高速ファイル検索ソフトの「Everything」へ検索対象のドライブやNASを追加したり、検索する必要のないフォルダやファイルを除外する方法を記述します。Everythingの書式は、検索フォームやフィルタなどで共...

ただ、確認時点で開かれているファイルを見るとシステムが開いているので、Everythingが悪いわけでないような感じでした。

どのソフトやサービスがアクセスしているか不明な場合はログアウトまたは再起動すればOKです。

MFTの断片化

NTFSでフォーマットしたドライブはMFT(マスターファイルテーブル)と呼ばれるファイルやフォルダの情報を記録する領域があり、EverythingなどMFTに対応した検索ソフトでは膨大なファイルでも一瞬で検索できます。

ファイル数が膨大なドライブになるとMFTのサイズも肥大化し、ディスク容量ギリギリになってくるとMFTは予約領域以外にも保存されていくため断片化が起こり、ドライブのパフォーマンスが大幅に低下します。
Windowsのシステムドライブの容量が少なくなってくると動作が緩慢になってきますが、これが一番の原因です。

断片化が起こっているかはコマンドプロンプトを「管理者として実行」で起動し以下のように実行します。

defrag /a /v 対象ドライブ:

対象のドライブが「V」ドライブの場合は以下のようにします。

defrag /a /v V:

「管理者権限」のコマンドプロンプトでないと以下のようにエラーで実行できません。

C:\Users\Sakue>defrag /a /v V:

この操作を実行するための十分な特権がないため、ストレージ最適化ツールを開始できません。 (0x89000024)

以下は3TBのハードディスクで80%ほど使っているドライブの結果です。

V:\>defrag /a /v V:

DATA (V:) の 分析 を起動しています...


操作は正常に終了しました。

Post Defragmentation Report:

        ボリューム情報:
                ボリューム サイズ                 = 3.63 TB
                クラスター サイズ                = 4 KB
                使用領域                  = 3.05 TB
                空き領域                  = 596.36 GB

        断片化:
                断片化された領域の合計     = 0%
                ファイルあたりの断片の平均  = 1.00

                移動可能なファイルとフォルダー = 1284277
                移動不可のファイルとフォルダー = 4

        ファイル:
                断片化されたファイル            = 1
                断片化されたファイルの総数        = 1

        フォルダー:
                フォルダーの総数               = 26616
                断片化されたフォルダー          = 0
                断片化されたフォルダーの総数      = 0

        空き領域:
                空き領域の数            = 34006
                空き領域の平均サイズ     = 17.95 MB
                空き領域の最大サイズ     = 259.72 GB

        マスター ファイル テーブル (MFT):
                MFT サイズ                    = 1.64 GB
                MFT レコード数            = 1727999
                MFT 使用量                   = 100%
                MFT 断片化の合計         = 9

        注意: 64 MB よりも大きいファイルの断片は、断片化の統計情報には含まれません。

        このボリュームを最適化する必要はありません。

MFTのサイズが1.64GBもあり、断片化もしているようです。

MFTのデフラグも行えるツールがありますが、Microsoft以外のツールしかないようでしたので今回は見送りました。

トランザクションログのクリア

安全な取り外しをせずに取り外した場合にXPでは「遅延書き込みデータの紛失」のポップアップが出る事がありますが、Windows10などでは出なくなりました。
このとき、本当にコピー中であったりするとファイルが破損しますが、それ以外ではトランザクションログの書き込みに失敗しただけでユーザーのファイルには問題無い場合が多いです。

「OpenedFilesView」で確認すると「$TxfLog」などの文字列が見えますが、これがトランザクションログへのアクセスです。

取り外しに失敗したときに開かれているファイル一覧

HDDを強制的に取り外した際の警告は「イベントビューア」の Windowsログ > システム から確認できます。

イベントビューアのシステムログ

こんな感じのログが残っており、

内容を見ると以下のようなログが確認できます。

トランザクション ログへのデータのフラッシュに失敗しました。VolumeId: P:、DeviceName: \Device\HarddiskVolume25 で破損が発生している可能性があります。

ドライブをどうしても強制的に切断する必要がある場合はログを確認し、もし必要なファイルでエラーが出ている場合は、念の為に次回上書きコピーしておくと良いです。

安全な取り外しをしなかった場合の警告ログ

トランザクションログをクリアする場合は、「管理者権限」の「コマンドプロンプト」で以下のように実行します。

fsutil resource setautoreset true ドライブ:\

「V」ドライブを対象にする場合は以下のようにします。

fsutil resource setautoreset true V:\

外付けドライブの場合は取り外しを行えば、次回接続時にクリアされます。

このコマンドはMicrosoftの以下のページで解説があります。

fsutil resource
トランザクションリソースマネージャーとその動作を管理する fsutil resource コマンドのリファレンス記事です。

抜粋すると「setautoreset true」というパラメータの意味は以下のように次回マウント時にトランザクションデータをクリーンアップするとあります。

setautoreset

既定のトランザクションリソースマネージャーが次のマウントでトランザクションメタデータをクリーンアップするかどうかを指定します。

true -トランザクションリソースマネージャーが、既定で、次回のマウント時にトランザクションメタデータをクリーンアップすることを指定します。

false -既定では、トランザクションリソースマネージャーが次のマウントでトランザクションメタデータをクリーンアップしないことを指定します。

この「トランザクションログのクリア」をすることで、「安全な取り外し」が頻繁に発生するドライブが改善する事がありますので試してみて下さい。

コメントフォーム

タイトルとURLをコピーしました