抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

rsync是一个用于文件同步和备份的常用命令行工具。它可以在本地或远程系统之间同步文件和目录,并仅复制发生更改的部分,从而提高效率。

Rsync
rsync

Rsync

无论是在设备与nas之间进行数据同步,或是nas对冷备盘的数据备份,都是一种比copy更可靠的数据传输方法。

安装和使用

00 安装rsync

1
2
3
4
5
6
7
8
# Debian
$ sudo apt-get install rsync

# Red Hat
$ sudo yum install rsync

# Arch Linux
$ sudo pacman -S rsync
  • 使用rsync同步时,传输的双方都必须安装 rsync。

01 备份和同步

使用-r,最好是-a来进行备份或者同步。
一个经典的同步命令:

1
2
3
4
5
6
7
rsync -azv --delete /Path/To/A /Path/To/B

# 这个命令会同步本地文件夹到远程服务器上的目标位置。
# -a选项表示递归同步并保持文件属性。
# -v选项启用详细输出。
# -z选项启用压缩传输以减少数据传输量。
# --delete选项删除路径B中多余的文件。

这行命令将路径A的整个文件夹传输并完全备份到路径B,包括保持元信息、删除原先存在的文件,并详细输出。

  • 默认情况下,rsync不会删除路径B中已有的内容,除非使用--delete选项。
  • 路径末尾添加斜杠,则备份其中的内容;不添加斜杠,则备份文件夹本身。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    rsync -a source/ destination
    rsync -a source/ destination/
    # 这两个命令的效果相同。
    # 这会将source内的文件传输到destination中。

    rsync -a source destination
    rsync -a source destination/
    # 这两个命令的效果相同。
    # 这会直接把source文件夹传输到destination中。

02 模拟和比较

使用-n进行模拟,此时不会执行同步,配合-av能够进行文件对比。
一个经典的模拟命令:

1
2
rsync -anv --delete /Path/To/A/ /Path/To/B
# 这个命令会**模拟**将本地文件夹的内容同步到远程服务器上的目标位置。
  • 默认情况下,rsync不会探究文件内容的不同,只要文件大小最后修改时间一样,rsync就会认为文件相同。
  • 使用--size-only或者--ignore-times可以简化比较步骤。
  • 使用--checksum来严格执行比较。

RSYNC 不会比较文件内容 - 阅微堂摘抄的部分段落:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
通过设置合适的参数,可以控制 rsync 的比较算法。事实上, rsync 有三步来比较文件:

1. 比较文件大小。
2. 比较文件最后修改日期。
3. 比较文件内容,通过`checksum`(比如`md5sum`)。

我们可以用参数来控制 rsync 执行上面的哪些步骤:

- 默认的算法只执行 1 和 2。
- 参数`--size-only`只检查 1 ,亦即只要文件一样大,即使修改日期不一样,就认为文件一样,更不会去检查文件内容。
- 参数`--ignore-times`是忽略所有检查,直接认为文件都不一样,然后总是复制文件。
- 参数`--checksum`是在 1 的基础上执行 3 ,比较文件内容。如果文件大小不一样,可以确保内容不一样。如果文件大小一样,那么直接比较文件内容,不会执行 2 中的比较修改日期。该方法最安全,但需要读取两边的文件内容,某些情况下要慢很多(尤其是最后比较出来的文件内容一样的情况)。

详细的算法可参考 [TR-CS-96-05 The rsync algorithm](https://www.andrew.cmu.edu/course/15-749/READINGS/required/cas/tridgell96.pdf)。

该使用什么参数:

- 大部分情况下用默认参数即可。
- 如果会出现文件大小和修改时间一样,但内容不一样的情况,此时需要用`--checksum`
- 确定文件内容大概率不一样需要同步,可以直接使用`--ignore-times`,这比`--checksum`省去了检查文件内容的时间。

03 参数

一些方便的配置参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
-a
# 选项指示同步文件,并同步元信息(比如修改时间、权限等)。可以代替-r。
-n
# 模拟同步。
-v
# 输出详细内容。
-z
# 启用压缩以减少数据传输量。

--update,-u
# 选项指示rsync仅复制源目录中更新或修改过的文件。
--delete
# 选项指示rsync删除目标目录中不存在于源目录的文件。
--progress
# 选项会显示同步过程中的进度信息。

--size-only
# 比较文件时,只要文件大小一致,就判定为同一文件。
--ignore-times
# 比较文件时,强制判断所有文件都不一样。
--checksum
# 比较文件时,详细比较文件大小和内容。较慢,但是最安全。

--exclude
# 排除某个文件或者文件夹,跳过比较,用=连接或用``包括。

实例

  • 快速同步我的笔记文件和博客文件:

    1
    rsync -anv --delete /DATA/Documents/Obsidian/Code/Blog/ /DATA/AppData/hexo/blog/source/_posts/
  • 快速同步我的音乐文件夹:

    1
    rsync -a -u /DATA/Media/Music/ /DATA/Nas/8_音乐/ --exclude .sync

参考

传送门:rsync 用法教程 - 阮一峰的网络日志

还有……

我脑袋好差……理解起来好难……

评论