前言
本文記錄了實現文件單雙向同步的過程,以及一些相關知識的總結。
文件同步
配置unison:實現雙向備份
RSYNC服務器
關於RSYNC
一款快速增量備份工具
Remote Sync,遠程同步
支持本地複製,或者與其他SSH、rsync主機同步
官方網站: http://rsync. samba. org/
RSYNC特點
能更新整個目錄和樹和文件系統;
有選擇性的保持符號鏈鏈、硬鏈接、文件屬於、權限、設備以及時間等;
對於安裝來說,無任何特殊權限要求;
對於多個文件來說,內部流水線減少文件等待的延時;能用rsh、ssh或直接端口做爲傳輸入端口;
支持匿名rsync同步文件,是理想的鏡像工具
同步源與發起端
rsync同步源:
指備份操作的遠程服務器,也稱爲備份源
主要包括兩種: rsync源、SSH源
rsync命令格式
rsync命令的用法
目錄同步
mkdir /aa
mkdir /bb
mount --bind /aa /bb
#寫入fstab
vim /etc/fstab
/aa /bb ext4 defaults,bind 0 0
1、SSH源
1.下載
#同步源
mkdir /var/ssh
cd /var/ssh
touch ssh.txt
useradd wmm1 #上傳,有寫權限
passwd wmm1
chown wmm1:wmm1 /var/ssh/
useradd wmm2 #下載,有讀權限
passwd wmm2
#發起端
mkdir /ssh
rsync -avz [email protected]:/var/ssh/* /ssh/
2.上傳
#發起端
cd /ssh/
touch s.txt
rsync -avz /ssh/* [email protected]:/var/ssh/
2、rsync源
1.下載
配置/etc/rsyncd.conf
文件
#同步源
vim /etc/rsyncd.conf
use chroot = yes
address = 192.168.201.137
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
[share]
coment = 描述信息
path = /var/rsync
read only = yes
dont compress = *.gz *.bz2 #指定不壓縮類型
auth users = qwzf
secrets file = /etc/rsyncd_users.db #指定密碼文件
寫入用戶和密碼對應關係
vim /etc/rsyncd_users.db
qwzf:123456
chmod 600 /etc/rsyncd_users.db#更改密碼文件權限爲600
rsync --daemon #啓動
netstat -anpt #查看端口
啓動成功
#同步源
mkdir /var/rsync
cd /var/rsync/
touch rsync.txt
服務端創建目錄和文件
#發起端
mkdir /rsync
rsync -avz [email protected]::share /rsync
#如果失敗,關閉服務器的防火牆和selinux
#iptables -F
#setenforce 0
從同步源下載成功
2.上傳
#發起端
cd /rsync
touch r.txt
rsync -avz r.txt [email protected]::share
發現報錯,原因是服務器端沒有寫入權限,解決方法:
修改服務端文件及文件權限
vim /etc/rsyncd.conf
read only = false #將原來的yes改爲false
chmod 777 /var/rsync
再次上傳,發現上傳成功
擴展:設置權限
mkdir /a
useradd manager
setfacl -m u:manager:rwx /a
useradd qwzf
setfacl -m u:qwzf:r-x /a
#刪除權限
setfacl -x u:qwzf /a
setfacl -b /a
#設置默認權限
setfacl -m default:u:manager:rwx /a
自動同步
服務端ip:192.168.201.137
客戶端ip:192.168.201.139
1.設置無密碼驗證
#服務端
ssh-keygen -t rsa
ssh-copy-id 192.168.201.139
#客戶端
ssh-keygen -t rsa
ssh-copy-id 192.168.201.137
服務端和客戶端進行測試
#服務端:
ssh 192.168.201.139 date
#客戶端:
ssh 192.168.201.137 date
發現不需要密碼,設置無密碼驗證成功
2.兩臺虛擬機安裝gcc
yum -y install gcc*
3.換光盤
eject彈出光盤,然後選擇下面這個鏡像連接
4.安裝ocaml
#服務端和客戶端都做以下操作
cd /media/20130806_063316/
cp * /usr/src
cd /usr/src
tar -zxf ocaml-3.10.1.tar.gz
cd ocaml-3.10.1
./configure
make world opt
make install
5.安裝unison
#服務端和客戶端都做以下操作
cd /usr/src
tar -zxf unison-2.13.16.tar.gz
cd unison-2.13.16
make UISTYPE=text THREADS=ture STATIC=true #出現make[1]: [tags] Error 127 (ignored)錯誤忽視即可
cp unison /usr/local/bin/
6.安裝inotify-tools
#服務端和客戶端都做以下操作
cd /usr/src
tar -zxf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure
make
make install
7.測試
#服務端
mkdir /server1
cd /server1
touch s1.txt
#客戶端
mkdir /server2
cd /server2
touch s2.txt
#服務端
unison -batch /server1 ssh://192.168.201.139//server2
服務端
客戶端
8.寫腳本調用
服務端1.sh
#!/bin/bash
ip2="192.168.201.139"
src2="/server1"
dst2="/server2"
/usr/local/bin/inotifywait -mrq -e create,delete $src2 | while read line; #監控src2目錄創建和刪除
do
/usr/local/bin/unison -batch $src2 ssh://$ip2/$dst2
echo -n "$line" >> /var/log/inotify.log #保存日誌
echo `date | cut -d " " -f1-4` >>/var/log/inotify.log #截取第1到第4部分存到日誌
done
運行shell腳本,並在客戶端遠程連接服務端簡單測試一下
發現成功實現文件自動同步。然後在客戶端也寫個除了ip和目錄不同,其他幾乎一樣的腳本,如:
2.sh
#!/bin/bash
ip1="192.168.201.137"
src1="/server2"
dst1="/server1"
/usr/local/bin/inotifywait -mrq -e create,delete $src1 | while read line; #監控src1目錄創建和刪除
do
/usr/local/bin/unison -batch $src1 ssh://$ip1/$dst1
echo -n "$line" >> /var/log/inotify.log #保存日誌
echo `date | cut -d " " -f1-4` >>/var/log/inotify.log #截取第1到第4部分存到日誌
done
然後兩邊同時運行腳本,再進行測試。
#服務端
bash 1.sh
#客戶端
bash 2.sh
在服務端創建qwzf1.txt
,在客戶端查看,發現成功自動同步;
在客戶端創建qwzf2.txt
,在服務端查看,發現也成功自動同步。
nfs
紅帽7版之前明文傳輸,一般用於局域網。
服務端ip:192.168.201.137
客戶端ip:192.168.201.139
服務端
yum -y install rpcbind #遠程終端調用,默認開啓
yum -y install nfs-utils #工具包
1.寫文件共享的列表
vim /etc/exports
#讀寫權限
/public 192.168.201.0/24(rw,sync)
#只讀權限
/share 192.168.201.139(ro,sync)
2.創建共享目錄和文件
cd /
mkdir public share
chmod 777 public/
chmod 777 share/
cd public/
touch public.txt
cd /share/
touch share.txt
3.重啓服務
service rpcbind restart
service nfs restart
4.查詢本機共享的列表
showmount -e
客戶端
1.測試
showmount -e 192.168.201.137
顯示兩個服務端共享的文件夾,說明客戶端能收到服務端共享的資源
2.掛載服務端的/public目錄測試
mount -t nfs 192.168.201.137:/public /mnt
#查看
mount
cd /mnt/
ls
#寫入測試
touch qwzf
ls
#卸載
cd ~
umount /mnt/
3.掛載服務端的/share目錄測試
mount -t nfs 192.168.201.137:/share /mnt
#寫入測試
cd /mnt/
touch wmm
和服務端設置相同,只有只讀權限。
4.設置自動掛載
vim /etc/fstab
cd ..
umount /mnt/
mount -a
mount | tail -1
好了,到此爲止,所有實驗進行完畢。
後記
本次Linux實驗我明白了單向文件同步,RSYNC服務的SSH源和rsync源進行下載和上傳。也瞭解到自動文件同步的實現和腳本的編寫。同時也瞭解nfs通過掛載實現文件功能共享。總之,收穫很大,再接再勵!!!