背景
rsyncを使用してデータをバックアップする「正しい」方法は何ですか?私が「正しい」方法を尋ねる理由は、rsyncを使用した過去の経験から、権限、ファイル/フォルダマスク、およびタイムスタンプに関連する問題が発生したためです。したがって、この質問は理解を求めています。rsync を Windows システムで使用している場合、権限、ファイル/フォルダ マスク、またはタイムスタンプ関連の問題に遭遇することなく、rsync を使用してデータをバックアップするにはどうすればよいですか。。
この質問のもう一つの動機は、私が前号cygwin 経由で rsync でバックアップした外付けドライブ上のファイルにアクセスできなくなってしまいました。メイン PC で実際にデータを失ってしまい、バックアップから復元しようとしていたため、これは悪夢でした。
以下は、rysnc の使用時に遭遇した同様の問題です。
- rsync を使用してバックアップされた外部ドライブ上のファイルにアクセスできませんWindows での Rsync および Cygwin ベースのバックアップでアクセス拒否エラーが発生する
- タイムスタンプを保存できませんhttps://unix.stackexchange.com/questions/61586/how-to-tell-rsync-to-preserve-time-stamp-on-files-when-source-tree-has-a-mounted
- rsync - mkstemp が失敗する問題https://stackoverflow.com/questions/11039559/rsync-mkstemp-failed-permission-denied-13
rsync の使用法についての私の理解は中級レベルで、以下にリストされているガイドを参照しました。しかし、rsync の使用法に関して私が最も混乱しているのは、権限、ファイル/フォルダーのマスキング、Posix などです。
要件/前提条件
- 私は rsync を「同期」のコンテキストではなく、「バックアップ」のコンテキストで使用したいと考えています。多くの場合、rsync に関連する質問をする他のユーザーは、別の PC 上のファイルの作業コピーが同期されていることを確認するために、データを「同期」することに興味があるかもしれません。しかし、私の意図は「同期」ではなく、単に「バックアップ」することであり、PC に何かが起こった場合に、最後のバックアップ コピーを取得して復元できるようにすることです。
- バックアップする必要がある元のファイルは、どのオペレーティング システム (例: Windows、Ubuntu、MacOS) にも存在する可能性がありますが、主に Windows 上にあります。
- Windowsでは、rsyncはcygwinではなくWindows Subsystem for Linux (WSL)を使用して使用されます。
- バックアップの保存先は、NTFS、FAT32、exFAT としてフォーマットされた外部ドライブ、またはネットワーク ドライブ (例: Samba 共有) にすることができます。
- これは必須ではありませんが、SSHを使用して宛先に接続できます。
現在の方法と問題点
私は Windows 10 上の Windows Subsystem for Linux (WSL) を通じて rsync を使用しています。以下は私が遭遇した問題の例です。
例1:動作しない
rsync -avhP --delete /mnt/c/Users/MyUsername/ProjectA /mnt/my_usb_mount/Backup
この方法では、ファイルは転送されず、以下のようなエラーが発生します。
rsync: chgrp "/mnt/my_usb_mount/ProjectA/src" failed: Operation not permitted (1)
そして
rsync: mkstemp "/mnt/my_usb_mount/ProjectA/src/.mydata.json.6cfTCf" failed: Operation not permitted (1)
例2:部分的に機能
rsync -avhP --no-p --delete /mnt/c/Users/MyUsername/ProjectA /mnt/my_usb_mount/Backup
または
rsync -avhP --no-p --chmod=ugo=rwX --delete /mnt/c/Users/MyUsername/ProjectA /mnt/my_usb_mount/Backup
rysnc を使用するこの方法では、ファイルは転送されますが、タイムスタンプ (作成、変更、アクセス) はすべて転送時間に設定されます。rsync コマンドを再度実行すると、すべてのファイルが変更済みとして検出され、タイムスタンプが正しくないために再転送されます。さらに、次のようなエラーが表示されます。
rsync: chgrp "/mnt/my_usb_mount/ProjectA/src" failed: Operation not permitted (1)
例3:正常に動作しています。
sudo rsync -avhP --delete /mnt/c/Users/MyUsername/ProjectA /mnt/my_usb_mount/Backup
この方法は完璧に機能しますが、なぜ を使用する必要があるのかわかりません。WSL を介して Windows で rsync を使用しているためでしょうか? Linux PC (例: Ubuntu) からファイルをバックアップする場合もsudo
を使用する必要がありますか?sudo
例 3 は実用的な解決策ですが、まだ多くの疑問が残ります。
- いつ必要になるかはどうすればわかりますか
sudo
? - いつ使う
--no-p
のか--chmod=ugo=rwX
- 使用権限がない場合はどうなりますか
sudo
? - ネットワークドライブにファイルをバックアップする場合でも機能しますか?
- SSH を使用している場合はどうなりますか?
- WindowsからWSL経由でrsyncを使用する場合、奇妙な権限やファイル/フォルダマスクの問題に遭遇することがありますか?以前に?
答え1
NtfsとfatはLinuxの権限を気にしないので、パーティションext4にバックアップを作成する必要があります。
または、バックアップを作成してtar.gzに圧縮し、Linuxシステムファイルで解凍して復元します。