700,000個のファイルを同じFS内の単一のディレクトリに移動すると、デバイスに残りのスペースがありません。

700,000個のファイルを同じFS内の単一のディレクトリに移動すると、デバイスに残りのスペースがありません。

私は次のコマンドを使用して私のサーバー上の多数のファイルを探して移動します。

find SomeDir/ -maxdepth 10 -type f -mtime +90 -exec mv {} SomeDir2/ \;

約700,000個のファイルを移動した後、次のエラーが発生します。

mv: cannot move ‘SomeDir/Dir1/Dir2/Dir3/file.jpg.gz’ to ‘SomeDir2/file.jpg.gz’: No space left on device

df -i次のような結果があります。

/dev/sdb1           322125824 144163358 177962466   45% /files

df -h次のような結果があります。

/dev/sdb1            4.8T  3.5T  1.1T   78%   /files

/files別のディレクトリですべての操作を実行します。

ファイルシステムはext4

修正する

提案したようにこれを実行し、dmesg -Hwx出力は次のようになります。EXT4-fs warning (device sdb1): ext4_dx_add_entry:2016: Directory index full!

ベストアンサー1

max_dir_size_kbディレクトリをマウントするときは、設定を超えたりデフォルト値をそのままにしたりできます。

Linuxドキュメント:

max_dir_size_kb=n
    This limits the size of the directories so that any
    attempt to expand them beyond the specified limit in
    kilobytes will cause an ENOSPC error. This is useful in
    memory-constrained environments, where a very large
    directory can cause severe performance problems or even
    provoke the Out Of Memory killer. (For example, if there
    is only 512 MB memory available, a 176 MB directory may
    seriously cramp the system's style.)

ENOSPC(エラーメッセージに翻訳されました)No space left on deviceperror

したがって、インストール時にオプションが指定されていない(または非常に大きな数字で指定されている)ことを確認してください。

また、次の点に注意してください。

  • 1つのフォルダにあまりにも多くのファイルを保存するのは良い考えではないようです。リレーショナルデータベースが必要ですか?オブジェクトストレージ?
  • 4.8TB:これは最新のハードドライブでは珍しいことではありませんが、正直なところ、この時代に何かを設定するときは、LVMなどのストレージプールを使用してください。これにより、ライブシステムのスナップショットなどの情報を取得できます。

おすすめ記事