私は、HDDを外付けのUSB 3.0ドライブにバックアップするために、UbuntuサーバーシステムでDirvishを使用しています。数日前まではすべて正常に機能していましたが、現在はすべてのバックアップが失敗し、「デバイスに空き容量がありません(28)」と「ファイルシステムがいっぱいです」です。残念ながら、それはそれほど単純ではありません。デバイスには500 GB以上の空き容量があります。
詳細:
rsync_error:
rsync: write "/mnt/backupsys/shd/gesichert1/20130223_213242/tree/<SomeFilename1>.eDJiD9": No space left on device (28)
rsync: writefd_unbuffered failed to write 4 bytes to socket [sender]: Broken pipe (32)
rsync: write "/mnt/backupsys/shd/gesichert1/20130223_213242/tree/<SomeFilename2>.RHuUAJ": No space left on device (28)
rsync: write "/mnt/backupsys/shd/gesichert1/20130223_213242/tree/<SomeFilename3>.9tVK8Z": No space left on device (28)
rsync: write "/mnt/backupsys/shd/gesichert1/20130223_213242/tree/<SomeFilename4>.t3ARSV": No space left on device (28)
[... some more files ...]
rsync: connection unexpectedly closed (2712185 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]
ヒットするまで、ログは通常どおりに見えます。
<SomeFilename1>
<SomeFilename2>
<SomeFilename3>
<SomeFilename4>
<PartOfAFilename>filesystem full
write error, filesystem probably full
broken pipe
RESULTS: warnings = 0, errors = 1
ただし、上記のように、デバイスには多くのスペースがあります。
df -h
/dev/sdg1 2.7T 2.0T 623G 77% /mnt/backupsys/shd
また、多くのiノードが残っています。
df -i
/dev/sdg1 183148544 2810146 180338398 2% /mnt/backupsys/shd
デバイスはrwとしてマウントされます。
mount
/dev/sdg1 on /mnt/backupsys/shd type ext3 (rw)
プロセスはrootとして実行されています。
私は何も変更していないと言っていましたが、それはまったく当てはまりません。バックアップしているドライブのACLをオンにしました。
/dev/md0 on /mnt/md0 type ext4 (rw,acl)
それが問題でしょうか?はいの場合、どのように? rootはまだファイルへのフルアクセスを持っています。
編集:
一時ディレクトリを確認しました:
これらのディレクトリが存在するファイルシステムには、十分な空き領域とiノードがあります。
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 289G 55G 220G 20% /
df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 19202048 167644 19034404 1% /
EDIT2:
ディレクトリはかなり大きいですが、> 2 GBではありません。バックアップが失敗するのは最大のものの1つでもありません。7530ファイルが含まれています。
EDIT3:
この質問を投稿するときに関連するとは思わなかった1つの情報:
バックアップが失敗し始める前日に、バックアップされたファイルシステムでACLをアクティブにしていました。これにより、Dirvish(またはrsync)がすべてのファイルが変更されたと見なし、ハードリンクではなくコピーされるファイルのリストが非常に大きくなったと思います。これは、一部のバッファが小さすぎることを意味している可能性があります。
今日、空のディスクへの完全バックアップは問題なく機能しました。次に、増分バックアップを試します。これは、ACLのアクティブ化が問題の原因であったかどうかを示します。
私の疑い(EDIT3を参照)は正しかったようです。ファイルシステムにACLサポートを追加すると、rsync/dirvishはすべてのファイルが変更されたと考えました。そのため、増分バックアップを作成して既存のファイルへのハードリンクを作成するだけでなく、フルバックアップを作成しようとしましたが、ハードディスクに十分なスペースがないために失敗しました。
したがって、エラーメッセージは実際には正しいものでした。
空のバックアップディスクで再度開始した後、増分バックアップは以前と同様に機能しました。
残っているiノードの2%を見て、EXTファイルシステムが課しているルート予約について考えさせられました。これらをチェックしてみてください:
古いバックアップの一部を.tar.gzして、使用中のiノードの数が減ることを期待しています。
Dummzeuchが彼の問題の解決策を見つけたようですが、実際には、特定のディレクトリを転送しようとしているときに、ディスクに十分なiノード/空きスペースがあり、「デバイスにスペースが残っていません」と表示されるケースがもう1つ見つかりました。
これは、ext4ファイルシステムでフォーマットされたブロックデバイスでのハッシュの衝突が原因で発生します。特に、ディレクトリインデックスが有効になっていて、単一のディレクトリが100kを超えるファイルをホストし、ファイルの名前が同じアルゴリズムから生成されている場合(キャッシュファイル、md5sumファイル名など) 。)
解決策は、別のディレクトリインデックスアルゴリズムを試すことです。
tune2fs -E "hash_alg=tea" /dev/blockdev_name
または、そのブロックデバイスのディレクトリインデックスを完全に無効にする(パフォーマンスを低下させる可能性があります)
tune2fs -O ^dir_index /dev/blockdev_name
別の解決策は、そのようなファイルでディレクトリを埋めているものを確認し、ソフトウェアを修正することです。
考えられる解決策は、大量のファイルを含むフォルダーのコンテンツを複数の個別のサブフォルダーに分割することです。
問題の詳細な説明は、Axel Wagnerがここに提示します
http://blog.merovius.de/2013/10/20/ext4-mysterious-no-space-left-on.html
乾杯。
ディレクトリ自体には2GBのサイズ制限があります。つまり、ディレクトリサイズが2GBを超えるほど多くのファイルがある場合(ディレクトリ内のファイルのサイズではない)、問題が発生します。そうは言っても、2.8Mのiノードしか使用されていないので、それは問題にはなりません。通常、約15Mのiノードが発生します。
したがって、これはあまり役に立ちません-しかし、バックアップデバイスでext4を試してみませんか?
SysctlのInotifyウォッチャー制限を増やします。
fs.inotify.max_user_watches = 100000
そして再起動するか、sysctl -w
そのバージョンも。
通常はそれで十分です。カーネルで開かれているファイルが多すぎて、エラーは完全に誤解を招くものです。 Dropboxはその典型的な例です。
他にいくつかのことを確認することをお勧めします。
問題の解決策を探しているときに、このトピックを見つけました。
実際、ENOSPCには少なくとも他の理由があります。そして、ZFSファイルシステムからEXT4ファイルシステムにコピーするときに、rsyncを使用してそれを見つけました。
rsync: rsync_xal_set: lsetxattr(""/my/file/path"","example.xattr.attribute") failed: No space left on device (28)
この場合:
ENOSPC - There is insufficient space remaining to store the extended attribute.
man 7 xattr
説明:
In the current ext2, ext3, and ext4 filesystem implementations, the total bytes used by the names and values of all of a file's extended attributes
must fit in a single filesystem block (1024, 2048 or 4096 bytes, depending on the block size specified when the filesystem was created).
私の場合は、ファイルシステム全体を再フォーマットする必要があることを意味します。 :-(