“設備上沒有剩餘空間”還有其他原因嗎?
我在 Ubuntu 伺服器系統上使用 Dirvish 將高畫質備份到外部 USB 3.0 驅動器。直到幾天前,一切正常,但現在每個備份都失敗了,“設備上沒有剩餘空間 (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
還有很多inode:
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 仍然可以完全訪問這些文件。
編輯:
我剛剛檢查了臨時目錄:
- /tmp 僅包含一個空的 .webmin 文件夾
- /var/tmp 為空
這些目錄所在的文件系統有大量可用空間和 inode:
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% /
編輯2:
目錄很大,但不超過 2 GB。備份失敗的那個甚至不是最大的一個,它包含 7530 個文件。
編輯3:
發布此問題時我認為不相關的一個資訊:
備份開始失敗的前一天,我在備份的文件系統上啟動了 acls。我現在假設這觸發了 Dirvish(或 rsync)認為所有文件都已更改,因此要復製而不是硬連結的文件列表非常大。這可能意味著某些緩衝區太小。
今天,對空磁碟的完整備份完美無缺。接下來我將嘗試增量備份。這將顯示啟動 acls 是否是問題的原因。
我的懷疑(參見 EDIT3)顯然是正確的:向文件系統添加 acl 支持使 rsync/dirvish 認為所有文件都已更改。因此,它沒有進行增量備份並僅創建指向現有文件的硬連結,而是嘗試創建完整備份,這當然失敗了,因為硬碟沒有足夠的空間。
所以錯誤資訊實際上是正確的。
使用空備份磁碟重新啟動後,增量備份與以前一樣工作。
看著剩下的 2% 的 inode 讓我想到了 EXT 文件系統強加的根保留。你可能想看看這些:
我會嘗試 .tar.gz 一些較舊的備份,希望它會減少使用中的 inode 數量。