bagaimana cara memberitahu rsync untuk menyimpan cap waktu pada file ketika source tree memiliki titik yang di-mount

42

Terkait dengan pertanyaan ini

Deskripsi singkat masalah:

Ketika sumber pohon memiliki titik yang terpasang di dalamnya, maka perangko waktu pada file di dalam titik yang dipasang itu ketika disalin ke pohon target tidak dipertahankan bahkan ketika menggunakan -aopsi

Detil Deskripsi:

Asumsikan ini adalah pohon sumber:

                       /home/                           /home/
                         |                                |
                        me/                             BACKUP/
                         |                                |
                    +----+----------+                +----+-------+
                    |    |          |                |    |       |
                 data/  foo.txt    boo.txt         data/ foo.txt boo.txt
                    |                                |
                   a.txt                           a.txt

di mana di data/atas terpasang disk USB eksternal. Semuanya adalah ext4sistem file. Semua yang ada di sumber adalah milik saya me.

BACKUP juga kebetulan menjadi titik mount, disk USB cadangan.

Setelah mengeluarkan perintah ini rsync -av --delete /home/me/ /home/BACKUP/, saya menemukan bahwa /home/BACKUP/data/dan semua yang ada di bawahnya memiliki cap waktu saat ini, seolah-olah file-file ini dibuat sekarang, dan bukan cap waktu pada file di /home/me/data/. File dan folder lain di luar datamemang memiliki stempel waktu tetap OK.

Pertanyaannya adalah: Bagaimana cara menggunakan rsyncpengaturan di atas untuk memberitahu itu untuk menjaga waktu pada semua file dan folder bahkan pada file dan folder pada titik yang dipasang?

Saya menggunakan:

>uname -a
Linux 3.5.0-17-generic #28-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux

>rsync -v
rsync  version 3.0.9  protocol version 30
Nasser
sumber

Jawaban:

46

dari man rsync:

   -t, --times                 preserve modification times

EDIT - untuk memperbaiki jawaban ini karena tidak segera jelas mengapa ini tidak membantu OP:

OP menyalin file dari satu sistem file ke yang lain dan ingin mempertahankan c-time. Kebanyakan orang mengerti c-timemaksud "menciptakan waktu" yang tidak benar pada sebagian besar sistem UNIX / Linux (sistem file Windows melacak waktu "penciptaan" atau "kelahiran").

Untuk sebagian besar, dalam UNIX dan Linux, c-timeadalah cap waktu yang digunakan untuk merekam inode terakhir ' C ' hange. Inode berubah jika salah satu atributnya diperbarui:

OP tidak dapat mempertahankan c-timefile mereka ketika mereka dibawa ke sistem file baru. Pembuatan file-file ini di sistem file baru adalah salah satu kondisi yang tercantum di atas (pembuatan inode / file).

/ EDIT

h3rrmiller
sumber
9
Terima kasih. Saya tahu itu. Tapi tolong baca pertanyaan itu lagi dengan seksama. Saya menggunakan -ayang mengatakan: archive mode; equals -rlptgoD karenanya -tsudah termasuk.
Nasser
1
Apakah Anda mencoba untuk menghemat waktu perubahan? ctime BUKAN untuk "dibuat" untuk perubahan (status)
h3rrmiller
1
Saya ingin itu berfungsi seperti halnya pada file yang tidak ada pada disk yang dipasang. yaitu menyimpan stempel waktu yang sama dengan yang dilihat saat melakukan ls -lpada file. Ini berfungsi pada file yang tidak di dalam titik mount. Tetapi semua file yang ada di dalam mount point, memiliki cap waktu yang mengindikasikan mereka baru saja dibuat. Apa pun panggilan Anda kali ini. Saya hanya ingin menggunakan stempel waktu yang sama pada file di sumbernya. Sekarang tidak. Saya ingin semua aspek waktu disalin. yaitu klon file dibuat. waktu pembuatan, ubah waktu, dll ...
Nasser
4
waktu perubahan (waktu) akan diperbarui pada perubahan ke inode (mis. penciptaan / perubahan izin / pemindahan / dll). karena Anda membuat inode baru (karena Anda menyalin file ke sistem file (tabel inode terpisah) waktu diperbarui. tidak ada jalan lain karena itu adalah perubahan inode, bukan file. lihat en.wikipedia.org/wiki/Stat_(system_call)#ctime
h3rrmiller
3
ls -lmenunjukkan mtime (modifikasi) bukan
ctime
6

seperti yang sudah dikatakan hr3miller, -a (atau --archive) sama dengan -rlptgoD dan sudah termasuk waktu sinkronisasi.

Namun ketika rsync menyalin data ke, mis. mount NFS / FAT32 / NTFS di mana menjaga pengguna dan pemilik gagal, rsync tidak akan mencoba untuk mengatur waktu. Rsync akan memperingatkan dengan sesuatu seperti

rsync: chown "/mnt/backup/postgres/hourly.0/primary/var" failed: Operation not permitted (1)

Karena itu tinggalkan pengguna dan grup dengan menggunakan

-rlptD

dari pada

-rlptgoD

Hanya gunakan ini saat tidak melindungi pemilik dan grup adalah opsi untuk Anda. Perhatikan bahwa menjaga symlink dan fitur lainnya dapat memicu perilaku itu juga. Anda harus membaca halaman manual untuk setiap fitur rsync (-r -l -p -t -g -o -D) yang ingin Anda backup.

pengguna1283043
sumber
-2

Saya menggunakan rsync -azdan pasti hal itu menghemat waktu modifikasi saya. Saya mengeceknya sekarang.

Mik
sumber
2
Itu karena -a( --archive) termasuk -t.
heemayl
Namun tidak, waktu tidak dapat diatur ulang secara sewenang-wenang. (Awalnya saya salah paham soal quesiton, maaf.)
Mik