ก่อนอื่นตรวจสอบให้แน่ใจว่าไม่ได้ติดตั้งโลจิคัลวอลุ่มไว้ ถ้าเป็นและคุณต้องการสร้าง "สำเนาร้อน" ให้สร้างสแนปชอตก่อนและใช้สิ่งนี้แทน:
lvcreate --snapshot --name transfer_snap --size 1G
ฉันต้องถ่ายโอนข้อมูลจำนวนมาก (7TB) ระหว่างสองเซิร์ฟเวอร์ที่เชื่อมต่อกับ 1Gbit ดังนั้นฉันจึงต้องการวิธีที่รวดเร็วที่สุดเท่าที่จะทำได้
คุณควรใช้ SSH
การใช้ ssh นั้นไม่ได้เกิดจากการเข้ารหัสของมัน (ถ้าคุณมีซีพียูที่รองรับ AES-NI มันก็ไม่ได้ทำร้ายอะไรมากมาย) แต่เป็นเพราะบัฟเฟอร์ของเครือข่าย สิ่งเหล่านี้ไม่ได้ปรับขนาดได้ดี มีเวอร์ชั่น Sshที่ได้รับการแก้ไขซึ่งแก้ไขปัญหานี้ แต่เนื่องจากไม่มีแพ็คเกจที่คอมไพล์แล้วจึงไม่สะดวก
ใช้การบีบอัด
เมื่อทำการถ่ายโอนอิมเมจดิสก์แบบดิบขอแนะนำให้ใช้การบีบอัดเสมอ แต่คุณไม่ต้องการให้การบีบอัดกลายเป็นคอขวด เครื่องมือบีบอัดยูนิกซ์ส่วนใหญ่เช่น gzip เป็นเธรดเดี่ยวดังนั้นหากการบีบอัดอิ่มตัวหนึ่ง CPU มันจะเป็นคอขวด ด้วยเหตุนี้ฉันจึงใช้ pigz ซึ่งเป็นตัวแปร gzip ที่ใช้แกนประมวลผล CPU ทั้งหมดสำหรับการบีบอัดเสมอ และนี่เป็นสิ่งที่จำเป็นสำหรับคุณที่ต้องการความเร็วสูงสุดและสูงกว่า GBit
ใช้การเข้ารหัส
ดังที่ได้กล่าวไว้ก่อนหน้านี้ ssh ช้า หากคุณมี CPU AES-NI สิ่งนี้ไม่ควรเป็นปัญหาคอขวด ดังนั้นแทนที่จะใช้ ssh เราสามารถใช้ openssl โดยตรง
ความเร็ว
เพื่อให้คุณทราบถึงผลกระทบของความเร็วของส่วนประกอบนี่คือผลลัพธ์ของฉัน สิ่งเหล่านี้คือความเร็วในการถ่ายโอนระหว่างสองระบบการผลิตที่อ่านและเขียนไปยังหน่วยความจำ ผลลัพธ์ที่แท้จริงของคุณขึ้นอยู่กับความเร็วของเครือข่ายความเร็วของ HDD และความเร็วของ CPU ที่มา! ฉันกำลังทำสิ่งนี้เพื่อแสดงให้เห็นว่าอย่างน้อยก็ไม่มีการลดลงของประสิทธิภาพอย่างมาก
Simple nc dd:
5033164800 bytes (5.0 GB, 4.7 GiB) copied, 47.3576 s, 106 MB/s
+pigz compression level 1 (speed gain depends on actual data):
network traffic: 2.52GiB
5033164800 bytes (5.0 GB, 4.7 GiB) copied, 38.8045 s, 130 MB/s
+pigz compression level 5:
network traffic: 2.43GiB
5033164800 bytes (5.0 GB, 4.7 GiB) copied, 44.4623 s, 113 MB/s
+compression level 1 + openssl encryption:
network traffic: 2.52GiB
5033164800 bytes (5.0 GB, 4.7 GiB) copied, 43.1163 s, 117 MB/s
สรุป: การใช้การบีบอัดจะช่วยเพิ่มความเร็วอย่างเห็นได้ชัดเนื่องจากช่วยลดขนาดข้อมูลลงได้มาก สิ่งนี้สำคัญกว่าหากคุณมีความเร็วเครือข่ายที่ช้าลง เมื่อใช้การบีบอัดดูการใช้งาน cpu ของคุณ หากการใช้งานได้รับการ maxed out คุณสามารถลองโดยไม่ใช้มัน การใช้การบีบอัดเป็นเพียงผลกระทบเล็กน้อยต่อระบบ AES-NI เพียงเท่านั้นเพราะจะขโมยซีพียู 30-40% จากการบีบอัด
การใช้งาน Screen
หากคุณกำลังถ่ายโอนข้อมูลจำนวนมากเช่นฉันคุณไม่ต้องการให้มันถูกขัดจังหวะโดยการตัดการเชื่อมต่อเครือข่ายของลูกค้า ssh ของคุณดังนั้นคุณควรเริ่มต้นด้วยหน้าจอทั้งสองด้าน นี่เป็นเพียงบันทึกย่อฉันจะไม่เขียนบทช่วยสอนหน้าจอที่นี่
ให้คัดลอก
ติดตั้งการอ้างอิงบางอย่าง (บนแหล่งที่มาและปลายทาง):
apt install pigz pv netcat-openbsd
จากนั้นสร้างไดรฟ์ข้อมูลบนปลายทางที่มีขนาดเดียวกันกับแหล่งที่มา หากไม่แน่ใจให้ใช้ lvdisplay บนแหล่งข้อมูลเพื่อรับขนาดและสร้างเป้าหมายเช่น:
lvcreate -n lvname vgname -L 50G
ถัดไปเตรียมปลายทางสำหรับรับข้อมูล:
nc -l -p 444 | openssl aes-256-cbc -d -salt -pass pass:asdkjn2hb | pigz -d | dd bs=16M of=/dev/vgname/lvname
และเมื่อพร้อมให้เริ่มการถ่ายโอนบนแหล่งที่มา:
pv -r -t -b -p -e /dev/vgname/lvname | pigz -1 | openssl aes-256-cbc -salt -pass pass:asdkjn2hb | nc <destip/host> 444 -q 1
หมายเหตุ: หากคุณถ่ายโอนข้อมูลในเครื่องหรือไม่สนใจเรื่องการเข้ารหัสเพียงแค่เอาส่วน Openssl ออกจากทั้งสองด้าน หากคุณสนใจ asdkjn2hb เป็นคีย์เข้ารหัสคุณควรเปลี่ยนรหัส