GNU/Linux >> Znalost Linux >  >> Linux

Ukládají se soubory na disk postupně?

Lze soubor uložit ne postupně na disku? Myslím tím, že část souboru je umístěna pod fyzickou adresou X a druhá část pod fyzickou adresou Y, která není blízko X + offset).

Ano; toto je známé jako fragmentace souborů a není neobvyklé, zejména u větších souborů. Většina souborových systémů přiděluje prostor podle potřeby, víceméně postupně, ale nedokáže odhadnout budoucí chování – takže pokud do souboru zapíšete 200 MiB a přidáte dalších 100 MiB, existuje nenulová šance, že obě sady dat budou být uloženy v různých oblastech disku (v zásadě by mezi nimi mohl vstoupit jakýkoli jiný zápis vyžadující více místa na disku, k němuž dojde po prvním zápisu a před druhým). Pokud je souborový systém téměř plný, bude situace obvykle horší:souvislá oblast volného místa nemusí být dostatečně velká pro uložení nového souboru, takže bude muset být fragmentován.

Mohu nějak ovládat sekvenčnost souborů? Chci alokovat velký soubor o velikosti 10 GB. Chci, aby to bylo na disku sekvenční a nerozdělené mezi různé offsety.

Souborovému systému můžete říci o cílové velikosti vašeho souboru, když je vytvořen; to pomůže souborovému systému jej optimálně uložit. Mnoho moderních souborových systémů používá techniku ​​známou jako zpožděná alokace, kdy se rozložení nového souboru na disku vypočítá co nejpozději, aby se maximalizovaly informace dostupné při provádění výpočtu. Tomuto procesu můžete pomoci pomocí posix_fallocate(3) funkce, která sdělí souborovému systému, kolik místa na disku má být celkem přiděleno. Moderní souborové systémy se pokusí provést tuto alokaci postupně.

Funguje to mezi různými typy odlišně?

Různé souborové systémy se chovají odlišně, ano. Souborové systémy založené na protokolech, jako je NILFS2, nepřidělují úložiště stejným způsobem jako souborové systémy založené na rozsahu, jako je Ext4, a to je jen jeden příklad variace.


Příkaz filefrag vám řekne, jak je váš soubor fyzicky uložen ve vašem zařízení:

# filefrag -v /var/log/messages.1 
Filesystem type is: ef53
File size of /var/log/messages.1 is 41733 (11 blocks, blocksize 4096)
 ext logical physical expected length flags
   0       0  2130567               1 
   1       1 15907576  2130568      1 
   2       2 15910400 15907577      1 
   3       3 15902720 15910401      7 
   4      10  2838546 15902727      1 eof
/var/log/messages.1: 5 extents found

Pokud svůj soubor zapíšete v jednom průchodu, odhaduji, že váš soubor nebude fragmentován.

Manuálová stránka fallocate (1) je celkem jasné :

fallocate se používá k předběžnému přidělení bloků do souboru. Pro souborové systémy, které podporují fallocate systémového volání se to provede rychle přidělením bloků a jejich označením jako neinicializované, což nevyžaduje žádné IO do datových bloků. To je mnohem rychlejší než vytvoření souboru jeho vyplněním nulami.

Od jádra Linuxu v2.6.31 fallocate systémové volání je podporováno souborovými systémy btrfs, ext4, ocfs2 a xfs.

Je to sekvenční? Systém se nejprve pokusí přidělit bloky postupně. Pokud to nedokáže, nebude vás varovat.


Zmiňujete řídké soubory a žádná z dalších odpovědí je nezmínila.

Většina souborů není řídká. Nejběžnějším způsobem, jak vytvořit soubor, je napsat jej celý najednou, od začátku do konce. Nejsou tam žádné díry.

Můžete však říci „přesuňte se na pozici 1 000 000 000 000 a napište tam bajt“. Tím se vytvoří soubor, který vypadá jako etabajt velký, ale ve skutečnosti používá pouze (pravděpodobně) 4k na disku. Toto je řídký soubor.

Můžete to udělat mnohokrát pro stejný soubor a ponechat malé množství dat roztroušených po obrovské prázdnotě.

I když to může být užitečné, má to dvě nevýhody.

První je, že soubor bude fragmentován, čehož se obáváte.

Druhým je, že ne všechny programy zpracovávají tyto soubory dobře. Např. nějaký zálohovací software se pokusí zazálohovat prázdnotu, a tím vytvořit zálohu, která je mnohem větší, než je nutné, možná také velké pro záložní médium.


Linux
  1. Co jsou řídké soubory v Linuxu

  2. Amazon EC2 - plný disk

  3. mazání souborů, ale místo na disku je stále plné

  1. Odeberte soubory, které jsou uvedeny v textovém souboru

  2. Proč jsou soubory .so spustitelné?

  3. Ukládají se úpravy souborů v Linuxu přímo na disk?

  1. Skrytí dat v souborových systémech?

  2. Jak získat přístup k uloženým souborům na trvalém Liveusb?

  3. Co jsou soubory /dev/zero a /dev/null v Linuxu