web-dev-qa-db-ja.com

rsyncは-aを使用してもディレクトリの所有権を保持しません

このrsync呼び出しを使用して、ホームディレクトリをバックアップします。

rsync -aARrx --info= --force --delete --info=progress2 -F "$USER_HOME" "$BACKUP_MNTPOINT"

rsyncのマニュアルページには、-aが-gおよび-o(他のスイッチの中でも特に)を意味し、所有権が保持されると記載されています。ただし、$BACKUP_MNTPOINT/$USER_HOMEの下にディレクトリが存在しない場合は、正しいディレクトリではなくroot:rootの所有権でディレクトリが作成されることに気付きました。 (これは$BACKUP_MNTPOINT/$USER_HOMEの直下のディレクトリでのみ発生します)。何故ですか?

$BACKUP_MNTPOINTは、ローカルにマウントされたドライブです。 $BACKUP_MNTPOINT/$USER_HOMEには適切な所有権と権限があります。 $USER_HOME$BACKUP_MNTPOINTもスラッシュで終わっていません。

ソースとターゲットの両方のファイルシステムはXFSであり、mkdir $BACKUP_MNTPOINT/$USER_HOMEを実行すると、予想される所有権を持つディレクトリが作成されます。

12
kralyk

rsyncを使用してシステムをサーバーにバックアップするときに、同様の問題が発生しました。私が使用した:

rsync -aAXSHPr \
-e ssh \
--rsync-path="Sudo /usr/bin/rsync/" \
--numeric-ids \
--delete \
--progress \
--exclude-from="/path/to/file/that/lists/excluded/folders.txt" \
--include-from="/path/to/file/that/lists/included/folders.txt" \
/ USER@SERVER:/path/to/folder/where/backup/should/go/

解決策は、実際には問題がないということです。 rsyncプロセスが誤った権限セットでフォルダを作成するのを確認したら、プロセスを中止したと思います。重要なのは、rsyncが親フォルダーのアクセス許可を設定するのは、そのすべてのサブフォルダーとそのファイルの同期が完了した後のみです。

18
lord.garbage

おそらく、strace/trussを介してrsyncを実行し、chown()syscallからエラーが返されるかどうかを確認します。また、chown()に正しいパスとUID/GIDがあることを確認します。

0
Jez