NTFS ใช้อัลกอริทึมการจัดสรรบล็อกใด


10

ใน Windows XP 64 ฉันดาวน์โหลดไฟล์ 1.2 GB และสิ้นสุดลงอย่างกระจัดกระจายตามที่รูปภาพแสดง น่าเสียดายที่ก่อนที่จะถ่ายภาพจาก Piriform Defraggler ฉันจัดระเบียบไฟล์อื่นดังนั้นคุณจึงไม่สามารถเห็นสถานะที่แน่นอน ณ จุดที่ไฟล์ถูกเขียน อย่างไรก็ตามดิสก์ทุกครั้งเกี่ยวกับว่าว่างเปล่าเป็นตอนนี้ (ใช้ 25%) และการแยกส่วนแทบไม่

สกรีนช็อต 1

NTFS ใช้อัลกอริทึมการจัดสรรบล็อกใด ดูเหมือนว่าสุ่มหรืออาจวางไว้ที่หัวดิสก์จริง

UPDATE:

นี่คือสิ่งที่เกิดขึ้นวันนี้หลังจากเขียนไฟล์ใหม่ขนาด 67 MiB มันถูกแบ่งออกเป็น 731 ชิ้นขนาดเฉลี่ยเพียง 95 KiB ไฟล์ดังกล่าวถูกใช้เพื่อเติมเต็มช่องว่างบางส่วน แต่ไม่ทั้งหมดก็ไม่ได้ใช้พื้นที่ว่างขนาดใหญ่อย่างต่อเนื่องเช่นกัน แปลกใช่มั้ย

สกรีนช็อต 2

อัปเดต 2:

ต่างจากPC Guruฉันไม่คิดว่า Opera เป็นผู้ร้าย ฉันคิดว่ามัน (ตรงข้ามกับ Google Chrome) ไม่ได้บอกขนาดที่คาดหวังของ Windows แต่มีหลายกรณีเมื่อมันเป็นไปไม่ได้และเป็นความรับผิดชอบของระบบปฏิบัติการที่จะจัดการมันอย่างมีสติ ภาพต่อไปนี้แสดงสิ่งที่เกิดขึ้นหลังจากสองสามวันกับฉันที่ไม่ได้ทำอะไรในพาร์ติชันนี้ - ไดเรกทอรี TEMP และข้อมูลทั้งหมดของฉัน (ยกเว้นที่จัดการโดย Windows) อยู่ทั้งที่อื่น Windows เองดูเหมือนว่าจะไม่ใช้งานSetEndOfFileและแตกไฟล์ของตัวเองอย่างน่ากลัว (600 แฟรกเมนต์สำหรับไฟล์ขนาดเล็กสองไฟล์ประมาณ 40 MB) NTFS ดูเหมือนจะไม่ใช้ภาคแรกที่มีอยู่เนื่องจากมีไฟล์อยู่ตรงกลางและใกล้กับจุดสิ้นสุดของดิสก์ที่ค่อนข้างว่างเปล่า (การใช้งาน 23%)

สกรีนช็อต 3

คำตอบ:


12

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

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


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

คุณเรียก setEndOfFile ก่อนเขียนไฟล์ลงดิสก์หรือไม่ หากคุณไม่ทำเช่นนั้น NTFS จะไม่มีทางรู้ขนาดที่แท้จริงของไฟล์ดังนั้นมันจะขยายขนาดไฟล์โดยใช้ที่เก็บข้อมูลที่มีอยู่
ReinstateMonica Larry Osterman

ไม่ใช่ฉันมันเป็น Opera ส่วนใหญ่อาจไม่ อย่างไรก็ตามมันก็ไม่มีเหตุผลที่จะทำอะไรแปลก ๆ
maaartinus

คุณหมายความว่าอย่างไร "แปลก" หาก NTFS รู้ขนาดของไฟล์ที่คุณกำลังเขียนมันจะทำสิ่งที่ชาญฉลาดเกี่ยวกับไฟล์ หากไม่ทราบขนาดไฟล์ก็ไม่สามารถจัดสรรงานจัดเก็บได้เกือบจะดีเท่านี้
ReinstateMonica Larry Osterman

@ Larry Osterman: แน่นอนโดยไม่รู้ขนาดไฟล์มันยากที่จะทำ แต่การทำสิ่งที่ไม่ดีก็เป็นเรื่องยากเช่นกัน
maaartinus

2

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

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

ในกรณีที่โปรแกรมไม่ทราบขนาดไฟล์หรือไม่ใส่ใจที่จะบอก NTFS แต่เพียงแค่เปิดไฟล์และเริ่มเขียนข้อมูลตามลำดับปรากฏว่า NTFS ทำหน้าที่คล้ายกับ FAT32 ซึ่งเริ่มที่คลัสเตอร์แรกที่มีอยู่ (หรือ คนแรกที่มีอยู่หลังจากการจัดสรรครั้งล่าสุดในเซสชั่นนั้น) จากนั้นใช้สิ่งที่มีอยู่จากที่นั่นไปข้างหน้า ตัวอย่างเช่นในเวลาเดียวกันฉันขอให้ CCleaner สแกนรีจิสทรีทำให้มันสำรองไฟล์ขนาดใหญ่ ".Reg" txt ไฟล์นี้เริ่มต้นใกล้กับจุดเริ่มต้นของไดรฟ์จากนั้นกระจัดกระจายไปทั่ว 127 ชิ้นส่วนที่แตกต่างกัน ซึ่งแตกต่างจากไฟล์ที่คัดลอกด้วย Explorer หรือดาวน์โหลดด้วย Chrome ในทุก ๆ ไฟล์ที่ฉันดูกลุ่มจะถูกจัดสรรตามลำดับจากน้อยไปมาก

สำหรับการวิจัยนี้ฉันใช้ Winhex (รุ่นทดลองใช้ฟรีจาก Winhex.com) เมื่อดูรายการไดเรกทอรี คลิกขวาที่ชื่อไฟล์และเลือกตำแหน่งกลุ่มรายการเพื่อดูรายการกลุ่มที่ใช้โดยไฟล์นั้น


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