“设备上没有剩余空间”还有其他原因吗?

dum*_*uch 15 linux ubuntu filesystems rsync

我在 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]
Run Code Online (Sandbox Code Playgroud)

日志看起来和往常一样,直到它命中:

<SomeFilename1>
<SomeFilename2>
<SomeFilename3>
<SomeFilename4>
<PartOfAFilename>filesystem full
write error, filesystem probably full
broken pipe
RESULTS: warnings = 0, errors = 1
Run Code Online (Sandbox Code Playgroud)

但是,如上所述,设备上有很多空间:

df -h
/dev/sdg1       2.7T  2.0T  623G  77% /mnt/backupsys/shd
Run Code Online (Sandbox Code Playgroud)

而且还有很多inode:

df -i
/dev/sdg1      183148544 2810146 180338398    2% /mnt/backupsys/shd
Run Code Online (Sandbox Code Playgroud)

该设备安装为 rw:

mount
/dev/sdg1 on /mnt/backupsys/shd type ext3 (rw)
Run Code Online (Sandbox Code Playgroud)

该进程以 root 身份运行。

我正要说我没有改变任何东西,但这并不完全正确:我已经为要备份的驱动器打开了 acl:

/dev/md0 on /mnt/md0 type ext4 (rw,acl)
Run Code Online (Sandbox Code Playgroud)

这可能是问题吗?如果是,如何?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% /
Run Code Online (Sandbox Code Playgroud)

编辑2:

目录很大,但不大于 2 GB。备份失败的那个甚至不是最大的一个,它包含 7530 个文件。

编辑3:

发布此问题时我认为不相关的一项信息:

在备份开始失败的前一天,我在备份的文件系统上激活了 acl。我现在假设这触发了 Dirvish(或 rsync)认为所有文件都已更改,因此要复制而不是硬链接的文件列表非常大。这可能意味着某些缓冲区太小。

今天,对空磁盘的完整备份完美无缺。接下来我将尝试增量备份。这将显示激活 acls 是否是问题的原因。

dum*_*uch 5

我的怀疑(参见 EDIT3)显然是正确的:向文件系统添加 acl 支持使 rsync/dirvish 认为所有文件都已更改。因此,它不是进行增量备份,而是创建到现有文件的硬链接,而是尝试创建完整备份,但由于硬盘没有足够的空间来进行备份,这当然失败了。

所以错误信息实际上是正确的。

使用空备份磁盘重新启动后,增量备份的工作方式与以前一样。