整理文件
-
将fold-rsync 进行同步, 得到 remote/fold-rsync
-
将fold-rsync 硬链接到 fold-work, 在 fold-work内重命名
-
确保remote中没有 remote/fold-work 这个文件夹. 将fold-rsync fold-work 一起同步过去, 得到 remote/fold-rsync, remote/fold-work. 在这个过程中, remote/fold-work的内容完全来自remote/fold-rsync的硬连接
-
此时可删除fold-rsync, 只保留fold-work.
参考: https://lincolnloop.com/blog/detecting-file-moves-renames-rsync/
|
|
Rsync 重命名
|
|
Rsync 选项
-
-n
,--dry-run
: perform a trial run with no changes made -
-z
,--compress
: compress file data during the transfer -
-h
,--human-readable
: output numbers in a human-readable format -
-P
same as --partial --progress -
-a
,--archive
:archive mode; equals -rlptgoD (no -H,-A,-X) -
--partial
: keep partially transferred files -
-I
--ignore-times
don't skip files that match size and time -
--size-only
: skip files that match in size -
-c
--checksum
: Use checksum to sync file -
--remove-source-files
: sender removes synchronized files (non-dir) -
-H
--hard-links
: Look for hard-linked files in the source and link together the corresponding files on the destination. -
--delete-delay
: Request that the file-deletions on the receiving side be computed during the transfer.
rsync -avhHPz --delete-delay --delay-updates --fuzzy
-b
、--backup
参数指定在删除或更新目标目录已经存在的文件时,将该文件更名后进行备份,默认行为是删除。更名规则是添加由--suffix
参数指定的文件后缀名,默认是~
。
--backup-dir
参数指定文件备份时存放的目录,比如--backup-dir=/path/to/backups
。
-c
、--checksum
参数改变rsync
的校验方式。默认情况下,rsync 只检查文件的大小和最后修改日期是否发生变化,如果发生变化,就重新传输;使用这个参数以后,则通过判断文件内容的校验和,决定是否重新传输。
--existing
、--ignore-non-existing
参数表示不同步目标目录中不存在的文件和目录。
-i
参数表示输出源目录与目标目录之间文件差异的详细情况。
--include
参数指定同步时要包括的文件,一般与--exclude
结合使用。
--link-dest
参数指定增量备份的基准目录。
-P
参数是--progress
和--partial
这两个参数的结合。
--partial
参数允许恢复中断的传输。不使用该参数时,rsync
会删除传输到一半被打断的文件;使用该参数后,传输到一半的文件也会同步到目标目录,下次同步时再恢复中断的传输。一般需要与--append
或--append-verify
配合使用。
--partial-dir
参数指定将传输到一半的文件保存到一个临时目录,比如--partial-dir=.rsync-partial
。一般需要与--append
或--append-verify
配合使用。
同步设置
--ignore-existing
参数表示只要该文件在目标目录中已经存在,就跳过去,不再同步这些文件。
--remove-source-files
参数表示传输成功后,删除发送方的文件。
--size-only
参数表示只同步大小有变化的文件,不考虑文件修改时间的差异。
--suffix
参数指定文件名备份时,对文件名添加的后缀,默认是~
。
-u
、--update
参数表示同步时跳过目标目录中修改时间更新的文件,即不同步这些有更新的时间戳的文件。
Rsync 协议
除了使用 SSH,如果另一台服务器安装并运行了 rsync 守护程序,则也可以用rsync://
协议(默认端口873)进行传输。具体写法是服务器与目标目录之间使用双冒号分隔::
。
|
|
注意,上面地址中的module
并不是实际路径名,而是 rsync 守护程序指定的一个资源名,由管理员分配。
如果想知道 rsync 守护程序分配的所有 module 列表,可以执行下面命令。
|
|
rsync 协议除了使用双冒号,也可以直接用rsync://
协议指定地址。
|
|
基准目录
rsync 的最大特点就是它可以完成增量备份,也就是默认只复制有变动的文件。
除了源目录与目标目录直接比较,rsync 还支持使用,即将源目录与基准目录之间变动的部分,同步到目标目录。
具体做法是,第一次同步是全量备份,所有文件在基准目录里面同步一份。以后每一次同步都是增量备份,只同步源目录与基准目录之间有变动的部分,将这部分保存在一个新的目标目录。这个新的目标目录之中,也是包含所有文件,但实际上,只有那些变动过的文件是存在于该目录,其他没有变动的文件都是指向基准目录文件的硬链接。
--link-dest
参数用来指定同步时的基准目录。
|
|
上面命令中,--link-dest
参数指定基准目录/compare/path
,然后源目录/source/path
跟基准目录进行比较,找出变动的文件,将它们拷贝到目标目录/target/path
。那些没变动的文件则会生成硬链接。这个命令的第一次备份时是全量备份,后面就都是增量备份了。
下面是一个脚本示例,备份用户的主目录。
|
|
上面脚本中,每一次同步都会生成一个新目录${BACKUP_DIR}/${DATETIME}
,并将软链接${BACKUP_DIR}/latest
指向这个目录。下一次备份时,就将${BACKUP_DIR}/latest
作为基准目录,生成新的备份目录。最后,再将软链接${BACKUP_DIR}/latest
指向新的备份目录。