我制作了一个非常简单的备份脚本,用于rsync
将一些文件夹备份到 USB 记忆棒。这只是为了快速进行每日备份。
命令是
rsync -av --delete
其次是--exclude
选项和路径。
但现在我意识到这可能不安全:
如果我的硬盘损坏,某些文件无法读取,会发生什么?rsync
如果无法读取源文件,会删除 USB 上的文件
吗?或者更一般地说:除了“我删除硬盘上的文件”之外,还有其他情况会导致 USB 上的文件被删除吗?
答案1
首先,--delete
如果您不了解背景,该选项可能会导致一些不必要的破坏性结果。例如,如果源变为空,则目标中的所有现有文件都将被删除,或者如果从源中删除了某些文件,则这些文件也将从目标中删除。
如果我的硬盘损坏了,某些文件无法再读取,会发生什么?
如果rsync
无法读取源,它会显示权限被拒绝的消息,并且不会执行任何进一步的操作。因此,目标位置的现有文件将是安全的。
除了“我删除硬盘上的文件”之外,还有其他情况会导致 USB 驱动器上的文件被删除吗?
除非您的 USB 本身损坏,否则不会出现这样的情况(您不会从源、硬盘中删除文件)USB 上的现有文件会被rsync
选项删除--delete
。
测试:
% ls -1 source dest
dest:
source:
foo
% rsync -av --delete source/ dest
sending incremental file list
./
foo
sent 143 bytes received 38 bytes 362.00 bytes/sec
total size is 16 speedup is 0.09
% ls -1 source dest
dest:
foo
source:
foo
% chmod 000 source
% rsync -av --delete source/ dest
sending incremental file list
rsync: change_dir "/source" failed: Permission denied (13)
sent 20 bytes received 12 bytes 64.00 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.0]
% ls -1 source dest
dest:
foo
ls: cannot open directory source: Permission denied
答案2
解决损坏和删除问题的一个简单方法是采用适当的备份程序。轮换一系列三个(或更多)USB 拇指驱动器,每周运行一次此命令时使用最老的“备份”作为插入的驱动器。这样,如果您在轮换 USB 驱动器之前发现损坏,则可以从中恢复。这称为 FIFO(先进先出)。
还有其他更复杂的方案,它们都与您的备份方法兼容。维基百科上的以下链接提供了其中一些方案的入门介绍:
https://en.wikipedia.org/wiki/Backup_rotation_scheme