Rsync -avzHP ติดตาม hardlinks แทนการคัดลอกเป็น hardlinks


13

ฉันใช้ rsnapshot เพื่อสร้างการสำรองข้อมูลรายชั่วโมง / รายวัน / รายสัปดาห์ / รายเดือนของ "งาน" ของฉัน ตอนนี้ฉันกำลังพยายามคัดลอกไดเรกทอรีสำรองทั้งหมดไปยังไดรฟ์ภายนอกโดยใช้ rsync

ฉันใช้คำสั่ง / พารามิเตอร์นี้ภายในเซสชันหน้าจอ (ใช่ rsync-excluse.txt อยู่ใน dir ที่ฉันเรียกใช้คำสั่งจาก)

rsync -avzHP --exclude-from 'rsync-exclude.txt' /share/backup/ /share/eSATADisk1/backup/;

สิ่งทั้งหมดกำลังทำงานบน QNAP TS-439, ไดรฟ์ภายในเป็นดิสก์เดี่ยว (ไม่มี RAID) ที่จัดรูปแบบ EXT4, ไดรฟ์ภายนอกถูกจัดรูปแบบ EXT3

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

สิ่งที่ฉันต้องการบรรลุคือการคัดลอกโครงสร้างไฟล์ทั้งหมดที่สร้างโดย rsnapshot ไปยังไดรฟ์ภายนอกทำให้ฮาร์ดลิงก์นั้นประหยัดพื้นที่ หมายเหตุ: สิ่งนี้ไม่จำเป็นต้องทำโดยใช้ rsync

ขอบคุณสำหรับความคิดและเวลาของคุณ ฉันขอขอบคุณที่คุณช่วยครั้งใหญ่

อัปเดต:ฉันได้เรียนรู้ว่า rsnapshot ไม่ได้ใช้ symlinks เป็นการใช้ hardlinks ดังนั้นตอนนี้ฉันใช้ตัวเลือก -H ซึ่งควรรักษาโครงสร้าง hardlink ตามRsnapshot ไปยังหลาย ๆ ปลายทาง (หรือบำรุงรักษาโครงสร้างของลิงก์ที่ยาก)แต่ก็ยังใช้งานไม่ได้ ... ฉันกำลังพลาดอะไรอยู่ที่นี่?

อัปเดต 2:ฉันพบความเห็น / คำสั่งอื่นในหัวข้อนี้ที่นี่: rsync กับ --hard-links ค้าง Steven Steven แนะนำว่าไม่พยายาม rsync โครงสร้างไฟล์ขนาดใหญ่ที่มีฮาร์ดลิงก์เนื่องจากมันดูดซับหน่วยความจำจำนวนมากและเป็นงานที่ยากสำหรับ rsync ดังนั้นอาจเป็นทางออกที่ดีกว่าคือการสร้าง. img ของโครงสร้างข้อมูลที่ฉันพยายามสำรอง คุณคิดอย่างไร?


ฉันทำเช่นเดียวกันกับคุณ! +1 จะลองใช้วิธี dd
mmalmeida

คำตอบ:


10

rsyncคำสั่ง-H(หรือ--hard-links) ตัวเลือกที่จะในทางทฤษฎีจะทำสิ่งที่คุณกำลังพยายามที่จะบรรลุซึ่งเป็นในช่วงสั้น ๆ ที่จะสร้างสำเนาของระบบไฟล์ของคุณที่รักษาโครงสร้างการเชื่อมโยงอย่างหนักของเดิม ดังที่ฉันได้กล่าวไว้ในคำตอบของคำถามที่คล้ายกันตัวเลือกนี้จะล้มเหลวเมื่อระบบไฟล์ต้นทางของคุณเติบโตเกินขีด จำกัด ที่ซับซ้อนของฮาร์ดลิงก์

ตำแหน่งที่แม่นยำของเกณฑ์นั้นอาจขึ้นอยู่กับ RAM ของคุณและจำนวนฮาร์ดลิงก์ทั้งหมด (และอาจเป็นจำนวนอื่น ๆ ) แต่ฉันพบว่าไม่มีจุดใดที่จะพยายามกำหนดอย่างแม่นยำ สิ่งที่มันเป็นเรื่องที่เป็นเกณฑ์ทุกเกินไปง่ายต่อการข้ามในสถานการณ์จริงของโลกและคุณจะไม่ทราบว่าคุณได้ข้ามมันจนกว่าจะถึงวันนั้นมาถึงที่คุณพยายามที่จะเรียกใช้rsync -aHหรือcp -aที่ต่อสู้และล้มเหลวในที่สุด .

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

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

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


สมมติว่าฉันไม่เคยใช้ฮาร์ดลิงก์นอกไดเรกทอรีการสำรองข้อมูล rsnapshot ฉันจะยังประสบปัญหาหรือไม่ ฉันมีพื้นที่ฮาร์ดดิสก์เหลือน้อย แต่ต้องการสำรองข้อมูล rsnapshot ขณะนี้ดิสก์ของฉันเต็ม
Sridhar Sarnobat

ฉันคิดว่าฉันประสบสถานการณ์ที่คุณชี้ให้เห็น ฉันมีไดเรกทอรีสำรองที่มีสแนปชอตมากมายที่สร้างด้วย rsync มันมีไฟล์จำนวนมากที่มีลิงก์จำนวนมาก การใช้ดิสก์ทั้งหมดประมาณ 200G ฉันกำลังคัดลอกไปยังพาร์ติชันอื่นโดยใช้ 'rsync -avH' แต่หลังจาก 4 วัน (หรือ 5 วัน) กระบวนการคัดลอกยังคงทำงานอยู่ ฉันเดา rsync สับสนอย่างละเอียดโดยจำนวนลิงก์ทั้งหมดในไดเรกทอรีต้นทาง
Guangliang

ใน Ubuntu 18.04 เป็น--hard-links(พร้อมของ)
สูงศักดิ์

1

-l สำหรับ symlinks ทำไมมันจะทำอะไรเพื่อ hardlinks?

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

อีกข้อสังเกตหนึ่งที่ควรมีความคิดเห็น: นี่เป็นฮาร์ดแวร์ภายในเครื่องหรือคุณติดตั้งบนเครือข่าย VM หรือไม่?

แก้ไข

ไม่สนใจความคิดเห็นก่อนหน้าของฉันเกี่ยวกับสาเหตุที่คุณใช้ฮาร์ดลิงก์ฉันพลาดrsnapshotความคิดเห็นไป

มันจะมีประโยชน์ที่จะมีการทดสอบที่ทดสอบ rsync แรกระหว่างไดเร็กตอรี่ภายในไดเรคทอรีดิสก์จากนั้นเทียบกับรีโมตดิสก์ของคุณ การทดสอบเล็กน้อยนี้แสดง-Hตัวเลือก wokrs ตามที่คาดไว้ -iตัวเลือกสำหรับการlsแสดง inodes จึงแสดงให้เห็นว่าการเชื่อมโยงได้รับการรักษาโดยไม่มีสำเนาพิเศษ

$ rsync -avzHP src/ dest
sending incremental file list
created directory dest
./
file111_prime.txt
           9 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/3)
file111.txt => file111_prime.txt

sent 156 bytes  received 59 bytes  430.00 bytes/sec
total size is 18  speedup is 0.08

$ ls -liR
.:
total 8
414044 drwxrwxr-x. 2 nhed nhed 4096 Feb 25 09:58 dest
414031 drwxrwxr-x. 2 nhed nhed 4096 Feb 25 09:58 src

./dest:
total 8
414046 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111_prime.txt
414046 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111.txt

./src:
total 8
414032 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111_prime.txt
414032 -rw-rw-r--. 2 nhed nhed 9 Feb 25 09:57 file111.txt

การทดสอบที่ตามมาของrsync -avzHP src/ host:/tmpรีโมตโฮสต์นั้นยังคงรักษาลิงก์ไว้


คุณถูกต้องทั้งหมดหลังจากการวิจัยเพิ่มเติมฉันค้นพบว่า rsnapshot ไม่ได้ใช้ symlinks แต่เป็น hardlinks ฉันปรับปรุงคำถามของฉันตาม ดังนั้นวิธีการแก้ปัญหาควรใช้ -H และคัดลอกไดเรกทอรีทั้งหมด (ตามที่ฉันทำ) เพื่อรักษาโครงสร้าง hardlink ที่สร้างขึ้นโดย rsnapshot แต่ก็ยังไม่ทำงาน เมื่อฉันเริ่มคัดลอกทุกอย่างจาก Daily.0 กำลังได้รับการคัดลอกไม่ใช่แค่ไฟล์ที่เปลี่ยนแปลง // และใช่ฉันใช้ Qnap TS-439 และ Lacie Drive ภายนอกสำหรับการดำเนินการนี้
woerndl

คุณสามารถลดปัญหานี้ลงได้หรือไม่โดยการมีแหล่งกำเนิดการทดสอบและแหล่งปลายทางทดสอบที่มีเพียง 2 ไฟล์ในแหล่งที่มาเชื่อมโยงกันด้วยหรือไม่ นอกจากนี้คุณทราบได้อย่างไรว่าลิงก์ไม่ได้รับการจัดการอย่างถูกต้องและสุดท้ายทำไมใช้ฮาร์ดลิงก์หากคุณอ่านข้อความยาว ๆ-Hใน manpage คุณจะเห็นว่ามีข้อแม้หลายประการที่ฉันอยากพูดลอง ที่จะเข้าพักห่างจาก hardlinks ...
nhed

ฉันจะตั้งค่ากรณีทดสอบและแจ้งให้คุณทราบ ขอบคุณมากสำหรับความคิดของคุณ
woerndl

1

นี่เป็นช็อตยาว แต่ถ้าคุณไม่สามารถหาวิธีแก้ไขอื่นได้ฉันขอแนะนำให้ลองฟอร์แมตไดรฟ์ USB เป็น EXT4 อาจเป็นปัญหา: https://bugzilla.samba.org/show_bug.cgi?id=7670

ให้ฮาร์ดลิงก์ในโฟลเดอร์ต้นทางและไดรฟ์ข้อมูลปลายทางมีขนาดเล็กเพียงพอการคัดลอกด้วย rsync - ฮาร์ดลิงก์อาจล้มเหลว Rsync ล้มเหลวโดยการหมดจำนวนสูงสุดของฮาร์ดลิงก์ในปลายทาง <... > ปัญหาที่แท้จริงไม่ใช่ rsync แต่เป็นระบบไฟล์พื้นฐานแทน


ขอบคุณสำหรับการเข้าร่วมกับปัญหาของฉัน! ดูเหมือนว่าจะเกี่ยวข้องกับแซมบ้า ไดรฟ์ของฉันเชื่อมต่อกับ NAS โดยตรง
woerndl

1
สวัสดีไม่มีปัญหานี้ไม่เกี่ยวข้องกับแซมบ้า เป็นบ้านของเว็บไซต์ rsync: rsync.samba.org
Motsel

0

คุณลองเพิ่ม-lตัวเลือกหรือไม่

ฉันรู้ว่าหน้าคนบอกว่ามันรวมอยู่ใน-aแต่หน้าคนไม่ถูกต้อง 100% เสมอ


ขอบคุณสำหรับความคิดเห็นของคุณ ฉันต้องอัปเดตคำถามของฉัน: Rsnapshot ไม่ได้ใช้ symlinks แต่ฮาร์ดลิงก์เพื่อสร้างโครงสร้างการสำรองข้อมูลที่เพิ่มขึ้น ดังนั้น -l จะไม่ช่วย แต่ -H ควรซึ่งน่าเสียดายที่ยังใช้งานไม่ได้
woerndl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.