我有一个 rdiff-backup 设置,可以通过网络备份一个大的 sql 转储(1.6GB)。它正在备份的服务器(Ubuntu 10.10 服务器)有一个小的本地磁盘(4GB,1GB 可用),但有一个 cifs 挂载到一个大的 nas(大量可用空间)。我设置了从用户帐户的主目录到 NAS 的软链接cifs mount
,并且rdiff-backup
从客户端启动的作业正在写入该目录。
最近,工作一直失败。日志文件说:
Sun Oct 24 21:20:14 2010 Sending back exception [Errno 28] No space left on device of type type 'exceptions.IOError'
我已经watch df
在服务器上手动运行了该作业,我可以看到本地驱动器上 1GB 的可用空间正在减少,直到它达到零。然后作业失败。需要明确的是,磁盘空间在 NAS 上不是问题。
因此,出于某种原因,rdiff-backup 使用本地磁盘上的某个位置作为临时工作目录,而不是像我期望的那样,在 NAS 设备上存储备份的实际目录。但是,我找不到它正在使用的目录,所以我可以用它自己的空间单独安装它。du -sx
在作业/
运行时进行操作会显示总文件大小/
保持不变,为 3.0GB,即使df
说/
已满。
如果我列出rdiff
进程打开的文件句柄,我会在 NAS 挂载上获得一些套接字和一些文件。本地磁盘上没有什么明显的。
这是怎么回事?为什么df
说/
满了,du -sx
却说有1GB免费?为什么rdiff-backup
在应该使用的时候填满本地磁盘cifs mount
?它实际上在写什么?
正如评论中已经提到的maco,
/tmp
是问题所在。使用 rdiff-backup,您可以使用参数配置临时目录位置
如果您将 tempdir 设置为该 CIFS 挂载,问题应该会消失。(我们遇到了同样的问题,并且解决了它,您可能还有其他问题)
我注意到,
[Errno 28] No space left on device
当对目标目录的写访问被中断时,例如由于 USB 电缆松动,也会发生同样的错误。托管目标目录的卷可能仍会在打嗝后挂载,但为了安全起见,该卷将恢复为只读。因此,当用户再次尝试使用 rdiff-backup 时,它将再次失败,并出现同样的错误。
如果是外部 USB 驱动器,请断开并重新连接驱动器。之后, rdiff-backup 应该再次工作。