เมื่อคุณส่งไฟล์ชุดเดียวกันrsync
จะเหมาะกว่าเพราะมันจะส่งความแตกต่างเท่านั้น tar
มักจะส่งทุกอย่างและนี่เป็นการสิ้นเปลืองทรัพยากรเมื่อมีข้อมูลจำนวนมากอยู่แล้ว การtar + rsync + untar
สูญเสียความได้เปรียบนี้ในกรณีนี้รวมถึงข้อดีของการทำให้โฟลเดอร์rsync --delete
ต่างๆ
หากคุณคัดลอกไฟล์เป็นครั้งแรกให้ทำการแพ็คครั้งแรกจากนั้นทำการส่งแล้วการเปิดกล่อง (AFAIK rsync
ไม่รับอินพุตแบบไพพ์) ยุ่งยากและแย่กว่าการส่งสัญญาณเพราะrsync
จะไม่ต้องทำงานอะไรมากtar
ไปกว่านี้
เคล็ดลับ: rsync เวอร์ชัน 3 หรือใหม่กว่าทำการเรียกซ้ำแบบเพิ่มขึ้นซึ่งหมายความว่าจะเริ่มการคัดลอกเกือบจะทันทีก่อนที่จะนับจำนวนไฟล์ทั้งหมด
Tip2: หากคุณใช้rsync
เกินssh
คุณอาจใช้tar+ssh
tar -C /src/dir -jcf - ./ | ssh user@server 'tar -C /dest/dir -jxf -'
หรือเพียงแค่ scp
scp -Cr srcdir user@server:destdir
กฎทั่วไปทำให้มันง่าย
UPDATE:
ฉันสร้างข้อมูลตัวอย่าง 59M
mkdir tmp; cd tmp
for i in {1..5000}; do dd if=/dev/urandom of=file$i count=1 bs=10k; done
และทดสอบหลายครั้งการถ่ายโอนไฟล์ไปยังเซิร์ฟเวอร์ระยะไกล (ไม่ใช่ใน LAN เดียวกัน) โดยใช้ทั้งสองวิธี
time rsync -r tmp server:tmp2
real 0m11.520s
user 0m0.940s
sys 0m0.472s
time (tar cf demo.tar tmp; rsync demo.tar server: ; ssh server 'tar xf demo.tar; rm demo.tar'; rm demo.tar)
real 0m15.026s
user 0m0.944s
sys 0m0.700s
ในขณะที่เก็บบันทึกแยกต่างหากจากแพ็กเก็ตข้อมูล ssh ที่ส่ง
wc -l rsync.log rsync+tar.log
36730 rsync.log
37962 rsync+tar.log
74692 total
ในกรณีนี้ฉันไม่เห็นข้อได้เปรียบใด ๆ ในการรับส่งข้อมูลเครือข่ายที่น้อยลงโดยใช้ rsync + tar ซึ่งคาดว่าเมื่อเริ่มต้น mtu คือ 1500 และในขณะที่ไฟล์มีขนาด 10k rsync + tar สร้างปริมาณการใช้งานมากขึ้นช้าลง 2-3 วินาทีและทิ้งไฟล์ขยะสองไฟล์ที่ต้องล้างข้อมูล
ฉันทำการทดสอบแบบเดียวกันกับสองเครื่องบน LAN เดียวกันและที่นั่น rsync + tar ทำได้ดีกว่ามากและลดปริมาณการใช้เครือข่าย ฉันถือว่าสาเหตุของเฟรมจัมโบ้
บางที rsync + tar น่าจะดีกว่าเพียงแค่ rsync กับชุดข้อมูลที่ใหญ่กว่ามาก แต่ตรงไปตรงมาฉันไม่คิดว่ามันคุ้มค่ากับปัญหาคุณต้องมีช่องว่างสองด้านในแต่ละด้านสำหรับการบรรจุและแกะกล่องและมีตัวเลือกอื่นสองสามอย่างที่ฉันได้กล่าวไปแล้วข้างต้น