私は次のコマンドを使用して私のサーバー上の多数のファイルを探して移動します。
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
ディレクトリをマウントするときは、設定を超えたりデフォルト値をそのままにしたりできます。
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 device
perror
したがって、インストール時にオプションが指定されていない(または非常に大きな数字で指定されている)ことを確認してください。
また、次の点に注意してください。
- 1つのフォルダにあまりにも多くのファイルを保存するのは良い考えではないようです。リレーショナルデータベースが必要ですか?オブジェクトストレージ?
- 4.8TB:これは最新のハードドライブでは珍しいことではありませんが、正直なところ、この時代に何かを設定するときは、LVMなどのストレージプールを使用してください。これにより、ライブシステムのスナップショットなどの情報を取得できます。