Linux下数据备份命令scp、rsync和后台运行

因工作的原因需要在局域网内多台机器文件互传,均为Linux CentOS系统。此为背景。

scp和rsync 均可实现文件的复制,但相比较,scp占用系统资源较小,rsync速度较快。当小文件众多时,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。可根据需要这俩选其一实现文件复制。

一、scp 命令

scp 是secure copy的缩写,scp是Linux系统下基于ssh登录进行安全的远程文件拷贝命令。
可以实现本地文件复制到远程服务器,也可以将远程文件复制到本地。

1. 从本地复制到远程服务器

  • scp -r local_folder remote_username@remote_ip:remote_folder_pwd
    将local_folder整个文件夹复制到remote_folder_pwd,将建立remote_folder_pwd/local_folder文件夹
    后续需要输入密码,不能使用nohup直接放至后台;
  • scp -r local_folder/ remote_username@remote_ip:remote_folder_pwd
    在local_folder后面加了/,会将该文件夹下的所有文件复制到remote_folder_pwd,但不会建立remote_folder_pwd/local_folder文件夹

2.从远程服务器复制到本地

  • scp -r remote_username@remote_ip:remote_folder_pwd local_folder

二、rsync 命令

rsync 是remote sync的缩写。使用rsync备份数据时,不会直接覆盖以前的数据(如果数据已经存在),而是先判断已存在的数据和新数据的差异(默认规则是文件大小或修改时间有差异),只有数据不相同时才会把不相同的部分覆盖。在仅作增量数据的copy时比scp灵活。

一般CentOS默认安装rsync,若使用 rsync -v提示找不到命令,可使用yum install -y rsync安装。

1.从本地复制到远程服务器

  • rsync -av local_folder remote_username@remote_ip:remote_folder_pwd
    或者
  • rsync -av local_folder remote_username@remote_ip::remote_folder_pwd

2.从远程服务器复制到本地

  • rsync -av remote_username@remote_ip:remote_folder_pwd local_folder
    或者
  • rsync -av remote_username@remote_ip::remote_folder_pwd local_folder

单个冒号和双冒号的区别:使用rsync在远程传输数据前,是需要进行登陆认证的,这个过程可使用ssh协议也可以使用rsync协议完成。单冒号(:)使用的是ssh协议;双冒号(::)使用的是rsync协议。

3.只保留源文件的内容

默认情况下,rsync只确保源文件的所有内容(明确排除的文件除外)都复制到目标目录。它不会使两个目录保持不同,并且不会删除文件。如果要使目标目录成为源目录的镜像副本,则使用--delete选项。可删除只存在目标目录,不存在于源目录的文件。

  • rsync -av --delete test1/ test2/
    若test2中原有文件,但test1中没有,经过此操作,test1和test2文件会完全相同。test1目录一旦做了改变,test2也会随之相应改变。

4.增量备份

增量备份算是一个经常使用的场景了。两台服务器之间进行文件定期备份,无需所有文件都copy一遍,仅复制有变动的文件。

具体做法是,第一次同步是全量备份,所有文件在基准目录里面同步一份。以后每一次同步都是增量备份,只同步源目录与基准目录之间有变动的部分,将这部分保存在一个新的目标目录。这个新的目标目录之中,也是包含所有文件,但实际上,只有那些变动过的文件是存在于该目录,其他没有变动的文件都是指向基准目录文件的硬链接。

--link-dest参数用来指定同步时的基准目录。

$ rsync -a --delete --link-dest /compare/path /source/path /target/path

上面命令中,--link-dest参数指定基准目录/compare/path,然后源目录/source/path跟基准目录进行比较,找出变动的文件,将它们拷贝到目标目录/target/path。那些没变动的文件则会生成硬链接。这个命令的第一次备份时是全量备份,后面就都是增量备份了。

三、将scp和rsync后台运行

一般服务器之间复制文件都比较大,为防止误操作,最好在后台运行。但因为需要和远程服务器之间的ssh通讯多是需要密码的,所以不能直接使用nohup 放置于后台。无论是scp还是rsync都可操作如下:

  • 1.scp -r remote_username@remote_ip:remote_folder_pwd local_folder
    或者
    1. 输入密码,回车
    1. Ctrl +z,挂起当前进程;
    1. bg,让挂起的进程继续进行;
    1. disown -h 将这个作业忽略HUP信号

后台和前台任务的切换

jobs    //查看任务,返回任务编号n;

bg %n    //将编号为n的任务转后台运行;

fg %n    //将编号为n的任务转前台运行;

Ctrl+z    //挂起当前任务;

Ctrl+c    //结束当前任务。

disown -h %n    //将这个作业忽略HUP信号

scp不支持断点续传,挂起scp进程可能导致数据缺失。倾向于使用rsync。

如果有其他任务需要使用nohup后台运行,但执行时却忘记了使用nohup,也可参照此方法进行设置。


参考:1. Linux之scp命令及后台运行scp

你可能感兴趣的:(Linux下数据备份命令scp、rsync和后台运行)