Bir ext4 birimindeki bu dosyalar neden parçalanmış?


19

ext4Kusurları ve kötü sektörleri olmayan (manyetik) bir sabit sürücüde 900GB'lık bir bölümüm var . Boş bir lost+founddizin dışında bölüm tamamen boş . Ayrılmış dosya sistemi bloklarının sayısını% 1 olarak ayarlamam dışında bölüm varsayılan parametreler kullanılarak biçimlendirildi.

~ 900MB dosyasını xubuntu-15.04-desktop-amd64.isokullanarak bölümün bağlama noktası dizinine indirdim wget. İndirme tamamlandığında, dosyanın dört parçaya ayrıldığını gördüm:

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

Bunun bir wgetşekilde tekrarlanabileceğini düşünerek , ISO dosyasını bölümden kaldırdım, tekrar boş bıraktım, sonra ~ 700MB dosyasını v1.mp4kullanarak bölüme kopyaladım cp. Bu dosya da parçalandı. Üç parçaya bölündü:

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

Bu neden oluyor? Ve bunun olmasını önlemenin bir yolu var mı? ext4Parçalanmaya karşı dirençli olduğunu düşündüm . Bunun yerine, tüm birimin geri kalan kısmı kullanılmadığında hemen yalnız bir dosyayı parçaladığını görüyorum. Bu ikisinden de daha kötü gibi görünüyor FAT32ve NTFS.


4
Bunun hangi koşullar altında önemli olabileceğini hayal etmeye çalışıyorum ve boş oluyorum.
Greg Hewgill

4
@GregHewgill: Bunun anormal olduğunu düşündüğüm için önemliydi. Şimdi normal olduğunu biliyorum, önemli değil.
EmmaV

Yanıtlar:


17

Bir 900MB dosyasında 3 ya da 4 fragmanları olduğu çok iyi. Bu boyuttaki bir dosya 100'den fazla parçaya sahip olduğunda parçalanma bir sorun haline gelir. Yağ veya ntfs için böyle bir dosyayı birkaç yüz parçaya bölmek nadir değildir.

Genelde en azından eski ext4 dosya sistemlerinde bundan daha iyi göremezsiniz, çünkü bir blok grubunun maksimum boyutu 128 MB'dir ve bu nedenle her 128 MB'da bitişik alan, tahsis bitmapleri ve inode tabloları için birkaç blok tarafından kırılır. sonraki blok grubu. Flex_bg adı verilen daha yeni bir ext4 özelliği , bu tabloların birkaç (tipik olarak 16) blok grubunun değerinin birlikte paketlenmesine izin vererek daha uzun ayrılabilir bloklar bırakıyor, ancak dağıtımınıza ve formatlamak için hangi e2fsprogs sürümünün kullanıldığına bağlı olarak, bu seçenek kullanılmamış.

tune2fs -lDosya sisteminiz biçimlendirildiğinde etkinleştirilen özellikleri kontrol etmek için kullanabilirsiniz .


Çok ilginç. Tüm inode tabloları vb birim başlangıcında olduğunu varsayalım.
EmmaV

1
@EmmaV, onları diske dağıtıyor, atıfta bulundukları verilere nispeten yakın, daha kısa aramaya ve daha hızlı disk erişimine neden oluyor :)
ocaklar

10

Gerçekten cevap veremiyorum ama bunun yardımcı olabileceğini düşünüyorum:

Her parçanın en fazla 32768 blok büyüklüğüne dikkat edin (2'nin gücü, bir şeyin devam ettiğini gösteren bir bayrak kaldırmalı ve ayrıca bir şeylerin aranması için bir ipucu vermelidir).

Ayrıca belirtmek gerekir ki, uzantılar arasındaki bu fiziksel ofsetler birbirine oldukça yakındır.

Gönderen: Ext4 Disk Düzeni

Bir ext4 dosya sistemi bir dizi blok grubuna ayrılmıştır. Parçalanmadan kaynaklanan performans zorluklarını azaltmak için, blok ayırıcı her bir dosyanın bloklarını aynı grup içinde tutmaya çok çalışarak arama sürelerini azaltır. Bir blok grubunun boyutu, sb.s_blocks_per_group blocks8 * olarak da hesaplanabilmesine rağmen belirtilir block_size_in_bytes. 4KiB varsayılan blok boyutuyla, her grup 128MiB uzunluğunda 32.768 blok içerecektir

Ve aşağıya doğru:

Ext4'ün parçalanma ile mücadele için kullandığı ilk araç, çok bloklu ayırıcıdır. Bir dosya ilk oluşturulduğunda, blok ayırıcı spekülatif olarak dosyaya 8KiB disk alanı ayırır [...] ext4 tarafından kullanılan ikinci bir hile gecikmeli tahsis edilir. Bu şema altında, bir dosya dosya yazmalarını absorbe etmek için daha fazla bloğa ihtiyaç duyduğunda, dosya sistemi tüm kirli arabellekler diske yazılana kadar disk üzerindeki tam yerleşime karar verir. Kesinlikle gerekli olana kadar belirli bir yerleşimi yerine getirmeyerek (tamamlama zaman aşımı isabet edildiğinde veya sync () çağrıldığında veya çekirdeğin belleği tükendiğinde), umarım dosya sisteminin daha iyi konum kararları verebilmesidir.

Bu nedenle, ayırıcı sadece blok grubundaki (bu 32K bloklar) veri lokasyonunu önemsediğini , ancak blok gruplarının birbirine bitişik olduğu ile ilgili olmadığını söyleyebilirim .


Verdiğiniz ilk alıntı sorumu yanıtlıyor.
EmmaV

1
Her kapsam maksimum 32k bloğa sahiptir, çünkü bu, bir tanımlayıcının kapsayabileceği maksimum uzunluktur. Uzantılar parça değildir. Uzantının fiziksel bloklarının birçoğunu hemen önceki dereceden olanları takip ederseniz ve bu yüzden bir parça oluşturmayın (6 parça ve 3 parça).
psusi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.