linux操作集-rsync实现系统间同步文件
2018-12-01 本文已影响3人
爱编程的凯哥
需求
尴尬的误操作,删除了libselinux.so.1,导致系统大部分命令瞬间失效,紧急补助,需要拷贝一份libselinux.so.1文件到/lib64文件夹下,因为ssh等命令都以失效,所以一通百度后,找到通过rsync方法实现文件同步
异常提示:
loading shared libraries: libselinux.so.1: cannot open shared object file: No such file or directory
操作
- 在你误删文件的服务器上开启执行rsyncd服务,如果此时你已放弃退出,那请节哀。创建rsyncd配置文件,因为此时vi命令已不可用,只能通过cat命令写入文件
cat > /etc/rsyncd.conf <<EOF
# cat > /etc/rsyncd.conf 表示创建并写入rsyncd.conf文件内容
# <<EOF 表示文件输入遇到EOF将结束
- 此时会打开输入框让你输入
# 开启端口 873
port = 873
#指定用户id
uid = root
gid = root
#用chroot,在传输文件之前,服务器守护程序在将chroot 到文件系统中的目录中,这样做的好处是可能保护系统被安装漏洞侵袭的可能。缺点是需要超级用户权限。另外对符号链接文件,将会排除在外。也就是说,你在 rsync服务器上,如果有符号链接,你在备份服务器上运行客户端的同步数据时,只会把符号链接名同步下来,并不会同步符号链接的内容;这个需要自己来尝试
use chroot = yes
#代表客户端只有读懂权限
read only = yes
#指定最大链接数,并制定进程文件
max connections =10
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
timeout = 300
#定义一个子模块,表示我客户端现在操作的目录
[tmp]
#此模块同步数据存放的目录
path = /tmp/
#表示别人是否能看到你的目录
list = yes
#使用账号
auth users = root
uid = root
gid = root
#剔除那些文件
exclude = *.xml *.properties *.log
#指定密码存放文件
secrets file = /etc/rsyncd.pass
#此模块的读写权限
read only = no
EOF
- 写入密码文件
echo "root:123.com" > /etc/rsyncd.pass
# 账号root,密码 123.com
4.密码文件赋予读权限
chmod 600 /etc/rsyncd.pass
- 启动rsyncd服务
rsync --daemon --config=/etc/rsyncd.conf
6.在另外一台服务器上找到libselinux.so.1文件,准备开启rsync客户端进行同步
#本地加入密码
echo "123.com" > /etc/rsyncd.pass
#赋予读权限
chmod 600 /etc/rsyncd.pass
server_ip=被误删服务器ip
#同步本地文件到服务器的tmp目录下,需要输入密码就是配置文件中的123.com
rsync -aPv --port 873 /lib64/libselinux.so.1 ${server_ip}::tmp
7.同步成功后,在误删服务器上将文件移到lib64下
rsync -aPv /tmp/libselinux.so.1 /lib64
8.检查服务器是否已经恢复,如果好了,就关闭rsync服务吧
cat /var/run/rsyncd.pid | xargs kill -9 && rm -rf /var/run/rsyncd.pid
9.说下rsync的特点
可以镜像保存整个目录树和文件系统。
可以很容易做到保持原来文件的权限、时间、软硬链接等等。
无须特殊权限即可安装。
快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
支持匿名传输,以方便进行网站镜象
linux操作集目录 https://www.jianshu.com/p/7839d27c62f8