Score:4

ฉันสามารถคัดลอกไฟล์ไปยังสองไดรฟ์พร้อมกันจากการอ่านครั้งเดียวได้หรือไม่ (คัดลอกหนึ่งต่อสองในการดำเนินการครั้งเดียว โดยเฉพาะอย่างยิ่งใน rsync)

ธง cn

ฉันจำเป็นต้องสำรองดิสก์ต้นทางไปยังดิสก์เป้าหมายหลายตัวอยู่บ่อยครั้ง ในขณะนี้เวิร์กโฟลว์คือ รีซิงค์ จาก แหล่งที่มา ถึง เป้าหมาย1 แล้ว วว โคลน เป้าหมาย1 ถึง เป้าหมาย2.
มันคงจะดีมากถ้าฉันทำได้ รีซิงค์ จาก แหล่งที่มา ถึง เป้าหมาย1+เป้าหมาย2 ตามลำดับในการอ่านเดียวกันเพื่อเร่งความเร็วอย่างมาก อ่านไฟล์ลงในหน่วยความจำหนึ่งครั้งและเขียนไปยังฮาร์ดไดรฟ์สองตัวที่แยกจากกันในการซิงโครไนซ์ขนาดใหญ่
อาจมีวิธีที่จะมี รีซิงค์ อ่านไฟล์ลงในหน่วยความจำและไพพ์เอาต์พุตไปยังการดำเนินการเขียนสองครั้งพร้อมกันหรือไม่ ไม่ มี เป็น รีซิงค์ แต่นั่นจะเป็นที่ต้องการอย่างมาก

sudodus avatar
jp flag
ฉันคิดว่าสิ่งที่คุณต้องการเกิดขึ้นแล้วใน Ubuntu เวอร์ชันปัจจุบัน หากมี RAM ว่างเพียงพอสำหรับไฟล์ทั้งหมดหรือไฟล์ทั้งชุดที่ rsync หรือเครื่องมืออื่นๆ จะทำการคัดลอก (แต่ไฟล์ขนาดใหญ่หรือชุดไฟล์อาจไม่พอดีกับ RAM) ฉันสังเกตเห็นว่าเมื่อฉันสร้างไดรฟ์สำหรับบูต USB จากไฟล์ iso กระบวนการอ่านครั้งที่สองนั้นแทบจะใช้เวลาไม่นาน (แต่แน่นอนว่ากระบวนการเขียนจะยังคงถูกจำกัดโดยความเร็วในการเขียนของอุปกรณ์เป้าหมายแต่ละเครื่อง)
Score:6

รวบรวมข้อมูลจากหลาย ๆ แหล่งเข้าด้วยกัน มีไม่กี่ตัวเลือก

สรุปคือมีแต่ สั่งการ ขนาน คุณอาจได้รับสิ่งที่คุณต้องการดูด้านล่าง

หมายเหตุสำคัญ:

  1. ฉันได้ทำการทดสอบกับ ซีพี สำหรับการคัดลอกคุณควรพิจารณาความเร็วที่เพิ่มขึ้น (หรือลดลง!) ที่ได้รับด้วย รีซิงค์ เทียบกับ ซีพี หรือคำสั่งทางเลือกอื่นๆ ร่วมด้วย ขนาน.
  2. ฉันได้ทดสอบการคัดลอกไฟล์เดียวเท่านั้น ผลลัพธ์อาจเปลี่ยนแปลงหากคัดลอกไฟล์จำนวนมาก (เช่น รวมไฟล์ขนาดใหญ่บางไฟล์เข้ากับไฟล์ขนาดเล็กและไดเร็กทอรีย่อยอื่นๆ ตามที่คุณต้องการ)

เวลา <ตัวเลือก #N คัดลอกไปยังเป้าหมายเดียว>
เวลา <ตัวเลือก #N คัดลอกไปยังสองเป้าหมาย>

เพื่อรับการเปรียบเทียบด้วยไฟล์ขนาด 1.2Gb นอกจากนี้ ในบางกรณี ฉันทดสอบคำสั่งเดียวกันสองหรือสามครั้ง เพื่อประเมินการกระจายในผลลัพธ์ ฉันไม่ได้คำนวณค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐาน แต่ผลลัพธ์นั้นชัดเจน

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

เดอะ กรณีฐาน:

$ เวลา cp -p source/file1 target1/

จริง 0m0,846s 0m0,680s 0m0,659s
ผู้ใช้ 0m0,000s 0m0,001s 0m0,016s
ซิส 0m0,777s 0m0,662s 0m0,643s

เดอะ ตัวเลือกการคัดลอก:

  1. ตัวเลือก ขนาน

    $ ขนาน cp -p source/file1 ::: target1/
    จริง 0m0,745s 0m0,740s
    ผู้ใช้ 0m0,121s 0m0,108s
    ระบบ 0m0,609s 0m0,619s
    
    $ ขนาน cp -p source/file1 ::: target1/ target2/
    จริง 0m0,794s 0m0,860s
    ผู้ใช้ 0m0,116s 0m0,134s
    ระบบ 0m1,300s 0m1,380s
    
  2. ตัวเลือก ที (ผนวก > /dev/null เพื่อหลีกเลี่ยงการส่งออกไปที่ แย่)

    $ tee target1/file1 < source/file1 > /dev/null
    จริง 0m0,874s 0m1,040s 0m1,028s
    ผู้ใช้ 0m0,160s 0m0,172s 0m0,137s
    ซิส 0m0,714s 0m0,868s 0m0,887s
    
    $ ที target1/file1 target2/file1 < source/file1 > /dev/null
    จริง 0m1,802s 0m1,680s 0m1,833s
    ผู้ใช้ 0m0,136s 0m0,212s 0m0,197s
    ระบบ 0m1,642s 0m1,468s 0m1,619s
    

    คัดลอกไปยังสอง เป้าs ประมาณสองเท่าของเวลาหนึ่ง เป้าซึ่งใหญ่กว่าเวลาเล็กน้อยสำหรับ กรณีฐาน.

  3. ตัวเลือก xargs

    $ echo target1 | xargs -n 1 cp -p ซอร์ส/ไฟล์1
    0m0,666s จริง
    ผู้ใช้ 0m0,021s
    sys 0m0,646s
    
    $ echo target1 target2 | xargs -n 1 cp -p ซอร์ส/ไฟล์1
    0m1,197sจริง
    ผู้ใช้ 0m0,018s
    ระบบ 0m1,173s
    

    คัดลอกไปยังสอง เป้าs ประมาณสองเท่าของเวลาหนึ่ง เป้าซึ่งคล้ายกับเวลาของการ กรณีฐาน.

  4. ตัวเลือก หา

    $ ค้นหา target1 -exec cp -p source/file1 {} \;
    0m2,167s จริง
    ผู้ใช้ 0m0,017s
    ระบบ 0m1,627s
    
    $ ค้นหา target1 target2 -exec cp -p source/file1 {} \;
    จริง 0m3,905s
    ผู้ใช้ 0m0,020s
    ระบบ 0m3,185s
    

    คัดลอกไปยังสอง เป้าs ประมาณสองเท่าของเวลาหนึ่ง เป้าซึ่งมีขนาดใหญ่กว่าเวลาสำหรับ กรณีฐาน...ผู้แพ้ชัดๆ.

แหล่งที่มาของ "การคัดลอกหลายรายการ":

  1. https://www.cyberciti.biz/faq/linux-unix-copy-a-file-to-multiple-directories-using-cp-command/
  2. วิธีคัดลอกไฟล์ไปยังหลาย ๆ โฟลเดอร์โดยใช้บรรทัดคำสั่ง
  3. https://stackoverflow.com/questions/195655/how-to-copy-a-file-to-multiple-directories-using-the-gnu-cp-command

แหล่งที่มาสำหรับประสิทธิภาพ ซีพี เทียบกับ รีซิงค์:

  1. https://unix.stackexchange.com/questions/91382/rsync-is-very-slow-factor-8-to-10-compared-to-cp-on-copying-files-from-nfs-sha
  2. https://lwn.net/Articles/400489/
  3. https://superuser.com/questions/1170636/why-is-there-a-write-speed-difference-between-dd-cp-rsync-and-macos-finder-to
  4. อะไรคือความแตกต่างระหว่าง `cp ` และ `rsync `?
sudodus avatar
jp flag
คุณได้ตรวจสอบเวลาที่ใช้ (กับไฟล์ขนาดใหญ่พอสมควร) เพื่อยืนยันว่าตัวอย่างของคุณหลีกเลี่ยงการอ่านไฟล์ต้นฉบับซ้ำ หรือปรับปรุงความเร็วเมื่อเทียบกับ 'การคัดลอกสองครั้ง' หรือไม่
sancho.s ReinstateMonicaCellio avatar
@sudodus - คุณถูกต้อง จะปรับปรุงจุดนี้ในไม่ช้า
sudodus avatar
jp flag
ให้ฉันเดา: ตัวอย่างที่มีคู่ขนานจะดีที่สุด (หรืออย่างน้อยหนึ่งตัวอย่างที่ดีที่สุด)
sancho.s ReinstateMonicaCellio avatar
@sudodus - `parallel` ดูเหมือนจะไม่ใช่แค่ดีที่สุดเท่านั้น แต่ยังเป็นสิ่งเดียวที่บรรลุเป้าหมายด้วย
Score:3
ธง cn

รีซิงค์ มี โหมดแบทช์ คุณสามารถทดลองกับ เมื่อคุณทำ rsync --write-batch=foo จาก ถึง มันจะทำสำเนาตามปกติ แต่ยังทำซ้ำคำแนะนำและข้อมูลลงในไฟล์ ฟู. หากแทนที่จะเป็นไฟล์นี่คือ fifo คุณสามารถใช้ rsync ที่สองพร้อมกันเพื่ออ่าน fifo และทำ rsync ใหม่ไปยังปลายทางอื่น เห็นได้ชัดว่าปลายทางใหม่จะต้องคล้ายกับของเดิมมากพอสมควรจึงจะสมเหตุสมผล

ตัวอย่างเช่น คุณอาจลองผ่านเครือข่าย

mkfifo มายฟีโฟ
ssh remotec 'rsync -av --read-batch=- destc' <myfifo &
นอน1
rsync -av --write-batch=myfifo srca/ remoteb:destb

--read-ชุด ไม่สามารถใช้กับ รีโมท:destc ปลายทางสไตล์

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา