UNIX/Linux の rsync コマンドは、ファイル・ディレクトリのバックアップやミラーリング・同期処理を行うコマンドである。リモートサーバへの同期も可能である。また、差分のあるファイルのみを高速にミラーリングすることができる。 最終更新 2019-01-13. UNIXの部屋 コマンド検索:rsync (*BSD/Linux) 基本的な使い方。 わかりやすい。 rsync マニュアル。 わかりにくい。 Sial.org 英語。 タイムアウトの指定方法とか。 This option allows you to choose an alternative remote shell program to use for communication between the local and remote copies of rsync. 動のスクリプト(hugo関連スクリプト 第2回), ブログを書き始めるためのスクリプト(hugo関連スクリプト 第1回), パスフレーズ未設定と引き換えに制約付けて、ご安全にSSH, WSLのユーザホームディレクトリ, さくらのレンタルサーバは、root権限がありません。. » scpコマンド マニュアル. 以下のように rsync のオプションを追加するのも良いでしょう (完全なオプションのリストは man rsync を見てください): バックアップを起動できるようにしておくとファイルシステムが破損したりアップデートでシステムが壊れたときに便利です。また、バックアップをアップデートのテストベッドとして [testing] リポジトリを有効にするなどして使うこともできます。システム全体を起動したい別のパーティションやドライブに転送したら、後はバックアップの /etc/fstab とブートローダーの設定ファイルを更新するだけで起動させることができます。. rsync アルゴリズムのチェックサムブロックサイズの制御(default 700)-e--rsh=COMMAND: リモートシェルを指定する--rsync-path=PATH: リモートのマシーンで rsync のコピーへのパスを指定-C--cvs-exclude: システム間で転送したくない広範囲のファイルを除外(CVSの方法と同じ)--delete Linux入門 » Linuxコマンド集 » ファイル/ディレクトリ » rsync - 高速なファイル同期(バックアップ) - Linuxコマンド, rsyncコマンドは、リモート、ローカルにかかわらずディレクトリやファイルを高速にコピーするコマンドです。ローカルとリモート間のディレクトリ同期やバックアップによく使われます。 cf. Documentation Home » Oracle Solaris 11.2 Information Library (日本語) » マニュアルページセク ション 1: ユーザーコマンド » ユーザーコマンド » rsync 更新: 2014 年 7 月 ... # man rsync. » scpコマンド, ディレクトリ(dir1)をバックアップディレクトリ(backup)にコピーします。, 上の使用例に続き、追加したファイル(dir1/add-file.txt)のみをコピーします。-u オプションを利用します。, ローカル環境のディレクトリをリモートマシン先(IPアドレス:aaa.bbb.ccc.ddd)にコピーします。最もよく使う例ですね。-z オプションを利用して通信を圧縮しています。, ローカルのディレクトリとリモートマシンのディレクトリを同期する場合は、--delete オプションを利用します。こうすることでローカルとリモートマシンのディレクトリを全く同じものにしてくれます(同期してくれます)。, ※ただし、ローカルに存在しないファイルがリモートマシン上にある場合は、そのファイルは削除されるので注意が必要です。ディスク容量に余裕がある場合、--delete オプションは利用しないほうがいいでしょう。, SSHのセキュリティ強化のため通信のポート番号を変更している場合、ポート番号を明示してrsyncコマンドを実行します。以下は、ポート番号を56789に設定している例です。, これでOKです。「sshコマンド」の部分はシングルクォーテーションではさみましょう。sshコマンドの他のオプションもこの方法で指定します。, fg - サスペンドされているジョブをフォアグラウンドで実行再開 - Linuxコマンド, コピー元のディレクトリを再帰的にオーナー・グループ・パーミッション・タイムスタンプをそのままコピーします。オプション -rlptgoD と同じです。, コピー元とコピー先を比較し、追加・更新されたファイル・ディレクトリのみをコピーします。, コピー元にない(削除された)ファイルをコピー先で削除します。コピー元とコピー先を同期します。. ミラーリングやバックアップを行うだけなら cp コマンドでも実現可能だが、rsync コマンドには以下のようなメリットがある。, とにかくよくわからないうちは -n オプションをつけましょう。-n オプションは実際には転送や削除を行わず、どのような処理をするか表示するだけのオプションです。, オプション -av の意味を説明する。-a を指定することで、rsync はアーカイブモードで動作するようになる。アーカイブモードとは頻繁に使用されるオプション群に名前を付けたもので、実際は -a は -rlptgoD と同じである。各オプションの意味は以下のとおり。, もし何かしらエラーが発生した場合は、最後のレポート部分に、さらに以下のようなエラー情報が表示される。, rsync error: some files could not be transferred (code 23) at main.c(977) [sender=2.6.9], % rsync -av /foo/from_dir/ example.com:to_dir/, → example.com の to_dir/ に転送する。ユーザ名は、ローカルのユーザ名と同じものを使用する, → example.com の to_dir/ にユーザ名 user で転送する。, 上記の例はいずれも転送先がリモートホストの場合だったが、転送元がリモートホストでも問題ない。, % rsync -av -e ssh user@example.com:from_dir/ /foo/to_dir/, -v オプションは複数個指定でき、-v より -vv の方が、さらに -vv より -vvv の方がより詳細な情報を表示する。, sent 125531503 bytes received 117812 bytes 7179960.86 bytes/sec, sent 125.53M bytes received 117.81K bytes 4.12M bytes/sec, 転送要否を決定する際、タイムスタンプとファイルサイズではなく、MD5 チェックサムを用いて同一ファイルか否かをチェックする。, 最近の UNIX/Linux 環境の rsync コマンドではデフォルトで "-e ssh" としてコンパイルされているものが多いと思われる。また、下記のように ssh コマンドに引数を指定する場合にも使用可能である。, 帯域制御を行い、指定の速度以下で転送を行う (KBPS は KByte/秒 で指定), 転送元・転送先の比較の際、タイムスタンプが指定秒数以内の違いであれば、違いがないものとみなす。デフォルトは 0 であり、ミリ秒以下が無視されることになる。これに 1 を指定すると、1秒以内の違いは同じとみなされる。また、-1 とすると秒単位で丸めずにナノ秒単位まで比較する。, 同一サーバ内であれば cp コマンドを使う手がある。この場合、差分転送はできない。, また、tar cf して tar xf することでディレクトリごと同一サーバ内の別ディレクトリに複製を作ることができる。, % tar cf - -C source_dir | (cd /foo/bar tar xfp -), % tar zcf - -C source_dir | ssh user@remote.example.com 'tar xf - -C dest_dir', ファイルシステムとして zfs を使っている場合、zfs send | zfs recv で差分転送ができる。, rsync の起動タイミングをほぼリアルタイムにしたい場合は、lsyncd を活用するとよい。, ▷ -v または --verbose … コピーしたファイル名や、コピーしたバイト数などの転送情報を表示する。, ▷ -h または --human-readable … バイト数などを読みやすい形で表示する。, ▷ -a または --archive … アーカイブモード。-rlptgoD を指定したのと同じ (-H が含まれていないことに注意), ▷ -l または --links … シンボリックリンクを、そのままシンボリックリンクとしてコピーする。, ▷ --specials … 名前付きパイプや FIFO などの特殊ファイルをコピーする, ▷ -o または --owner … ファイル所有者をそのままコピーする (root で実行した場合のみ有効), ▷ --existing または --ignore-non-existing オプション, rsync コマンドのタイムスタンプの比較方法 (秒単位・ナノ秒単位) 【2019/01/08追記】, ミラーリングが可能 (単純な cp だと、削除されたファイルがコピー先に残ってしまう), リモートサーバ接続において rsh や ssh に対応しているため、暗号化した上での転送が可能, 2回目以降の実行では、前回実行時との差分を調べ、必要なファイルのみ転送するため高速である, 前述の --modify-window オプションにて --modify-window=-1 とし、ナノ秒単位まで比較する (ただし rsync 3.1.0 以降), -c または --checksum オプションをつけて、タイムスタンプに頼らずブロック単位のチェックサムで差異を比較する。ただし、遅くなる。. -a を指定することでなるべくコピー元のファイルと同一条件でコピーする。-h でファイルサイズの視認性をよくする。-v で詳細を出力する。-n または --dry-run で対象ファイルを確認する。--max-size で転送対象のファイルサイズの上限を指定できる。. $ pwd /Users/takuya/example $ touch file1 $ ln -s file1 file2 $ ls -l total 8 -rw-r--r-- 1 takuya staff 6 Jul 12 16:45 file1 lrwxr-xr-x 1 takuya staff 13 Jul 12 16:48 file2@ -> example/file1 $ cat file1 File1 $ cat file2 File1 驚くべきことに、誰もがすべての強力な須藤について言及していません。同じ問題があり、須藤はそれを修正しました, Linuxで1つの手順でフォルダとそのすべてのサブフォルダとファイルに対するアクセス権を変更するにはどうすればよいですか?, Linuxのディレクトリの下に新しく作成されたファイルとサブディレクトリのデフォルト許可を設定しますか?, Dockerでのユーザーファイルの所有権について:リンクされたボリュームのアクセス許可の変更を回避する方法, どのように私はLinuxのすべてのユーザーにフォルダの書き込みアクセス権を与えることができますか?, `-rw-r - r - `の最後にあるドットはどういう意味ですか?どうやって `chmod`で設定しますか?, Content dated before 2011-04-08 (UTC) is licensed under. を転送して、転送後にマッピング, タイムスタンプとファイルサイズをチェックせず、すべてのファイルをアップデートする, タイムスタンプのチェックをしないで、ファイルサイズのチェックだけをする, tmp ファイルのディレクトリを指定, 受信側のファイルと比較するための追加ディレクトリ, パターン一致するファイルを除外(例: --exclude="*.txt"), ファイルに記述されたパターンと一致するファイルを除外, パターン一致するファイルを除外しない, ファイルに記述されたパターンと一致するファイルを除外しない, rsync をデーモンとして走らせる, 転送完了後に、統計情報を表示する, 転送中のファイルの転送速度を表示する, テキストファイルに記入されたファイルリストのみを転送する(例: --files-from=list.txt), ファイルからパスワードを得る, ファイルサイズのbytesをKやMで出力, ファイル転送に帯域制限をかける。KBytes/sec で指定する, ファイルフラグをそのまま転送する, 一時ファイルを使用せず、直接転送先ファイルへ上書きする, ファイルフィルタリングルールを追加する. 最終更新 2019-01-13. rsync で root ファイルシステム全体を再帰的にコピーしているので、sda のマウントポイントは全て問題があり、バックアップの起動に失敗します。以下の例では、問題のあるエントリを全て単一のエントリに置き換えています: このセクションではシステムを他のドライブやパーティションにバックアップして、現在のブートローダーが問題なく動作することが前提で、バックアップからも起動できるようにします。, Syslinux の場合、現在使用しているエントリを複製するだけです。別のドライブやパーティションを使うように設定してください。. SSHとは. 以下のコマンドは bash や zsh シェルで利用できるブレース展開を使っています。別のシェルを使用する場合、--excludeを手動で繰り返す必要があります。 -aAX オプションによってファイルはアーカイブモードで転送されるので、シンボリックリンクやデバイス、パーミッションや所有者、変更日時、ACLあるいは拡張属性は保たれます。 --exclude オプションは指定したパターンにマッチするファイルを除外します。/dev, /proc, /sys, /tmp, /run は起動時に作成されるものなので除外しています (フォルダそのも … Rsync is a fast and extraordinarily versatile file copying tool. なぜその問題の原因がわからないのか、宛先のアクセス許可がOKだった(rsyncの前に宛先ディレクトリに対してchown -R を実行した). /boot/grub/grub.cfg の新しいメニューエントリを確認してください。UUID が新しいパーティションになっていることを確認します。変えられていないと古いシステムが起動してしまいます。パーティションの UUID は以下のようにして確認してください: /dev/sdb3 は使用するパーティションに置き換えて下さい。GRUB から起動できるパーティションの UUID を確認するには、grep を使用: lsblk で確認したパーティションが grep で確認できないときは、grub-mkconfig が正しく機能していません。複製したファイルシステムに chroot して mkinitcpio を使う必要があります。例えば、rsync を使って root を /dev/sdb3 に複製した場合、以下のように mkinitcpio を使います: 終了後、再度 grub.cfg を生成して新しい UUID が記述されていることを確認してください。, コンピュータを再起動してブートローダーから適切なエントリを選択してください。これで初めてシステムがロードされます。周辺機器が全て検出されて / に空のフォルダが作成されます。, /etc/fstab を再度編集することで先に削除したパーティションやマウントを追加することができます。, HDD から SSD (ソリッドステートドライブ) にデータを転送した場合、TRIM を忘れずに有効化してください。また、HDD や tmpfs のマウントポイントを使うことで SSD の摩耗を減らすことができます。詳しくはパフォーマンスの最大化#ファイルを tmpfs に再配置するやソリッドステートドライブ#SSD の読み書きを最小化するヒントを参照。, Howto – local and remote snapshot backup using rsync with hard links, https://wiki.archlinux.jp/index.php?title=Rsync_によるフルシステムバックアップ&oldid=14114, システム内にバインドマウントが存在する場合、バインドマウントの中身が何度もコピーされないように同じく除外してください。. ファイルの転送状況の表示 サーバーAからサーバーBに定期的にファイルをrsyncするために、次のセットアップがあります。サーバーBには、次の構成で実行されるrsyncデーモンがあります。, BACKUPディレクトリは、すべてのユーザーに対して完全に読み取り/書き込み/実行されます。サーバーAからrsyncコマンドを実行すると、次のように表示されます。, バックアップするディレクトリ内のすべてのファイルに対して。 tmpファイルを書き込むと失敗します。, 数時間後のグーグルで、非常に単純な許可の問題と思われるものをまだ解決できません。助言?前もって感謝します。, ユーザー-someuserとしてログインしています。宛先ディレクトリには、その内容を含め、すべてのユーザーに対して完全な読み取り/書き込み/実行権限があります。さらに、宛先ディレクトリはsomeuserおよびsomeuserのグループによって所有されます。, Rsyncがフォルダ自体の変更時間を更新しようとしたため、リモートマシンでrsyncを実行するユーザーに、フォルダの内容とフォルダ自体への書き込みアクセス権があることを確認してください。, あなたがこれを機能させたにもかかわらず、最近同様の出会いがあり、SOまたはGoogle検索はすべての基本的な許可の問題を扱っていたので助けにはなりませんでしたほとんどの状況ではチェックすることすら考えないでしょう。, 許可を確認する1つのことは、所有者とグループを含む両方のサーバーで許可がまったく同じであるが、rsync転送は一方のサーバーで一方向に機能したが、他の方法では機能しなかったという問題を自分で最近発見したことを否定しました。, SELinuxが有効になっていて、ファイル/フォルダーのPOSIX許可が無効になっているため、許可が拒否されていた問題がサーバーに判明しました。そのため、問題のフォルダーはrootが実行されている777であっても、コマンドSELinuxが有効になり、rsyncから「permission denied」エラーを生成する許可が上書きされます。, コマンドgetenforceを実行して、マシンでSELinuxが有効になっているかどうかを確認できます。, 私の状況では、SELINUXは不要であり、正常に機能していて問題が有効になったサーバーで既に無効になっているため、SELINUXを完全に無効にしました。無効にするには、/etc/selinux/configを開き、SELINUX=disabledを設定します。一時的に無効にするには、setenforce 0コマンドを実行します。これにより、SELinuxはpermissive状態ではなくenforcing状態に設定され、強制ではなく警告が出力されます。, Rsyncデーモンは、rootユーザーで実行されている場合、デフォルトですべてのモジュールにnobody/nogroupを使用します。そのため、パラメーターuidおよびgidを必要なユーザーに定義するか、root/rootに設定する必要があります。, 私は同じ問題に遭遇し、chown宛先フォルダーのユーザーによってそれを解決しました。現在のユーザーには、宛先フォルダーファイルの読み取り、書き込み、実行の権限がありません。 chmod a+rwx で許可を追加してみてください。, 元のファイルのアクセス許可が保持されないため、これはすべての人に適しているわけではありませんが、私の場合は重要ではなく、問題を解決しました。 rsyncにはオプション--chmod:, -chmodこのオプションは、1つ以上のコンマ区切りのlqchmodrq文字列を転送中のファイルの許可に適用するようにrsyncに指示します。結果の値は、送信側がファイルに提供した許可であるかのように扱われます。つまり、-permsが有効になっていない場合、このオプションは既存のファイルに影響を与えないように見えます。, 私も同様の問題を抱えていましたが、私の場合は、ストレージにSFTPのみがあり、sshまたはrsyncデーモンがありませんでした。このサーバーはお客様から提供されたため、何も変更できませんでした。, rsyncはファイルの日付と時刻を変更できませんでした。他のユーティリティ(csyncなど)には、「一時ファイルのクロックスキューを検出できませんでした」という別のエラーが表示されました。ストレージサーバーにアクセスできる場合は、openssh-serverをインストールするか、ここでデーモンとしてrsyncを起動します。, 私の場合、これを行うことができず、解決策はlftpでした。 lftpの同期化の使用法は次のとおりです。, / src/folder-PC上のフォルダー、/ rem/folder-sftp://sft.domain.tld/rem/folderです。, リンクlftp.yar.ru/lftp-man.htmlでmanを見つけることができます, Windows:宛先フォルダーの許可を確認します。 rsyncサービスを実行しているアカウントに権限を付与する必要がある場合は、所有権を取得します。, 現在上記で言及されていない一般的なエラーは、マウントスペース(たとえば、/media/drivename)パーティションがマウントされていない場合。このエラーも発生します。, 暗号化されたドライブが自動マウントに設定されているがそうでない場合、マウントされるはずのスペースに書き込む前に暗号化されたパーティションの自動ロック解除の問題である可能性があります。, 次の例で-e sshおよびjenkins @ localhost:に注意してください:, P.S。今日、jenkinsユーザーをあるグループに変更(追加)すると、スレーブ(エージェント)の再起動後に許可が適用されることに気付きました。そして、私のソリューション(-e sshおよびjenkins @ localhost:)は、エージェント/サーバーを再起動できない場合にのみ必要です。, CentOS 7でも同じ問題が発生しました。多くの記事、フォーラムを読みましたが、解決策が見つかりませんでした。問題はSElinuxにありました。サーバー側でのSElinuxの無効化は機能しました。サーバーエンドでのSELinuxステータスの確認(rysncを使用してデータをプルしている場所)SELinuxステータスを確認して無効にするコマンド, 今、クライアント側でrsyncコマンドを実行してみてください、それは私のために働いた。ではごきげんよう!, ボードにrsyncdを備えたCentos 7サーバーがあります:/etc/rsyncd.conf, デフォルトでは、selinuxはrsyncdの/ filesフォルダーへのアクセスをブロックします, Dockerコンテナー内のファイルを同期しているときに同じエラーが発生し、宛先がマウントされたボリューム(Mac用のDocker)であったため、su-exec 経由でrsyncを実行しました。 rsyncをrootとして-ogフラグ(宛先ファイルの所有者とグループを保持)として実行することで解決できました。.