เหตุใดไฟล์เหล่านี้จึงมีการแยกส่วนโวลุ่มเป็นส่วนขยาย?


19

ฉันมีext4พาร์ติชัน900GB บนฮาร์ดไดรฟ์ (แบบแม่เหล็ก) ที่ไม่มีข้อบกพร่องและไม่มีเซกเตอร์เสีย พาร์ติชันว่างเปล่าอย่างสมบูรณ์ยกเว้นlost+foundไดเรกทอรีว่าง พาร์ติชันถูกฟอร์แมตโดยใช้พารามิเตอร์เริ่มต้นยกเว้นว่าฉันจะตั้งค่าจำนวนบล็อกระบบไฟล์ที่สงวนไว้เป็น 1%

ฉันดาวน์โหลดไฟล์ ~ 900MB xubuntu-15.04-desktop-amd64.isoพาร์ทิชันของ mount wgetไดเรกทอรีจุดโดยใช้ เมื่อการดาวน์โหลดเสร็จสิ้นฉันพบว่าไฟล์ถูกแบ่งออกเป็นสี่ส่วน:

filefrag -v /media/emma/red/xubuntu-15.04-desktop-amd64.iso
Filesystem type is: ef53
File size of /media/emma/red/xubuntu-15.04-desktop-amd64.iso is 1009778688 (246528 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..   32767:      34816..     67583:  32768:            
   1:    32768..   63487:      67584..     98303:  30720:            
   2:    63488..   96255:     100352..    133119:  32768:      98304:
   3:    96256..  126975:     133120..    163839:  30720:            
   4:   126976..  159743:     165888..    198655:  32768:     163840:
   5:   159744..  190463:     198656..    229375:  30720:            
   6:   190464..  223231:     231424..    264191:  32768:     229376:
   7:   223232..  246527:     264192..    287487:  23296:             eof
/media/emma/red/xubuntu-15.04-desktop-amd64.iso: 4 extents found

คิดนี้อาจจะ releated การwgetอย่างใดผมลบไฟล์ ISO จากพาร์ทิชันที่ทำให้มันว่างเปล่าอีกครั้งแล้วผมคัดลอกไฟล์ ~ 700MB พาร์ทิชันโดยใช้v1.mp4 cpไฟล์นี้มีการแยกส่วนด้วย มันถูกแบ่งออกเป็นสามส่วน:

filefrag -v /media/emma/red/v1.mp4
Filesystem type is: ef53
File size of /media/emma/red/v1.mp4 is 737904458 (180153 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..   32767:      34816..     67583:  32768:            
   1:    32768..   63487:      67584..     98303:  30720:            
   2:    63488..   96255:     100352..    133119:  32768:      98304:
   3:    96256..  126975:     133120..    163839:  30720:            
   4:   126976..  159743:     165888..    198655:  32768:     163840:
   5:   159744..  180152:     198656..    219064:  20409:             eof
/media/emma/red/v1.mp4: 3 extents found

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


4
ฉันพยายามจินตนาการภายใต้สถานการณ์ที่สิ่งนี้อาจมีความสำคัญและฉันกำลังจะว่างเปล่า
Greg Hewgill

4
@ GregHewgill: มันสำคัญเพราะฉันคิดว่ามันผิดปกติ ตอนนี้ฉันรู้แล้วว่ามันเป็นเรื่องปกติมันไม่สำคัญ
EmmaV

คำตอบ:


17

3 หรือ 4 ชิ้นส่วนในไฟล์ 900MB เป็นสิ่งที่ดีมาก การแตกแฟรกเมนต์กลายเป็นปัญหาเมื่อไฟล์ที่มีขนาดนั้นมีมากกว่า 100+ แฟรกเมนต์ ไม่ใช่เรื่องแปลกสำหรับไขมันหรือ NTFS ที่จะแยกส่วนไฟล์ดังกล่าวออกเป็นหลายร้อยชิ้น

โดยทั่วไปคุณจะไม่เห็นอะไรดีไปกว่านั้นอย่างน้อยในระบบไฟล์ ext4 รุ่นเก่าเนื่องจากขนาดสูงสุดของกลุ่มบล็อกคือ 128 MB ดังนั้นทุก ๆ 128 MB พื้นที่ที่ต่อเนื่องจะถูกแบ่งโดยบล็อกจำนวนเล็กน้อยสำหรับบิตแมปการจัดสรรและตาราง inode สำหรับ กลุ่มบล็อกถัดไป คุณลักษณะ ext4 ล่าสุดที่เรียกว่าflex_bgช่วยให้สามารถบรรจุกลุ่มของกลุ่มของตารางเหล่านี้เข้าด้วยกัน (โดยทั่วไปคือ 16) ทำให้การรันบล็อกที่จัดสรรได้นานขึ้น แต่ขึ้นอยู่กับการกระจายของคุณและรุ่น e2fsprogs ที่ใช้จัดรูปแบบ ไม่ได้ใช้

คุณสามารถใช้tune2fs -lเพื่อตรวจสอบคุณสมบัติที่เปิดใช้งานเมื่อระบบไฟล์ของคุณถูกฟอร์แมต


น่าสนใจมาก. ฉันคิดว่าตาราง inode ทั้งหมดเป็นต้นอยู่ที่จุดเริ่มต้นของโวลุ่ม
EmmaV

1
@EmmaV กระจายพวกเขาข้ามดิสก์ค่อนข้างใกล้เคียงกับข้อมูลที่พวกเขาอ้างถึงผลในการพยายามที่สั้นและเร็วขึ้นการเข้าถึงดิสก์ :)
ฮอบส์

10

ฉันไม่สามารถตอบได้อย่างแท้จริง แต่ฉันคิดว่านี่อาจช่วยได้:

ขอให้สังเกตว่าแต่ละชิ้นส่วนมีขนาดเท่าไรที่สุดแล้ว 32768 บล็อก (ขนาดกำลัง 2 ซึ่งควรยกธงว่ามีบางอย่างเกิดขึ้นและยังให้คำแนะนำสำหรับสิ่งที่จะมองหา)

นอกจากนี้ยังเป็นที่น่าสังเกตว่าการชดเชยทางกายภาพระหว่างขอบเขตนั้นค่อนข้างใกล้เคียงกัน

จาก: Ext4 Disk Layout

ระบบไฟล์ ext4 ถูกแบ่งออกเป็นชุดของกลุ่มบล็อก เพื่อลดความยุ่งยากในการปฏิบัติงานเนื่องจากการแตกแฟรกเมนต์ตัวจัดสรรบล็อกพยายามอย่างหนักเพื่อเก็บบล็อกของแต่ละไฟล์ไว้ในกลุ่มเดียวกันซึ่งจะช่วยลดเวลาในการค้นหา ขนาดของกลุ่มบล็อกถูกระบุในsb.s_blocks_per_group blocksแม้ว่าจะสามารถคำนวณเป็น 8 * block_size_in_bytesได้ ด้วยขนาดบล็อกเริ่มต้นที่ 4KiB แต่ละกลุ่มจะมีบล็อก 32,768 บล็อกสำหรับความยาว 128MiB

และไกลออกไป:

เครื่องมือแรกที่ ext4 ใช้เพื่อต่อสู้กับการแตกแฟรกเมนต์คือตัวจัดสรรหลายบล็อก เมื่อไฟล์ถูกสร้างขึ้นเป็นครั้งแรกตัวปันส่วนการบล็อกจะจัดสรรพื้นที่ดิสก์ 8KiB อย่างพิเศษให้กับไฟล์ [... ] เคล็ดลับที่สองที่เกี่ยวข้องกับการใช้ ext4 คือการจัดสรรที่ล่าช้า ภายใต้โครงร่างนี้เมื่อไฟล์ต้องการบล็อกเพิ่มเติมเพื่อดูดซับการเขียนไฟล์ระบบไฟล์จะตัดสินใจเกี่ยวกับการวางตำแหน่งที่แน่นอนบนดิสก์จนกระทั่งบัฟเฟอร์สกปรกทั้งหมดถูกเขียนลงดิสก์ การไม่กำหนดตำแหน่งเฉพาะจนกว่าจะมีความจำเป็นอย่างยิ่ง (การหมดเวลาการคอมมิทถูกโจมตีหรือการซิงค์ () ถูกเรียกหรือเคอร์เนลมีหน่วยความจำไม่เพียงพอ) หวังว่าระบบไฟล์จะสามารถตัดสินใจตำแหน่งได้ดีขึ้น

ดังนั้นฉันบอกได้ว่าตัวจัดสรรนั้นสนใจเฉพาะตำแหน่งข้อมูลภายในกลุ่มบล็อก (บล็อก 32K เหล่านั้น) แต่ไม่เกี่ยวกับกลุ่มบล็อกที่อยู่ติดกัน


คำพูดแรกที่คุณตอบคำถามของฉัน
EmmaV

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