13.3 tar命令备份数据
-
Linux 系统中最经常使用的备份工具就是 tar 和 cpio 命令。前面在介绍备份介质时,已经使用了 tar 命令,此命令其实是一个文件打包命令,经常在备份文件的场合中使用。使用 cpio 命令进行数据备份
-
下面通过 tar 命令做的一个 Web 服务器的备份脚本,详细了解 tar 命令作为备份工具时的具体用法。
#!/bin/sh
BAKDATE=`date +%y%m%d` #初始化当前日期变量
DATA3=`date -d "7 days ago" +“%y%m%d` #初始化7前前的日期变量
osdata=/disk1 #备份磁盘1
userdata=/disk2 #备份磁盘2
echo "backup OS data starting"
tar -zcvf /$osdata/etc.data/etc_$BAKDATE.tar.gz /etc #备份系统etc目录
tar -zcvf /$osdata/boot.data/boot_$BAKDATE.tar.gz /boot #备份系统boot目录
tar -zcvf /$osdata/home.data/home_$BAKDATE.tar.gz /home #备份系统home目录
tar -zcvf /$osdata/root.data/root_$BAKDATE.tar.gz /root #备份系统root目录
tar -zcvf /$userdata/usr_data/usrlocal_$BAKDATE.tar.gz /usr/local #备份用户目录
tar -zcvf /$userdata/var_www/www_$BAKDATE.tar.gz /var/www #备份临时目录
cp -r /$osdata/* /$userdata
cp -r /$userdata/* /$osdata
echo "Backup OS data complete!"
echo "delete OS data 7 days ago"
rm -rf /$osdata/etc.data/etc_$DATA3.tar.gz #删除盘符1中7天前的备份文件
rm -rf /$osdata/boot.data/boot_$DATA3.tar.gz
rm -rf /$osdata/home.data/home_$DATA3.tar.gz
rm -rf /$osdata/root.data/root_$DATA3.tar.gz
rm -rf /$osdata/usr_data/usrlocal_$DATA3.tar.gz
rm -rf /$osdata/var_www/www_$DATA3.tar.gz
rm -rf /$userdata/etc.data/etc_$DATA3.tar.gz #删除盘符2中7天前的备份文件
rm -rf /$userdata/boot.data/boot_$DATA3.tar.gz
rm -rf /$userdata/home.data/home_$DATA3.tar.gz
rm -rf /$userdata/root.data/root_$DATA3.tar.gz
rm -rf /$userdata/usr_data/usrlocal_$DATA3.tar.gz
rm -rf /$userdata/var_www/www_$DATA3.tar.gz
echo "delete cws ok!"
- 上面这段脚本完成的工作是,将系统和用户的备份数据分别保存在两个不同的本地磁盘 disk1 和 disk2 中,并且保留最近 7 天的数据,7 天前的数据自动删除。主要备份的数据有 /etc 目录、/boot 目录、/home 目录、/root 目录、/usr/local 目录和 /var/www 目录。当然这里只是举个例子,凡是存放数据的重要目录,都需要进行备份。
将此脚本放到系统守护进程(类似于 Windows 下的计划任务)crontab 下,设定备份时间,即可实现定时数据备份。
13.8 rsync命令:支持本地备份和远程备份
-
rsync 可以理解为 remote sync(远程同步),但它不仅可以远程同步数据(类似于 scp 命令),还可以本地同步数据(类似于 cp 命令)。不同于 cp 或 scp 的一点是,使用 rsync 命令备份数据时,不会直接覆盖以前的数据(如果数据已经存在),而是先判断已经存在的数据和新数据的差异,只有数据不同时才会把不相同的部分覆盖。学习 rsync 命令之前,请确认 Linux 系统中已经安装有此命令,如果没有,可以直接使用 yum install -y rsync 命令安装。
-
执行 rsync 命令将 /etc/passwd 文件本地同步到 /test/ 目录下,并改名为pwd.txt
[root@CncLucZK test]# rsync -av /etc/passwd /test/pwd.txt
sending incremental file list
passwd
sent 2,046 bytes received 35 bytes 4,162.00 bytes/sec
total size is 1,955 speedup is 0.94
- rsync 命令还支持远程同步数据,也就是将本地的数据备份到远程机器上。比如说,我们知道远程机器的 IP 地址为 192.168.1.2,则使用 rsync 命令备份 passwd 文件的执行命令为:
[root@localhost ~]# rsync -av /etc/passwd 192.168.1.2:/tmp/1.txt
The authenticity of host '192.168.1.2 (192.168.1.2)' can't be established.
ECDSA key fingerprint is 26:e3:97:e7:bb:ae:17:33:ea:aa:Oc:5f:37:Oe:9e:fa.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.2' (ECDSA) to the list of known hosts.
root@192.168.1.2's password: <-- 输入密码
sending incremental file list
sent 31 bytes received 12 bytes 7.82 bytes/sec
total size is 1432 speedup is 54.91
注意,首次远程连接时,会提示是否要继续连接,输入 yes 即可。另外,当成功建立连接后,需要输入目标系统的 root 密码。
- rsync 命令的基本格式有多种,分别是:
[root@localhost ~]# rsync [OPTION] SRC DEST
[root@localhost ~]# rsync [OPTION] SRC [USER@]HOST:DEST
[root@localhost ~]# rsync [OPTION] [USER@]HOST:SRC DEST
[root@localhost ~]# rsync [OPTION] [USER@]HOST::SRC DEST
[root@localhost ~]# rsync [OPTION] SRC [USER@]HOST::DEST
-
针对以上 5 种命令格式,rsync 有 5 种不同的工作模式:
- 第一种用于仅在本地备份数据;
- 第二种用于将本地数据备份到远程机器上;
- 第三种用于将远程机器上的数据备份到本地机器上;
- 第四种和第三种是相对的,同样第五种和第二种是相对的,它们各自之间的区别在于登陆认证时使用的验证方式不同。
-
使用 rsync 在远程传输数据(备份数据)前,是需要进行登陆认证的,这个过程需要借助 ssh 协议或者 rsync 协议才能完成。在 rsync 命令中,如果使用单个冒号(:),则默认使用 ssh 协议;反之,如果使用两个冒号(::),则使用 rsync 协议。
ssh 协议和 rsync 协议的区别在于,rsync 协议在使用时需要额外配置,增加了工作量,但优势是更加安全;反之,ssh 协议使用方便,无需进行配置,但有泄漏服务器密码的风险.
-
另外,以上几种格式中各个参数的含义如下:
- SRC:用来表示要备份的目标数据所在的位置(路径);
- DEST:用于表示将数据备份到什么位置;
- USER@:当做远程同步操作时,需指明系统登录的用户名,如果不显示指定,默认为以 root 身份登录系统并完成同步操作。
-
rsync 命令提供使用的 OPTION 及功能:
OPTION选项 | 功能 |
---|---|
-a | 这是归档模式,表示以递归方式传输文件,并保持所有属性,它等同于-r、-l、-p、-t、-g、-o、-D 选项。-a 选项后面可以跟一个 –no-OPTION,表示关闭 -r、-l、-p、-t、-g、-o、-D 中的某一个,比如-a –no-l 等同于 -r、-p、-t、-g、-o、-D 选项。 |
-r | 表示以递归模式处理子目录,它主要是针对目录来说的,如果单独传一个文件不需要加 -r 选项,但是传输目录时必须加。 |
-v | 表示打印一些信息,比如文件列表、文件数量等。 |
-l | 表示保留软连接。 |
-L | 表示像对待常规文件一样处理软连接。如果是 SRC 中有软连接文件,则加上该选项后,将会把软连接指向的目标文件复制到 DEST。 |
-p | 表示保持文件权限。 |
-o | 表示保持文件属主信息。 |
-g | 表示保持文件属组信息。 |
-D | 表示保持设备文件信息。 |
-t | 表示保持文件时间信息。 |
–delete | 表示删除 DEST 中 SRC 没有的文件。 |
–exclude=PATTERN | 表示指定排除不需要传输的文件,等号后面跟文件名,可以是通配符模式(如 *.txt)。 |
–progress | 表示在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、 同步的文件传输速度等。 |
-u | 表示把 DEST 中比 SRC 还新的文件排除掉,不会覆盖。 |
-z | 加上该选项,将会在传输过程中压缩。 |
- 以上也是列出了 rsync 命令常用的一些选项,记住最常用的几个即可,比如 -a、-v、-z、–delete 和 –exclude。如果想查看 rsync 提供的所有选项,可直接执行 rsync 命令。
- 建立测试目录,里面准备一些文件、目录和软链接。
[root@CncLucZK test]# cd user
[root@CncLucZK user]# ll
total 8396
drwxr-xr-x 2 root root 4096 Oct 8 23:49 config
-rw-r--r-- 1 root root 6 Oct 12 23:10 demo.txt
drwxr-xr-x. 99 root root 4096 Oct 27 18:23 etc
-rw-r--r-- 1 root root 0 Oct 16 13:52 log
-rw-r--r-- 1 root root 3234117 Oct 16 13:54 logs
-rw------- 1 root root 5339912 Oct 27 19:47 restoresymtable
drwxr-xr-x 2 root root 4096 Oct 6 09:09 tmp
-rw-r--r-- 1 root root 13 Oct 16 13:47 tmp.txt
[root@CncLucZK user]# ln -s tmp.txt linktmp
[root@CncLucZK user]# ll
total 8396
drwxr-xr-x 2 root root 4096 Oct 8 23:49 config
-rw-r--r-- 1 root root 6 Oct 12 23:10 demo.txt
drwxr-xr-x. 99 root root 4096 Oct 27 18:23 etc
lrwxrwxrwx 1 root root 7 Oct 28 00:08 linktmp -> tmp.txt
-rw-r--r-- 1 root root 0 Oct 16 13:52 log
-rw-r--r-- 1 root root 3234117 Oct 16 13:54 logs
-rw------- 1 root root 5339912 Oct 27 19:47 restoresymtable
drwxr-xr-x 2 root root 4096 Oct 6 09:09 tmp
-rw-r--r-- 1 root root 13 Oct 16 13:47 tmp.txt
- 测试rsync -a 选项:
[root@CncLucZK user]# cd ..
[root@CncLucZK test]# rsync -a user user1 #-a将源目录中所有文件全部同步过来包括链接文件
[root@CncLucZK test]# ll user1
total 4
drwx--x--x 5 root root 4096 Oct 28 00:08 user
[root@CncLucZK test]# ll -l user1/*
total 8396
drwxr-xr-x 2 root root 4096 Oct 8 23:49 config
-rw-r--r-- 1 root root 6 Oct 12 23:10 demo.txt
drwxr-xr-x 99 root root 4096 Oct 27 18:23 etc
lrwxrwxrwx 1 root root 7 Oct 28 00:08 linktmp -> tmp.txt
-rw-r--r-- 1 root root 0 Oct 16 13:52 log
-rw-r--r-- 1 root root 3234117 Oct 16 13:54 logs
-rw------- 1 root root 5339912 Oct 27 19:47 restoresymtable
drwxr-xr-x 2 root root 4096 Oct 6 09:09 tmp
-rw-r--r-- 1 root root 13 Oct 16 13:47 tmp.txt
-
这里有一个问题,我们本来是想把 user目录中的内容直接放到user1目录中,可结果 rsync 命令却新建了 user 目录,然后把user 放到 user1 中。
-
如果想要实现将 user目录中的内容直接备份到 user1目录中,需修改上面的命令为:
[root@CncLucZK test]# rm -rf user1 user2
[root@CncLucZK test]# rsync -a user/ user1/
[root@CncLucZK test]# ll -l user1
total 8396
drwxr-xr-x 2 root root 4096 Oct 8 23:49 config
-rw-r--r-- 1 root root 6 Oct 12 23:10 demo.txt
drwxr-xr-x 99 root root 4096 Oct 27 18:23 etc
lrwxrwxrwx 1 root root 7 Oct 28 00:08 linktmp -> tmp.txt
-rw-r--r-- 1 root root 0 Oct 16 13:52 log
-rw-r--r-- 1 root root 3234117 Oct 16 13:54 logs
-rw------- 1 root root 5339912 Oct 27 19:47 restoresymtable
drwxr-xr-x 2 root root 4096 Oct 6 09:09 tmp
-rw-r--r-- 1 root root 13 Oct 16 13:47 tmp.txt
-
可以看到,只需给 user 和 user1目录后添加 / 斜杠即可。
-
前面讲过,使用 -a 选项,等同于同时使用 -r、-l、-p、-t、-g、-o、-D 选项,且 -a 还可以和 –no-OPTION 一并使用。下面再来看看 -l 选项的作用:
[root@CncLucZK test]# rm -rf user1
[root@CncLucZK test]# rsync -av user/ user1/
sending incremental file list
created directory user1
./
demo.txt
linktmp -> tmp.txt
log
logs
restoresymtable
tmp.txt
config/
...
sent 30,589,880 bytes received 12,115 bytes 61,203,990.00 bytes/sec
total size is 30,532,130 speedup is 1.00
[root@CncLucZK test]# ll user1
total 8396
drwxr-xr-x 2 root root 4096 Oct 8 23:49 config
-rw-r--r-- 1 root root 6 Oct 12 23:10 demo.txt
drwxr-xr-x 99 root root 4096 Oct 27 18:23 etc
lrwxrwxrwx 1 root root 7 Oct 28 00:08 linktmp -> tmp.txt
-rw-r--r-- 1 root root 0 Oct 16 13:52 log
-rw-r--r-- 1 root root 3234117 Oct 16 13:54 logs
-rw------- 1 root root 5339912 Oct 27 19:47 restoresymtable
drwxr-xr-x 2 root root 4096 Oct 6 09:09 tmp
-rw-r--r-- 1 root root 13 Oct 16 13:47 tmp.txt
[root@CncLucZK test]# rsync -av--no-l user/ user1/
rsync: -av--no-l: unknown option
rsync error: syntax or usage error (code 1) at main.c(1578) [client=3.1.3]
[root@CncLucZK test]# rsync -av --no-l user/ user1/
sending incremental file list
created directory user1
skipping non-regular file "linktmp"
./
demo.txt
log
logs
restoresymtable
tmp.txt
...
sent 30,576,803 bytes received 27,513 bytes 61,208,632.00 bytes/sec
total size is 30,532,130 speedup is 1.00
-
这里使用 -v 选项,可以看到,拷贝过程中跳过了非普通文件linktmp,其实 linktmp 是一个软链接文件,如果不使用 -l 选项,系统将不理会软链接文件。
-
rsync –delete选项:–delete 选项用来–delete 删除 DEST 中 SRC 没有的文件。例如:
[root@CncLucZK test]# ll user
total 8396
drwxr-xr-x 2 root root 4096 Oct 8 23:49 config
-rw-r--r-- 1 root root 6 Oct 12 23:10 demo.txt
drwxr-xr-x. 99 root root 4096 Oct 27 18:23 etc
lrwxrwxrwx 1 root root 7 Oct 28 00:08 linktmp -> tmp.txt
-rw-r--r-- 1 root root 0 Oct 16 13:52 log
-rw-r--r-- 1 root root 3234117 Oct 16 13:54 logs
-rw------- 1 root root 5339912 Oct 27 19:47 restoresymtable
drwxr-xr-x 2 root root 4096 Oct 6 09:09 tmp
-rw-r--r-- 1 root root 13 Oct 16 13:47 tmp.txt
[root@CncLucZK test]# rm -rf user/config
[root@CncLucZK test]# ll user 删除源文件中的config目录
total 8392
-rw-r--r-- 1 root root 6 Oct 12 23:10 demo.txt
drwxr-xr-x. 99 root root 4096 Oct 27 18:23 etc
lrwxrwxrwx 1 root root 7 Oct 28 00:08 linktmp -> tmp.txt
-rw-r--r-- 1 root root 0 Oct 16 13:52 log
-rw-r--r-- 1 root root 3234117 Oct 16 13:54 logs
-rw------- 1 root root 5339912 Oct 27 19:47 restoresymtable
drwxr-xr-x 2 root root 4096 Oct 6 09:09 tmp
-rw-r--r-- 1 root root 13 Oct 16 13:47 tmp.txt
[root@CncLucZK test]# rsync -av user/ user1/
sending incremental file list
./
sent 38,755 bytes received 1,015 bytes 79,540.00 bytes/sec
total size is 30,532,130 speedup is 767.72
[root@CncLucZK test]# ll user1
total 8396
drwxr-xr-x 2 root root 4096 Oct 8 23:49 config
-rw-r--r-- 1 root root 6 Oct 12 23:10 demo.txt
drwxr-xr-x 99 root root 4096 Oct 27 18:23 etc
lrwxrwxrwx 1 root root 7 Oct 28 00:08 linktmp -> tmp.txt
-rw-r--r-- 1 root root 0 Oct 16 13:52 log
-rw-r--r-- 1 root root 3234117 Oct 16 13:54 logs
-rw------- 1 root root 5339912 Oct 27 19:47 restoresymtable
drwxr-xr-x 2 root root 4096 Oct 6 09:09 tmp
-rw-r--r-- 1 root root 13 Oct 16 13:47 tmp.txt
-
可以看到,当对 user 目录删除了 config目录之后,再次备份并没有对 user1 目录中的 config目录产生任何影响。
-
下面使用 –delete 选项,再次执行拷贝命令,如下所示:
[root@CncLucZK test]# rsync -av --delete user/ user1/
sending incremental file list
deleting config/
sent 38,010 bytes received 281 bytes 76,582.00 bytes/sec
total size is 30,532,130 speedup is 797.37
[root@CncLucZK test]# ll user1
total 8392
-rw-r--r-- 1 root root 6 Oct 12 23:10 demo.txt
drwxr-xr-x 99 root root 4096 Oct 27 18:23 etc
lrwxrwxrwx 1 root root 7 Oct 28 00:08 linktmp -> tmp.txt
-rw-r--r-- 1 root root 0 Oct 16 13:52 log
-rw-r--r-- 1 root root 3234117 Oct 16 13:54 logs
-rw------- 1 root root 5339912 Oct 27 19:47 restoresymtable
drwxr-xr-x 2 root root 4096 Oct 6 09:09 tmp
-rw-r--r-- 1 root root 13 Oct 16 13:47 tmp.txt
- 可以看到,使用 –delete 选项进行备份数据时,user目录一旦做了改变,那么 user1也会做相应改变。不仅如此,如果在 DEST 中增加文件,而 SRC 中不包含这些文件,那么在使用 –delete 选项做同步备份操作时,DEST 新增的这些文件会被删除。例如:
[root@CncLucZK test]# touch user1/aaa
[root@CncLucZK test]# ll user1
total 8392
-rw-r--r-- 1 root root 0 Oct 28 00:32 aaa
-rw-r--r-- 1 root root 6 Oct 12 23:10 demo.txt
drwxr-xr-x 99 root root 4096 Oct 27 18:23 etc
lrwxrwxrwx 1 root root 7 Oct 28 00:08 linktmp -> tmp.txt
-rw-r--r-- 1 root root 0 Oct 16 13:52 log
-rw-r--r-- 1 root root 3234117 Oct 16 13:54 logs
-rw------- 1 root root 5339912 Oct 27 19:47 restoresymtable
drwxr-xr-x 2 root root 4096 Oct 6 09:09 tmp
-rw-r--r-- 1 root root 13 Oct 16 13:47 tmp.txt
[root@CncLucZK test]# rsync -av --delete user/ user1/
sending incremental file list
deleting aaa
./
sent 38,017 bytes received 284 bytes 76,602.00 bytes/sec
total size is 30,532,130 speedup is 797.16
[root@CncLucZK test]# ll user1
total 8392
-rw-r--r-- 1 root root 6 Oct 12 23:10 demo.txt
drwxr-xr-x 99 root root 4096 Oct 27 18:23 etc
lrwxrwxrwx 1 root root 7 Oct 28 00:08 linktmp -> tmp.txt
-rw-r--r-- 1 root root 0 Oct 16 13:52 log
-rw-r--r-- 1 root root 3234117 Oct 16 13:54 logs
-rw------- 1 root root 5339912 Oct 27 19:47 restoresymtable
drwxr-xr-x 2 root root 4096 Oct 6 09:09 tmp
-rw-r--r-- 1 root root 13 Oct 16 13:47 tmp.txt
参考文献:
Linux rsync命令用法详解
下一篇:Linux学习-59-备份还原数据命令(dump、restore、dd命令)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123733.html