- 4-10-1 内容:
- -b --backup:rsync 备份文件。传输文件的时候如检测到源文件与目标目录文件有同名文件。而大小、修改时间不一致,则对目标目录中的旧文件进行备份,文件后缀加上 ~ 符号,然后传输源文件到目标目录备份。如目标目录没有同名文件则会创建一个备份文件,新创建的备份文件不会带 ~ 符号。
- 步骤如下:
- test 目录下创建一个 backups_b 用作备份目录。
- test 目录下新建 SRC 目录用作装载源文件的目录。SRC 目录下新建三个文件,分别是 demo1.txt、demo2.txt 和 demo3.txt。
- 目录结构如 tree 所示。
[root@localhost test]#
[root@localhost test]# mkdir backups_b ## test 目录下新建 backups_b 目录
[root@localhost test]# mkdir SRC ## test 目录下新建 SRC 目录
[root@localhost test]# cd SRC/
[root@localhost SRC]#
## SRC 目录下新建 demo1.txt、demo2.txt 和 demo3.txt 三个文件
[root@localhost SRC]# touch demo1.txt ; touch demo2.txt ; touch demo3.txt
[root@localhost test]# tree
.
├── backups_b
└── SRC
├── demo1.txt
├── demo2.txt
└── demo3.txt
2 directories, 3 files
[root@localhost test]#
- rsync -b SRC/demo1.txt backups_b/ —— 通过 rsync -b 把 SRC 目录下的 demo1.txt 文件备份到 backups_b/ 目录下。由于此时的备份目录是一个空目录。所以会生成一个 demo1.txt 备份文件。(没有同名文件不会带 ~ 符号)
- tree 列出目录结构 和 ll 列出 backups_b/ 目录下的文件详情。查看 demo1.txt 是否备份到 backups_b/ 目录下。
## 把 SRC 目录下的 demo1.txt 文件备份到 backups_b/ 目录下
[root@localhost test]# rsync -b SRC/demo1.txt backups_b/
[root@localhost test]#
[root@localhost test]# tree
.
├── backups_b
│ └── demo1.txt ## 首个备份文件 demo1.txt 不会带 ~ 符号标识。
└── SRC
├── demo1.txt
├── demo2.txt
└── demo3.txt
2 directories, 4 files
- ll 列出 SRC/ 目录下的源文件详情。对比 SRC/ 目录下的 demo1.txt 文件属性 和 backups_b/ 目录下的 demo1.txt 文件属性。两个 demo1.txt 文件的时间属性会不一样。备份目录 backups_b/ 下的 demo1.txt 文件更新为系统时间。
[root@localhost test]# ll backups_b/
total 0
## backups_b/ 目录下的 demo1.txt 时间是跟系统时间 10:28。
-rw-r--r--. 1 root root 0 Jul 24 10:28 demo1.txt
[root@localhost test]#
[root@localhost test]# ll SRC/
total 0
-rw-r--r--. 1 root root 0 Jul 22 22:44 demo1.txt ## SRC源文件 demo1.txt 时间 22:44
-rw-r--r--. 1 root root 0 Jul 22 22:44 demo2.txt
-rw-r--r--. 1 root root 0 Jul 22 22:44 demo3.txt
- 再用 rsync -b SRC/demo1.txt backups_b/ 把 SRC 目录下的 demo1.txt 文件备份到 backups_b/ 目录下。
- tree 列出目录结构 和 ll 列出 backups_b/ 目录下的文件详情。查看 备份目录 backups_b/ ,由于之前已经有了一个同名的 demo1.txt 文件存在。由于 SRC 源目录下的 demo1.txt 文件和 backups_b/ 目录下demo1.txt 文件的时间不一致。所以这次传输的 demo1.txt 文件会作为新文件存在,原来 demo1.txt 文件会表示为备份文件存在,后缀带 ~ 符号。
## 把 SRC 目录下的 demo1.txt文件再一次备份到 backups_b/ 目录下。
[root@localhost test]# rsync -b SRC/demo1.txt backups_b/
[root@localhost test]#
[root@localhost test]# tree
.
├── backups_b
│ ├── demo1.txt ## 新文件
│ └── demo1.txt~ ## 原来的同名文件会加上 ~ 符号,作为备份文件
└── SRC
├── demo1.txt
├── demo2.txt
└── demo3.txt
2 directories, 5 files
[root@localhost test]#
[root@localhost test]# ll backups_b/
total 0
-rw-r--r--. 1 root root 0 Jul 24 10:47 demo1.txt ## 新文件
-rw-r--r--. 1 root root 0 Jul 24 10:28 demo1.txt~ ## 旧文件
[root@localhost test]#
- -- backup 参数和 -b 参数一样效果。
- 步骤如下:
- test 目录下创建一个 backups_backup 用作备份目录。
- 源目录沿用上面的 SRC 目录框架。
- tree 查看目录结构是否生成 backups_backup 目录。
[root@localhost test]#
[root@localhost test]# mkdir backups_backup
[root@localhost test]#
[root@localhost test]# tree
.
├── backups_backup
└── SRC
├── demo1.txt
├── demo2.txt
└── demo3.txt
2 directories, 3 files
- rsync --backup 把 SRC/demo2.txt 文件传输 backups_backup/ 目录。
- tree 查看目录结构, backups_backup 目录是否生成 demo2.txt。
[root@localhost test]# rsync --backup SRC/demo2.txt backups_backup/
[root@localhost test]#
[root@localhost test]# tree
.
├── backups_backup
│ └── demo2.txt
└── SRC
├── demo1.txt
├── demo2.txt
└── demo3.txt
2 directories, 4 files
- ll 列出备份目录 backups_backup/ 和 源目录 SRCd/ 文件详细信息。查看两个 demo2.txt,backups_backup/ 目录的 demo2.txt 跟系统时间,与 SRC/ 的 demo2.txt 时间不一样。
[root@localhost test]# ll backups_backup/
total 0
-rw-r--r--. 1 root root 0 Jul 24 15:12 demo2.txt ## 系统时间
[root@localhost test]#
[root@localhost test]# ll SRC/
total 0
-rw-r--r--. 1 root root 0 Jul 22 22:44 demo1.txt
-rw-r--r--. 1 root root 0 Jul 22 22:44 demo2.txt ## 源文件创建时间
-rw-r--r--. 1 root root 0 Jul 22 22:44 demo3.txt
- 再用 rsync --backup SRC/demo2.txt backups_b/ 把 SRC/demo2.txt 文件备份到 backups_b/ 目录下。
- tree 列出目录结构,查看 backups_backup 是否生成 demo2.txt~ 文件。(后缀带 ~ 符号)
[root@localhost test]# rsync --backup SRC/demo2.txt backups_backup/
[root@localhost test]#
[root@localhost test]# tree
.
├── backups_backup
│ ├── demo2.txt ## 新文件
│ └── demo2.txt~ ## 原来的同名文件会加上 ~ 符号,作为备份文件
└── SRC
├── demo1.txt
├── demo2.txt
└── demo3.txt
2 directories, 5 files
[root@localhost test]#
[root@localhost test]# ll backups_backup/
total 0
-rw-r--r--. 1 root root 0 Jul 24 15:13 demo2.txt ## 新文件
-rw-r--r--. 1 root root 0 Jul 24 15:12 demo2.txt~ ## 旧文件
[root@localhost test]#
[root@localhost test]# ll SRC/
total 0
-rw-r--r--. 1 root root 0 Jul 22 22:44 demo1.txt
-rw-r--r--. 1 root root 0 Jul 22 22:44 demo2.txt ## 源文件创建时间
-rw-r--r--. 1 root root 0 Jul 22 22:44 demo3.txt
[root@localhost test]#
-
通过上述的测试,当 rsync 使用 -b 或 --backup 参数的时候。首先会对源文件和目标目录文件的文件大小,修改时间进行比对。如果文件大小或时间不一致则会备份目标目录的文件,文件后面用 ~ 符号标识。然后,将源文件传输到目标目录。由于,上面只用 -b 和 --backup,没有用 -a 参数全属性传输,所每次传输到 backups_backup/ 备份目录的文件时间都会跟系统时间。正因如此,每次执行 rsync -b 或 --backup 参数的时候都会因为源文件和目标目录文件的修改时间不一致而生成一个新文件 和 把原来同名的文件用 ~ 符号标识生成一个备份文件保存在同一目录。
-
上述案例工作流程大概是:
1、 第一次执行 rsync -b / --backup 检测源文件和目标目录的文件时,由于目标目录(备份目录)为空。所以,首次备份会生成一个新文件。
2、第二次执行 rsync -b / --backup,也是用源文件的时间,大小和目标目录的文件进行对比。由于源文件的时间不会变,而目标目录文件的时间是跟系统时间。所以这次的检测时间不一致,然后执行目标目录文件的备份(~ 符号作为标识), 再传输源文件到目标目录。此时新的文件也是系统当前时间。
3、源文件时间不变,而每次同步到目标目录的文件则是系统时间。如此类推,即使文件内容没有改动,没有变化(可以从上述案例文件看出文件容量都是 0 ,只是一个空文件),也会从文件的修改时间上判断为新文件而传输到目标目录,上一次更新的文件则会变为备份文件。每次单纯的 -b 或 --backup 就是用当前系统时间传输一次文件到目标目录,以前的文件则变为备份(~ 符号作为标识)。
网友评论