rsync
マシン間の特定のフォルダを同期、中身を同じにするツール

バックアップとかの際によく利用します

詳細https://www.computerhope.com/unix/rsync.htm

コマンド書式

[root@c ~]# rsync [オプション] source [source2...] destination
 
オプション:
   -a: '-rlptgoD' と同じ
   -r: 配下のディレクトリも対象
   -l: シンボリックリンクはそのままシンボリックリンクとしてコピー
   -p: パーミッションもそのままコピー
   -t: タイムスタンプもそのままコピー
   -g: グループ情報を保持してコピー
   -o: 所有者情報を保持してコピー(rootのみ)
   -D: '--devices' '--specials' と同じ
   --devices: デバイスファイルもコピー(rootのみ)
   --specials: 特殊ファイル(名前付きファイル)らもコピー
 
   -A: aclを保持したままコピー
   -X: 拡張属性を保持したままコピー
 
   --log-file: ログファイル指定
   -n: 実際のコピーは行わず、処理の流れが確認できる
 
   --delete: <source>に存在しないファイルは <destination> から消される
   --delete-after: 同期処理の後に削除を実行
   --delete-before: 同期処理の前に削除を実行
 
   --bwlimit=1024   単位はkB/s  1024kB/s -->  8,192k bit/sec -->  8Mbit/sec
   --bwlimit=1250               1250kB/s --> 10,000k bit/sec --> 10Mbot/sec

cronを使っての自動バックアップ(/home)

バックアップ対象側(source)のrootの秘密鍵-公開鍵を作成する.
(パスフレーズはなしで)

[root@source ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):    <-- そのままリターン
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):                 <-- そのままリターン
Enter same passphrase again:                                <-- そのままリターン
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
 (略)
 
[root@source ~]#

作成した公開鍵(/root/.ssh/id_rsa.pub)を
バックアップ先(destination)に渡す

[root@source ~]# scp .ssh/id_rsa.pub    root@destination:

そして、バックアップ先(destination)にて、受け取った公開鍵(id_rsa.pub)の中身を
.ssh/authorized_keysファイルに追記します

[root@destination ~]# mkdir ~/.ssh && chmod 700 $_
 
[root@destination ~]# cat id_rsa.pub  >> .ssh/authorized_keys
 
[root@destination ~]# chmod 600 .ssh/authorized_keys
 
[root@destination ~]# rm -f id_rsa.pu

これでパスワードなしで、バックアップ対象側(source)から バックアップ先(destination)にパスワードなしでrootログインが可能になる
*sshd_configの設定に依存しますが

[root@source ~]# ssh root@destination
 
[root@destination ~]#

その上で下記のようにバックアップが可能となる

[root@source ~]# rsync -avz /target/   root@destination:/target/

これをcronに仕込めば定期的なバックアップが行われる

[root@source ~]# crontab -e
MAILTO=""
*/5 * * * * rsync -XAavz  /target/  root@destination:/target/

sshを使わないrsync

ほとんどのrsyncは既定でsshを使うようにできてる。以前なら「-e ssh」とかでsshで通信しますよ宣言が必要だったのに。
sshの負荷なしでrsyncを行うにはどうすればいいのか?
ここではpushでファイル同期を行う場合を記載する。ごくごく簡単な方法です。

サーバ側(ファイルを受ける側)

[root@c ~]# yum install rsync
[root@c ~]# vi /etc/rsyncd.conf
[home]
path=/home
uid=root
gid=root
read only=false
 
[root@c ~]# systemctl status rsyncd.service

これで/homeが共有先なる。

クライアント側(ファイルを送る側)

[root@c ~]# rsync -av /home/illya/ c::home/illya

これでパスワードなしで、「client:/home/illya」と「c:/home/illya」が同期されます。

とってもセキュアではないです。

もっと早くrsync!!

小さいサイズのファイルが膨大にあるとき、rsyncではあんまり効率的に運んでくれない。

片方が満載で、片方がバックアップに拵えた空のストレージで同期を取る際は留意すべき事項である。

っで、初回の同期なのだから別にタイムスタンプさえ合っていればいいような気がするので、tarとかcpで行ってもいいように思える

具体的には/homeの内容をバックアップ先(2nd)の/backupに収めるのなら

[root@c ~]# cd /
 
[root@c ~]# tar cf - home | ssh root@2nd  "cd  /backup ; tar xf -"

でもいいように思える
バックアップ先では /backup/home として置かれる。

これはsshを経由します。たかが隣のマシンへの転送にsshの暗号処理は不要と思われるのなら、rshで行う。
ただrootでrshを行うには調整が必要。

(相手側)
[root@2nd ~]# systemctl start rsh.socket
[root@2nd ~]# systemctl start rexec.socket
[root@2nd ~]# systemctl start rlogin.socket
[root@2nd ~]# 
[root@2nd ~]# cat <<_EOF_>> /etc/securetty
rsh
rexec
rlogin
_EOF_
[root@2nd ~]# echo "c.sybyl.local" > .rhosts

この設定の後で

[root@c ~]# cd /
 
[root@c ~]# tar cf - home | rsh -l root 2nd  "cd  /backup ; tar xf -"

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2019-02-25 (月) 01:46:44 (60d)