誤って何百万ものファイルをディレクトリに書き込んだ後(削除した後)、[Bash]タブの完了が遅くなる

誤って何百万ものファイルをディレクトリに書き込んだ後(削除した後)、[Bash]タブの完了が遅くなる

ある日、私のホームディレクトリに400万の小さなテキストファイルを書き込むスクリプトエラーが発生しました。

誤って400万個の小さなテキストファイルをフォルダに書きました。削除する最良の方法は何ですか?

ファイルを削除しましたが、それ以降、ファイル名またはパスを完了するためにタブをクリックするたびに何かが発生するまで0.5秒の遅延が発生します。

これでファイルが削除されましたが、gptまたは同様のファイルに継続的な破損があったようです。この問題をクリーンアップするために使用できる便利なツールはありますか?

ファイルシステムはext4(RAID 1の3TBドライブ2台)で、CentOS 7を実行しています。

% ls -ld "$HOME"
drwx------. 8 myname myname 363606016 Nov 18 09:21 /home/myname 

ありがとう

ベストアンサー1

説明で述べたように、ホームディレクトリ自体はサイズが大きいため、もはや縮小されません。ホームディレクトリの内容を取得するには、毎回(キャッシュまたはディスクから)大量のデータを読み取る必要があります。

この問題を解決するには、ホームディレクトリを再作成する必要があります。

  • ログアウトしてルートとしてログインしたら、ホームディレクトリを参照する実行中のプロセスがないことを確認してください。

    lsof /home/myname
    
  • ホームディレクトリをコピーします。

    cd /home
    cp -al myname myname.new
    
  • ホームディレクトリの名前を変更します。

    mv myname myname.old
    
  • 新しいホームディレクトリの名前を変更します。

    mv myname.new myname
    

これでもう一度ログインできます。輝く新しいホームディレクトリは実際に必要なスペースだけを占有し、ファイル操作は予想通りに速くなければなりません。cp -al新しいディレクトリの下のすべてのファイルが利用可能であることを確認してください。ただし、ディレクトリ構造に加えて余分なスペースを占有しないようにハードリンクを使用してください。ハードリンクがあるため、いずれかのディレクトリにあるファイルに対するすべての変更は他のディレクトリに反映されますが、安全に削除できますmyname.old

一度に多数のファイルを含むすべてのディレクトリに同様のアプローチを使用できますが、ほとんどの場合、最初にログアウトする必要はありません。

おすすめ記事