เทคนิคการทำงานกับ rsync การใช้ rsync อย่างมีประสิทธิภาพ

rsync(อังกฤษ. Remote Synchronization) เป็นโปรแกรมสำหรับระบบที่คล้ายกับ UNIX ซึ่งจะซิงโครไนซ์ไฟล์และไดเร็กทอรีในสองแห่งในขณะที่ลดการรับส่งข้อมูลโดยใช้การเข้ารหัสข้อมูลหากจำเป็น ความแตกต่างที่สำคัญระหว่าง rsync และโปรแกรม/โปรโตคอลอื่นๆ ก็คือ การทำมิเรอร์จะดำเนินการโดยหนึ่งเธรดในแต่ละทิศทาง (แทนที่จะเป็นหนึ่งเธรดขึ้นไปต่อไฟล์) rsync สามารถคัดลอกหรือแสดงเนื้อหาของไดเร็กทอรีและคัดลอกไฟล์ โดยเลือกใช้การบีบอัดและการเรียกซ้ำ

rsyncd daemon ซึ่งใช้โปรโตคอล rsync จะใช้พอร์ต TCP 873 เป็นค่าเริ่มต้น

    อัลกอริทึม

ยูทิลิตี้ rsync ใช้อัลกอริธึมที่พัฒนาโดยโปรแกรมเมอร์ชาวออสเตรเลีย Andrew Tridgell เพื่อถ่ายโอนโครงสร้าง (เช่น ไฟล์) ผ่านการเชื่อมต่อการสื่อสารได้อย่างมีประสิทธิภาพ เมื่อคอมพิวเตอร์ที่รับมีโครงสร้างนั้นเวอร์ชันอื่นอยู่แล้ว คอมพิวเตอร์ที่รับจะแบ่งสำเนาของไฟล์ออกเป็นส่วนที่ไม่ทับซ้อนกันในขนาด S คงที่ และคำนวณผลรวมตรวจสอบสำหรับแต่ละส่วน ได้แก่ แฮช MD4 และผลรวมตรวจสอบที่อ่อนกว่า และส่งไปยังเซิร์ฟเวอร์ที่มีการซิงโครไนซ์ข้อมูลนั้น เซิร์ฟเวอร์ที่กำลังซิงโครไนซ์กับการคำนวณเช็คซัมสำหรับแต่ละส่วนของขนาด S ในเวอร์ชันของไฟล์ รวมถึงส่วนที่ทับซ้อนกันด้วย ซึ่งสามารถคำนวณได้อย่างมีประสิทธิภาพเนื่องจากคุณสมบัติพิเศษของเช็คซัมแบบกลิ้ง: หากเช็คซัมแบบกลิ้งไบต์ n ถึง n+S-1 เท่ากับ R ดังนั้น เช็คซัมแบบกลิ้งไบต์ n+1 ถึง n+S ก็สามารถคำนวณได้จาก R, ไบต์ n และไบต์ n +S โดยไม่ต้องคำนึงถึงไบต์ที่อยู่ในช่วงเวลานี้ ดังนั้น หากคำนวณผลรวมเช็คซัมแบบกลิ้ง 1-25 แล้ว ระบบจะใช้เช็คซัมและไบต์ 1 และ 26 ก่อนหน้าในการคำนวณเช็คซัมแบบกลิ้งไบต์ 2-26

    Rsync ค้นหาไฟล์ที่จะส่งโดยใช้อัลกอริธึม "ตรวจสอบด่วน" (อัลกอริธึมเริ่มต้น) ค้นหาไฟล์ที่มีการเปลี่ยนแปลงขนาดหรือวันที่แก้ไขล่าสุด

    โปรดทราบว่าต้องติดตั้ง rsync บนโหนดทั้งภายในและระยะไกล

    แอปพลิเคชัน- rsync ถูกสร้างขึ้นเพื่อทดแทน rcp และ scp การใช้งาน rsync ครั้งแรกๆ คือการมิเรอร์หรือสำรองข้อมูลระบบไคลเอ็นต์ Unix ไปยังเซิร์ฟเวอร์ Unix ส่วนกลางโดยใช้ rsync/SSH และบัญชี Unix ปกติ ด้วยตัวกำหนดเวลางาน เช่น การใช้ตัวกำหนดเวลา cron ของ Linux ทำให้สามารถจัดระเบียบการมิเรอร์แบบ rsync อัตโนมัติผ่านช่องทางที่ปลอดภัยด้วยการเข้ารหัสระหว่างคอมพิวเตอร์หลายเครื่องและเซิร์ฟเวอร์กลาง

คีย์เริ่มต้น rsync

    ตัวอย่าง: ไดเรกทอรีท้องถิ่น เนื้อหาของโฟลเดอร์ dir_a จะถูกซิงโครไนซ์แบบเรียกซ้ำ (หากมี “/” ที่ท้ายไดเร็กทอรีต้นทาง หมายถึงการคัดลอกเนื้อหาของไดเร็กทอรี การไม่มีเครื่องหมายทับหมายถึงการคัดลอกไดเร็กทอรีและเนื้อหาในไดเร็กทอรี) ด้วย ไดเรกทอรี dir_b ไฟล์จะถูกถ่ายโอนในโหมด "เก็บถาวร" ซึ่งช่วยให้มั่นใจว่าลิงก์สัญลักษณ์ ไฟล์อุปกรณ์ คุณลักษณะ สิทธิ์ การอนุญาตการเข้าถึง ฯลฯ จะถูกเก็บรักษาไว้ระหว่างการถ่ายโอน การบีบอัดใช้เพื่อลดขนาดของข้อมูลที่ส่ง ในไดเร็กทอรี dir_b ไฟล์ที่ไม่ได้อยู่ในแหล่งที่มา (dir_a) จะถูกลบ rsync -avz --ลบ /src/dir_a/ /data/dir_b

    ตัวอย่าง: ไดเรกทอรีระยะไกลซิงโครไนซ์กับไดเรกทอรีในเครื่อง: rsync -az -e ssh --delete 192.168.1.14:/home/pub_remote/ /home/pub_local

    ตัวอย่าง: ส่งผ่านคีย์ข้อมูลประจำตัว ssh ผ่านบรรทัดคำสั่ง rsync -avz --delete --exclude=**/stats --exclude=**/error --exclude=**/files/pictures -e "ssh -i /root/rsync /mirror-rsync-คีย์"

    -n, –ดรายรันโหมดแก้ไขข้อบกพร่อง ในกรณีนี้ rsync จะไม่เปลี่ยนแปลงหรือลบไฟล์ แต่จะแสดงความคืบหน้าทั้งหมด

    -q, –เงียบตัวเลือกนี้จะช่วยลดปริมาณข้อมูลที่ส่งออกระหว่างการถ่ายโอน และลดจำนวนข้อความจากเซิร์ฟเวอร์ลงอย่างมาก ตัวเลือกนี้มีประโยชน์เมื่อ cron เปิดใช้งาน rsync

    -v, –คำฟุ่มเฟือยตัวเลือกนี้จะเพิ่มจำนวนข้อมูลที่แสดงระหว่างการถ่ายโอน ตามค่าเริ่มต้น rsync จะไม่ส่งออกอะไรเลย ตัวเลือก -v เพียงอย่างเดียวจะให้ข้อมูลเกี่ยวกับไฟล์ที่กำลังถ่ายโอนและข้อมูลสรุปสั้น ๆ ในตอนท้าย ตัวเลือก -v สองตัวจะให้ข้อมูลเกี่ยวกับไฟล์ที่ถูกย้าย ซึ่งไม่จำเป็นต้องอัปเดต และข้อมูลเพิ่มเติมเล็กน้อยในตอนท้าย มีการใช้อ็อพชัน -v มากกว่าสองตัวเมื่อทำการดีบัก rsync รูปแบบเอาต์พุตไฟล์เริ่มต้นถูกตั้งค่าเป็น -out-format "%n%L" ซึ่งจะแสดงเฉพาะชื่อไฟล์ และหากออบเจ็กต์เป็นลิงก์ ก็จะแสดงสิ่งที่อ้างอิงถึง ที่ระดับการดีบักแรก (one -v) การเปลี่ยนแปลงของแอ็ตทริบิวต์ไฟล์จะไม่แสดง หากคุณขอรายการรายละเอียดของคุณลักษณะที่มีการเปลี่ยนแปลง (ระบุตัวเลือก -itemize-changes หรือเพิ่ม "%i" เป็นรูปแบบ -out-format) ผลลัพธ์ (ในไคลเอ็นต์) จะขยายเพื่อกล่าวถึงรายการทั้งหมดที่มี เปลี่ยน. ดูตัวเลือก -out-format สำหรับรายละเอียดเพิ่มเติม

    -a, –เก็บถาวรเทียบเท่ากับ -rlptgoD นี่เป็นวิธีที่รวดเร็วในการบอกว่าคุณต้องการการประมวลผลแบบเรียกซ้ำและเก็บเกือบทุกอย่างไว้ (ตัวเลือก -H น่าจะเป็นการละเว้นที่เห็นได้ชัดเจน) ข้อยกเว้นเพียงอย่างเดียวสำหรับการเทียบเท่าข้างต้นคือเมื่อมีการระบุ -files-from ซึ่งในกรณีนี้ตัวเลือก -r จะไม่มีผลใดๆ โปรดทราบว่าตัวเลือก -a จะไม่เก็บฮาร์ดลิงก์ไว้ เนื่องจากการค้นหาไฟล์ที่มีอักขระหลายตัวมีราคาแพง คุณต้องใช้ตัวเลือก -H แยกกัน

    –ไม่มีตัวเลือกคุณสามารถปิดการใช้งานตัวเลือกตั้งแต่หนึ่งตัวเลือกขึ้นไปโดยใส่ "no-" นำหน้าชื่อตัวเลือก ไม่ใช่ทุกตัวเลือกที่สามารถใช้คำนำหน้านี้ได้: เฉพาะตัวเลือกที่ตามมาจากตัวเลือกอื่น (เช่น -no-D, -no-perms) หรือมีภาระหน้าที่ที่แตกต่างกันในสถานการณ์ที่แตกต่างกัน (เช่น -no-whole-file, -no- blocking-io , -ไม่มี-dirs) คุณสามารถระบุตัวเลือกแบบยาวหรือแบบสั้นได้หลังคำนำหน้า (เช่น -no-R หรือ -no-relative) ตัวอย่างเช่น หากคุณต้องการใช้ตัวเลือก -a (-archive) แต่ไม่ต้องการ -o (-owner) แทนที่จะเปลี่ยน -a เป็น -rlptgD คุณสามารถระบุ -a -no-o (หรือ -a -ไม่มีเจ้าของ) ลำดับของตัวเลือกมีความสำคัญ: หากคุณระบุ -no-r -a ตัวเลือก -r จะยังคงเปิดใช้งานอยู่ คุณต้องระบุ -a -no-r โปรดทราบว่าผลข้างเคียงของตัวเลือก -files-from ไม่ใช่ตำแหน่ง แม้ว่าจะส่งผลต่อสถานะเริ่มต้นของตัวเลือกต่างๆ และเปลี่ยนความหมายของตัวเลือก -a เล็กน้อย (ดูตัวเลือก -files-from สำหรับรายละเอียดเพิ่มเติม)

    -z, –บีบอัดด้วยตัวเลือกนี้ rsync จะบีบอัดข้อมูลไฟล์ทั้งหมดที่ถ่ายโอน สิ่งนี้มีประโยชน์กับสายที่ช้า วิธีการบีบอัดที่ใช้จะเหมือนกับวิธีการบีบอัดที่ใช้โดย gzip โปรดทราบว่าโดยทั่วไปแล้วสิ่งนี้จะได้อัตราส่วนการบีบอัดที่ดีกว่าสามารถทำได้โดยใช้การบีบอัดโปรแกรมเชลล์ระยะไกลหรือการบีบอัดเลเยอร์การขนส่ง กระบวนการบีบอัดเกี่ยวข้องกับข้อมูลทั้งหมดที่ส่งไปในบล็อคข้อมูลที่เกี่ยวข้อง --compress-level=NUM ตั้งค่าระดับการบีบอัดอย่างชัดเจน --skip-compress=LIST ข้ามการบีบอัดไฟล์ที่มีส่วนต่อท้ายใน LIST

    -b, –สำรองทำการสำรองข้อมูล --backup-dir=DIR ทำการสำรองข้อมูลไปยังไดเร็กทอรีที่ระบุ --suffix=SUFFIX ส่วนต่อท้ายการสำรองข้อมูล (ค่าเริ่มต้น ~)

    –รหัสตัวเลขแทนที่จะระบุชื่อกลุ่มและชื่อผู้ใช้ รหัสตัวเลขจะถูกส่งและจับคู่กันที่ปลายทั้งสองด้าน ตามค่าเริ่มต้น rsync จะใช้ชื่อกลุ่มและชื่อผู้ใช้เพื่อกำหนดเจ้าของไฟล์ uid 0 และ gid 0 พิเศษจะไม่ถูกเปิดเผยผ่านชื่อผู้ใช้/กลุ่ม แม้ว่าจะไม่ได้ระบุ –numeric-ids ก็ตาม

หากระบบต้นทางกำลังทำงานในสภาพแวดล้อมแบบ chrooted หรือหากไม่มีผู้ใช้หรือกลุ่มอยู่ที่ฝั่งรับ ระบบจะใช้ id ตัวเลขดั้งเดิม

    -c, –เช็คซัมเปลี่ยนวิธีการตรวจสอบไฟล์ที่เปลี่ยนแปลง หากไม่มีตัวเลือกนี้ rsync จะใช้อัลกอริธึม "ตรวจสอบด่วน" (ตั้งค่าตามค่าเริ่มต้น) ซึ่งจะตรวจสอบความแตกต่างของขนาดไฟล์และเวลาในการแก้ไข ตัวเลือกนี้จะเปลี่ยนอัลกอริทึมเพื่อเปรียบเทียบโดยใช้เช็คซัม MD4 128 บิตสำหรับแต่ละไฟล์ที่ตรงกับขนาด การคอมไพล์เช็คซัมหมายความว่าทั้งสองฝ่ายจะสิ้นเปลืองดิสก์ I/O จำนวนมากในการอ่านข้อมูลทั้งหมดในไฟล์ที่ถ่ายโอน (และนี่คือก่อนการอ่านใดๆ ที่จะทำเพื่อถ่ายโอนไฟล์ที่เปลี่ยนแปลง) ดังนั้นจึงอาจทำให้การทำงานช้าลงอย่างมาก ด้านการส่งจะสร้างเช็คซัมในขณะที่สแกนระบบไฟล์ ซึ่งจะสร้างรายการไฟล์ที่พร้อมใช้งาน ผู้รับสร้างเช็คซัมเมื่อค้นหาไฟล์ที่เปลี่ยนแปลง และตรวจสอบเช็คซัมของไฟล์ใดๆ ที่มีขนาดเดียวกับไฟล์ที่เกี่ยวข้องที่ถูกส่ง: ไฟล์ที่มีขนาดเปลี่ยนแปลงหรือเช็คซัมที่เปลี่ยนแปลงจะถูกเลือกสำหรับการส่ง โปรดทราบว่า rsync จะตรวจสอบเสมอว่าแต่ละไฟล์ที่ถ่ายโอนนั้นถูกสร้างขึ้นใหม่อย่างถูกต้องในส่วนรับ โดยจะทำการตรวจสอบผลรวมไฟล์ทั้งหมดที่สร้างขึ้นระหว่างการถ่ายโอนไฟล์

    -e, –rsh=COMMAND - คุณสามารถระบุเชลล์ระยะไกลใดก็ได้ (การตั้งค่าและใช้ SSH, rsh, remsh) หรือตั้งค่าตัวแปรสภาพแวดล้อม RSYNC_RSH --rsync-path=PROGRAM ระบุ rsync ที่จะรันบนเครื่องระยะไกล --การข้ามที่มีอยู่ในการสร้างไฟล์ใหม่บนตัวรับ --ละเว้นการข้ามที่มีอยู่ การอัปเดตไฟล์ที่มีอยู่ในตัวรับ --remove-source-files ผู้ส่งจะลบไฟล์ที่ซิงโครไนซ์ (ไม่ใช่- dir) --del นามแฝงสำหรับ --delete-during --delete ลบไฟล์ที่ไม่เกี่ยวข้องออกจาก dest dirs ลบไฟล์ออกจากข้อมูลสำรองที่ไม่ได้อยู่ฝั่งต้นทางอีกต่อไป --delete-before ผู้รับลบก่อนถ่ายโอน (ค่าเริ่มต้น) --delete-during ผู้รับลบระหว่าง xfer ไม่ใช่ก่อน --delete-delay ค้นหาการลบระหว่าง ลบหลัง -- ลบ- หลังจาก ผู้รับ ลบหลังการถ่ายโอน ไม่ใช่ก่อน "-หลัง" หมายความว่าคุณต้องลบไฟล์หลังจากการซิงโครไนซ์เสร็จสิ้นเท่านั้น --delete-excluded ยังลบไฟล์ที่แยกออกจาก dest dirs --ignore-errors ลบแม้ว่าจะมีข้อผิดพลาด I/O ก็ตาม ลบแม้ว่าจะมีข้อผิดพลาด I/O ก็ตาม --บังคับบังคับให้ลบ dirs แม้ว่าจะไม่ว่างเปล่า --max-delete=NUM อย่าลบมากกว่า NUM ไฟล์ --max-size=SIZE อย่าถ่ายโอนไฟล์ใด ๆ ที่ใหญ่กว่า SIZE --min-size=SIZE don "อย่าถ่ายโอนไฟล์ใด ๆ ที่เล็กกว่า SIZE --partial เก็บไฟล์ที่ถ่ายโอนบางส่วน --partial-dir=DIR ใส่ไฟล์ที่ถ่ายโอนบางส่วนลงใน DIR --delay-updates นำไฟล์ที่อัปเดตทั้งหมดเข้าที่ในตอนท้าย

Delete แตกต่างจาก –delete-after ตรงที่การลบจะดำเนินการตั้งแต่เริ่มต้น และไม่ใช่ในขั้นตอนสุดท้ายของกระบวนการสำรองข้อมูล –delete-after นั้นเร็วกว่าเนื่องจากไม่ต้องการขั้นตอนเพิ่มเติมในการสำรวจรายการไฟล์ แต่ต้องใช้ตัวเลือก –force ในการจัดการสถานการณ์ เช่น การลบไฟล์และการสร้างไดเร็กทอรีที่มีชื่อเดียวกัน

รูปแบบข้อยกเว้น

รูปแบบการยกเว้นและการรวม เมื่อระบุแล้ว จะทำให้เกิดความยืดหยุ่นในการเลือกไฟล์ที่ควรโอนและไฟล์ใดควรข้าม

rsync สร้างรายการเรียงลำดับตามตัวเลือก –include/–exclude ที่ระบุในบรรทัดคำสั่ง Rsync ตรวจสอบแต่ละไฟล์หรือชื่อไดเร็กทอรีกับรูปแบบการรวม/การแยกแต่ละรูปแบบ นัดแรกมีผล หากรูปแบบที่ตรงกันเป็นแบบเอกสิทธิ์เฉพาะ ไฟล์ที่เกี่ยวข้องจะถูกข้ามไป หากรวมรูปแบบไว้ด้วย ก็จะไม่ข้าม หากไม่มีรูปแบบที่ตรงกันสำหรับชื่อไฟล์ ก็จะไม่ข้ามไปเช่นกัน

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

โปรดทราบว่าเมื่อใช้ตัวเลือก -r (โดยนัยด้วย -a) แต่ละส่วนของแต่ละพาธจะถูกค้นหาจากบนลงล่าง เพื่อให้รูปแบบการรวม/การแยกถูกนำไปใช้ซ้ำกับแต่ละส่วนดังกล่าว

โปรดทราบว่าตัวเลือก –include และ –exclude อนุญาตให้มีรูปแบบเดียวเท่านั้น หากต้องการเพิ่มหลายเทมเพลต ให้ใช้ตัวเลือก –include-from และ –exclude-from หรือตัวเลือก –include และ –exclude จำนวนมาก ตามลำดับ

เทมเพลตสามารถระบุได้หลายรูปแบบ กฎสำหรับพวกเขาคือ:

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

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

    หากรูปแบบมีอักขระไวด์การ์ดจากชุด *?[ ระบบจะใช้กฎไวด์การ์ดของเชลล์สำหรับชื่อไฟล์เพื่อตรวจสอบการจับคู่ มิฉะนั้น จะใช้เพียงการจับคู่สตริงเท่านั้น

    การจับคู่เครื่องหมายดอกจันคู่จะมีเครื่องหมายทับ ในขณะที่การจับคู่เครื่องหมายดอกจัน * เดี่ยวจะลงท้ายด้วยเครื่องหมายทับ

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

    หากรูปแบบขึ้นต้นด้วย "+" (เครื่องหมายบวกตามด้วยช่องว่าง) ระบบจะถือว่ารูปแบบนั้นเป็นรูปแบบรวมเสมอ แม้ว่าจะระบุเป็นส่วนหนึ่งของพารามิเตอร์การแยกออกก็ตาม ส่วน "+" จะไม่ถูกนำมาพิจารณาเมื่อตรวจสอบการปฏิบัติตามข้อกำหนด

    หากรูปแบบขึ้นต้นด้วย "-" (ลบตามด้วยช่องว่าง) ระบบจะถือว่าเป็นรูปแบบพิเศษเสมอ แม้ว่าจะปรากฏเป็นส่วนหนึ่งของพารามิเตอร์การรวมก็ตาม ส่วน "-" จะไม่ถูกนำมาพิจารณาเมื่อตรวจสอบการปฏิบัติตามข้อกำหนด

    หากรูปแบบระบุเครื่องหมายอัศเจรีย์เพียงจุดเดียว! จากนั้นรายการรวม/แยกปัจจุบันจะถูกรีเซ็ตโดยการลบรูปแบบที่กำหนดไว้ก่อนหน้านี้ทั้งหมด

กฎ +/- มีประโยชน์มากที่สุดในรายการที่อ่านจากไฟล์ ทำให้คุณมีรายการโดยรวมหนึ่งรายการที่มีทั้งรูปแบบพิเศษและรูปแบบที่ครอบคลุม

หากคุณลงท้ายรายการแยกด้วย --exclude "*" โปรดทราบว่าเนื่องจากลักษณะการเรียกซ้ำ อัลกอริธึมจะหยุดที่ไดเร็กทอรีหลักและจะไม่ลองใช้ไฟล์ภายในไดเร็กทอรีเหล่านั้น เว้นแต่คุณจะระบุอย่างชัดเจนให้รวมไดเร็กทอรีหลักของไฟล์ที่คุณ ต้องการเปิดมัน หากต้องการรวมไดเร็กทอรีทั้งหมด ให้ใช้ –รวม "*/" ก่อน –แยก "*"

ตัวอย่างการรวม/ยกเว้นบางส่วน:

ยกเว้น "*.o" ยกเว้นชื่อไฟล์ทั้งหมดที่ตรงกัน *.o --exclude "/foo" ไม่รวมไฟล์ชื่อ foo ในไดเร็กทอรีระดับบนสุด --exclude "foo/" ไม่รวมไดเร็กทอรีใดๆ ที่ชื่อ foo --exclude "/foo/ */ bar" ไม่รวมไฟล์ใด ๆ ที่ชื่อ bar สองระดับที่อยู่ลึกในลำดับชั้นจากไดเร็กทอรี "foo" ที่ด้านบนของแผนผัง --exclude "/foo/**/bar" ไม่รวมไฟล์ใด ๆ ที่ชื่อ bar สองระดับขึ้นไปที่อยู่ลึกในลำดับชั้น จากไดเรกทอรีบนสุด "foo" --include "*/" --include "*.c" --exclude "*" รวมเฉพาะไดเรกทอรีและไฟล์ที่มีแหล่งที่มา C --include "foo/" --include "foo/bar .c" --exclude "*" จะรวมเฉพาะ foo/bar.c (ไดเร็กทอรี foo/ ต้องรวมไว้อย่างชัดเจน ไม่เช่นนั้นจะถูกข้ามไปเนื่องจาก "*")

รหัสใบเสร็จ

0 สำเร็จ 1 ข้อผิดพลาดด้านไวยากรณ์หรือการใช้งาน 2 ความเข้ากันไม่ได้ของโปรโตคอล 3 ไฟล์อินพุต/เอาท์พุตและข้อผิดพลาดในการเลือกไดเร็กทอรี 4 ไม่รองรับการดำเนินการที่ร้องขอ: มีการพยายามทำงานกับไฟล์ 64 บิตบนแพลตฟอร์มที่ไม่รองรับ หรือระบุพารามิเตอร์ที่ไคลเอ็นต์รองรับเท่านั้นและเซิร์ฟเวอร์ไม่รองรับ 5 ข้อผิดพลาดเมื่อพยายามเริ่มทำงานผ่านโปรโตคอลไคลเอ็นต์-เซิร์ฟเวอร์ 10 ข้อผิดพลาดซ็อกเก็ต I/O 11 ข้อผิดพลาดของไฟล์ I/O 12 ข้อผิดพลาดในสตรีมข้อมูลโปรโตคอล rsync 13 ข้อผิดพลาดในการวินิจฉัย 14 ข้อผิดพลาดในรหัส IPC 20 รับสัญญาณ SIGUSR1 หรือ SIGINT อย่างใดอย่างหนึ่ง 21 ข้อผิดพลาดการเรียก Waitpid() ส่งคืนข้อผิดพลาด 22 ข้อผิดพลาดในการจัดสรรบัฟเฟอร์หน่วยความจำหลัก 23 การถ่ายโอนไม่สมบูรณ์เนื่องจากข้อผิดพลาด 24 การถ่ายโอนไม่สมบูรณ์เนื่องจากไฟล์ต้นฉบับหายไป 30 เวลารอเมื่อส่ง/รับข้อมูล

ตัวแปรสภาพแวดล้อม

CVSIGNORE ตัวแปรสภาวะแวดล้อม CVSIGNORE เติมเต็มรูปแบบการแยกจากไฟล์ .cvsignore ดูตัวเลือก --cvs-exclude สำหรับรายละเอียด RSYNC_RSH ตัวแปรสภาพแวดล้อม RSYNC_RSH อนุญาตให้คุณแทนที่โปรแกรมเชลล์ระยะไกลที่ใช้โดย rsync เป็นการขนส่ง อ็อพชันบรรทัดคำสั่งสำหรับเชลล์จะถูกระบุหลังชื่อโปรแกรม เช่นเดียวกับพารามิเตอร์ -e ตัวแปรสภาพแวดล้อม RSYNC_PROXY อนุญาตให้คุณดำเนินการได้ แจ้งให้ไคลเอ็นต์ rsync ใช้เว็บพร็อกซีเพื่อเชื่อมต่อกับเซิร์ฟเวอร์ rsync คุณต้องระบุพร็อกซีเป็นคู่ชื่อโฮสต์:พอร์ต นี้ไม่เหมือนกับรหัสผ่านสำหรับเชลล์การขนส่ง เช่น USER หรือ LOGNAME ตัวแปรสภาพแวดล้อม USER หรือ LOGNAME ใช้เพื่อกำหนดผู้ใช้เริ่มต้นที่มีการระบุชื่อให้กับเซิร์ฟเวอร์ rsync สำหรับการตรวจสอบสิทธิ์ ค้นหาไฟล์ .cvsignore ของผู้ใช้

ตัวอย่างสคริปต์ rsync

#!/bin/bash # เส้นทางแบบเต็มไปยังรายการไดเรกทอรีของคุณ BACKUP_LST =/ etc/ backup/ backup.lst cat $(BACKUP_LST) | ขณะอ่าน Res; ทำ rsync -e ssh -acq --delete --force $Res backup@ B:/ var/ backup$Res เสร็จแล้ว

มีเซิร์ฟเวอร์ที่เหมือนกันหลายเซิร์ฟเวอร์ (4 โหนด) บน Amazon EC2 พร้อม Ubuntu ทุกคนจะสร้างและจัดเก็บแคชไว้บนดิสก์ของตนซึ่งพวกเขาต้องการซิงโครไนซ์ แต่ rsync แบบธรรมดาจะไม่ทำงานที่นี่ - มีไฟล์หลายพันล้านไฟล์, nfs ช้าเกินไป ฯลฯ รายการตัวเลือกทั้งหมดที่พิจารณาพร้อมคำอธิบายอยู่ด้านล่าง

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

หลังจากทดสอบเทคโนโลยีคลัสเตอร์และระบบไฟล์ต่างๆ ตามคำแนะนำของเพื่อนเก่า เราจึงตัดสินใจใช้ rsync เดียวกัน แต่ใช้ร่วมกับ inotify หลังจากค้นหาวิธีแก้ปัญหาสำเร็จรูปทางอินเทอร์เน็ตเล็กน้อย เพื่อที่จะไม่สร้างวงล้อขึ้นมาใหม่ ฉันได้พบกับ csyncd, inosync และ lsyncd ฉันอยู่บนดุมอยู่แล้ว แต่มันไม่เข้ากับที่นี่ เพราะ... เก็บรายการไฟล์ในฐานข้อมูล SQLite ซึ่งไม่น่าจะทำงานได้ดีแม้ว่าจะมีบันทึกนับล้านรายการก็ตาม และด้วยปริมาณดังกล่าว จึงไม่จำเป็นต้องมีลิงก์เพิ่มเติม แต่ lsyncd กลับกลายเป็นว่าเป็นสิ่งที่เราต้องการจริงๆ

4. มาเริ่มปีศาจกันเถอะบนโหนดทั้งหมด:

/etc/init.d/lsyncd เริ่มต้น

หากคุณทิ้ง “nodaemon = true” ไว้ในการกำหนดค่า คุณจะสามารถเห็นสิ่งที่เกิดขึ้นได้

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

พิจารณาอะไรอีกบ้างและเหตุใดจึงไม่เหมาะสมในกรณีนี้

การศึกษาทั้งหมดมุ่งเป้าไปที่การทำงานร่วมกับ Amazon EC2 โดยคำนึงถึงข้อจำกัดและฟีเจอร์ต่างๆ ของ Amazon ดังนั้นการค้นพบจึงเกี่ยวข้องกับ Amazon EC2 เป็นหลักเท่านั้น
  • DRBD – การจำลองแบบเกิดขึ้นในระดับบล็อก หากโฮสต์ตัวใดตัวหนึ่งลดระดับลง ทั้งคู่จะถูกฆ่า จำกัด 2 โหนด (เป็นไปได้มากกว่านี้ แต่อันที่ 3 และ 4 สามารถเชื่อมต่อได้เป็นทาสเท่านั้น)
  • Ocfs2 - ใช้บน DRBD (ซึ่งมีข้อดีเกี่ยวกับHabré) หรือคุณต้องเมานต์พาร์ติชันเดียวจากหลายโหนด ไม่สามารถทำได้บน ec2
  • Gfs2 เป็นอะนาล็อกของ ocfs2 ฉันไม่ได้ลองเพราะจากการทดสอบแล้ว FS นี้ช้ากว่า ocfs2 ไม่เช่นนั้นจะเป็นอะนาล็อก
  • GlusterFS – ที่นี่ทุกอย่างทำงานได้เกือบจะในทันทีและอย่างที่ควรจะเป็น! ง่ายและตรรกะในการจัดการ คุณสามารถสร้างคลัสเตอร์ได้สูงสุด 255 โหนดด้วยค่าเรพลิกาที่กำหนดเอง ฉันสร้างคลัสเตอร์พาร์ติชันจากเซิร์ฟเวอร์สองสามตัวและติดตั้งไว้บนพาร์ติชันเหล่านั้น แต่อยู่ในไดเร็กทอรีอื่น (นั่นคือ เซิร์ฟเวอร์ก็เป็นไคลเอ็นต์ด้วย) ขออภัย คลัสเตอร์นี้ติดตั้งบนไคลเอนต์ผ่าน FUSE และความเร็วในการเขียนต่ำกว่า 3 MB/วินาที ดังนั้นความประทับใจจากการใช้งานจึงดีมาก
  • ความมันวาว - เพื่อรันสิ่งนี้ในโหมด krenel คุณต้องแพตช์เคอร์เนล น่าแปลกที่มีแพ็คเกจที่มีแพตช์เหล่านี้อยู่ในที่เก็บ Ubuntu แต่ฉันไม่พบแพตช์ใด ๆ สำหรับมันหรืออย่างน้อยสำหรับ Debian และเมื่อพิจารณาจากบทวิจารณ์ ฉันพบว่าการดำเนินการนี้ในระบบ deb นั้นเป็นลัทธิชามาน
  • Hadoop พร้อม HDFS, Cloudera - ไม่ได้ลองเนื่องจากพบวิธีแก้ปัญหาอื่น (ดูด้านล่าง) แต่สิ่งแรกที่ดึงดูดสายตาของคุณคือมันเขียนด้วยภาษา Java ดังนั้นมันจะกินทรัพยากรจำนวนมากและขนาดไม่เหมือนกับ Facebook หรือ Yahoo ตอนนี้มีเพียง 4 โหนดเท่านั้น

อัปเดต:วิธีนี้ทำงานได้ดีในการทดสอบ (หลังจากที่เขียนบทความแล้ว) แต่ในสภาพการต่อสู้ทุกอย่างแตกต่างไปจากเดิมอย่างสิ้นเชิง การกำหนดค่าการผลิตขั้นต่ำคือ 584,000 ไดเร็กทอรีที่ซ้อนกัน และ lsyncd ค้าง inotify" และต่อไป ทั้งหมดไดเรกทอรี เป็นไปไม่ได้ที่จะทำสิ่งนี้กับต้นไม้ทั้งต้นในคราวเดียว หน่วยความจำการแจ้งเตือน 584,000 ครั้งกินพื้นที่ค่อนข้างน้อยประมาณ 200 MB (จากที่มีอยู่ 16 GB) แต่กระบวนการนี้ใช้เวลา 22 นาที โดยหลักการแล้ว มันไม่น่ากลัว: เมื่อคุณเปิดมันแล้วลืมมันไป แต่หลังจากนี้ ด้วยการกำหนดค่ามาตรฐาน lsyncd จะเริ่มซิงโครไนซ์ไฟล์ทั้งหมด ซึ่งในเงื่อนไขของเราอาจมีข้อผิดพลาดหรือใช้เวลาหลายวัน โดยทั่วไป - ไม่ใช่ตัวเลือก ไม่จำเป็นต้องมีความสอดคล้องกัน 100% และสามารถยกเลิกการซิงโครไนซ์เริ่มต้นได้ สิ่งที่เหลืออยู่คือการ "ปิดมัน" โชคดีที่ daemon ถูกเขียนในลักษณะที่คุณสามารถเปลี่ยนฟังก์ชันเกือบทั้งหมดได้โดยตรงจากการกำหนดค่า นอกจากนี้ เพื่อเพิ่มประสิทธิภาพ default.rsync จึงถูกแทนที่ด้วย default.rsyncssh และเคอร์เนลได้รับการปรับแต่งสำหรับขีดจำกัดที่ไม่แจ้งเตือน นั่นคือ การกำหนดค่าข้างต้นเหมาะสำหรับงานส่วนใหญ่ แต่ในสถานการณ์เฉพาะของเรา การทำงานต่อไปนี้:

การตั้งค่า = ( logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status", statusInterval = 5, --<== чтобы видеть что происходит без включения подробного лога } sync { default.rsyncssh, source = "/raid", host = "node02", targetdir = "/raid", rsyncOps = {"-ausS", "--temp-dir=/tmp"}, --<== описано выше delay = 3, --<== ставим по-меньше, чтобы очередь не забивать init = function(event) --<== перезагрузка функции инициализации. как она выглядела в оригинале можно посмотреть в документации или в исходниках log("Normal","Skipping startup synchronization...") --<== чтобы знать, что мы этот код вообще запускали и когда end } sync { default.rsyncssh, source = "/raid", host = "node03", targetdir = "/raid", rsyncOps = {"-ausS", "--temp-dir=/tmp"}, delay = 3, init = function(event) log("Normal","Skipping startup synchronization...") end }

การตั้งค่าเคอร์เนล

inotify มีสามตัวเลือก (ดู ls /proc/sys/fs/inotify/):
max_queued_events - จำนวนเหตุการณ์สูงสุดในคิว ค่าเริ่มต้น = 16384;
max_user_instances - จำนวนอินสแตนซ์ที่ไม่ระบุตัวตนที่ผู้ใช้หนึ่งรายสามารถเปิดใช้ได้ ค่าเริ่มต้น = 128;
max_user_watches - ผู้ใช้หนึ่งรายสามารถดูไฟล์ได้กี่ไฟล์ ค่าเริ่มต้น = 8192

ค่าดำเนินการ:
echo " fs.inotify.max_user_watches = 16777216 # fs.inotify.max_queued_events = 65536 " >> /etc/sysctl.conf echo 16777216 > /proc/sys/fs/inotify/max_user_watches echo 65536 > /proc/sys/fs/inotify /max_queued_events

ดังนั้นทุกอย่างจึงเริ่มทำงานในการผลิต

ขอขอบคุณสำหรับความสนใจของคุณ!

สรรหาคน 24 ตุลาคม 2554 เวลา 00:52 น

Rsync: ยูทิลิตี้อันทรงพลังสำหรับการคัดลอกไฟล์ระยะไกลและในเครื่องที่รวดเร็วและยืดหยุ่น

  • ห้องไม้ *

Rsync ได้รับการออกแบบมาเพื่อแทนที่ rcp ซึ่งเป็นโปรแกรมคัดลอกระยะไกลแบบโบราณสำหรับ Unix เนื่องจากความสามารถในการซิงโครไนซ์และการถ่ายโอนไฟล์ที่กว้างขวาง rsync จึงมักถูกใช้เพื่อสร้างมิเรอร์
การใช้อัลกอริธึมที่ชาญฉลาด rsync ช่วยให้ rsync ส่งเฉพาะการเปลี่ยนแปลงไปยังไฟล์ โดยไม่ต้องเปรียบเทียบสองไฟล์เพื่อตรวจจับการเปลี่ยนแปลง นอกจากนี้ rsync ยังทำการบีบอัดข้อมูลได้ทันที ทำให้คุณสามารถถ่ายโอนไฟล์ได้อย่างมีประสิทธิภาพสูงสุด
นอกเหนือจากคุณสมบัติที่อธิบายไว้ข้างต้นแล้ว rsync ยังมีคุณสมบัติด้านความปลอดภัยที่มีประโยชน์หลายประการอีกด้วย รองรับ ssh ซึ่งเป็นโปรโตคอลที่แนะนำสำหรับการถ่ายโอนข้อมูลที่ปลอดภัย ก่อนที่จะประมวลผลข้อมูล จะเขียนลงในไฟล์ชั่วคราวเพื่อไม่ให้เกิดอะไรขึ้นกับต้นฉบับ สุดท้ายจะสนับสนุนโหมดพิเศษสำหรับการดีบักคำสั่งอย่างปลอดภัย
Rsync ใช้งานง่าย แต่ไม่ใช่โปรแกรมแบบคลิกแล้วเล่น นี่เป็นเครื่องมือที่ทรงพลังซึ่งมีประโยชน์มาก แต่ต้องระวังเพราะมันอาจทำลายบางสิ่งได้ง่าย

ไวยากรณ์ยูทิลิตี้
ไวยากรณ์ของยูทิลิตี้นั้นเรียบง่ายและค่อนข้างธรรมดา
rsync [ตัวเลือก] แหล่งที่มา [ปลายทาง]
โดยการระบุเฉพาะแหล่งที่มา เราจะเห็นรายการไฟล์ที่ไม่มีการดำเนินการคัดลอก

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

ตัวเลือก -กระบุโหมดการเก็บถาวรของยูทิลิตี้ และเทียบเท่ากับชุดตัวเลือก:
-r, --recursive - โหมดเรียกซ้ำ;
-l, --links - การสร้างใหม่ ลิงก์สัญลักษณ์ซึ่งหมายความว่าลิงก์สัญลักษณ์จะถูกถ่ายโอนเช่นกัน
-p, --perms - การโอนสิทธิ์;
-t, --times - ถ่ายโอนเวลาแก้ไขและอัพเดตบนระบบรีโมต ต้องตั้งค่าคีย์นี้เพื่อการซิงโครไนซ์ที่แม่นยำ
-g, --group - ตั้งค่ากลุ่มของไฟล์เป้าหมายให้เหมือนกับแหล่งที่มา
-o, --owner - ตั้งค่าเจ้าของไฟล์เป้าหมายให้เหมือนกับไฟล์ต้นฉบับ
-D - เช่นเดียวกับ --devices --specials - ตั้งค่าประเภทไฟล์อุปกรณ์และประเภทไฟล์พิเศษให้เหมือนกับไฟล์ต้นฉบับ
เป็นผลให้เราได้รับสำเนาของไดเร็กทอรีต้นทาง อย่างไรก็ตาม สิ่งนี้สามารถใช้เมื่อถ่ายโอนระบบปฏิบัติการไปยังฮาร์ดไดรฟ์อื่นโดยแก้ไข /etc/fstab ติดตั้ง/ติดตั้งด้วงใหม่บนฮาร์ดไดรฟ์ใหม่ - เราได้รับระบบที่ใช้งานได้ แต่นั่นเป็นอีกหัวข้อหนึ่ง

ในการแสดงข้อมูลเกี่ยวกับการทำงานของยูทิลิตี้มีตัวเลือก - v, --คำฟุ่มเฟือย- ยิ่งมีตัวเลือกมากขึ้น -vยิ่งผลลัพธ์ของยูทิลิตี้มีข้อมูลมากขึ้นเท่านั้น เนื้อหาข้อมูลสูงสุดทำได้ด้วยสี่ตัวเลือก -v, --verbose.

หากเรามีข้อมูลล่าสุดในไดเร็กทอรีต้นทาง เพื่อไม่ให้ข้อมูลที่ถูกลบหรือย้ายในซอร์สไปอุดตันผู้รับระหว่างการทำงาน เราจำเป็นต้องลบไฟล์และไดเร็กทอรีเก่า มีตัวเลือกการลบหลายตัวเลือกสำหรับสิ่งนี้ ซึ่งแต่ละตัวเลือกจะมีอัลกอริธึมการลบของตัวเอง มีอยู่แล้วหกคน!
--del เป็นรูปแบบย่อของ --delete-during ;
--delete - เพียงลบไฟล์ที่ไม่เกี่ยวข้องออกจากตัวรับ
--delete-before - ผู้รับจะลบก่อนส่งสัญญาณ
--delete-during - ผู้รับจะลบระหว่างการส่งสัญญาณ แต่ไม่ใช่ก่อนหน้า
--delete-delay - ชะลอการลบ/ค้นหาไฟล์ที่จะลบระหว่างการถ่ายโอน แต่ลบหลังจากการถ่ายโอน;
--delete-after - ผู้รับจะลบหลังจากการส่งสัญญาณ แต่ไม่ใช่ก่อนหน้านั้น
--delete-excluded - ลบไฟล์ที่ยกเว้นในตัวรับด้วย โดยมีการระบุรูปแบบ (--exclude=PATTERN)

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

บางครั้งไฟล์อาจเสียหายหรือแก้ไขได้ แต่วันที่และขนาดจะเหมือนกัน จากนั้นคุณสามารถใช้ตัวเลือกการยืนยันเช็คซัมได้ -c, --เช็คซัม.

งานของฉันคือการหาวิธีสร้างสำเนาสำรองของคอลเลกชันภาพถ่าย เพลง และงานจากมหาวิทยาลัยและที่ทำงาน ในขณะเดียวกัน ข้อมูลในแหล่งที่มาก็อัปเดตอยู่เสมอ และสิ่งที่ถูกลบคือขยะ ตัวอย่างในการแก้ปัญหาของฉัน:
rsync -auvv --ลบระหว่าง foobar_src/ foobar_dst/
การดำเนินการนี้จะอัปเดตตัวรับของฉัน ถ้ามันเต็มไปด้วยบางสิ่งอยู่แล้ว - มันจะล้างสิ่งที่ไม่ได้อยู่ในแหล่งที่มา แต่จะไม่ส่งผลกระทบต่อไฟล์ที่ใหม่กว่า แสดงสถิติและสถานะของแต่ละไฟล์

งานไกล
นอกจากนี้ความสามารถในการทำงานผ่าน ssh จะมีประโยชน์มาก สิ่งนี้ทำให้มั่นใจได้ถึงการเข้ารหัสช่องสัญญาณ ซึ่งสำคัญมากหากคุณซิงโครไนซ์เซิร์ฟเวอร์สองเครื่องบนอินเทอร์เน็ต เพื่อลดการรับส่งข้อมูล rsync ยังสามารถบีบอัดข้อมูลเมื่อส่งผ่านเครือข่าย
จำเป็นต้องมีตัวเลือกต่อไปนี้:
-e - ตั้งค่าเชลล์ระยะไกลเพื่อใช้
-z - บีบอัดข้อมูลที่ส่งหรือตั้งค่า:
-compress-level=9 - การบีบอัดพร้อมการตั้งค่าระดับการบีบอัด

ตัวอย่างการคัดลอกจากโฮสต์ระยะไกลผ่าน ssh:
rsync -avv --delete-during -compress-level=9 -e "ssh -p remote_ssh_port" user@host:/dir/to/foobar_src foobar_dst/
ในกรณีนี้ คุณจะต้องติดตั้งยูทิลิตี้ rsync ที่ฝั่งต้นทาง

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

Tags: rsync, การคัดลอก, การสำรองข้อมูลไฟล์, การซิงโครไนซ์ไฟล์

rsync ใช้หลักการตั้งชื่อพารามิเตอร์แบบยาวของ GNU ตัวเลือกบรรทัดคำสั่งหลายตัวเลือกมีสองตัวเลือก: ตัวเลือกหนึ่งสั้นและอีกตัวเลือกหนึ่งยาว สิ่งนี้แสดงให้เห็นด้านล่างโดยคั่นทั้งสองตัวเลือกด้วยเครื่องหมายจุลภาค ตัวเลือกบางตัวมีเพียงตัวเลือกที่ยาวเท่านั้น เครื่องหมาย "=" สำหรับพารามิเตอร์ที่มีค่าเพิ่มเติมเป็นทางเลือกและสามารถแทนที่ด้วยการเว้นวรรคได้

    H, --help พิมพ์คำใบ้สั้นๆ ที่อธิบายตัวเลือก rsync ที่มี

    Version พิมพ์หมายเลขเวอร์ชัน rsync และออก

    V, --verbose ตัวเลือกนี้จะเพิ่มจำนวนคำฟุ่มเฟือยที่ถูกพิมพ์ระหว่างการถ่ายโอน ตามค่าเริ่มต้น rsync จะทำงานแบบเงียบๆ one -v จะมีผลในการแสดงรายการไฟล์ที่ถ่ายโอนและข้อมูลสรุปสั้น ๆ ในตอนท้าย สอง -vs เปิดเผยรายละเอียดเกี่ยวกับไฟล์ที่หายไปและให้ข้อมูลเพิ่มเติมเล็กน้อยในตอนท้าย อาจจำเป็นต้องใช้ตัวเลขที่มากขึ้นเมื่อทำการดีบัก rsync เท่านั้น

    Q, --quiet ลดปริมาณรายละเอียดการส่ง โดยเฉพาะข้อความจากเซิร์ฟเวอร์ระยะไกล ตัวเลือกนี้มีประโยชน์เมื่อเรียกจาก cron

    ฉัน --ignore-times โดยปกติ rsync จะข้ามไฟล์ที่มีขนาดและเวลาในการแก้ไขเหมือนกัน การตั้งค่านี้จะปิดการทำงาน "การตรวจสอบด่วน" นี้

    ขนาดเท่านั้น โดยทั่วไป rsync จะข้ามไฟล์ที่มีขนาดและเวลาในการแก้ไขเหมือนกัน ด้วย --size-only ไฟล์จะถูกข้ามหากมีขนาดเท่ากัน โดยไม่คำนึงถึงเวลาในการแก้ไข สิ่งนี้มีประโยชน์เมื่อใช้ rsync ทันทีหลังจากรันระบบมิเรอร์อื่นที่ไม่ได้จัดเก็บเวลาที่แน่นอน

    แก้ไขหน้าต่าง เมื่อเปรียบเทียบการประทับเวลาสองครั้ง rsync จะถือว่าการประทับเวลาเท่ากันหากต่างกันภายในค่า modified_window โดยทั่วไปแล้วค่านี้จะเป็นศูนย์ แต่คุณอาจพบว่ามีประโยชน์ในการตั้งค่าให้สูงขึ้นในบางกรณี ในทางปฏิบัติ เมื่อถ่ายโอนไปยังระบบไฟล์ Windows FAT ที่ไม่สามารถแสดงเวลาลงไปเป็นวินาที --modify_window=1 ค่อนข้างมีประโยชน์

    C, --checksum บังคับให้ฝ่ายส่งคำนวณเช็คซัมของไฟล์ทั้งหมดโดยใช้อัลกอริธึม MD4 128 บิตก่อนส่ง จากนั้นเช็คซัมจะได้รับการตรวจสอบที่ส่วนรับเพื่อให้การส่งไฟล์ที่มีอยู่ซึ่งมีขนาดเท่ากันและเช็คซัมสามารถผ่านไปได้ การตั้งค่านี้อาจทำให้การทำงานช้าลง

อย่างไรก็ตาม โปรดทราบว่า -a จะไม่เก็บฮาร์ดลิงก์ไว้เนื่องจากการค้นหาไฟล์แบบหลายลิงก์มีราคาแพง คุณจะต้องระบุ -H แยกต่างหาก

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

rsync foo/bar/foo.c ระยะไกล:/tmp/

จากนั้นมันจะสร้างไฟล์ foo.c ใน /tmp บนเครื่องระยะไกล ถ้าแทนคุณระบุ

Rsync -R foo/bar/foo.c ระยะไกล:/tmp/

จากนั้นไฟล์จะถูกสร้างขึ้นใน /tmp/foo/bar/foo.c บนเครื่องระยะไกล - เส้นทางแบบเต็มจะถูกบันทึก

ปิดใช้งานตัวเลือก --relative สิ่งนี้จำเป็นเฉพาะในกรณีที่คุณต้องการใช้ตัวเลือก --files-from โดยไม่มีการทำงานโดยนัยโดยที่เปิดใช้งานตัวเลือก --relative

    ไม่มีนัย-dirs

เมื่อรวมกับ --relative ไดเร็กทอรีที่ได้รับผลกระทบทั้งหมดในแต่ละพาธจะไม่ถูกคัดลอกอย่างชัดเจนโดยเป็นส่วนหนึ่งของกระบวนการถ่ายโอน ซึ่งจะทำให้การถ่ายโอนมีความเหมาะสมยิ่งขึ้น และยังช่วยให้คุณมีลิงก์สัญลักษณ์ที่ไม่ได้จับคู่ (ดูตัวอย่างด้านล่าง) ในเส้นทางที่นัยโดยการถ่ายโอน ตัวอย่างเช่น หากไฟล์ "/path/foo/file" ถูกส่งผ่านด้วยตัวเลือก -R ดังนั้นตามค่าเริ่มต้น rsync จะทำให้แน่ใจว่า "/path" และ "/path/foo" ตรงกับไดเร็กทอรี/ลิงก์ในส่วนรับทุกประการ . ตัวเลือก --no-implied-dirs ช่วยให้คุณสามารถละเว้นความไม่ตรงกันได้ เมื่อ "/path" เป็นไดเร็กทอรีจริงในด้านหนึ่งและเป็นลิงก์สัญลักษณ์ที่อีกด้านหนึ่ง rsync จะไม่พยายามเปลี่ยนแปลงสิ่งใดด้วยพารามิเตอร์นี้ในกรณีนี้

    B, --backup ด้วยตัวเลือกนี้ ไฟล์ที่มีอยู่แล้วในฝั่งรับจะถูกเปลี่ยนชื่อทันทีที่มีการโอนหรือลบไฟล์ที่เกี่ยวข้อง คุณสามารถควบคุมตำแหน่งที่จะย้ายไฟล์และเพิ่มส่วนต่อท้าย (หากจำเป็น) ให้กับชื่อโดยใช้ตัวเลือก --backup-dir และ --suffix

    Backup-dir=DIR เมื่อใช้ร่วมกับ --backup จะระบุไดเร็กทอรีที่จะบันทึกข้อมูลสำรอง สิ่งนี้ค่อนข้างมีประโยชน์สำหรับการสำรองข้อมูลส่วนเพิ่ม คุณสามารถเลือกระบุส่วนต่อท้ายโดยใช้ --suffix (ไม่เช่นนั้นไฟล์สำรองจะคงชื่อเดิมไว้)

    Suffix=SUFFIX ตัวเลือกนี้อนุญาตให้คุณระบุส่วนต่อท้ายอื่นที่ไม่ใช่ส่วนต่อท้ายดีฟอลต์สำหรับการสำรองข้อมูลไฟล์เมื่อตั้งค่า --backup (-b) ตามค่าเริ่มต้น ส่วนต่อท้ายนี้จะถูกตั้งค่าเป็น ~ โดยไม่มีการตั้งค่า --backup-dir ซึ่งจะรีเซ็ตส่วนต่อท้ายนี้เป็นสตริงว่าง

    U, --update ระบุให้ข้ามไฟล์ใด ๆ ที่มีอยู่แล้วในส่วนรับด้วยวันที่ภายหลังกว่าไฟล์ต้นฉบับ

    L, --copy-links หากพบลิงค์สัญลักษณ์ ไฟล์ที่ชี้ไปจะถูกคัดลอกไปยังจุดรับ แทนที่จะเป็นลิงค์สัญลักษณ์เดียวกัน

    คัดลอกลิงก์ที่ไม่ปลอดภัย คัดลอกออบเจ็กต์ทั้งหมดที่อยู่นอกแผนผังไดเร็กทอรีดั้งเดิมที่อ้างอิงโดยลิงก์สัญลักษณ์ ลิงก์สัญลักษณ์สัมบูรณ์ และหากตั้งค่า --relative ลิงก์สัญลักษณ์ใดๆ ภายในแผนผังไดเร็กทอรีต้นทางจะถือเป็นไฟล์ปกติ

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

    H, --hard-links ระบุเพื่อสร้างฮาร์ดลิงก์ใหม่ในฝั่งปลายทางตามสิ่งที่มีอยู่ในแหล่งที่มา หากไม่มีตัวเลือกนี้ ฮาร์ดลิงก์จะถือว่าเป็นไฟล์ปกติ

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

    W, --whole-file ตัวเลือกนี้จะปิดใช้งานอัลกอริธึมดิฟเฟอเรนเชียลของ rsync และด้วยเหตุนี้ไฟล์ทั้งหมดจึงถูกถ่ายโอนตามที่เป็นอยู่ การถ่ายโอนอาจเร็วกว่าด้วยตัวเลือกนี้หากแบนด์วิดท์ระหว่างเครื่องต้นทางและปลายทางกว้างกว่าการเข้าถึงดิสก์ แบนด์วิธ (โดยเฉพาะถ้า "ไดรฟ์" เป็นระบบไฟล์เครือข่ายจริงๆ) ตัวเลือกนี้จะเปิดใช้งานตามค่าเริ่มต้นหากทั้งต้นทางและปลายทางอยู่ในเครื่อง

    No-whole-file ปิดใช้งานตัวเลือก --whole-file หากเปิดใช้งานตามค่าเริ่มต้น

    P, --perms คัดลอกสิทธิ์ทั้งหมดไปยังฝั่งรับเหมือนกับต้นฉบับ

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

    O, --owner คัดลอกคุณลักษณะของเจ้าของไปยังฝั่งรับเหมือนกับต้นฉบับทุกประการ ในระบบส่วนใหญ่ เฉพาะผู้ใช้ระดับสูงเท่านั้นที่มีสิทธิ์ตั้งเจ้าของไฟล์ ควรสังเกตว่าหาก Remote daemon ทำงานในสภาพแวดล้อมแบบ chrooted ตัวเลือก --numeric-ids จะถูกนำไปใช้เนื่องจากฝ่ายระยะไกลไม่สามารถเข้าถึงชื่อผู้ใช้ใน /etc/passwd

    G, --group คัดลอกแอตทริบิวต์กลุ่มไปยังฝั่งรับเหมือนกับต้นฉบับ หากฝั่งรีโมตไม่ได้ทำงานเป็นผู้ใช้ระดับสูง ระบบจะบันทึกเฉพาะค่าของกลุ่มที่ผู้ใช้ฝั่งรับเป็นสมาชิกเท่านั้น (ชื่อกลุ่มเป็นสิ่งสำคัญ ไม่ใช่รหัส)

    D, --devices ระบุเพื่อส่งข้อมูลเกี่ยวกับอุปกรณ์ตัวละครและบล็อกเพื่อสร้างอุปกรณ์เหล่านั้นขึ้นมาใหม่ทางด้านรับ มีให้เฉพาะผู้ใช้ขั้นสูงเท่านั้น

    T, --times ระบุเพื่อส่งเวลาแก้ไขไฟล์และอัพเดตแอตทริบิวต์ที่เกี่ยวข้องในด้านการรับด้วย โปรดทราบว่าหากไม่ได้ตั้งค่าพารามิเตอร์นี้ การเพิ่มประสิทธิภาพการถ่ายโอนเพื่อแยกไฟล์ที่ไม่มีการเปลี่ยนแปลงเมื่อเวลาผ่านไปจะไม่ได้ผล กล่าวอีกนัยหนึ่งการละเว้น -t หรือ -a จะหมายความว่าการถ่ายโอนครั้งต่อไปจะดำเนินการด้วยตัวเลือก -I การตรวจสอบจะถูกเปรียบเทียบสำหรับไฟล์ทั้งหมดและข้อความที่เกี่ยวข้องเกี่ยวกับไฟล์เหล่านี้จะปรากฏในบันทึกแม้ว่าพวกเขาจะ ยังไม่ได้เปลี่ยน

    N, --dry-run ระบุว่าจะไม่ทำการถ่ายโอนใด ๆ แต่จะรายงานการกระทำที่อาจเกิดขึ้นเท่านั้น

    S, --sparse พยายามจัดการการกระจายตัวของไฟล์อย่างมีประสิทธิภาพมากขึ้นเพื่อประหยัดพื้นที่ในส่วนรับ

หมายเหตุ: อย่าใช้ตัวเลือกนี้หากปลายทางมีระบบไฟล์ Solaris "tmpfs" ไม่สามารถจัดการการค้นหาระหว่าง "หลุม" (ขอบเขตว่าง) ได้อย่างถูกต้อง ซึ่งลงท้ายด้วยความเสียหายของไฟล์

    ที่มีอยู่ ระบุว่าจะไม่สร้างไฟล์ใหม่ - อัปเดตเฉพาะไฟล์ที่มีอยู่แล้วในส่วนรับเท่านั้น

    ละเว้นที่มีอยู่ ระบุว่าจะไม่อัปเดตไฟล์ที่มีอยู่แล้วในส่วนรับ

    Max-delete=NUM อย่าลบไฟล์และไดเร็กทอรีมากกว่า NUM ไฟล์ สิ่งนี้มีประโยชน์เมื่อทำการมิเรอร์แผนผังไดเร็กทอรีขนาดใหญ่มากเพื่อป้องกันไม่ให้เกิดปัญหา

    ลบ ลบไฟล์ใดๆ บนฝั่งรับที่ไม่ได้อยู่ฝั่งส่ง ไฟล์ที่ไม่รวมอยู่ในการถ่ายโอนจะถูกแยกออกจากกระบวนการลบด้วย เว้นแต่จะระบุ --delete-excluded

การตั้งค่านี้จะไม่มีผลใดๆ เว้นแต่จะเปิดใช้งานการคัดลอกไดเรกทอรีแบบเรียกซ้ำ ตัวเลือกนี้อาจเป็นอันตรายได้หากใช้ไม่ถูกต้อง! หลักการทั่วไปที่ดีคือการใช้ rsync (-n) ที่ไม่ได้ใช้งานก่อนเพื่อดูว่าไฟล์ใดบ้างที่อาจถูกลบและไฟล์ใดมีความสำคัญหรือไม่ หากเกิดข้อผิดพลาด I/O ในฝั่งที่ส่ง การลบไฟล์ใดๆ ในฝั่งที่รับจะถูกปิดใช้งานโดยอัตโนมัติ วิธีนี้จะช่วยป้องกันการลบไฟล์จำนวนมากที่ฝั่งรับเนื่องจากข้อผิดพลาดของระบบไฟล์ชั่วคราว (เช่น NFS) ที่ฝั่งส่ง ลักษณะการทำงานนี้สามารถปิดการใช้งานได้ด้วยตัวเลือก --ignore-errors

    ลบไม่รวม นอกเหนือจากไฟล์ที่ถูกลบในฝั่งรับเนื่องจากไม่มีอยู่ในฝั่งส่ง ระบุว่าไฟล์ใด ๆ ที่ถูกยกเว้นโดยตัวเลือก --exclude บนฝั่งรับควรถูกลบด้วย ตัวเลือก --delete จะถือว่า

    ลบหลัง ตามค่าเริ่มต้น rsync จะลบไฟล์ก่อนที่จะคัดลอกเพื่อให้แน่ใจว่ามีพื้นที่ว่างเพียงพอในส่วนรับ หากคุณต้องการให้ลบภายหลัง ให้ใช้ --delete-after ตัวเลือก --delete จะถือว่า

    ละเว้นข้อผิดพลาด เมื่อลบ (--ลบ) บังคับให้กระบวนการและละเว้นข้อผิดพลาดใดๆ แม้แต่ข้อผิดพลาด I/O

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

    ลบ เนื่องจากการลบจะเกิดขึ้นกับไดเร็กทอรีในระดับเดียวกันเท่านั้น ต้องการ --recursive (ซึ่งบอกเป็นนัยว่าถ้า -a) เพื่อให้มีผลที่มีความหมาย

    B, --block-size=BLOCKSIZE ปรับขนาดบล็อกที่ใช้โดยอัลกอริทึม rsync ดูเอกสารข้อมูลสำหรับรายละเอียด

    E, --rsh=COMMAND ให้คุณเลือกโปรแกรมเชลล์ระยะไกลทางเลือกเพื่อจัดการการเชื่อมต่อระหว่างสำเนา rsync ระยะไกลและในเครื่อง โดยทั่วไปแล้ว rsync ได้รับการกำหนดค่าให้ใช้ ssh ตามค่าเริ่มต้น แต่คุณอาจต้องการใช้ rsh บนเครือข่ายท้องถิ่นของคุณ

หากใช้พารามิเตอร์นี้กับพาธของฟอร์ม host::module/path ดังนั้นโปรแกรมเชลล์ระยะไกล COMMAND จะถูกนำมาใช้เพื่อเริ่มต้นเซิร์ฟเวอร์ rsync บนฝั่งรีโมต และข้อมูลทั้งหมดจะถูกถ่ายโอนผ่านการเชื่อมต่อเชลล์ระยะไกล แทน กว่าโดยตรงผ่านการเชื่อมต่อกับเซิร์ฟเวอร์ rsync ที่จุดสิ้นสุด "นั้น" ดูหัวข้อ "การเชื่อมต่อกับเซิร์ฟเวอร์ RSYNC ผ่าน REMOTE SHELL" อาร์กิวเมนต์บรรทัดคำสั่งไปยัง COMMAND ได้รับอนุญาตให้ระบุในรูปแบบที่แสดง COMMAND ถึง rsync เป็นอาร์กิวเมนต์เดียว ตัวอย่างเช่น:

    E "ssh -p 2234" (โปรดทราบว่าผู้ใช้ ssh สามารถกำหนดค่าตัวเลือกการเชื่อมต่อเฉพาะสภาพแวดล้อมในไฟล์ .ssh/config ของตนได้)

คุณยังสามารถเลือกโปรแกรมเชลล์ระยะไกลผ่านตัวแปรสภาพแวดล้อม RSYNC_RSH ซึ่งรับช่วงของค่าเดียวกันกับ -e ดูเพิ่มเติม --blocking-io ซึ่งได้รับผลกระทบจากการตั้งค่าตัวเลือก -e

    C, --cvs-exclude ด้วยตัวเลือกนี้ คุณจะยกเว้นไฟล์จำนวนมากที่คุณไม่ต้องการถ่ายโอนระหว่างระบบ ซึ่งใช้อัลกอริธึมเดียวกับที่ CVS ใช้เพื่อกำหนดไฟล์ที่จะละเว้น

รายการข้อยกเว้นในขั้นต้นประกอบด้วย:

RCS/ SCCS/ CVS/ .svn/ CVS.adm แท็ก RCSLOG cvslog.* แท็ก .make.state .nse_depinfo *~ #* .#* ,* *.old *.bak *.BAK *.orig *.rej .del -* *.a *.o *.obj *.so *.Z *.elc *.ln core จากนั้นไฟล์ที่แสดงรายการใน $HOME/.cvsignore จะถูกเพิ่มไปยังรายการเริ่มต้น เช่นเดียวกับไฟล์ใดๆ ที่แสดงรายการในสภาพแวดล้อม CVSIGNORE ตัวแปร (คั่นด้วยช่องว่าง) สุดท้าย ไฟล์ใดๆ จะถูกข้ามหากมีไฟล์ .cvsignore ในไดเร็กทอรีเดียวกันที่มีเทมเพลตที่ตรงกับไฟล์ ดูคู่มือ cvs(1) สำหรับข้อมูลเพิ่มเติม * --exclude=PATTERN ช่วยให้คุณสามารถเลือกแยกไฟล์บางไฟล์ออกจากกระบวนการถ่ายโอนได้ สิ่งนี้มีประโยชน์มากที่สุดเมื่อส่งผ่านแบบเรียกซ้ำ

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

    Exclude-file=FILE คล้ายกับ --exclude แต่ใช้รูปแบบการยกเว้นไฟล์ที่แสดงอยู่ในไฟล์ FILE แทน บรรทัดว่างพร้อมกับบรรทัดที่ขึ้นต้นด้วย ";" หรือ "#" จะถูกละเว้น หากระบุ FILE เป็น - รายการรูปแบบจะถูกอ่านจากอินพุตมาตรฐาน

    รวม=รูปแบบ ระบุรูปแบบสำหรับชื่อของไฟล์เหล่านั้นที่ไม่สามารถแยกออกจากกระบวนการได้ มีประโยชน์เนื่องจากช่วยให้คุณสร้างกฎการรวม/การแยกที่ค่อนข้างซับซ้อนได้

ดูส่วน "รูปแบบข้อยกเว้น" สำหรับข้อมูลเกี่ยวกับไวยากรณ์สำหรับพารามิเตอร์นี้

    รวมจาก=FILE ระบุเพื่อใช้รายการไฟล์ที่ต้องรวมไว้ในการถ่ายโอนจากไฟล์ FILE หากระบุ FILE เป็น - รายการรูปแบบจะถูกอ่านจากอินพุตมาตรฐาน

    Files-from=FILE ช่วยให้คุณระบุรายการไฟล์ที่จะถ่ายโอนที่แน่นอน (ซึ่งจะถูกอ่านจาก FILE ที่ระบุหรือจากอินพุตมาตรฐานหากระบุ -) นอกจากนี้ยังเปลี่ยนพฤติกรรมเริ่มต้นของ rsync เพื่อให้ถ่ายโอนไฟล์และไดเร็กทอรีที่ระบุได้ง่ายขึ้น ตัวอย่างเช่น ตามค่าเริ่มต้น การใช้ตัวเลือก --relative ถูกเปิดใช้งาน (หากต้องการปิดการใช้งานนี้ ให้ใช้ --no-relative) ไดเร็กทอรีที่แสดงทั้งหมดจะถูกสร้างขึ้นที่ฝั่งรับ (แทนที่จะถูกส่งผ่านไปอย่างเงียบ ๆ ราวกับว่า -r ไม่ได้ใช้ตัวเลือก) และลักษณะการทำงานเป็น (--archive) ไม่ได้หมายความถึงการมีอยู่ของ -r (--recursive) - จะต้องระบุอย่างชัดเจนหากจำเป็น

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

    rsync -a --files-from=/tmp/foo /usr ระยะไกล:/backup

หาก /tmp/foo มี string bin (หรือแม้แต่ "/bin") ไดเร็กทอรี /usr/bin จะถูกสร้างขึ้นเป็น /backup/bin บนเครื่องระยะไกล (แต่เนื้อหาของ /usr/bin ไม่ควรถูกถ่ายโอน เว้นแต่ อ็อบเจ็กต์ถูกระบุอย่างชัดเจนใน /tmp/foo หรือหากระบุอ็อพชัน -r) โปรดทราบว่าผลกระทบของ --relative (เปิดใช้งานโดยค่าเริ่มต้น) คือการคัดลอกเส้นทางที่อ่านจากไฟล์ - มันไม่ได้บังคับให้คัดลอกเส้นทางต้นทางที่ระบุทั้งหมด (/usr ในตัวอย่าง) นอกจากนี้ --files-from a file สามารถอ่านได้จากเครื่องระยะไกลแทนที่จะอ่านในเครื่องโดยการระบุ "host:" ก่อนชื่อไฟล์ (ซึ่งจะต้องตรงกับจุดสิ้นสุดด้านใดด้านหนึ่งของการถ่ายโอน) เพื่อความกระชับ คุณสามารถระบุได้เฉพาะคำนำหน้า /// เพื่อระบุฝ่ายคัดลอกระยะไกล ตัวอย่างเช่น: rsync -a --files-from=:/path/file-list src:/ /tmp/copy คำสั่งนี้ควรคัดลอกไฟล์ทั้งหมดที่ระบุในไฟล์ /path/file-list ซึ่งอยู่บนเครื่องระยะไกล "src"

    0, --from0 บอก rsync ว่าชื่อไฟล์ที่อ่านภายนอกลงท้ายด้วยอักขระ "\0" ไม่ใช่ NL, CR หรือ CR+LF สิ่งนี้ใช้กับตัวเลือก --exclude-from, --include-from และ --files-from

    T, --temp-dir=DIR

สั่งให้ใช้ DIR เป็นไดเร็กทอรีสำหรับสำเนาชั่วคราวของไฟล์ที่ถ่ายโอนที่ฝั่งรับ ตามค่าเริ่มต้น ไฟล์ชั่วคราวจะถูกสร้างขึ้นในไดเร็กทอรีปลายทาง

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

บันทึก ผู้แปล: การมีอยู่ของพารามิเตอร์นี้เกิดจากความจำเป็นในการอัปเดต เช่น แผนผังที่มีไฟล์ที่พึ่งพาซึ่งกันและกัน ในกรณีนี้ ไม่แนะนำให้คัดลอกทีละไฟล์ พารามิเตอร์ --compare-dest อนุญาตให้คุณระบุไดเร็กทอรีปลายทางชั่วคราวที่คัดลอกไฟล์ที่ถ่ายโอน เมื่อสิ้นสุดกระบวนการถ่ายโอน rsync จะเปลี่ยนชื่อแผนผังปลายทางดั้งเดิม จากนั้นเปลี่ยนชื่อไดเร็กทอรีชั่วคราว DIR ไปเป็นไดเร็กทอรีดั้งเดิม และสุดท้ายจะลบไดเร็กทอรีดั้งเดิมด้วยไฟล์ “เก่า” ที่ถูกเปลี่ยนชื่อในขั้นตอนแรก ตัวเลือกนี้เพิ่มประโยชน์ของ --partial เนื่องจากไฟล์ที่ถ่ายโอนบางส่วนจะยังคงอยู่ในไดเร็กทอรีชั่วคราวใหม่จนกว่าจะเข้าที่โดยสมบูรณ์ หากระบุ DIR เป็นพาธแบบสัมพันธ์ ก็จะสัมพันธ์กับไดเร็กทอรีปลายทาง

    Link-dest=DIR ทำงานเหมือนกับ --compare-dest แต่ยังสร้างฮาร์ดลิงก์ใน DIR ไปยังไฟล์ที่ไม่ได้แก้ไขในไดเร็กทอรีปลายทาง ไฟล์ที่มีการเปลี่ยนแปลงสิทธิ์และความเป็นเจ้าของจะไม่ได้รับผลกระทบจากสิ่งนี้ เช่นเดียวกับ --compare-dest หากระบุ DIR เป็นชื่อแบบสัมพันธ์ การดำเนินการจะสัมพันธ์กับไดเร็กทอรีปลายทาง

    Z, --compress ด้วยตัวเลือกนี้ rsync จะบีบอัดข้อมูลไฟล์ทั้งหมดที่ถ่ายโอน สิ่งนี้มีประโยชน์กับสายที่ช้า วิธีการบีบอัดที่ใช้จะเหมือนกับวิธีการบีบอัดที่ใช้โดย gzip

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

    รหัสตัวเลข แทนที่จะระบุชื่อกลุ่มและชื่อผู้ใช้ รหัสตัวเลขจะถูกส่งและจับคู่กันที่ปลายทั้งสองด้าน

ตามค่าเริ่มต้น rsync จะใช้ชื่อกลุ่มและชื่อผู้ใช้เพื่อกำหนดเจ้าของไฟล์ uid 0 และ gid 0 พิเศษจะไม่ถูกเปิดเผยผ่านชื่อผู้ใช้/กลุ่ม แม้ว่าจะไม่ได้ระบุ --numeric-ids ก็ตาม หากระบบต้นทางกำลังทำงานในสภาพแวดล้อมแบบ chrooted หรือหากไม่มีผู้ใช้หรือกลุ่มอยู่ที่ฝั่งรับ ระบบจะใช้ id ตัวเลขดั้งเดิม

    Timeout=TIMEOUT ให้คุณตั้งเวลารอ I/O สูงสุดเป็นวินาที หากไม่มีการโอนใดๆ ในช่วงระยะเวลาที่กำหนด rsync จะยุติลง ค่าเริ่มต้นคือ 0 ซึ่งหมายความว่าไม่ต้องรอ

    Daemon รัน rsync ในฐานะ daemon daemon สามารถเข้าถึงได้สำหรับไคลเอ็นต์ผ่านไวยากรณ์ host::module หรือ rsync:/\/host/module หากอินพุตมาตรฐานเป็นซ็อกเก็ต rsync จะถือว่าอินพุตนั้นรันจาก inetd ไม่เช่นนั้นจะตัดการเชื่อมต่อจากเทอร์มินัลปัจจุบันและกลายเป็นกระบวนการ daemon พื้นหลัง daemon อ่านไฟล์คอนฟิกูเรชัน (rsyncd.conf) สำหรับแต่ละการเชื่อมต่อจากไคลเอ็นต์ และตอบสนองต่อคำร้องขอตามลำดับ

    ไม่มีการถอดออก เมื่อทำงานเป็น daemon ตัวเลือกนี้จะสั่ง rsync ไม่ให้แยกออกจากเทอร์มินัลและกลายเป็นกระบวนการเบื้องหลัง จำเป็นเมื่อรันเซอร์วิสภายใต้ Cygwin และยังมีประโยชน์หาก rsync ถูกมอนิเตอร์โดยโปรแกรม เช่น daemontools หรือ System Resource Controller ของ AIX ยังแนะนำเมื่อรัน rsync ภายใต้ดีบักเกอร์ เอฟเฟกต์เมื่อรันจาก inetd หรือ sshd

    ที่อยู่ ตามค่าเริ่มต้น rsync จะใช้ที่อยู่มัลติคาสต์ 0.0.0.0 เมื่อทำงานเป็น daemon ด้วย --daemon หรือเมื่อเชื่อมต่อกับเซิร์ฟเวอร์ rsync --address ช่วยให้คุณสามารถระบุที่อยู่ IP (หรือชื่อโฮสต์) ที่แน่นอนสำหรับสิ่งนี้ ทำให้การโฮสต์เสมือนเป็นไปได้เมื่อใช้ร่วมกับ --config

    Config=FILE ระบุไฟล์คอนฟิกูเรชันอื่น สิ่งนี้สำคัญเฉพาะเมื่อมีการระบุ --daemon ค่าดีฟอลต์คือ /etc/rsyncd.conf ยกเว้นว่า daemon กำลังรันอยู่ด้านบนของรีโมตเชลล์ และผู้ใช้รีโมตไม่ใช่รูท ในกรณีหลัง rsyncd.conf จะอยู่ในไดเร็กทอรีปัจจุบัน (โดยปกติคือ $HOME) ตามค่าเริ่มต้น

    Port=PORT ระบุหมายเลขพอร์ต TCP สำรองเพื่อดำเนินการ แทนที่จะเป็นค่าเริ่มต้น 873

    Blocking-io ระบุว่าจะใช้การบล็อก I/O เมื่อรันบนโปรแกรมการขนส่งเชลล์ระยะไกล หากโปรแกรมนั้นเป็น rsh หรือ remsh ดังนั้น rsync จะใช้การบล็อก I/O ตามค่าเริ่มต้น มิฉะนั้นจะใช้ I/O ที่ไม่ปิดกั้นเป็นค่าเริ่มต้น (โปรดทราบว่า ssh ชอบการไม่ปิดกั้น)

    No-blocking-io ปิดใช้งานการดำเนินการ --blocking-io เมื่อเปิดใช้งานตามค่าเริ่มต้น

    Log-format=FORMAT ช่วยให้คุณสามารถระบุได้อย่างชัดเจนว่ารายงาน rsync ใด (บันทึก) ไปยังเอาต์พุตมาตรฐานแบบไฟล์ต่อไฟล์ รูปแบบของข้อความถูกกำหนดโดยหลักการเดียวกันกับอ็อพชันการบันทึกในไฟล์ rsyncd.conf

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

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

    ความคืบหน้า บอกให้ rsync แสดงข้อมูลเกี่ยวกับความคืบหน้าของการถ่ายโอน ผู้ใช้ที่เบื่อจะมีบางอย่างให้ดู หมายถึง --verbose โดยไม่เพิ่มการใช้คำฟุ่มเฟือย

    P เทียบเท่ากับ --บางส่วน --progress ผู้เขียนพบว่าตัวเองใช้ชุดค่าผสมนี้บ่อยครั้ง ดังนั้นเขาจึงแนะนำพารามิเตอร์แยกต่างหากเพื่อให้ง่ายขึ้น

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

    Bwlimit=KBPS ให้คุณระบุความเร็วการถ่ายโอนสูงสุด กิโลไบต์ต่อวินาที ตัวเลือกนี้จะมีประสิทธิภาพมากที่สุดเมื่อใช้ rsync เพื่อถ่ายโอนไฟล์ขนาดใหญ่ (หลายเมกะไบต์ขึ้นไป) เนื่องจากลักษณะของการถ่ายโอน rsync บล็อกข้อมูลปกติจะถูกส่ง ดังนั้นหาก rsync กำหนดว่าความเร็วสูงกว่าอัตราที่ตั้งไว้ ก็จะทำให้เกิดความล่าช้าก่อนที่จะส่งบล็อกถัดไป ส่งผลให้อัตราการโอนเฉลี่ยเท่ากับขีดจำกัดที่กำหนด ค่าศูนย์หมายความว่าไม่มีข้อจำกัด

    Write-batch=PREFIX สร้างชุดของไฟล์ที่สามารถถ่ายโอนในการอัพเดตแบบแบตช์ ชื่อไฟล์แต่ละไฟล์ในชุดจะขึ้นต้นด้วย PREFIX ดูส่วน BATCH MODE สำหรับรายละเอียด

    Read-batch=PREFIX ใช้ชุดการเปลี่ยนแปลงที่สร้างขึ้นก่อนหน้านี้ โดยใช้ชุดของไฟล์ที่ชื่อขึ้นต้นด้วย PREFIX ดูส่วน BATCH MODE สำหรับรายละเอียด

ตัวเลือก rsync

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

    V - ข้อมูลโดยละเอียดเกี่ยวกับสิ่งที่เกิดขึ้น สามารถระบุได้หลายครั้ง ช่วยให้คุณสนุกกับการดูข้อมูลภายในเกี่ยวกับการถ่ายโอนข้อมูลระหว่างกระบวนการอัพเดต

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

    H, --มนุษย์สามารถอ่านได้ - แสดงขนาดของข้อมูลที่ส่ง/ประมวลผลในรูปแบบที่สะดวก (แทนที่จะเป็นไบต์) เช่น 234K หรือ 1.35G

    Z, --compress - เปิดใช้งานการบีบอัดข้อมูลที่ส่ง

    ความคืบหน้า - แสดงข้อบ่งชี้ของกระบวนการประมวลผลไฟล์

    บางส่วน - อย่าลบไฟล์ในเครื่องก่อนทำการซิงโครไนซ์

    P - เช่นเดียวกับ --บางส่วน ร่วมกับ --progress

    สถิติ - แสดงสถิติ - แสดงจำนวนที่ได้รับ/ส่ง, จำนวนที่ประหยัดได้ ฯลฯ

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

ตัวอย่างการซิงโครไนซ์ Rsync: การใช้งานพื้นฐาน

มาสร้างสองไดเร็กทอรีภายใน /tmp ชื่อ "foo" และ "bar" และสร้างไฟล์จำลองจำนวนมากภายใน /tmp/foo

mkdir /tmp/foo /tmp/bar.mkdir
สำหรับฉันใน `seq 1 100`;do touch /tmp/foo/file$i;done

ตอนนี้เรามีไฟล์ 100 ไฟล์ใน /tmp/foo; /tmp/bar ไม่ควรมีอยู่อยู่แล้ว เราสามารถใช้ rsync เพื่อคัดลอกไฟล์ทั้งหมดจาก /tmp/foo ไปยัง /tmp/bar:

rsync /tmp/foo/* /tmp/bar

เมื่อใช้นามสกุลไฟล์พื้นฐาน เราสามารถคว้าไฟล์ทั้งหมดและคัดลอกไปยังไดเร็กทอรีอื่นได้ จะเกิดอะไรขึ้นถ้ามีไดเร็กทอรีอยู่ภายใน /tmp/foo? มันจะไม่ถูกโอน เราจะต้องใช้แฟล็ก -r (-recursive) เพื่อสำรวจไดเร็กทอรีโดยส่งผ่านแต่ละไฟล์ภายใน:

rsync -r /tmp/foo/ /tmp/bar

นี่เป็นตัวอย่างง่ายๆ และไม่ได้กล่าวถึงพลังที่แท้จริงของคำสั่ง rsync ด้วยซ้ำ มีแฟล็กสำหรับบันทึกสิทธิ์ เจ้าของ กลุ่ม ลิงก์สัญลักษณ์ ฯลฯ เนื่องจากมีการใช้แฟล็กเหล่านี้บ่อยมาก แฟล็ก -a (-archive) จึงทำหน้าที่เป็นนามแฝงในการเปิดใช้งานทั้งหมด รวมถึง -r ด้วย

ล้าง /tmp/bar สร้างลิงก์ไปยังไฟล์เดียวใน /tmp/foo และใช้ rsync เพื่อคัดลอกไฟล์ทั้งหมดแบบวนซ้ำ:

ค้นหา /tmp/bar -delete
ln -s /tmp/foo/file100 /tmp/foo/file101
rsync -r /tmp/foo/ /tmp/bar

เราเห็นว่า rsync ทิ้ง symlink ที่เราสร้างขึ้น ล้าง /tmp/bar อีกครั้ง แล้วลองอีกครั้ง คราวนี้ใช้แฟล็ก -a:

ค้นหา /tmp/bar -delete
rsync -a /tmp/foo/ /tmp/bar

ใช้ chown เพื่อเปลี่ยนความเป็นเจ้าของไฟล์ใน /tmp/foo เป็นผู้ใช้อื่น และคัดลอกไฟล์โดยใช้ -a ไปยัง /tmp/bar เรียกใช้ ls -l และสังเกตว่าความเป็นเจ้าของได้ย้ายไปพร้อมกับไฟล์แล้ว วัสดุที่สะดวกสบาย!

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

ธง -a

ดังที่เราได้กล่าวไว้ก่อนหน้านี้ ในบทความนี้ เราจะดูตัวอย่างและคำสั่งการซิงโครไนซ์ Rsync แต่เพื่อที่จะดำเนินการได้ คุณจำเป็นต้องรู้พื้นฐานในการตั้งธง
เราได้กล่าวไว้ก่อนหน้านี้ว่าแฟล็ก -a (-archive) เป็นนามแฝงสำหรับชุดของแฟล็ก -rltpgoD อื่นๆ ใช้งานไม่ได้ แต่ละแฟล็กทำหน้าที่ดังต่อไปนี้:

- เรียกซ้ำ

- ย้ายสัญลักษณ์ใด ๆ ที่ตรวจพบ

— บันทึกการประทับเวลา

- บันทึกสิทธิ์

— บันทึกกลุ่ม

โอ- รักษาความเป็นเจ้าของ

ดี— บันทึกบล็อกและอุปกรณ์ตัวละคร

คุณอาจต้องการเพิ่มคำสั่งต่อไปนี้ในคำสั่งของคุณเพื่อให้อ่านไฟล์ได้ง่ายขึ้น:

ชม- รูปแบบไฟล์ที่อ่านง่าย

ใครๆ ก็ชอบรีวิว

แฟล็ก -v (–verbose) จะให้ข้อมูลเพิ่มเติมเกี่ยวกับสถานะการถ่ายโอน รวมถึงข้อมูลสรุปในตอนท้ายซึ่งจะมีลักษณะดังนี้:

$ rsync -av foo/ บาร์
สร้างรายการไฟล์...เสร็จแล้ว
ส่ง 1,040 ไบต์ รับ 20 ไบต์ 2120.00 ไบต์/วินาที
ขนาดรวมคือ 7 การเร่งความเร็วคือ 0.01

หากคุณต้องการรับสถิติเพิ่มเติม ให้รัน rsync ด้วยแฟล็ก -stats นี่จะให้รายการโดยละเอียดเกี่ยวกับจำนวนไฟล์ทั้งหมด ไฟล์ที่ถ่ายโอน การวัดประสิทธิภาพ และแม้กระทั่งความเร็วการถ่ายโอนโดยเฉลี่ย ในทางกลับกัน -q (-quiet) จะระงับเอาต์พุตทั้งหมดที่อาจใช้สำหรับการเขียนสคริปต์เมื่อไม่ต้องการผลป้อนกลับ

การถ่ายโอนระยะไกลทำได้ง่าย

พลังที่แท้จริงของ rsync อยู่ที่ความสามารถในการดำเนินการไม่เพียงแต่การถ่ายโอนภายในเครื่องเท่านั้น แต่ยังรวมถึงการถ่ายโอนระยะไกลด้วย หากคุณเคยใช้ scp มาก่อน ไวยากรณ์สำหรับการถ่ายโอนระยะไกลจะคล้ายกันมาก:

rsync@:

ตามตัวอย่าง rsync ที่ใช้ไวยากรณ์นี้จะมีลักษณะดังนี้:

rsync -avh /tmp/foo/ root@host2:/tmp/bar

หมายเหตุ: (โคลอน) ระหว่างเซิร์ฟเวอร์ระยะไกลและเส้นทางระยะไกล มันจำเป็น.

ตัวเลือกเพิ่มเติม

Rsync มาพร้อมกับรายการตัวเลือกที่มีอยู่มากมาย มากเกินไปที่จะรวมเป็นบทความเดียว แฟล็กสุดท้ายที่เราจะดูคือแฟล็ก -exclude, -exclude-from, -update และ -delete

แยกไฟล์ตามรูปแบบ Rsync ยังไม่รองรับ regex ดังนั้นจึงมีเพียงการจับคู่ไฟล์มาตรฐานและงาน glob เท่านั้น

ไม่รวมไฟล์ที่อยู่ในไฟล์คั่นด้วยบรรทัด

อัปเดตไฟล์ในปลายทางเฉพาะในกรณีที่สำเนาต้นฉบับได้รับการแก้ไขเมื่อเร็ว ๆ นี้

ลบไฟล์ในปลายทางเฉพาะในกรณีที่ไม่มีสำเนาต้นฉบับอีกต่อไป

พอร์ต SSH ทางเลือก

หากคุณเปลี่ยนพอร์ต SSH บนเซิร์ฟเวอร์ของคุณ คุณจะต้องแจ้งให้ rsync ใช้หมายเลขพอร์ตใหม่

ตัวอย่างที่มีพอร์ต SSH ปกติ:
rsync -azh /local/path/file [ป้องกันอีเมล]:/remote/path/file

ตัวอย่างพอร์ต SSH สำรอง (22334):
rsync -azh /local/path/file -e 'ssh -p 22334' [ป้องกันอีเมล]:/remote/path/file

การถ่ายโอนระยะไกลโดยไม่ต้องใช้รหัสผ่าน

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

หากคุณมีคำถามใด ๆ ในหัวข้อ “ตัวอย่างการซิงโครไนซ์ Rsync” โปรดเขียนคำถามเหล่านั้นในความคิดเห็น อย่าลืมระบุเวอร์ชันของระบบปฏิบัติการที่คุณใช้อยู่ เพื่อให้เราช่วยตอบคำถามของคุณได้

หากคุณพบข้อผิดพลาด โปรดเน้นข้อความและคลิก Ctrl+ป้อน.