rsync - มันสร้างไฟล์ชั่วคราวในระหว่างการถ่ายโอนหรือไม่?


36

เท่าที่ฉันเห็น rsync ไม่ได้สร้างไฟล์ในไดเรกทอรีเป้าหมายจนกว่าจะเสร็จสมบูรณ์

นี่ต้องหมายความว่ามันสร้างไฟล์ในไดเรกทอรีชั่วคราวและคัดลอกไฟล์ไปยังไดเรกทอรีเป้าหมายเมื่อมันเสร็จสมบูรณ์

ก่อนอื่นมันถูกต้องไหม?

หากเป็นจริงเป็นไปได้หรือไม่ที่ rsync จะตั้งค่าไม่ใช้ไดเรกทอรีชั่วคราวและสร้างไฟล์ในไดเรกทอรีเป้าหมายและเพียงแค่เขียนไปเรื่อย ๆ จนกว่าจะเสร็จสมบูรณ์

คำตอบ:


45

ใช่มันสร้างไฟล์ชั่วคราว

ตามหน้า manคุณสามารถระบุไดเร็กตอรี่ที่เก็บไฟล์ temp พร้อมกับพารามิเตอร์ -T เหมือนใน

-T, --temp-dir = DIR สร้างไฟล์ชั่วคราวในไดเรกทอรี DIR

คำตอบในส่วนที่สองของคำถามของคุณสามารถพบได้ที่นั่น:

--ในสถานที่

ตัวเลือกนี้เปลี่ยนวิธีการถ่ายโอนไฟล์ rsync เมื่อข้อมูลของไฟล์จำเป็นต้องได้รับการอัปเดต: แทนที่จะเป็นวิธีเริ่มต้นในการสร้างสำเนาใหม่ของไฟล์และย้ายไปยังตำแหน่งเมื่อเสร็จสมบูรณ์ rsync จะเขียนข้อมูลที่อัพเดทโดยตรงไปยังปลายทางแทน ไฟล์.


4
โน๊ตสำคัญ! คำถามสมมติว่า rsync "คัดลอกไฟล์เข้าที่" ในขณะที่เอกสาร rsync ระบุว่า rsync นั้นจริง ๆ แล้ว "ย้ายเข้าที่" ซึ่งเป็นความแตกต่างที่สำคัญ สิ่งนี้ทำให้มั่นใจได้ว่าไฟล์จะปรากฏในตำแหน่งปลายทางในแบบอะตอมมิก สิ่งนี้มีประโยชน์ในการป้องกันสภาวะการแข่งขันที่แอปพลิเคชันอื่นกำลังรอให้ไฟล์ปลายทางปรากฏและเปิดทันทีเพื่ออ่าน แต่ไฟล์จะไม่ถูกคัดลอก
Ogre Psalm33

15

มันจะสร้างไฟล์ temp .<FILE_NAME>.<RANDOM_STRING>โดยค่าเริ่มต้นในไดเรกทอรีเป้าหมายและการตั้งชื่อ ดังนั้นหากคุณกำลังคัดลอกfoo.txtมันจะสร้างไฟล์ tmp ที่เรียกว่า.foo.txt.GV4H3( GV4H3เป็นสตริงสุ่มที่จะแตกต่างกันทุกครั้งที่คุณเรียกใช้) คุณสามารถควบคุมพฤติกรรมนี้ได้โดยใช้rsyncตัวเลือกเหล่านี้:

   --partial
          By default, rsync will delete any partially transferred
          file if the transfer is interrupted.  In  some  circum‐
          stances  it  is more desirable to keep partially trans‐
          ferred files. Using the --partial option tells rsync to
          keep  the  partial  file which should make a subsequent
          transfer of the rest of the file much faster.

   --partial-dir=DIR
          A better way to keep partial files than  the  --partial
          option  is  to  specify a DIR that will be used to hold
          the partial data (instead of writing it out to the des‐
          tination file).  On the next transfer, rsync will use a
          file found in this dir as data to speed up the  resump‐
          tion  of  the  transfer and then delete it after it has
          served its purpose.

โปรดอ่านส่วนที่เกี่ยวข้องของrsyncหน้าคน (ต่อไปนี้เป็นเพียงส่วนเล็ก ๆ ของส่วนขนาดใหญ่เกี่ยวกับวิธีการใช้งาน--partial-dir)


5

rsync สร้างไฟล์ชั่วคราวในไดเรกทอรีเป้าหมาย ไฟล์นั้นมีชื่อเหมือนแหล่งที่มา แต่มีนามสกุล อาจเป็นเช่นนั้น:

source: foo.bar 
target temp: foo.bar.hzmkjt7 (hzmkjt7 is just an example) 

นามสกุลจะถูกลบออกหลังจากไฟล์ได้รับการตรวจสอบว่าเป็นสำเนาที่แน่นอนของแหล่งที่มา ในระหว่างการเป็นเจ้าของกระบวนการเปลี่ยนชื่อสิทธิ์และเวลาการแก้ไขจะถูกตั้งค่า ดังนั้นจึงเป็นไปได้ที่คุณจะไม่เห็นไฟล์เนื่องจากการอนุญาต ตรวจสอบให้แน่ใจว่าคุณมีสิทธิ์เพียงพอที่จะดูไฟล์ทั้งหมดรวมถึงไฟล์ที่คุณไม่ได้เป็นเจ้าของเพื่อดูไฟล์ชั่วคราว


กระบวนการสร้างไฟล์ที่มีสิทธิ์ของผู้ใช้ที่ทำงานมัน ไม่สามารถดูไฟล์ได้เนื่องจากการอนุญาตในกรณีนี้
ЯрославРахматуллин

@ ЯрославРахматуллин rsync สามารถทำงานในโหมด daemon ได้เช่นกัน หรือมันสามารถกำหนดเป็น cronjob วิธีใดก็เป็นไปได้ว่าผู้ใช้ที่อยู่ภายใต้ rsync กำลังทำงานอยู่ไม่ใช่ผู้ใช้ที่ต้องการดูไฟล์ temp ในกรณีนั้นเป็นไปได้ว่ามันเป็นปัญหาสิทธิ์
Simon

1
ไฟล์ temp อาจเริ่มต้นด้วย "." ในกรณีนี้คือ. foo.bar.hzmkjt7
interskh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.