การใช้ HDD ปลอดภัยหรือไม่ในขณะที่ rsync กำลังทำงานอยู่


27

ฉันวางแผนที่จะสำรองข้อมูล HDD ขนาดใหญ่ของฉันrsyncและคาดว่าจะใช้เวลาสองสามวัน การใช้ HDD ดั้งเดิม (เพิ่มไฟล์) ปลอดภัยrsyncหรือไม่ในขณะที่ใช้งานอยู่ หรือจะเป็นการดีกว่าที่จะปล่อย HDD ทิ้งไว้จนกว่าrsyncจะเสร็จสิ้น


1
โปรดทราบว่า "การใช้" อาจง่ายเหมือนเปิดเบราว์เซอร์ไม่ทำอะไรเลย เบราว์เซอร์มักจะเขียนเนื้อหาแบบสุ่มจำนวนมากในไดเรกทอรีข้อมูล ในกรณีที่เลวร้ายที่สุดสิ่งที่คุณได้รับคือการสำรองข้อมูลที่ไม่สอดคล้องกันเช่นเมื่อกู้คืนคุณอาจไม่สามารถกู้คืนแท็บได้บุ๊กมาร์กของคุณอาจหายไป (เนื่องจากฐานข้อมูลเสียหาย) หรือบางสิ่งบางอย่างตามลำดับความสำคัญ
Jonas Schäfer

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

คำตอบ:


34

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

สิ่งที่ไม่ปลอดภัยโดยทั่วไปคือการเขียนภายในไดเรกทอรีต้นทางขณะที่ rsync กำลังทำงาน "Writes" เป็นสิ่งที่แก้ไขเนื้อหาของไดเรกทอรีต้นทางหรือไดเรกทอรีย่อยใด ๆ ดังนั้นรวมถึงการปรับปรุงไฟล์ลบการสร้าง ฯลฯ

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

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

การรันครั้งที่สองควรโอนเฉพาะความแตกต่างที่เกิดขึ้นในระหว่างการรัน rsync ก่อนหน้าและจะเสร็จเร็วขึ้นมาก ดังนั้นคุณสามารถใช้คอมพิวเตอร์ได้ตามปกติในระหว่างการเรียกใช้ครั้งแรก แต่ควรหลีกเลี่ยงการเปลี่ยนแปลงแหล่งที่มาในระหว่างการเรียกใช้ครั้งที่สองให้มากที่สุด หากเป็นไปได้ให้พิจารณาการติดตั้งระบบไฟล์ต้นฉบับแบบอ่านอย่างเดียวอีกครั้งก่อนเริ่มการทำงานครั้งที่สองของ rsync (สิ่งที่mount -o ro,remount /media/sourceควรทำ)


7
เราสามารถทำได้หนึ่งในสามของการวิ่งหลังจากการวิ่งครั้งที่สอง: อาจใช้เวลาน้อยลง ... ;-)
gerlos

5
@gerlos ดูเหมือนว่ารูปแบบจะเกิดขึ้น ดูเหมือนว่าคน ๆ หนึ่งจะยังคงสามารถเรียกใช้คำสั่ง rsync ได้เมื่อสิ้นสุดการใช้งานแต่ละครั้งและภายในไม่กี่วันก็สามารถทำได้ในเวลาไม่นาน
Monty Harder

5
@gerlos หากคุณทำการนับใหม่แบบอ่านอย่างเดียวก่อนที่จะเรียกใช้ rsync ครั้งที่สองนั่นไม่จำเป็นและการสำรองข้อมูลจะทั้งหมด แต่รับประกันว่าจะสอดคล้องกันในขณะที่ลดเวลาที่คุณไม่สามารถเขียนไปยังระบบไฟล์ต้นฉบับ
CVn

1
@gerlos นอกจากนี้นั่นเป็นเหตุผลที่ฉันมีรายการเหมือน@reboot root find / -print &>/dev/nullใน crontab ระบบของฉันเพื่อเติมแคช (รายการที่เกิดขึ้นจริงมีความซับซ้อนมากขึ้นในการบัญชีสำหรับกรณีพิเศษบางอย่างในระบบของฉันโดยเฉพาะ) มันใช้ RAM บางส่วนและเวลา wallclock บางต้นหลังจากเริ่มต้นเพื่อปรับปรุงการสแกนต้นไม้ไดเรกทอรีไดเรกทอรีค่อนข้าง IME เล็กน้อย
CVn

1
@ MichaelKjörling: ความคิดที่จะสอดแทรกลำดับชั้น แต่บางทีคุณควรเรียกใช้updatedb(การสร้างฐานข้อมูลค้นหา) หรือslocate -u(เหมือนกันถ้าคุณมี slocate) แทน? ด้วยวิธีนี้คุณยังคงแคชลำดับชั้น แต่คุณยังสร้างฐานข้อมูลการค้นหาหรือจัดสรรเพื่อให้คุณสามารถใช้คำสั่งเหล่านั้นเพื่อค้นหาไฟล์จำนวนมากได้อย่างรวดเร็ว?
Olivier Dulac

22

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

ในกรณีของคุณrsyncจะสร้างรายการไฟล์จากนั้นเริ่มการสำรองข้อมูล ดังนั้นไฟล์ใด ๆ ที่คุณเพิ่มลงใน HDD ต้นทางหลังจากการสำรองข้อมูลเริ่มขึ้นจะไม่ถูกคัดลอก

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


14
ฉันมักจะปล่อยให้มันรันและจากนั้นทำการรันครั้งที่สองrsyncซึ่งจะเสร็จสิ้นในไม่กี่วินาทีเพราะไฟล์ที่ฉันเปลี่ยนระหว่างการรันจะถูกคัดลอก ทุกอย่างจะอยู่ในแคชดังนั้นจึงเป็นวิธีที่ง่ายกว่าที่จะละเว้นจากการแก้ไขในช่วงเวลานั้น
Martin Ueding

15

มีความปลอดภัยในการอ่านข้อมูลจากแหล่งที่มาในขณะที่rsyncใช้งานอยู่ แต่ถ้าคุณอัปเดตสิ่งใดก็ตามสำเนาที่rsyncสร้าง / อัปเดตน่าจะไม่สอดคล้องกัน:

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

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

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

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

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

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

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


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

11
  • Source HDD สามารถอ่านอะไรก็ได้ในขณะที่ rsync

  • Source HDD สามารถเขียนเนื้อหาใด ๆ ที่ไม่เกี่ยวข้องกับเนื้อหา rsync

  • ปลายทาง HDD สามารถอ่านอะไรก็ได้ในขณะที่ rsync

  • ปลายทาง HDD สามารถเขียนอะไรก็ได้ในขณะที่ rsync พร้อมกับเงื่อนไขเพื่อให้มีพื้นที่ว่างเพียงพอสำหรับเนื้อหาซิงค์

แน่นอนในกรณีใด ๆ จะมีการลดประสิทธิภาพ


0

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

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

สำหรับการสำรองข้อมูลที่เพิ่มขึ้นในภายหลัง rsync เป็นตัวเลือกที่ดีและฉันเห็นด้วยกับคำตอบอื่น ๆ 100%


1
หากสื่อนั้นอยู่ในระยะขอบหรือแม้กระทั่งระยะขอบอาจddไม่ใช่ตัวเลือกที่ดีที่สุด ใช้ddrescueแทน มันจัดการกับความล้มเหลวบางส่วนได้ดีกว่ามาก แต่นั่นไม่ใช่ข้อพิจารณาในคำถามต้นฉบับ
CVn

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