เหตุใดการคัดลอกข้อมูลจำนวนเดียวกันจึงใช้เวลานานขึ้นหากกระจายไปในหลายไฟล์แยกกัน


12

ฉันสังเกตเห็นว่าการคัดลอกข้อมูลมูลค่า 24Mb จากโฟลเดอร์หนึ่งไปยังอีกโฟลเดอร์ใช้เวลาประมาณ 30 วินาทีเพราะ (ฉันสมมติว่านี่คือเหตุผล) มันเป็นมากกว่า 1,000 ไฟล์แยกกัน การคัดลอก 24Mb ไม่ควรใช้เวลานาน ทำไมจำนวนไฟล์ถึงแตกต่างกัน

ฉันใช้ Windows 7 บน MacBook (4GB ram, Intel (R) Core (TM) 2 Duo CPU P7450 @ 2.13GHz, ระบบปฏิบัติการ 32 บิต)

แก้ไข: NTFS เป็นระบบไฟล์ที่ใช้ในไดรฟ์

คำตอบ:


5

HDD ไม่ได้มีอัตราการถ่ายโอนที่แน่นอนมันขึ้นอยู่กับการบำรุงรักษาที่เหมาะสมนั่นคือไม่แยกส่วนหรือมีเซกเตอร์เสีย ฯลฯ ...

หาก HDD คือ SATA 2 และเป็นพาร์ติชันเดียวกันมันเป็นเพียงความเร็วในการถ่ายโอนข้อมูล

หากมีพาร์ติชั่นสองตัวใน HDD เดียวกันมันไม่จำเป็นต้องถ่ายโอนข้อมูลระหว่างบัสและมาเธอร์บอร์ดนั่นคือโหลดลงในบัฟเฟอร์ (ขึ้นอยู่กับขนาดบัฟเฟอร์ hdd)

แต่สำหรับทุกไฟล์ที่คัดลอกระบบจะต้องเก็บดัชนีไว้ใน MFT ของ HDD (Master File Table) ซึ่งจะทำให้กระบวนการคัดลอกช้าลงหากคุณคัดลอกไฟล์จำนวนมาก และถ้าคุณมีโปรแกรมป้องกันไวรัสมันจะทำการสแกนแต่ละไฟล์ที่คัดลอก และหากคุณเปิดใช้งานการจัดทำดัชนีการค้นหาไฟล์ Microsoft (หรือบริการการจัดทำดัชนีไฟล์อื่น ๆ ) ผลลัพธ์จะแย่ลง

ฉันคิดว่าต้องมีเหตุผลอื่น ๆ อีกมากมายว่าทำไมการคัดลอกไฟล์จำนวนมากจึงช้า แต่สิ่งเหล่านี้ควรเป็นไฟล์หลัก


การปิดใช้งานโปรแกรมป้องกันไวรัสทำให้สารสกัดเร็วขึ้น 10 เท่า หลังจากนั้นสแกนไฟล์เพื่อหาไวรัส
fat_mike

30

ทำไมจำนวนไฟล์ถึงแตกต่างกัน

เห็นได้ชัดว่าคุณกำลังมุ่งเน้นเพียงด้าน "คัดลอกข้อมูล" ของ "คัดลอกไฟล์" ไฟล์เป็นมากกว่าข้อมูล มันเป็นนิติบุคคลในระบบแฟ้ม ไฟล์มีชื่อและคุณสมบัติและการอนุญาต ข้อมูลเพิ่มเติมทั้งหมดเกี่ยวกับไฟล์จะต้องทำซ้ำพร้อมกับข้อมูลเมื่อ "คัดลอกไฟล์" มีจำนวนดิสก์ I / O จำนวนมากเพื่อดำเนินการโอเวอร์เฮดของระบบไฟล์นี้

ขั้นตอนการคัดลอกหนึ่ง (1) ไฟล์ในระบบไฟล์ทั่วไปจะเป็นดังนี้:

  • ค้นหาไฟล์ต้นฉบับในระบบไฟล์ (ก)
  • อ่านจากดิสก์รายการไดเรกทอรีสำหรับไฟล์ต้นฉบับ
  • ตรวจสอบสิทธิ์การอ่าน
  • ค้นหาไฟล์ปลายทางในระบบไฟล์ (ข)
  • ตรวจสอบสิทธิ์การเขียนในไดเรกทอรีปลายทาง
  • ขยายไดเร็กทอรีหากจำเป็นเพื่อรองรับไฟล์ใหม่ (ค)
  • อัพเดตไดเร็กทอรีบนดิสก์ (C1)
  • ค้นหาบล็อกฟรีจัดสรรบล็อกและอัปเดตตารางอีกครั้ง (ง)
  • อ่านข้อมูลไฟล์และคัดลอกไปยังไฟล์ปลายทาง (เช่นคัดลอก "ไฟล์")
  • อัพเดตรายการไดเร็กทอรีสำหรับไฟล์ใหม่ด้วย (ขนาดและเวลา) (จ)
  • อัพเดตเวลาเข้าถึงของรายการไดเร็กทอรีต้นทาง (ฉ)

(a)อย่างน้อยที่สุดสิ่งนี้หมายถึงการค้นหาไดเรกทอรีปัจจุบัน หรือพา ธ อาจเริ่มต้นที่รูทของระบบไฟล์และต้องมีการสำรวจไดเรกทอรีหลายระดับ

(b)อย่างน้อยที่สุดนี้หมายถึงการค้นหาไดเรกทอรีปัจจุบัน หรือพา ธ อาจเริ่มต้นที่รูทของระบบไฟล์และต้องมีการสำรวจไดเรกทอรีหลายระดับ หากไฟล์ปลายทางมีอยู่แล้วให้กำหนดวิธีการคัดลอกที่จะดำเนินการหรือยกเลิก หากไฟล์ปลายทางไม่มีอยู่ต้องสร้างรายการไดเรกทอรีใหม่และอาจเกี่ยวข้องกับการขยายไดเรกทอรี (เช่นไฟล์บล็อก (คลัสเตอร์) ค่าใช้จ่าย )

(c)หากต้องขยายไดเรกทอรีให้จัดสรรบล็อกใหม่โดยค้นหาบล็อกว่างปรับเปลี่ยนตารางการจัดสรรด้วยการจัดสรรใหม่แล้วเขียนบล็อกออกไปยังดิสก์ เนื่องจากระบบไฟล์ส่วนใหญ่เก็บรักษาตารางการจัดสรรไว้หลายชุดดังนั้นจึงหมายถึงการเขียนลงดิสก์หลายครั้ง
(c1)เมื่อไดเรกทอรีปลายทางตั้งอยู่ให้อ่านบล็อกไดเรกทอรีจากดิสก์แก้ไขด้วยรายการไดเรกทอรีใหม่สำหรับไฟล์ที่คัดลอกแล้วเขียนบล็อกออกไปยังดิสก์

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

(e)เมื่อคัดลอกข้อมูลเรียบร้อยแล้วให้อัปเดตรายการไดเรกทอรีใหม่สำหรับไฟล์ที่คัดลอกด้วยความยาวไฟล์และเวลาที่เหมาะสมจากนั้นเขียนบล็อกไดเรกทอรีออกไปยังดิสก์

(f) อัปเดตรายการไดเรกทอรีต้นทางด้วยการประทับเวลา "เข้าถึง" ใหม่แล้วเขียนบล็อกไดเรกทอรีออกไปยังดิสก์

ดังนั้นแทนที่จะมีเพียงไฟล์เดียวคำถามของคุณจะถามว่าทำสิ่งนี้ทั้งหมดสำหรับไฟล์หนึ่งพันไฟล์อาจเพิ่มเวลาที่ใช้ในการคัดลอกส่วนข้อมูลของไฟล์หรือไม่ หากคุณคัดลอกไฟล์เพียง 24MB คุณจะมีสิ่งที่จะเปรียบเทียบกับเวลาในการคัดลอกของคุณหนึ่งพันไฟล์

เมื่อทำการสำรองข้อมูลระบบไฟล์การคัดลอกแต่ละไฟล์ไปยังระบบไฟล์อื่นบนดิสก์หรือพาร์ติชั่นนั้นไม่ค่อยได้รับการว่าจ้างเพราะเป็นกระบวนการที่ค่อนข้างช้าตามที่คุณค้นพบ วิธีที่เร็วกว่าคือการสร้างและเขียนไฟล์เก็บถาวรเดียวที่เก็บรายการไดเรกทอรีต้นทางและเนื้อหาไฟล์ในรูปแบบไฟล์พิเศษ โปรแกรมสำรองข้อมูลและคำสั่ง * nix 'tar' สามารถส่งออกไฟล์เก็บถาวรได้ (โปรดทราบว่า 'tar' เพียงจัดการไฟล์เก็บถาวรและไม่ใช้การบีบอัดเช่นโปรแกรมอรรถประโยชน์การบีบอัดข้อมูล + การบีบอัด) วิธีการสำรองข้อมูลที่เร็วที่สุดคือการเขียนไปยังอุปกรณ์บล็อก (แทนที่จะเป็นระบบไฟล์บนอุปกรณ์) เพื่อให้ระบบไฟล์ต้นทาง ละเว้น (ถือว่าเป็นข้อมูลเพิ่มเติม) และสามารถคัดลอกรูปภาพแบบบล็อกต่อบล็อกของอุปกรณ์ต้นทางได้


-1

นี่คือการเปรียบเทียบแนวคิด:

(โปรดจำไว้ว่าอินเทอร์เน็ตที่รักการเปรียบเทียบนั้นมีข้อบกพร่องรู้สึกอิสระที่จะชี้ให้เห็นว่ามีความคิดเห็นอย่างไร)

สมมติฐาน:

  • เอเจนต์ของการถ่ายโอนข้อมูล == เด็กบางคนลองเรียกเขาว่าแซมกำลังย้ายไข่จากตะกร้าหนึ่งไปยังตะกร้าอื่น
  • สื่อกลางของการถ่ายโอนข้อมูล == อากาศฉันเดา ไม่สำคัญที่นี่จริงๆ
  • ไข่มาจากสปีชีส์ต่าง ๆ รวมถึง ... ไดโนเสาร์ ... & นักสำรวจใต้ท้องทะเลและมังกรในตำนาน (ไข่อาจใหญ่มาก)
  • ไฟล์ขนาด== ไข่ปริมาณ คิดว่าไข่ของ robbin กับไข่ของ draggon

การเปรียบเทียบ:

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

  • ไข่ของร็อบบินหยิบขึ้นมาเหมือน100 bytesช่องว่างในตะกร้า

ถึง

  • 2.7Gbคราเคน-ไข่ขนาดรอบ

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

แซมเป็นคนโง่

แซมกลับไปที่ตะกร้าใบแรกของเขาเพื่อคว้าไข่อีกใบ เขาตระหนักว่าเขามีเพียง 1 อันที่ใหญ่มากเท่านั้น อย่างไรก็ตามมีไข่ของร็อบบิน 100,000,000,000 ตัวเหลืออยู่

อย่างที่คุณเห็นตอนบ่ายของแซมถูกทำลาย ความชอบตามธรรมชาติของเขาคือไข่ดิโนน่าจะแย่กว่าที่เขาจะต้องเคลื่อนไหว มันสมเหตุสมผลแล้วเมื่อเราพูดถึงไข่และตะกร้า แต่คอมพิวเตอร์มีจำนวนประมาณ 100,000,000,000

ในระยะสั้น:

คำตอบเกี่ยวกับสาเหตุที่ใช้เวลานานกว่าในการย้ายไฟล์ขนาดเล็กหลาย ๆ ไฟล์เมื่อเทียบกับไฟล์ขนาดใหญ่บางตัวต้องคำนึงถึงต้นทุนที่เกี่ยวข้องกับการย้ายไฟล์ ยิ่งคุณมีไฟล์ขนาดเล็กมากเท่าไหร่การกระทำนั้นก็จะต้องถูก preform มากขึ้น อีกวิธีหนึ่งในการดูที่นี่คือการพูดคุยเกี่ยวกับความหนาแน่นของข้อมูล


-2

อ่าน FAT เปลี่ยนตำแหน่งใหม่เปิดไฟล์เมื่อเปลี่ยนไฟล์ - ทุกอย่างต้องใช้เวลา


มันเป็นไดรฟ์ NTFS
Trindaz

ใน NTFS ข้อมูลไฟล์ทั้งหมด - ชื่อไฟล์วันที่สร้างสิทธิ์การเข้าถึงและเนื้อหาจะถูกเก็บไว้เป็นเมทาดาทาในตารางไฟล์ต้นแบบ ตารางไฟล์ต้นแบบ (MFT) มีข้อมูลเมตาเกี่ยวกับทุกไฟล์ไดเรกทอรีและเมตาไฟล์ในวอลุ่ม NTFS มันมีชื่อไฟล์, สถานที่, ขนาดและสิทธิ์ รายการไดเรกทอรีประกอบด้วยชื่อไฟล์และ "รหัสไฟล์" ซึ่งเป็นหมายเลขบันทึกที่แสดงถึงไฟล์ในตารางไฟล์ต้นแบบ ID ไฟล์ยังมีจำนวนการใช้ซ้ำเพื่อตรวจหาการอ้างอิงที่เก่า
Lazy Badger

ดังนั้นคำตอบของคุณสำหรับคำถามนั้นขึ้นอยู่กับความจริงที่ว่ามันต้องทำงานพิเศษมากในการสร้างบันทึกสำหรับชื่อไฟล์, ที่ตั้ง, ขนาด, การอนุญาตเป็นต้น? นั่นคือที่มาของงานพิเศษทั้งหมด
Trindaz

การสร้างใหม่และการอ่านที่มีอยู่
Lazy Badger
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.