วิธีที่ดีที่สุดในการทำซ้ำไฟล์บนเซิร์ฟเวอร์ผ่าน ssh คืออะไร?
ในกรณีของฉัน: ฉันกำลังพูดถึงการทำซ้ำร้านวีโอไอพี (15,000 ไฟล์ ~ 50MB)
cp -a source destination
ใช้เวลาเป็นชั่วโมง ... (ในกรณีเซิร์ฟเวอร์ของฉันคือ 2.4 Xeon, 2GB RAM)
วิธีที่ดีที่สุดในการทำซ้ำไฟล์บนเซิร์ฟเวอร์ผ่าน ssh คืออะไร?
ในกรณีของฉัน: ฉันกำลังพูดถึงการทำซ้ำร้านวีโอไอพี (15,000 ไฟล์ ~ 50MB)
cp -a source destination
ใช้เวลาเป็นชั่วโมง ... (ในกรณีเซิร์ฟเวอร์ของฉันคือ 2.4 Xeon, 2GB RAM)
คำตอบ:
หนึ่งคำ: rsync
.
โปรดทราบว่าหากคุณอยู่บนลิงค์ช้าหรือเซิร์ฟเวอร์มีภาระมากเครื่องมือที่ใช้ในการคัดลอกจะไม่เป็นคอขวดและวิธีการคัดลอกจะช้าอยู่ดี
สิ่งนี้จะให้การใช้งานพื้นฐานสำหรับการคัดลอกระหว่างเครื่องคอมพิวเตอร์ของคุณกับเซิร์ฟเวอร์ระยะไกล: http://oreilly.com/pub/h/38
ในการคัดลอกจากโลคัลคอมพิวเตอร์ไปยังเซิร์ฟเวอร์ระยะไกล (คุณต้องเปลี่ยนเส้นทางชื่อผู้ใช้และที่อยู่โฮสต์):
rsync -avz -e ssh /path/on/local/computer remoteuser@remotehost.somewhere.example.com:/path/on/server
-a
เก็บ-v
อย่างละเอียด-z
การบีบอัด-e ssh
"ใช้อุโมงค์ SSH"หากต้องการคัดลอกในทิศทางอื่นให้สลับเส้นทาง (ก่อนคือจากที่สองคือไปที่ ):
rsync -avz -e ssh remoteuser@remotehost.somewhere.example.com:/path/on/server /path/on/local/computer
แต่ rsync มีประโยชน์แม้สำหรับการคัดลอกสิ่งต่าง ๆ บนเซิร์ฟเวอร์เดียวกัน:
rsync -av /path-to/copy/from /path_to/copy/to
-z
สำหรับการคัดลอก LAN หรือการคัดลอกภายในเครื่องเดียว ทดสอบโดยมีและไม่มี-z
การทำสำเนาผ่านอินเทอร์เน็ต (อย่างใดอย่างหนึ่งอาจเร็วกว่าขึ้นอยู่กับหลาย ๆ สิ่ง)
-e ssh
ตอนนี้เป็นค่าเริ่มต้นสำหรับโฮสต์ระยะไกลดังนั้นจึงไม่จำเป็นต้องผ่านตัวเลือกอย่างชัดเจน
คำอื่น ๆ: scp
scp /path/on/local/computer remoteuser@remotehost.somewhere.example.com:/path/on/server
สำหรับข้อเสนอแบบนัดเดียว scp นั้นมีประโยชน์ หากเป็นไฟล์จำนวนมากแสดงว่า rsync เป็นความคิดที่ดี หากการเชื่อมต่อขาดหายไป rsync สามารถเลือกได้ว่าจะทิ้งที่ไหน
ฉันรู้ว่า rsync มีการบีบอัด ( -z
) และเพิ่งเรียนรู้ว่า scp ก็ทำได้เช่นกัน ( -C
)
ในการตั้งค่าของคุณ rsync อาจจะเพียงพอ ... แต่เป็นตัวอย่างถ้ามีไฟล์ขนาดเล็กจำนวนมากมันอาจจะเร็วกว่าที่จะ tar ไฟล์ก่อนการถ่ายโอนแล้วผ่าน rsync เนื่องจากการถ่ายโอนเจ้าของการประทับเวลาการอนุญาตบางครั้งหนักกว่าตัวไฟล์เองหากไฟล์มีขนาดเล็ก ทาร์จะรวมข้อมูลทั้งหมดนั้นไว้ในไฟล์เดียวและ rsync จะคัดลอกบล็อกที่ใหญ่กว่า
หรือดีกว่านี้หากไม่ต้องการความปลอดภัยให้ใช้ tar และ nc:
บนปลายทางเตรียม daemon ที่ได้รับการยกเลิกการบีบอัดและ untar:
nc -l -p 12345 | pigz -d | tar xvf -
บนต้นทางให้ทาทุกอย่างบีบอัดแบบขนานและส่งไปยังปลายทาง:
tar cvf - ./ | pigz | nc host 12345
-z
ตัวเลือกสำหรับการทำสำเนาในเครื่องเนื่องจากจะเพิ่มโอเวอร์เฮดที่ไม่จำเป็น IMHO คุณควรใช้-z
เมื่อใช้ rsync กับลิงก์เครือข่ายที่ช้าเท่านั้น หากการคัดลอกข้อมูลจำนวนมากในช่วง 100Base-T คุณอาจไม่สามารถ-z
ทำได้ ด้วยการเชื่อมต่อเครือข่ายที่รวดเร็วการใช้การบีบอัดสามารถตรึงซีพียูของคุณและหยุดกระบวนการอื่น ๆ