Mengapa file-file ini dalam volume ext4 terfragmentasi?

19

Saya memiliki ext4partisi 900GB pada hard drive (magnetik) yang tidak memiliki cacat dan tidak ada bad sector. Partisi ini benar-benar kosong kecuali untuk lost+founddirektori kosong . Partisi diformat menggunakan parameter default kecuali bahwa saya mengatur jumlah blok filesystem yang dicadangkan ke 1%.

Saya mengunduh ~ 900MB file xubuntu-15.04-desktop-amd64.isoke direktori mount point direktori menggunakan wget. Ketika unduhan selesai, saya menemukan bahwa file itu dibagi menjadi empat fragmen:

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

Berpikir ini mungkin dirilis wgetentah bagaimana, saya menghapus file ISO dari partisi, membuatnya kosong lagi, lalu saya menyalin file ~ 700MB v1.mp4ke partisi menggunakan cp. File ini juga terfragmentasi. Itu dibagi menjadi tiga fragmen:

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

Mengapa ini terjadi? Dan adakah cara untuk mencegahnya terjadi? Saya pikir ext4itu dimaksudkan untuk tahan terhadap fragmentasi. Alih-alih saya menemukan itu segera memecah file soliter ketika semua sisa volume tidak digunakan. Ini tampaknya lebih buruk dari keduanya FAT32dan NTFS.

EmmaV
sumber
4
Saya mencoba membayangkan dalam keadaan apa hal ini mungkin menjadi masalah, dan saya menjadi kosong.
Greg Hewgill
4
@GregHewgill: Itu penting karena saya pikir itu tidak normal. Sekarang saya tahu itu normal, tidak masalah.
EmmaV

Jawaban:

17

3 atau 4 fragmen dalam file 900MB adalah sangat baik. Fragmentasi menjadi masalah ketika file dengan ukuran itu memiliki lebih dari 100 fragmen. Tidak jarang lemak atau ntfs memecah file seperti itu menjadi beberapa ratus bagian.

Anda biasanya tidak akan melihat lebih baik daripada itu setidaknya pada sistem file ext4 yang lebih lama karena ukuran maksimum grup blok adalah 128 MB, dan setiap 128 MB ruang yang berdekatan dipecah oleh beberapa blok untuk alokasi bitmap dan tabel inode untuk grup blok selanjutnya. Fitur ext4 yang lebih baru yang disebut flex_bg memungkinkan pengemasan sejumlah (biasanya 16) kelompok nilai tabel ini bersama-sama, menyisakan berjalan lebih lama dari blok yang dapat dialokasikan tetapi tergantung pada distribusi Anda dan versi e2fsprogs apa yang digunakan untuk memformatnya, opsi ini mungkin belum digunakan.

Anda dapat menggunakan tune2fs -luntuk memeriksa fitur yang diaktifkan ketika sistem file Anda diformat.

psusi
sumber
Sangat menarik. Saya berasumsi semua tabel inode dll berada di awal volume.
EmmaV
1
@EmmaV mendistribusikannya di seluruh disk, relatif dekat dengan data yang mereka rujuk, menghasilkan pencarian yang lebih pendek dan akses disk yang lebih cepat :)
hobbs
10

Saya tidak bisa menjawab, tapi saya pikir ini bisa membantu:

Perhatikan bagaimana masing-masing fragmen, paling banyak, berukuran 32.768 blok (kekuatan 2, yang seharusnya menaikkan bendera bahwa sesuatu sedang terjadi, dan juga memberi Anda petunjuk untuk sesuatu yang dicari).

Juga patut dicatat, mereka offset fisik antara luasan cukup dekat satu sama lain.

Dari: Layout Disk Ext4

Sistem file ext4 dibagi menjadi serangkaian kelompok blok. Untuk mengurangi kesulitan kinerja karena fragmentasi, pengalokasi blok berusaha sangat keras untuk menjaga setiap blok file dalam grup yang sama, sehingga mengurangi waktu pencarian. Ukuran kelompok blok ditentukan dalam sb.s_blocks_per_group blocks, meskipun juga dapat dihitung sebagai 8 * block_size_in_bytes. Dengan ukuran blok standar 4KiB, setiap grup akan berisi 32.768 blok, dengan panjang 128MiB

Dan lebih jauh ke bawah:

Alat pertama yang digunakan ext4 untuk memerangi fragmentasi adalah pengalokasi multi-blok. Ketika file pertama kali dibuat, blok pengalokasi secara spekulatif mengalokasikan 8KiB ruang disk ke file [...] Trik terkait kedua yang digunakan ext4 adalah alokasi tertunda. Di bawah skema ini, ketika sebuah file membutuhkan lebih banyak blok untuk menyerap file menulis, sistem file menolak menentukan penempatan yang tepat pada disk sampai semua buffer kotor dituliskan ke disk. Dengan tidak melakukan penempatan tertentu sampai benar-benar diperlukan (batas waktu komit dipukul, atau sinkronisasi () dipanggil, atau kernel kehabisan memori), harapannya adalah sistem file dapat membuat keputusan lokasi yang lebih baik.

Jadi saya akan mengatakan bahwa pengalokasi hanya peduli tentang lokalitas data di dalam grup blok (blok 32K), tetapi tidak tentang grup blok yang berdekatan satu sama lain.

outlyer
sumber
Kutipan pertama yang Anda berikan menjawab pertanyaan saya.
EmmaV
1
Setiap tingkat memiliki maksimum 32k blok karena itu adalah panjang maksimum yang dapat dijelaskan oleh deskriptor luas. Luasnya bukan fragmen. Jika Anda melihat beberapa blok fisik luasan segera ikuti orang-orang dari tingkat sebelumnya, dan karenanya bukan merupakan fragmen (6 luasan vs 3 fragmen).
psusi