由于购买了Gen10服务器,因此有了备份的需求。经过考察,暂时选用冷备份的方式。也就是定期将数据拷贝到一个移动硬盘上。为了做到自动,准备使用rsync程序。这个程序的功能很强大,在官网上也有详细介绍。这里仅给出我使用的方式。
基本命令
Local: rsync [OPTION...] SRC... [DEST]
选项可以参照上面的官网文档。
本地备份
rsync可以进行本地或网络备份。其区别仅仅在于备份命令中的source,dest的地址是否包含:
。
这里根据需求,使用本地备份就可以了。
文件夹排除
rsync提供include\exclude参数以便我们能够指定需要同步的文件或文件夹。使用方式是在选项中通过--include=PATTERN
, --exclude=PATTERN
的方式指定排除或选中满足PATTERN的文件及文件夹。
如果需要操作的文件较多,还可以在文件中指定,然后通过--include-from=filename
或--exclude-from=filename
指定该文件即可。下面我就是用这种方式来指定。
需求是:我有几个文件夹,只想同步我指定的文件。假定我们有一个test文件夹,结构是这样的:
├── inner
│ ├── ininner
│ │ ├── inner3
│ │ │ └── test6
│ │ └── test5
│ └── test4
├── test1
├── test2
└── test3
为了同步指定的文件,我们需要先将所有文件排除,否则默认是同步所有文件的。可以这样写:rsync -axv --delete --exclude=* /home/simppy/test/ /media/back/test/
上面的语句,我们就将test文件夹备份到了/media/back/test/
文件夹下了。但是其实什么也没备份,因为排除了所有文件。那么下面,我们就可以指定文件了。由于文件较多,我们将其写在文件中:test_include
。
上面命令中的
axv
是常用搭配,a可以复制文件的创建日期等属性,而且可以递归地扫描文件夹,v为显示结果。--delete
是指将目标文件夹dest中有,而source中没有的文件删除掉。
在写test_include
之前,我们先简单看一下PATTERN
的写法。
PATTERN
PATTERN用于指定我们在include\exclude操作时,如果指定文件,其功能类似于正则表达式。PATTERN用于匹配路径名(包含文件名),如果匹配上,rsync就会对其进行同步。有几种类型的PATTERN:
- 字符,这个最简单,就是匹配字符。例如
test1
就匹配所有包含test1
的文件名。 -
/
,这个字符可以在行首,用于匹配source的根目录,如果放在行尾,则表示这是一个文件夹。例如/inner
就匹配inner文件,/inner/
就匹配inner文件夹。 -
*
匹配路径中的任意部分,但是不匹配/
-
**
匹配路径中的任意部分,包括/
-
?
匹配任意字符,但是不匹配/
-
[]
用于给定范围,例如[a-z]
- 如果一个PATTERN包含
/
或者**
,那么会在全路径上进行匹配,包括任何前面的路径。如果不含/
或者**
,那么只会匹配路径的最后一部分,也就是文件名。例如:dir_name/**
会匹配dir_name/
以及内部的所有内容。
test_include
在rsync对文件名进行匹配的时候,由于我们先通过exclude
参数将所有文件都屏蔽了,那么如果我们将test_include
,写成下面的样子:
test1
test2
/inner/test4
/inner/ininner/**
我们最终同步完之后,只有test1,test2。
这是因为,屏蔽所有文件之后,rsync不会对文件夹进行展开,直接截断了。因此我们要在include文件中增加*/
来包含所有文件夹。变成这样:
*/
test1
test2
/inner/test4
/inner/ininner/**
shell脚本
下面我们通过脚本来对多个文件进行处理
#!/bin/bash
LIST="照片 电影 纪录片"
for d in $LIST;do
rsync -axv --delete --include-from=/home/cqzhao/mybin/backup_project/${d}_include --exclude=* /media/sata1/$d/ /media/back
done
定时crontab
通过crontab
可以定期执行上述命令。使用crontab -e
命令打开,然后键入下面的命令:0 10 * * 3 /home/simmpy/backup.sh >> /home/simppy/backup.log 2>&1 &
这个命令可以在每周三的上午10点执行。