เคล็ดลับและเทคนิค rsync ที่ชื่นชอบ


57

ยิ่งฉันใช้rsyncมากเท่าไหร่ฉันก็ยิ่งรู้ว่ามันเป็นมีดถ่ายโอนไฟล์ของกองทัพสวิส มีตัวเลือกมากมาย เมื่อเร็ว ๆ นี้ฉันพบว่าคุณสามารถไปได้--remove-source-filesและมันจะลบไฟล์จากแหล่งที่มาเมื่อมันถูกคัดลอกซึ่งทำให้เป็นการเคลื่อนไหวมากกว่าโปรแกรมคัดลอก :)

คุณชอบเคล็ดลับและลูกเล่นเล็ก ๆ น้อย ๆ rsync อะไรบ้าง?

คำตอบ:


19

ลองใช้ rsync เวอร์ชั่น 3 หากคุณต้องทำการซิงค์ไฟล์หลาย ๆ ไฟล์! V3 สร้างรายการไฟล์แบบเพิ่มขึ้นและเร็วขึ้นมากและใช้หน่วยความจำน้อยกว่ารุ่น 2

ขึ้นอยู่กับแพลตฟอร์มของคุณซึ่งสามารถสร้างความแตกต่างได้ บน OSX เวอร์ชัน 2.6.3 อาจใช้เวลามากกว่าหนึ่งชั่วโมงหรือเกิดความผิดพลาดในการพยายามสร้างดัชนี 5 ล้านไฟล์ในขณะที่เวอร์ชัน 3.0.2 ฉันรวบรวมเริ่มการคัดลอกทันที


สิ่งหนึ่งที่ควรทราบคือหากคุณใช้ตัวเลือกบางตัว (เช่น--delete-beforeเป็นต้น) พฤติกรรม "เก่าสร้างรายการแรก" จะถูกใช้เนื่องจากเป็นสิ่งจำเป็นสำหรับตัวเลือกเหล่านี้ในการทำงานอย่างถูกต้อง - ดังนั้นหากคุณไม่เห็นพฤติกรรมนี้ตรวจสอบว่า ตัวเลือกอื่น ๆ ที่คุณกำลังใช้นั้นเป็นที่รู้จักกัน สิ่งนี้มีประโยชน์หากคุณใช้ rsync แบบโต้ตอบบนต้นไม้ขนาดใหญ่และต้องการบังคับให้สแกนครั้งแรกดังนั้นผลลัพธ์ของ--progressความถูกต้อง (เช่นจำนวนการนับวัตถุเพื่อเปรียบเทียบจะไม่เพิ่มขึ้นเนื่องจากจะไม่พบวัตถุใหม่หลังจากการสแกนครั้งแรก )
David Spillett

18

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

(ที่จริงแล้วฉันยังคงใช้วิธีการrysncติดตามผลcp -alซึ่งประสบความสำเร็จในสิ่งเดียวกันดูที่http://www.mikerubel.org/computers/rsync_snapshots/สำหรับเทคนิคที่ล้าสมัย แต่ยังคงดีมาก และปัญหาที่เกี่ยวข้อง)

ข้อเสียอย่างหนึ่งที่สำคัญของเทคนิคนี้คือถ้าไฟล์เสียหายเนื่องจากข้อผิดพลาดของดิสก์มันก็เสียหายเหมือนในภาพรวมทั้งหมดที่เชื่อมโยงไปยังไฟล์นั้น แต่ฉันมีการสำรองข้อมูลแบบออฟไลน์ด้วยซึ่งจะป้องกันในระดับที่เหมาะสม สิ่งอื่นที่ต้องระวังคือระบบไฟล์ของคุณมี inodes เพียงพอหรือคุณจะใช้มันหมดก่อนที่คุณจะใช้พื้นที่ดิสก์หมด (แม้ว่าฉันจะไม่เคยมีปัญหากับค่าเริ่มต้น ext2 / 3)

นอกจากนี้อย่าลืมว่ามีประโยชน์มาก--dry-runสำหรับโรคจิตแพระโนยะเล็ก ๆ น้อย ๆ โดยเฉพาะอย่างยิ่งเมื่อคุณใช้--delete*ตัวเลือก


6
+1 สำหรับ - วิ่งแห้ง
David Z

1
โปรดทราบว่า -n เป็นทางลัดสำหรับ - วิ่ง
แห้ง

3
ฉันชอบที่จะใช้ชื่อยาว ๆ โดยเฉพาะอย่างยิ่งในสคริปต์ที่คนอื่น ๆ อาจจบลงด้วยการดูแล มันทำให้ชัดเจนสิ่งที่ตั้งใจไว้โดยไม่มีการอ้างอิงถึงเอกสาร
David Spillett

+1 ฉันใช้โซลูชันสำรองข้อมูลของ TB จำนวนมากในหลาย ๆ เครื่องด้วยวิธี --link-dest สำหรับสแน็ปช็อตฮาร์ดลิงก์ตามที่อธิบายไว้ข้างต้น - มันทำงานได้อย่างสมบูรณ์
matja

หากคุณต้องการ --link-dest backup ให้ตรวจสอบDirvishที่ใช้ rsync ภายใต้ประทุน
hfs

14

หากคุณต้องการอัปเดตเว็บไซต์ด้วยไฟล์ขนาดใหญ่ผ่านลิงก์ช้าคุณสามารถถ่ายโอนไฟล์ขนาดเล็กด้วยวิธีนี้:

rsync -a - max-size = 100K / var / www / there: / var / www /

จากนั้นทำสิ่งนี้สำหรับไฟล์ขนาดใหญ่:

rsync -a --min-size = 100K --bwlimit = 100 / var / www / there: / var / www /

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


10

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


ขอบคุณ! นี่เพิ่งช่วยฉันจากการเขียนกฎตัวกรองที่น่ารังเกียจ
benzado

8

--rsh เป็นของฉัน.

ฉันใช้มันเพื่อเปลี่ยนการเข้ารหัสบน ssh ไปเป็นบางสิ่งที่เร็วขึ้น ( --rsh="ssh -c arcfour") รวมถึงตั้งค่า chain ของsshs (แนะนำให้ใช้ด้วยssh-agent) เพื่อซิงค์ไฟล์ระหว่างโฮสต์ที่ไม่สามารถพูดได้โดยตรง ( rsync -av --rsh="ssh -TA userA@hostA ssh -TA -l userB" /tmp/foobar/ hostB:/tmp/foobar/)


7
--time-limit

เมื่อตัวเลือกนี้ถูกใช้ rsync จะหยุดหลังจาก T นาทีและออก ฉันคิดว่าตัวเลือกนี้มีประโยชน์เมื่อทำการถ่ายโอนข้อมูลจำนวนมากในเวลากลางคืน (ไม่ยุ่งตลอดเวลา) จากนั้นหยุดเมื่อถึงเวลาที่ผู้ใช้จะเริ่มใช้เครือข่ายระหว่างวัน (ไม่ว่าง)

--stop-at=y-m-dTh:m

ตัวเลือกนี้ช่วยให้คุณระบุเวลาที่จะหยุด rsync

Batch Mode

สามารถใช้โหมดแบทช์เพื่อใช้ชุดการอัปเดตชุดเดียวกันกับระบบที่เหมือนกันหลายระบบ


ที่เป็นประโยชน์! ฉันใช้คำสั่ง "at" ก่อนที่จะฆ่ากระบวนการ
Lionel

แพตช์แหล่งที่มา: rsync.samba.org/ftp/rsync/rsync-patches-3.1.0.tar.gz ; Win32 ไบนารีพร้อมโปรแกรมแก้ไขรวมอยู่ด้วย: itefix.no/i2/cwrsync
jftuga

2
น่าเสียดายที่ตัวเลือกเหล่านี้ไม่สามารถใช้ได้ใน rsync กระจายด้วย Redhat / Centos หรือ Ubuntu distros
IanB

@Lionel: คุณใช้วิธีatฆ่ากระบวนการอย่างไร
IMTheNachoMan

6

หากคุณสงสัยว่า rsync ที่ทำงานช้าไปมานานแค่ไหนและไม่ได้ใช้ -v เพื่อแสดงรายการไฟล์ขณะที่ถูกถ่ายโอนคุณสามารถค้นหาไฟล์ที่เปิดอยู่:

 ls -l /proc/$(pidof rsync)/fd/*

บนระบบที่มี / proc

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

นอกจากนี้ยังบอกข้อมูลที่น่าสนใจอีกเล็กน้อยให้ฉันเห็นส่วนสิ้นอื่นเห็นได้ชัดเนื่องจากมีการเชื่อมโยงซ็อกเก็ตที่ใช้งานไม่ได้:

/proc/22954/fd/4: broken symbolic link to `socket:[2387837]'

5

--archive เป็นตัวเลือกมาตรฐาน (แต่ไม่ใช่ค่าเริ่มต้น) สำหรับงานที่เหมือนการสำรองข้อมูลซึ่งทำให้แน่ใจว่าข้อมูลเมตาส่วนใหญ่จากไฟล์ต้นฉบับ (สิทธิ์การเป็นเจ้าของและอื่น ๆ ) ถูกคัดลอกไปทั่ว

อย่างไรก็ตามหากคุณไม่ต้องการใช้สิ่งนั้นบ่อยครั้งคุณจะยังคงต้องการรวมอยู่--timesซึ่งจะคัดลอกไปตามเวลาที่แก้ไขไฟล์ สิ่งนี้ทำให้ rsync ถัดไปที่ทำงาน (สมมติว่าคุณกำลังทำซ้ำ ๆ ) เร็วกว่ามากเนื่องจาก rsync จะเปรียบเทียบเวลาแก้ไขและข้ามไฟล์หากไม่มีการเปลี่ยนแปลง น่าประหลาดใจ (สำหรับฉันอย่างน้อย) ตัวเลือกนี้ไม่ใช่ค่าเริ่มต้น


4

สิ่งที่ฉันใช้บ่อยที่สุดคือแน่นอน--exclude-fromซึ่งช่วยให้คุณระบุไฟล์ที่มีสิ่งที่ต้องแยกออก

ฉันยังพบว่า--chmodมีประโยชน์มากเพราะช่วยให้คุณตรวจสอบว่าสิทธิ์สิ้นสุดลงในสถานะที่ต้องการแม้ว่าแหล่งข้อมูลของคุณจะถูกทำให้สับสน


4

--backup-dir = date +%Y.%m.%d- ลบเรากำลังลบ แต่สร้างสำเนา ... ในกรณี


4

--inplaceเหมือง ใช้งานได้อย่างมหัศจรรย์เมื่อเซิร์ฟเวอร์สำหรับการสำรองข้อมูลกำลังเรียกใช้ ZFS หรือ btrfs และคุณสร้างสแนปชอตดั้งเดิม


3

แน่นอนว่ายังมี--deleteสิ่งที่ลบออกจากเป้าหมายที่ไม่สามารถพบได้ในแหล่งที่มา


2

cwrsync - Rsync สำหรับ Windows http://www.itefix.no/i2/node/10650

รุ่นนี้มี OpenSSH เพื่อให้คุณสามารถโอนไฟล์ผ่านช่องทางที่ปลอดภัย


ฉันใช้ cwrsync และมันเยี่ยมมาก ดีใจที่มีคนนำความสามารถอันยอดเยี่ยมนี้มาสู่ Windows
Andrew Ensley

2
--partial 

ในกรณีที่มีการขัดจังหวะ

--bwlimit=100

เพื่อ จำกัด แบนด์วิดท์ - ดีสำหรับการคัดลอกไฟล์ขนาดใหญ่ไดเรกทอรี


หน่วยของbwlimitคืออะไร บิตต่อวินาที, ไบต์ต่อวินาที?
Timo Kähkönen

@Timo, bwlimit อยู่ในหน่วย KBytes / วินาที
Andrew Ferrier

1

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


1

เมื่อฉันใช้ GlusterFs เรามีคอขวดกับไฟล์ T ที่มีขนาดเป็นศูนย์สำหรับการซิงค์ระหว่างอิฐที่เกิดปัญหาหรือแบบจำลองเราต้องใช้--min-size=1เพื่อไม่ซิงค์ไฟล์เปล่าจากเซิร์ฟเวอร์ที่เสียหาย

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