วิธีบอก rsync เพื่อรักษาการประทับเวลาของไฟล์เมื่อแผนผังต้นทางมีจุดที่เมาท์


41

เกี่ยวข้องกับคำถามนี้

คำอธิบายปัญหาโดยย่อ:

เมื่อทรีซอร์สมีจุดเมานต์อยู่ภายในดังนั้นการประทับเวลาของไฟล์ภายในจุดเมานต์เมื่อคัดลอกไปยังทรีเป้าหมายจะไม่ถูกรักษาไว้แม้จะใช้-aตัวเลือก

คำอธิบายโดยละเอียด:

สมมติว่านี่เป็นต้นไม้ต้นกำเนิด:

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

ที่data/ด้านบนติดตั้งดิสก์ USB ภายนอก ทุกอย่างเป็นext4ระบบไฟล์ meทุกอย่างในแหล่งที่เป็นเจ้าของของฉัน

BACKUP ยังเกิดขึ้นเป็นจุดเชื่อมต่อดิสก์ USB สำรอง

หลังจากออกคำสั่งนี้rsync -av --delete /home/me/ /home/BACKUP/ฉันพบว่า/home/BACKUP/data/และทุกอย่างด้านล่างมีการประทับเวลาปัจจุบันราวกับว่าไฟล์เหล่านี้ถูกสร้างขึ้นในขณะนี้และไม่ได้ประทับเวลาในไฟล์ที่/home/me/data/มา ไฟล์และโฟลเดอร์อื่นข้างนอกdataมีการบันทึกเวลาที่ตกลง

คำถามคือวิธีการใช้rsyncในการตั้งค่าข้างต้นเพื่อบอกให้รักษาเวลาประทับในไฟล์และโฟลเดอร์ทั้งหมดแม้ในไฟล์และโฟลเดอร์ในจุดที่เมาท์?

ฉันใช้:

>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

คำตอบ:


45

จากman rsync:

   -t, --times                 preserve modification times

แก้ไข - เพื่อปรับปรุงคำตอบนี้เนื่องจากไม่ชัดเจนในทันทีว่าทำไมไม่ช่วย OP:

OP c-timeมีการคัดลอกไฟล์จากที่หนึ่งไปยังอีกระบบแฟ้มและต้องการที่จะรักษา คนส่วนใหญ่เข้าใจc-timeว่าหมายถึง "สร้างเวลา" ซึ่งไม่ถูกต้องในระบบ UNIX / Linux ส่วนใหญ่ (Windows filesystems ติดตาม "สร้าง" หรือ "เกิด" ครั้ง)

ส่วนใหญ่ใน UNIX และลินุกซ์c-timeคือการประทับเวลาที่ใช้ในการบันทึก inode สุดท้าย ' C ' hange การ inode จะเปลี่ยนไปหากมีการอัพเดตคุณสมบัติ

OP ไม่สามารถรักษาc-timeไฟล์ของพวกเขาเมื่อพวกเขาถูกนำไปสู่ระบบไฟล์ใหม่ การสร้างไฟล์เหล่านี้ในระบบไฟล์ใหม่เป็นหนึ่งในเงื่อนไขที่ระบุไว้ข้างต้น (การสร้าง inode / ไฟล์)

/ แก้ไข


9
ขอขอบคุณ. ฉันรู้แล้ว. แต่โปรดอ่านคำถามอีกครั้งอย่างระมัดระวัง ฉันไม่ได้ใช้งาน-aซึ่งบอกว่า: archive mode; equals -rlptgoD ดังนั้น-tจะรวมอยู่
นัสเซอร์

1
คุณพยายามที่จะรักษาเวลาการเปลี่ยนแปลงหรือไม่? ctime ไม่ได้สำหรับ "สร้าง" การเปลี่ยนแปลงสำหรับ (สถานะ)
h3rrmiller

1
ฉันต้องการให้มันทำงานเหมือนที่ทำบนไฟล์ที่ไม่ได้อยู่บนดิสก์ที่เมานต์ ie เก็บตราประทับเวลาเดียวกันที่เห็นเมื่อทำls -lในไฟล์ สิ่งนี้ใช้ได้กับไฟล์ที่ไม่ได้อยู่ในจุดเมานท์ แต่ไฟล์ทั้งหมดที่อยู่ในจุดเมานท์มีการประทับเวลาที่พวกเขาระบุว่าพวกเขาเพิ่งสร้าง สิ่งที่คุณเรียกในครั้งนี้ ฉันแค่อยากให้มันใช้การประทับเวลาเดียวกันกับไฟล์ในแหล่งที่มา ตอนนี้มันไม่ได้ ฉันต้องการคัดลอกตลอดเวลา นั่นคือการโคลนไฟล์ เวลาที่สร้างเวลาการเปลี่ยนแปลง ฯลฯ ...
นัส

4
เวลาการเปลี่ยนแปลง (ctime) ได้รับการอัปเดตเมื่อมีการเปลี่ยนแปลงเป็นไอโหนด (เช่นการสร้าง / การอนุญาตการเปลี่ยนแปลง / การย้าย / ฯลฯ ) เนื่องจากคุณกำลังสร้าง inode ใหม่ (เนื่องจากคุณกำลังคัดลอกไฟล์ที่อยู่ในระบบไฟล์ (แยกตาราง inode) ctime ถูกอัพเดตไม่มีวิธีแก้ไขเพราะไม่มีการเปลี่ยนแปลงของ inode ไม่ใช่ไฟล์ลองดูที่en.wikipedia.org/wiki/Stat_(system_call)#ctime
h3rrmiller

3
ls -lแสดง mtime (แก้ไข) ไม่ใช่ ctime
h3rrmiller

6

ดังที่ HR3miller กล่าวไว้แล้ว -a (หรือ --archive) เท่ากับ -rlptgoD และรวมเวลาการซิงค์แล้ว

อย่างไรก็ตามเมื่อ rsync คัดลอกข้อมูลไปยังเช่น การเมานต์ NFS / FAT32 / NTFS ที่การรักษาผู้ใช้และเจ้าของล้มเหลว rsync จะไม่พยายามตั้งเวลา Rsync จะเตือนด้วยสิ่งที่ชอบ

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

ดังนั้นไม่ต้องสงวนผู้ใช้และกลุ่มโดยใช้

-rlptD

แทน

-rlptgoD

ใช้สิ่งนี้เฉพาะเมื่อไม่ได้สงวนเจ้าของและกลุ่มไว้เป็นตัวเลือกสำหรับคุณ โปรดทราบว่าการรักษา symlink และคุณสมบัติอื่น ๆ อาจทำให้เกิดพฤติกรรมนั้นได้เช่นกัน คุณจะต้องผ่านหน้า man page สำหรับทุกคุณสมบัติ rsync (-r -l -p -t -g -o -D) ที่คุณต้องการสำรองข้อมูล


-2

ฉันใช้rsync -azและแน่ใจว่ามันคงเวลาการแก้ไข ฉันตรวจสอบอีกครั้งตอนนี้


2
นั่นเป็นเพราะ-a( --archive) -tรวมถึง
heemayl

อย่างไรก็ตามไม่มี ctime ไม่สามารถรีเซ็ตได้โดยพลการ (ฉันเข้าใจผิด quesiton ในขั้นต้นขอโทษ.)
Mik
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.