Czy plik nie może być zapisywany sekwencyjnie na dysku? Mam na myśli, że część pliku znajduje się pod fizycznym adresem X, a druga część pod fizycznym adresem Y, który nie jest zbliżony do przesunięcia X +).
Tak; jest to znane jako fragmentacja plików i nie jest rzadkie, szczególnie w przypadku większych plików. Większość systemów plików przydziela miejsce w miarę potrzeb, mniej więcej sekwencyjnie, ale nie mogą odgadnąć przyszłego zachowania - więc jeśli napiszesz 200 MB do pliku, a następnie dodasz kolejne 100 MB, istnieje niezerowa szansa, że oba zestawy danych być przechowywane w różnych obszarach dysku (w zasadzie każdy inny zapis wymagający więcej miejsca na dysku, pojawiający się po pierwszym zapisie i przed drugim, może znajdować się między nimi). Jeśli system plików jest prawie pełny, sytuacja zwykle jest gorsza: może nie istnieć ciągły obszar wolnego miejsca wystarczająco duży, aby pomieścić nowy plik, więc będzie musiał zostać pofragmentowany.
Czy mogę w jakiś sposób kontrolować sekwencję plików? Chcę przydzielić duży plik 10 GB. Chcę, aby była sekwencyjna na dysku i nie była podzielona na różne przesunięcia.
Możesz powiedzieć systemowi plików o docelowym rozmiarze pliku podczas jego tworzenia; pomoże to systemowi plików optymalnie go przechowywać. Wiele współczesnych systemów plików wykorzystuje technikę zwaną opóźnioną alokacją, w której układ nowego pliku na dysku obliczany jest tak późno, jak to możliwe, aby zmaksymalizować informacje dostępne podczas wykonywania obliczeń. Możesz pomóc w tym procesie, korzystając z posix_fallocate(3)
funkcji informującej system plików, ile miejsca na dysku powinno zostać w sumie przydzielone. Nowoczesne systemy plików będą próbowały wykonać tę alokację sekwencyjnie.
Czy działa inaczej w różnych typach?
Różne systemy plików zachowują się inaczej, tak. Systemy plików oparte na logach, takie jak NILFS2, nie przydzielają pamięci w taki sam sposób, jak systemy plików oparte na rozciągłości, takie jak Ext4, a to tylko jeden przykład zmiany.