Linux

“設備上沒有剩餘空間”還有其他原因嗎?

  • April 25, 2018

我在 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 文件系統強加的根保留。你可能想看看這些:

  1. 在文件系統上為 root 保留空間 - 為什麼?
  2. 非作業系統磁碟的“文件系統保留塊”大小是否合理? "

我會嘗試 .tar.gz 一些較舊的備份,希望它會減少使用中的 inode 數量。

引用自:https://serverfault.com/questions/482173