Linux学习-58-备份数据命令(tar、rsync命令)

在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

导读:本篇文章讲解 Linux学习-58-备份数据命令(tar、rsync命令),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

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

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!