Mam ext4
partycję 900 GB na (magnetycznym) dysku twardym, który nie ma wad i nie ma uszkodzonych sektorów. Partycja jest całkowicie pusta, z wyjątkiem pustego lost+found
katalogu. Partycja została sformatowana przy użyciu domyślnych parametrów, tyle że ustawiłem liczbę zarezerwowanych bloków systemu plików na 1%.
Pobrałem plik ~ 900 MB xubuntu-15.04-desktop-amd64.iso
do katalogu punktu instalacji partycji, używając wget
. Po zakończeniu pobierania okazało się, że plik został podzielony na cztery fragmenty:
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
Sądząc wget
, że może to być w jakiś sposób związane, usunąłem plik ISO z partycji, czyniąc go ponownie pustym, a następnie skopiowałem plik ~ 700 MB v1.mp4
na partycję cp
. Ten plik również został pofragmentowany. Został podzielony na trzy fragmenty:
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
Dlaczego to się dzieje? I czy istnieje sposób, aby temu zapobiec? Myślałem, że ext4
ma być odporny na fragmentację. Zamiast tego stwierdzam, że natychmiast fragmentuje pojedynczy plik, gdy cała reszta woluminu nie jest używana. To wydaje się być gorsze niż oba FAT32
i NTFS
.
źródło
Odpowiedzi:
3 lub 4 fragmenty w pliku 900mb są bardzo dobre. Fragmentacja staje się problemem, gdy plik o tym rozmiarze zawiera ponad 100 fragmentów. Tłuszcz lub plik NTFS często dzielą taki plik na kilkaset kawałków.
Zasadniczo nie zobaczysz tego lepiej, przynajmniej w starszych systemach plików ext4, ponieważ maksymalny rozmiar grupy bloków wynosi 128 MB, a więc co 128 MB ciągłe miejsce jest dzielone przez kilka bloków dla bitmap alokacji i tabel i-węzłów dla następna grupa bloków. Nowsza funkcja ext4 o nazwie flex_bg umożliwia spakowanie wielu tabel (zwykle 16) grup bloków w tych tabelach, pozostawiając dłuższe serie bloków, które można alokować, ale w zależności od dystrybucji i wersji e2fsprogs użytej do jej sformatowania, ta opcja może nie były używane.
Możesz użyć
tune2fs -l
do sprawdzenia funkcji włączonych podczas formatowania systemu plików.źródło
Naprawdę nie potrafię odpowiedzieć, ale myślę, że to może pomóc:
Zauważ, że każdy fragment ma maksymalnie 32768 bloków (moc 2, która powinna podnieść flagę, że coś się dzieje, a także dać wskazówkę, na co należy zwrócić uwagę).
Warto również zauważyć, że te fizyczne przesunięcia między zakresami są dość blisko siebie.
Od: Układ dysku Ext4
I dalej:
Powiedziałbym więc, że alokator dba tylko o lokalizację danych w grupie bloków (te bloki 32K), ale nie o to, by grupy bloków były ze sobą sąsiadujące.
źródło