4-10.3 Linux 中的文件同步传输 --- rsync -b、--backup 配合 -a 使用

  • 4-10.2 提及到单纯用 -b 或 --backup 进行文件传输,生成的目标文件是当前的系统时间。那么每次进行相同文件的传输,系统都会进行源文件和目标文件的属性比对。即使文件内容没有变化,由于时间不一致都会进行一轮新的文件传输。如果目标目录有相同文件名的文件,以当前系统时间在目标目录产生一个新文件,旧时间的文件则变为备份文件,后缀带 ~ 符号而存在。

  • 实际上这样的会变成每次都会传输一次文件,和 cp 复制文件到目标目录操作一样,没有起到 rsync 增量备份的优势。rsync增量备份的优势是源文件对比目标文件没有改动的时候不传输,只传输有改动或新增的文件,这样才有效率。所以,在用 rsync 进行源文件备份的时候一般都会加 -a 参数,-a 是把源文件的属性一起传输到目标目录作备份。那么下次 rsync 进行传输时就会源文件对比备份文件,如果属性一致则跳过,只传输属性不一致,有改动的文件。

  • 4-10-3 内容:
    1、rsync -a -b / --backup 备份文件,传输文件的时候如检测到源文件与目标目录文件同名,大小、修改时间不一致,对目标目录中的旧文件进行备份,文件后缀加上 ~ 符号,然后传输一个新的备份文件到目标目录。如目标目录没有同名文件则会创建一个备份文件,新创建的备份文件不会带 ~ 符号。

    2、如果,源文件没有改动,与目标目录文件同名、大小、修改时间一致,则跳过备份操作。

    3、源文件只修改权限属性,文件大小和时间不改变的情况下 rsync -a -b / --backup传输文件到目标目录,如果目标目录已存在以前备份的同名文件则不会生成新的文件,但会更新目标目录文件的权限属性。


1、rsync -a -b / --backup 备份文件,如目标目录没有同名文件则会创建一个备份文件,新创建的备份文件不会带 ~ 符号。

  • 操作步骤:
    1、按照国际惯例,首先还是要建立测试所需的框架。mkdir backups_ab 创建一个目标目录(备份目录)。
    2、源目录沿用之前预设的 SRC目录框架,目录下有demo1.txt、demo2.txt 和 demo3.txt,三个空文件。
    3、如 tree 所示。
    4、ll SRC/ 查看目录详情。
[root@localhost test]# mkdir backups_ab
[root@localhost test]# 
[root@localhost test]# tree
.
├── backups_ab
└── SRC
    ├── demo1.txt
    ├── demo2.txt
    └── demo3.txt

2 directories, 3 files
[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]# 

  • 5、rsync -a -b / --backup 把SRC 目录 demo1.txt 和 demo2.txt 文件传输到 backups_ab 目录下。
    6、如 tree 所示,backups_ab 已有 demo1.txt 和 demo2.txt 文件。
[root@localhost test]# 
[root@localhost test]# rsync -a -b SRC/demo1.txt backups_ab/
[root@localhost test]# 
[root@localhost test]# rsync -a --backup SRC/demo2.txt backups_ab/
[root@localhost test]# 
[root@localhost test]# tree
.
├── backups_ab
│   ├── demo1.txt
│   └── demo2.txt
└── SRC
    ├── demo1.txt
    ├── demo2.txt
    └── demo3.txt

2 directories, 5 files

  • 7、查看 backups_ab 目录的 demo1.txt 和 demo2.txt 文件,与源目录 SRC 的 demo1.txt 和 demo2.txt 文件属性一致。
[root@localhost test]# ll backups_ab/
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
[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]# 


  • 如目标目录已存在同名的文件。当传输文件的时候检测到源文件与目标目录文件同名、大小、修改时间不一致。对目标目录中的旧文件进行备份,文件后缀加上 ~ 符号,然后创建一个新的备份文件。
  • 操作步骤:
    1、已知现在 backups_ab 目录下存在与源目录一致的 demo1.txt 和 demo2.txt 文件。
[root@localhost test]# ll backups_ab/
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
  • 2、vim 修改源目录 SRC 下的 demo1.txt 和 demo2.txt 文件内容。
# 编辑 SRC 下的 demo1.txt,输入内容,然后 Esc 输入 :wq! 保存文件
[root@localhost test]# vim SRC/demo1.txt     #

hello demo1
~                                                                                                             
~                                                                                                                                                                                                                         
:wq!     

# 同样方法编辑 SRC 下的 demo2.txt
[root@localhost test]# vim SRC/demo2.txt 

hello demo2
~                                                                                                             
~                                                                                                                                                                                                                    
:wq!        
                                   
  • 3、此时 ll SRC,查看 SRC目录下的 demo1.txt 和 demo2.txt 文件,他们的文件大小和时间都发生了变化。
[root@localhost test]# ll SRC/
total 8
-rw-r--r--. 1 root root 12 Jul 30 00:03 demo1.txt    ## 更新了文件大小和时间
-rw-r--r--. 1 root root 12 Jul 30 00:07 demo2.txt    ## 更新了文件大小和时间
-rw-r--r--. 1 root root  0 Jul 22 22:44 demo3.txt   
  • 4、把 SRC 更新了的 demo1.txt 和 demo2.txt 文件再 rsync -a -b / --backup 备份一次到 backups_ab 目录。
[root@localhost test]# rsync -a -b SRC/demo1.txt backups_ab/
[root@localhost test]# 
[root@localhost test]# rsync -a --backup SRC/demo2.txt backups_ab/
  • 5、由于目标目录已存在同名的文件。当传输文件的时候检测到源文件与目标目录文件同名、大小、修改时间不一致。对目标目录中的旧文件进行备份,文件后缀加上 ~ 符号,然后创建一个新的备份文件。如 tree 所示,backups_ab 目录下 demo1.txt 和 demo2.txt 文件分别都有两个带 ~ 符号的文件存在。
[root@localhost test]# 
[root@localhost test]# tree
.
├── backups_ab
│   ├── demo1.txt    ##新文件
│   ├── demo1.txt~    ##旧文件
│   ├── demo2.txt    ##新文件
│   └── demo2.txt~    ##旧文件
└── SRC
    ├── demo1.txt
    ├── demo2.txt
    └── demo3.txt

2 directories, 7 files
  • 6、通过 ll 查看 backups_ab 下的文件详情。rsync 更新了源文件的备份,新的 demo1.txt 和 demo2.txt 文件不带 ~ 符号。带 ~ 符号的 demo1.txt 和 demo2.txt 文件就是之前的文件。
[root@localhost test]# 
[root@localhost test]# ll backups_ab/
total 16
-rw-r--r--. 1 root root 12 Jul 30 00:03 demo1.txt    ##新文件
-rw-r--r--. 1 root root 0 Jul 22 22:44 demo1.txt~     ##旧文件
-rw-r--r--. 1 root root 12 Jul 30 00:07 demo2.txt    ##新文件
-rw-r--r--. 1 root root 0 Jul 22 22:44 demo2.txt~     ##旧文件
[root@localhost test]# 
[root@localhost test]# ll SRC/
total 8
-rw-r--r--. 1 root root 12 Jul 30 00:03 demo1.txt
-rw-r--r--. 1 root root 12 Jul 30 00:07 demo2.txt
-rw-r--r--. 1 root root  0 Jul 22 22:44 demo3.txt
[root@localhost test]# 


2、如果,源文件没有改动,与目标目录文件同名、大小、修改时间一致,则不进行备份操作。

  • 操作步骤:
    1、tree 查看当前目录结构
[root@localhost test]# 
[root@localhost test]# tree
.
├── backups_ab
│  ├── demo1.txt
│  ├── demo1.txt~
│  ├── demo2.txt
│  └── demo2.txt~
└── SRC
    ├── demo1.txt
    ├── demo2.txt
    └── demo3.txt

2 directories, 7 files
  • 2、backups_ab 目录下没有 demo3.txt。执行 rsync -a -b,把 SRC 目录下的 demo3.txt 备份到 backups_ab/ 目录下。
[root@localhost test]# 
[root@localhost test]# rsync -a -b SRC/demo3.txt backups_ab/
[root@localhost test]# 
  • 3、查看 backups_ab 和 SRC 目录。
[root@localhost test]# ll backups_ab/
total 16
-rw-r--r--. 1 root root 12 Jul 30 00:03 demo1.txt
-rw-r--r--. 1 root root 0 Jul 22 22:44 demo1.txt~  
-rw-r--r--. 1 root root 12 Jul 30 00:07 demo2.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    ## 备份文件 demo3.txt
[root@localhost test]# 
[root@localhost test]# ll SRC/
total 8
-rw-r--r--. 1 root root 12 Jul 30 00:03 demo1.txt
-rw-r--r--. 1 root root 12 Jul 30 00:07 demo2.txt
-rw-r--r--. 1 root root  0 Jul 22 22:44 demo3.txt
[root@localhost test]# 

  • 4、已知 SRC 的 demo3.txt 已经备份到 backups_ab。此时再执行一次 rsync -a -b,把 SRC 目录下的 demo3.txt 备份到 backups_ab/ 目录下。由于,源文件和目标目录文件大小、时间一致,所以不会产生新的备份文件。所以,也没有带 ~ 符号的 demo3.txt
## 再执行一次 rsync -a -b,把 SRC 目录下的 demo3.txt 备份到 backups_ab/ 目录下。
[root@localhost test]# rsync -a -b SRC/demo3.txt backups_ab/
[root@localhost test]# 
[root@localhost test]# ll backups_ab/
total 16
-rw-r--r--. 1 root root 12 Jul 30 00:03 demo1.txt
-rw-r--r--. 1 root root 0 Jul 22 22:44 demo1.txt~  
-rw-r--r--. 1 root root 12 Jul 30 00:07 demo2.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    ## 还是原来第一次备份的 demo3.txt
[root@localhost test]# 
[root@localhost test]# tree
.
├── backups_ab    ## 没有新增带 ~ 符号的demo3.txt 文件
│   ├── demo1.txt
│   ├── demo1.txt~
│   ├── demo2.txt
│   ├── demo2.txt~
│   └── demo3.txt
└── SRC
    ├── demo1.txt
    ├── demo2.txt
    └── demo3.txt

2 directories, 8 files


3、源文件只修改权限属性,文件大小和时间不改变的情况下 rsync -a -b / --backup传输文件到目标目录,如果目标目录已存在以前备份的同名文件则不会生成新的文件,但会更新目标目录文件的权限属性。

  • 操作步骤:
    1、先查询一下 backups_ab 和 SRC 的 demo3.txt 权限。
    权限都是 -rw-r--r--。
[root@localhost test]# 
[root@localhost test]# ll SRC/
total 8
-rw-r--r--. 1 root root 12 Jul 30 00:03 demo1.txt
-rw-r--r--. 1 root root 12 Jul 30 00:07 demo2.txt
-rw-r--r--. 1 root root  0 Jul 22 22:44 demo3.txt
[root@localhost test]# 
[root@localhost test]# 
[root@localhost test]# ll backups_ab/
total 16
-rw-r--r--. 1 root root 12 Jul 30 00:03 demo1.txt
-rw-r--r--. 1 root root 0 Jul 22 22:44 demo1.txt~  
-rw-r--r--. 1 root root 12 Jul 30 00:07 demo2.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

  • 2、修改 SRC 的 demo3.txt 权限为 -rw-rw-rw-
## demo3.txt 所属组和其他人权限增加可写的权限,权限修改为 -rw-rw-rw-。
[root@localhost test]# chmod g+w,o+w SRC/demo3.txt   
[root@localhost test]# 
[root@localhost test]# ll SRC/
total 8
-rw-r--r--. 1 root root 12 Jul 30 00:03 demo1.txt
-rw-r--r--. 1 root root 12 Jul 30 00:07 demo2.txt
-rw-rw-rw-. 1 root root  0 Jul 22 22:44 demo3.txt    ## 权限修改成功
[root@localhost test]# 

  • 3、执行 rsync -a -b 备份 SRC 的 demo3.txt 到 backups_ab。由于,源文件和目标目录文件大小、时间一致,所以不会产生新的备份文件,没有带 ~ 符号的 demo3.txt。但,会更新权限。
[root@localhost test]# rsync -a -b SRC/demo3.txt backups_ab/
[root@localhost test]# 
[root@localhost test]# tree
.
├── backups_ab
│   ├── demo1.txt
│   ├── demo1.txt~
│   ├── demo2.txt
│   ├── demo2.txt~
│   └── demo3.txt
└── SRC
    ├── demo1.txt
    ├── demo2.txt
    └── demo3.txt

2 directories, 8 files
[root@localhost test]# ll backups_ab/
total 16
-rw-r--r--. 1 root root 12 Jul 30 00:03 demo1.txt
-rw-r--r--. 1 root root 0 Jul 22 22:44 demo1.txt~  
-rw-r--r--. 1 root root 12 Jul 30 00:07 demo2.txt
-rw-r--r--. 1 root root 0 Jul 22 22:44 demo2.txt~
-rw-rw-rw-. 1 root root  0 Jul 22 22:44 demo3.txt    ## backups_ab目录的demo3.txt 权限已更新为 -rw-rw-rw-
[root@localhost test]# 

你可能感兴趣的:(4-10.3 Linux 中的文件同步传输 --- rsync -b、--backup 配合 -a 使用)