ถ่ายโอนไฟล์ประมาณ 300GB ในไฟล์จากเซิร์ฟเวอร์หนึ่งไปยังเซิร์ฟเวอร์อื่น


19

ฉันมีประมาณ 200,000 ไฟล์ที่ฉันถ่ายโอนไปยังเซิร์ฟเวอร์ใหม่วันนี้ ฉันไม่ได้ทำอะไรมากมายขนาดนี้มาก่อนและต้องการรับคำแนะนำว่าฉันควรทำอย่างไร ฉันกำลังย้ายพวกเขาระหว่างสอง Centos 6 distros และพวกเขาอยู่ในสถานที่ที่แตกต่างกันในประเทศ ฉันมีพื้นที่ว่าง HDD ไม่เพียงพอบนเซิร์ฟเวอร์เดิมเพื่อทิ้งไดเรกทอรีและไฟล์ทั้งหมดไว้ใน tarball ก้อนใหญ่ดังนั้นคำถามของฉันคือฉันจะถ่ายโอนไฟล์ทั้งหมดเหล่านี้ได้อย่างไร rsync? วิธีพิเศษในการใช้ rsync? อินพุต / คำแนะนำใด ๆ เกี่ยวกับวิธีการทำจะเป็นที่น่าอัศจรรย์

ขอบคุณ

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


4
คุณเคยลองแล้วrsyncหรือยัง? อาจเป็นไฟล์เล็ก ๆ หรือเปล่า? ควรเป็นเครื่องมือในอุดมคติสำหรับสิ่งนั้น
slhck

มันเกือบจะไม่ใช่เครื่องมือที่ดีที่สุดสำหรับงานนี้ แต่คุณอาจสนใจในความจริงที่ว่าคุณสามารถสตรีม tar ผ่านการเชื่อมต่อ ssh แทนที่จะบีบอัดไฟล์ก่อนที่จะย้ายไฟล์:tar cz | ssh user@example.com tar xz
Aesin

2
มันอาจเป็นหัวข้อปิด แต่ (โดยเฉพาะอย่างยิ่งสำหรับการโหลดครั้งแรกและจากนั้นใช้rsyncสำหรับการอัปเดตในภายหลัง): "อย่าประมาทแบนด์วิดท์ของสเตชั่นแวกอนที่เต็มไปด้วยเทป" (เช่น: คุณคิดว่า / usb3 ดิสก์) สำรองข้อมูลและส่งผ่าน fedex ไปยังตำแหน่งที่ตั้งระยะไกลหรือไม่มันอาจเร็วกว่าสิ่งใดมากและประหยัดแบนด์วิดท์สำหรับการใช้งานอื่น ๆ
Olivier Dulac

ฉันไม่มีขีด จำกัด BW ใด ๆ ในผู้ให้บริการรายหนึ่งและอีกรายที่ฉันจะไม่ถึงในเดือนนี้ ดังนั้นฉันไม่ได้มีปัญหาเสียมัน: P
MasterGberry

1
@OlivierDulac what-if.xkcd.com/31
Bob

คำตอบ:


24

เพียงเพื่อให้เนื้อออกไซมอนคำตอบ , rsyncเป็นเครื่องมือที่เหมาะสำหรับงานที่:

   Rsync  is  a  fast  and extraordinarily versatile file copying
   tool.  It can copy locally,  to/from  another  host  over  any
   remote  shell,  or to/from a remote rsync daemon.  It offers a
   large number of options  that  control  every  aspect  of  its
   behavior  and permit very flexible specification of the set of
   files to be copied.  It is famous for its delta-transfer algo‐
   rithm,  which reduces the amount of data sent over the network
   by sending only the differences between the source  files  and
   the  existing  files in the destination.  Rsync is widely used
   for backups and mirroring and as an improved copy command  for
   everyday use.

สมมติว่าคุณมีการเข้าถึง ssh กับเครื่องระยะไกลคุณต้องการทำสิ่งนี้:

rsync -hrtplu path/to/local/foo user@remote.server.com:/path/to/remote/bar

สิ่งนี้จะคัดลอกไดเรกทอรีpath/to/local/fooไปยัง/path/to/remote/barเซิร์ฟเวอร์ระยะไกล ไดเรกทอรีย่อยใหม่ที่ชื่อว่าbar/fooจะถูกสร้างขึ้น หากคุณต้องการคัดลอกเนื้อหาของไดเรกทอรีโดยไม่ต้องสร้างไดเรกทอรีของชื่อนั้นในเป้าหมายให้เพิ่มเครื่องหมายสแลชต่อท้าย:

rsync -hrtplu path/to/local/foo/ user@remote.server.com:/path/to/remote/bar

นี้จะคัดลอกเนื้อหาของลงในไดเรกทอรีระยะไกลfoo/bar/

ตัวเลือกที่เกี่ยวข้องบางประการ:

 -h,                         output numbers in a human-readable format 
 -r                          recurse into directories
 -t, --times                 preserve modification times
 -p, --perms                 preserve permissions
 -l, --links                 copy symlinks as symlinks
 -u, --update                skip files that are newer on the receiver
 --delete                    delete extraneous files from dest dirs
 -z, --compress              compress file data during the transfer
 -C, --cvs-exclude           auto-ignore files in the same way CVS does
 --progress                  show progress during transfer
 --stats                     give some file-transfer stats

ฉันจะทำอย่างไรrsync -hrtplu --progressถ้าฉันต้องการเห็นความคืบหน้าในขณะที่มันกำลังดำเนินอยู่?
MasterGberry

@MasterGberry yup แน่นอน ฉันมีสคริปต์สำรองที่ทำงานrsync --progress --stats -hrtl --update source destinationอยู่
terdon

ฉันดูเหมือนจะมีปัญหาในการทำให้มันทำงานได้ rsync -hrtplu --progress --rsh='ssh -p2202'ฉันกำลังใช้งานอยู่และไม่สามารถเชื่อมต่อได้ ได้รับ 255 ข้อผิดพลาด แต่ฉันก็ชอบมัน ดังนั้นฉันรู้ว่าไม่ใช่ไฟร์วอลล์ ... ฉันต้องให้รหัสผ่านทาง cmd ด้วยหรือไม่ หรือมันจะไม่ถามฉันหลังจากนั้นหรือไม่
MasterGberry

Derp, nvm ฉันลืมทราฟฟิกขาออกบนไฟร์วอลล์ของฉัน ขอบคุณ
MasterGberry

หมายเหตุสำคัญ: ด้วย rsync ระมัดระวังเป็นพิเศษเมื่อใช้ "--delete": อ่านมาก ๆ ทดสอบที่โฟลเดอร์อื่น (/ tmp / ... ) และระวังการเปลี่ยนแปลงเมื่อเพิ่มหรือไม่ต่อท้าย "/" ในตอนท้ายของ dir ต้นทางหรือ dir ปลายทาง
Olivier Dulac

14

ขึ้นอยู่กับความเร็วในการคัดลอกและแบนด์วิดท์ที่มีให้

สำหรับการเชื่อมต่อเครือข่ายที่ไม่ดีพิจารณาแบนด์วิดท์ของรถบรรทุกที่เต็มไปด้วยเทป (อ่าน: ส่ง 2.5 นิ้ว HDD หรือเพียงแค่ขับมันด้วยตัวคุณเอง 300 กิกะไบต์ไดรฟ์ควรหาง่าย)

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

[แก้ไข] ฉันลืมที่จะเพิ่มว่าคุณสามารถเรียกใช้ rsync ได้หลายครั้งหากข้อมูลของคุณถูกใช้ระหว่างการคัดลอก

ตัวอย่าง:
1) ข้อมูลที่ใช้งานอยู่ Rsync -> ข้อมูลทั้งหมดจะถูกคัดลอก อาจใช้เวลาสักครู่
2) เรียกใช้ rsync อีกครั้งเฉพาะไฟล์ที่ถูกเปลี่ยนเท่านั้นที่จะถูกคัดลอก นี่ควรจะเร็ว

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


1
ไม่มีเซิร์ฟเวอร์ควรจะมีชีวิตอยู่ที่ไหนสักแห่งที่แบนด์วิดธ์ไม่สามารถจัดการ 300G ในจำนวนที่เหมาะสมของเวลา ...
แดน

1
ขึ้นอยู่กับสิ่งที่ 'สมเหตุสมผล' บอกว่าลิงก์ที่อ่อนแอที่สุดคือ 100 mbit (ฉันไม่สนใจว่าจะเป็นขีด จำกัด การอัปโหลดจากที่ทำงานหรือดาวน์โหลดที่อื่น ๆ ) ที่ประมาณช่วยให้ 10MB / วินาที (หารด้วย 10 ดูเหมือนว่าสมเหตุสมผลฉันรู้ว่าคุณจะได้รับมากขึ้นเล็กน้อยถ้าทุกอย่างไปได้อย่างสมบูรณ์แบบเช่นไม่มีใครใช้สายสำหรับทุกสิ่งเลย) 10MB / วินาที ~~ 600MB / นาที ~~ 36000MB / ชั่วโมง ~~ 36 GB / ชั่วโมง ~~ 300GB คือ 8h20 นาที ที่ทำได้ในชั่วข้ามคืน นั่นทำให้มีสมมติฐานมากมาย เช่นหากการอัปโหลดมีเพียง 2 mbit (เรามีสำนักงานที่มีความเร็วเหล่านั้น) จะใช้เวลา 50 เท่า (415h หรือ 17.3 วัน)
Hennes

อ๊ะ! ใช่ 8-10 มีเหตุผล แต่ฉันก็ทำข้อสันนิษฐานหลายอย่าง
ด่าน

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

6

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


0

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


ต้องปรับปรุงภาษาและสไตล์ของคำตอบนี้
FSMaxB

Rsync นั้นยอดเยี่ยมหากไฟล์สามารถเปลี่ยนแปลงได้ในระหว่างการคัดลอก เพียงรันมันสองสามครั้ง ครั้งแรกที่ข้อมูลทั้งหมดถูกคัดลอก ครั้งที่สองเฉพาะสิ่งที่มีการเปลี่ยนแปลงระหว่างการทำสำเนา (ยาว) ครั้งแรก ครั้งที่สามจะทำในเวลากลางคืนหรือกับหุ้นแบบอ่านอย่างเดียว
Hennes

will took nearly about 10h. It will be better to copy data on HDD and move them between server.ยกเว้นว่ามันจะข้ามประเทศดังนั้นมันจะใช้เวลานานกว่า
Rob

@FSMaxB: ฉันจะทำสิ่งนี้ในภายหลังขอบคุณ
Pawel

@Rob: ฉันได้อ่านนี้;) ว่าเซิร์ฟเวอร์อยู่ในสถานที่ที่แตกต่างกันสองแห่ง ดังนั้นคุณต้องคำนวณว่าอะไรจะดีกว่าสำหรับคุณ การเดินทางไปทั่วประเทศ (ตรวจสอบค่าน้ำมัน ฯลฯ ) หรือใช้การเชื่อมต่อเครือข่าย จะมีประโยชน์อะไรมากกว่านี้
Pawel

0

ครั้งแรกที่ใช้ NFS และ tar / untar (NFS เป็นโปรโตคอลที่เร็วที่สุดในกรณีนี้ tar เพื่อบันทึกแบนด์วิดท์เครือข่ายโดยใช้ประโยชน์จาก CPU มากขึ้น)

tar cf - * | ( cd /target; tar xfp -)

ครั้งต่อไปที่ใช้ rsync


หาก CPU ของคุณมีพลังงานเพียงพอคุณสามารถปรับปรุงได้โดยเพิ่ม gzip ในลูป และหากไม่มี NFS คุณสามารถใช้ netcat (หรือทั้งคู่: tar -cf - * | gzip | nc -p 4567และnc -l 4567 | gunzip | tar xf -.
Hennes

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