คัดลอกไฟล์ linux ต่อ


9

ฉันจะคัดลอกไฟล์ขนาดใหญ่ต่อไปใน linux ได้อย่างไร? ฉันมีไฟล์ขนาดใหญ่ (กิกะไบต์เซิร์ฟเวอร์) คัดลอกบางส่วนไปยังไดรฟ์เครือข่ายและใช้เวลานานและส่วนใหญ่จะทำก่อนที่การดำเนินการคัดลอกจะหยุดลงเนื่องจากปัญหาเครือข่ายที่ได้รับการแก้ไขแล้ว ฉันจะคัดลอกไฟล์ต่อได้อย่างไร ฉันไม่ต้องการสคริปต์ที่ไม่มีประสิทธิภาพและ ecp ไม่ทำงาน (ดูเหมือนจะไม่ทำงานกับไฟล์ขนาดใหญ่)

คำตอบ:


4

rsync -a /from/file /dest/fileผมจะพยายาม


1
และในขณะที่เรากำลังพูดถึง rsync โปรดทราบว่าคุณสามารถคัดลอกโดยตรงไปยังเครื่องระยะไกล [สนับสนุน SSH] โดยใช้ rsync -az -e ssh / จาก / file user@dest.ation: / เต็ม / ปลายทาง / เส้นทาง
Mikeage

2
ว้าว. การเรียกใช้ rsync แบบนั้นโดยไม่มีตัวเลือกใด ๆ จะลบ / ปลายทาง / ไฟล์และส่งซ้ำทุกสิ่ง สิ่งนี้ได้รับการโหวตอย่างไร
Justin

1
การรักษาคุณสมบัติของไฟล์ (-a) ช่วยได้อย่างไร? ควรจะเป็น - ผนวก?
Malvineous

3

หากคุณรู้ว่าคุณต้องต่อท้ายไฟล์ในเครื่องและไม่ต้องการใช้ rsync (ซึ่งอาจใช้เวลานานในการคำนวณ checksums) คุณสามารถใช้ curl ตัวอย่างเช่นหากคุณมีไฟล์ขนาดใหญ่บนแท่ง USB แบบถอดได้ช้าที่ติดตั้งที่/media/CORSAIR/somefile.datและเพียงครึ่งเดียวของมันอยู่ในไดเรกทอรีปัจจุบันเพื่อดำเนินการต่อ:

curl -C - -O "file:///media/CORSAIR/somefile.dat"


ขอบคุณสำหรับเคล็ดลับฉันต้องใช้เคล็ดลับนี้เพราะฉันกำลังคัดลอกจากเซิร์ฟเวอร์ Windows SMB (ดังนั้นจึงไม่มี rsync) เมื่อการเชื่อมต่อช้าหายไปและฉันไม่ต้องการดาวน์โหลด 500MB ตั้งแต่ต้น
MiKy

2

ใช่ rsync เป็นวิธีที่จะไป สำหรับฉันเราได้ถ่ายโอนข้อมูล 100 + GB ผ่าน rsync + ssh หากคุณกำลังมองหาสำเนาสำรองที่แท้จริงตรวจสอบให้แน่ใจว่าคุณใช้-aตัวเลือก (เก็บถาวร) เพื่อรักษาแอตทริบิวต์ของไฟล์ (เวลาเจ้าของ perms ฯลฯ )

host1> rsync -aP file user@host2:/path/to/new/dir/

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

การใช้ PS v(verbose) อาจทำให้การถ่ายโอนไฟล์จำนวนมากช้าลง


2

คำสั่งที่คุณต้องการจะเป็นเช่นนั้น

rsync -v --append /path/to/afile /mnt/server/dest/afile

เว้นแต่ว่าคุณสามารถเข้าถึงเซิร์ฟเวอร์ผ่าน ssh และเรียกใช้ rsync ด้วยวิธีนี้ในกรณีนั้นคำสั่ง FlyingFish ที่ให้ไว้จะดีที่สุด


0

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

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

หากเครื่องต้นทางของคุณมีเว็บหรือเซิร์ฟเวอร์ ftp คุณสามารถใช้ wget จากเซิร์ฟเวอร์ปลายทางด้วยตัวเลือก "- ยุติ" (หรือม้วนด้วยตัวเลือก "- ยุติที่ - [- | ขนาด]")

หากเครื่องปลายทางของคุณมีเซิร์ฟเวอร์ FTP คุณสามารถใช้ curl บนเครื่องต้นทางด้วยตัวเลือก - ผนวก

เป็นทางเลือกสุดท้ายคุณสามารถใช้ dd กับอาร์กิวเมนต์ "bs =" (ขนาดบล็อก), "skip =" และ "find =" ตัวอย่างเช่น:

สมมติว่าคุณจะสามารถใช้บล็อก 2048 ไบต์ หากไฟล์ปลายทางของคุณในปัจจุบันคือ 2'048'000'000 ไบต์ (2 GB) นั่นคือ 1'000'000 บล็อกของ 2048 ไบต์ หากต้องการผนวกไฟล์ต้นฉบับที่เหลือไปยังปลายทางคุณสามารถทำได้

dd if = source_file ของ = destination_file bs = 2048 ข้าม = 1000000 ค้นหา = 1000000

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


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