rsync tidak mempertahankan kepemilikan direktori bahkan dengan -a

12

Saya menggunakan doa rsync ini untuk membuat cadangan direktori home saya:

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

Halaman manual rsync mengatakan bahwa -a menyiratkan -g dan -o (di antara sakelar lain), yang harus mempertahankan kepemilikan. Namun saya perhatikan bahwa jika direktori tidak ada di bawahnya $BACKUP_MNTPOINT/$USER_HOME, direktori tersebut dibuat dengan root: kepemilikan root alih-alih yang benar. (Ini hanya terjadi dengan direktori di bawah $BACKUP_MNTPOINT/$USER_HOME). Mengapa demikian?

$BACKUP_MNTPOINTadalah drive yang terpasang secara lokal. $BACKUP_MNTPOINT/$USER_HOMEmemang memiliki hak kepemilikan dan izin. Baik $USER_HOMEatau $BACKUP_MNTPOINTdiakhiri dengan garis miring.

Sumber dan sistem file target adalah XFS dan menjalankan mkdir $BACKUP_MNTPOINT/$USER_HOMEmenciptakan direktori dengan kepemilikan yang diharapkan.

kralyk
sumber
1
Apa itu filesystem $BACKUP_MNTPOINTdan dengan opsi apa ia di-mount? Apakah ini hanya terjadi pada $BACKUP_MNTPOINT/$USER_HOMEdirektori parent ( ) atau untuk semua direktori yang dibuat? Lakukan $BACKUP_MNTPOINTdan $USER_HOMEakhiri dengan /?
terdon
Saya menggunakan XFS untuk keduanya /homedan drive cadangan. Sejauh ini saya pikir itu hanya terjadi pada direktori induk. Baik $BACKUP_MNTPOINTatau $USER_HOMEdiakhiri dengan garis miring. EDIT: Saya dapat mengkonfirmasi sekarang ini hanya terjadi pada direktori di bawah ini$BACKUP_MNTPOINT/$USER_HOME
kralyk
Jadi $BACKUP_MNTPOINT/$USER_HOMEpunya izin yang tepat tetapi subdirektori mana pun tidak? Harap edit pertanyaan Anda dan tambahkan detail ini. Juga, jelaskan apakah mkdir $BACKUP_MNTPOINT/$USER_HOME/foomembuat direktori milik pengguna Anda jika Anda melakukannya secara manual.
terdon
Ya, mkdir $BACKUP_MNTPOINT/$USER_HOME/foobuat direktori dengan kepemilikan pengguna.
kralyk
Akan sangat menyenangkan untuk melihat informasi yang relevan dari strace(sebagaimana ditentukan dalam jawaban semu).
Pavel Šimerda

Jawaban:

18

Saya memiliki masalah yang sama ketika menggunakan rsyncuntuk mencadangkan sistem saya ke server saya. Saya menggunakan:

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/

Solusinya adalah tidak ada masalah. Saya menduga bahwa Anda membatalkan rsyncproses begitu Anda melihat bahwa itu membuat folder dengan set izin yang salah. Intinya adalah bahwa rsynchanya menetapkan izin dari folder induk setelah selesai menyinkronkan semua subfolder dan file itu.

Tuan. Sampah
sumber
1
Wow, itu tidak terpikir olehku sama sekali, terlihat indah, terima kasih.
kralyk
0

Mungkin jalankan rsync melalui strace / truss dan lihat apakah Anda mendapatkan kesalahan kembali dari chown () syscall, dan juga untuk mengkonfirmasi bahwa chown () memiliki jalur yang benar dan UID / GID.

Jez
sumber
Komentar yang baik tetapi bukan jawaban.
Pavel Šimerda