ขอบคุณคำตอบที่ยอดเยี่ยมของ Scott Pack (ฉันไม่เคยรู้วิธีการทำสิ่งนี้กับ ssh มาก่อน) ฉันสามารถเสนอการปรับปรุงนี้ได้ (ถ้าbash
เป็นเชลล์ของคุณ) สิ่งนี้จะเพิ่มการบีบอัดแบบขนานตัวบ่งชี้ความคืบหน้าและตรวจสอบความสมบูรณ์ของลิงก์เครือข่าย:
tar c file_list |
tee >(sha512sum >&2) |
pv -prab |
pigz -9 |
ssh [user@]remote_host '
gunzip |
tee >(sha512sum >&2) |
tar xC /directory/to/extract/to
'
pv
เป็นโปรแกรมดูความคืบหน้าที่ดีสำหรับไพพ์ของคุณและpigz
เป็นโปรแกรม gzip แบบขนานที่ใช้เธรดจำนวนมากเท่าที่ซีพียูของคุณมีตามค่าเริ่มต้น (ฉันเชื่อว่ามากถึง 8 สูงสุด) คุณสามารถปรับระดับการบีบอัดให้เหมาะสมกับอัตราส่วนของ CPU กับแบนด์วิดท์เครือข่ายที่ดีขึ้นและสลับมันออกมาด้วยpxz -9e
และpxz -d
ถ้าคุณมี CPU มากกว่าแบนด์วิธมาก คุณต้องยืนยันว่าผลรวมทั้งสองนั้นตรงกันเมื่อเสร็จสิ้น
ตัวเลือกนี้มีประโยชน์สำหรับข้อมูลจำนวนมากรวมทั้งเครือข่ายเวลาแฝงที่สูง แต่ไม่ได้มีประโยชน์มากหากลิงก์ไม่เสถียรและลดลง ในกรณีเหล่านั้น rsync อาจเป็นตัวเลือกที่ดีที่สุดในขณะที่สามารถทำงานต่อได้
ตัวอย่างผลลัพธ์:
6c1fe5a75cc0280709a794bdfd23d7b8b655f0bbb4c320e59729c5cd952b4b1f84861b52d1eddb601259e78249d3e6618f8a1edbd20b281d6cd15f80c8593c3e - ]
176MiB [9.36MiB/s] [9.36MiB/s] [ <=> ]
6c1fe5a75cc0280709a794bdfd23d7b8b655f0bbb4c320e59729c5cd952b4b1f84861b52d1eddb601259e78249d3e6618f8a1edbd20b281d6cd15f80c8593c3e -
สำหรับอุปกรณ์บล็อก:
dd if=/dev/src_device bs=1024k |
tee >(sha512sum >&2) |
pv -prab |
pigz -9 |
ssh [user@]remote_host '
gunzip |
tee >(sha512sum >&2) |
dd of=/dev/src_device bs=1024k
'
ตรวจสอบให้แน่ใจว่ามีขนาดหรือขีด จำกัด เดียวกันกับ count =, skip =, find =, ฯลฯ
เมื่อฉันคัดลอกระบบไฟล์ด้วยวิธีนี้ฉันมักdd if=/dev/zero of=/thefs/zero.dat bs=64k && sync && rm /thefs/zero.dat && umount /thefs
จะทำให้พื้นที่ที่ไม่ได้ใช้ส่วนใหญ่เป็นศูนย์ก่อนซึ่งจะเพิ่มความเร็วให้กับ xfer ขึ้น