ลิงค์ rsync และสัญลักษณ์


53

ฉันต้องการสำรองข้อมูลไดเรกทอรีบ้านของฉันไปยังไดรฟ์ภายนอกทุกคืนโดยใช้ cron งานที่จะดำเนินการ rsync. ฉันไม่แน่ใจในพฤติกรรมที่แน่นอนของ rsync ธงเชื่อมโยงสัญลักษณ์ของ

  1. rsync 's -a ธงรวมถึง -l ตั้งค่าสถานะ (เช่น "คัดลอก symlinks เป็น symlinks") นี่แปลว่ามันจะ คัดลอกลิงค์ หรือว่ามันจะไปตามลิงค์และคัดลอกทุกสิ่งในไดเรกทอรี link-to? ฉันต้องการหลีกเลี่ยงเพราะฉันมีลิงก์ไปยังไดเรกทอรีที่เต็มไปด้วยไฟล์สื่อที่เกี่ยวข้องกับการคัดลอกหลายร้อยกิกะไบต์ฉันไม่ต้องการสำรอง
  2. ความกลัว (แต่ไม่แน่ใจ) rsync -a จะคัดลอกไฟล์สื่อทั้งหมดที่ฉันเพิ่ม --no-links ธง. สิ่งนี้ดูเหมือนจะไม่เป็นพฤติกรรมที่ฉันต้องการ ไม่สนใจคัดลอกลิงก์ใด ๆ ที่มีปัญหาเพราะฉันมีลิงก์ที่ฉันต้องการคัดลอก (เช่นลิงก์ไปยังไฟล์ส่วนหัวทั่วไปจากไดเรกทอรีโครงการที่ต่างกัน)
  3. สมมติว่า # 1 ด้านบน (โดยไม่มี --no-links ตั้งค่าสถานะ) เป็นสิ่งที่ฉันต้องการจริงๆและเพียงคัดลอกลิงก์โดยไม่คัดลอกไฟล์ที่เชื่อมโยงไปยังลิงก์จะถูกทำลายเมื่อสำรองข้อมูลหรือไม่ เช่นฉันอาจ rsync ไดเรกทอรีต้นทาง /home/me/projects/misc ไปยัง /media/extdrive/backup/home/me/projects/misc. ในกรณีนี้ฉันถือว่า rsync ไม่ฉลาดพอหรือพยายามแก้ไขเนื้อหาของ symlink สำหรับการเปลี่ยนแปลงไดเรกทอรีสัมพัทธ์ ถูกต้องหรือไม่ ไม่เป็นไรถ้าลิงก์เสียหายในไดเรกทอรีสำรองตราบใดที่พวกเขาจะได้รับการแก้ไขและทำงานหากเวลาดังกล่าวมาถึงเมื่อพวกเขาต้องการที่จะกู้

3
ธง -L น่าจะเป็นสิ่งที่คุณต้องการ จากหน้า rsync man บน Centos Linux: "-L, --copy-links เปลี่ยน symlink ให้เป็นไฟล์ / dir อ้างอิง" ฉันขอแนะนำให้ทดสอบสิ่งนี้กับไดเร็กทอรีตัวอย่างและลิงก์เพื่อให้แน่ใจว่าคุณจะไม่เขียนทับข้อมูลใด ๆ ที่คุณไม่ต้องการ แก้ไขเพื่อรวมคำเตือนเกี่ยวกับการสูญเสียข้อมูลที่เป็นไปได้ ;)
Mick T

คำตอบ:


69
  1. "คัดลอก symlink เป็น symlink" หมายถึงสิ่งที่กล่าว: หาก rsync เห็น symlink ในไดเรกทอรีต้นทางมันจะสร้าง symlink เหมือนกันในปลายทาง ไม่มีอะไรเพิ่มเติม

    (มีสองสามบรรทัดในหน้าคู่มือ ต่าง ตัวเลือก --copy-linksอธิบายพฤติกรรมที่ตรงกันข้าม (มักจะคัดลอกข้อมูล) ซึ่งคุณอธิบายว่าไม่พึงประสงค์)

    ดูที่ส่วน "ลิงก์สัญลักษณ์":

    ถ้า --links ระบุไว้จากนั้นลิงก์จะถูกสร้างขึ้นใหม่โดยมีเป้าหมายเดียวกันบนปลายทาง

  2. ไม่ใช่พฤติกรรมที่คุณต้องการเพราะคุณตีความสิ่งที่ผิด --links ทำและดังนั้นจึงขอพฤติกรรมที่ผิด (ดูคำตอบ # 1)

  3. โดยค่าเริ่มต้นมันคัดลอกปลายทาง อย่างแน่นอน

    กล่าวคือหากลิงก์ชี้ไปที่เส้นทางที่แน่นอน (เช่น /home/me/projects ) มันจะชี้ไปยังเส้นทางเดิมต่อไป มันจะไม่ หยุด มันจะชี้ไปที่ไฟล์ในโฮมไดเร็กตอรี่ของคุณต่อไปแทนที่จะเป็นไฟล์ในไฟล์สำรองของคุณ

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

    น่าเสียดายที่ไม่มีตัวเลือกใด ๆ ในการแปล symlink สัมบูรณ์สำหรับฐานใหม่ เพื่อหลีกเลี่ยงปัญหาคุณควรเปลี่ยน symlink ที่มีอยู่ให้เป็นรายการที่สัมพันธ์กัน


1
อืมมมมต่างอะไรกัน --copy-links และ --links?
Alexander Mills

--copy-links = -Lและ --links = -l. ดูคำอธิบายจากเอกสารในคำตอบของฉันที่นี่: superuser.com/a/1388910/425838
Gabriel Staples

1

มีหน้าเว็บที่ดีมากหลายหน้าที่อธิบาย rsync โดยละเอียด

http://www.jveweb.net/en/archives/2010/11/synchronizing-folders-with-rsync.html

http://www.mikerubel.org/computers/rsync_snapshots/index.html

ฉันจะแนะนำสาธารณูปโภคเช่น backintime หรือ rsnapshot


22
โปรดรวมตัวอย่างที่เกี่ยวข้องไว้ในคำตอบสำหรับลิงก์เท่านั้นในขณะนี้
Cristian Ciupitu

0

@grawity มีคำตอบที่ดี แต่นี่เป็นภาพหน้าจอของข้อมูลที่เกี่ยวข้องบางส่วนจากเอกสาร นี่คือถ้อยคำที่แน่นอนหรือ -l และ -L ตัวเลือกเช่นซึ่งดูเหมือนจะเป็นคำถามที่เกี่ยวข้องมากที่สุด

enter image description here

ที่มา: https://linux.die.net/man/1/rsync

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