F2FS - F2FS

F2FS
Vývojáři Samsung Electronics , Motorola Mobility , Huawei a Google
Celé jméno Flash-Friendly souborový systém
Představeno v3.8, 2012-12-20 s Linuxem
Struktury
Obsah adresáře víceúrovňová hashovací tabulka
Přidělení souboru bitmapa (volné místo), tabulka
Zaváděcí Ano, od GRUB 2.04 (2019-07-05)
Limity
Max. velikost svazku 16 TB
Max. velikost souboru 3,94 TB
Max. počet souborů Záleží na velikosti svazku
Max. délka názvu souboru 512 bajtů
Funkce
Zaznamenaná data modifikace (mtime), modifikace atributu (ctime), přístup (atime)
Rozlišení data 1 ns
Atributy POSIX, rozšířené atributy
Oprávnění systému souborů POSIX, ACL
Průhledná komprese LZO, LZ4 (od Linuxu 5.6), zstd (od Linuxu 5.7)
Transparentní šifrování Ano
jiný
Podporované operační systémy Linux a Android
webová stránka f2fs .wiki .kernel .org

F2FS ( Flash-Friendly File System ) je systém souborů flash původně vyvinutý společností Samsung Electronics pro jádro Linuxu .

Motivem F2FS bylo vytvořit systém souborů , že od samého počátku, bere v úvahu charakteristiky NAND flash pamětí na bázi zařízení pro ukládání dat (jako je solid-state disky , EMMC a SD karty), které jsou široce používány v počítači systémy od mobilních zařízení po servery.

F2FS byl navržen na základě logicky strukturovaného přístupu k souborovému systému , který je přizpůsoben novějším formám úložiště. Jaegeuk Kim, hlavní autor F2FS, uvedla, že nápravná opatření některé známé problémy starších log-strukturované souborové systémy, jako je efekt sněhové koule o putování stromy a vysoké čištění režií. Navíc, protože úložné zařízení založené na NAND vykazuje různé vlastnosti podle své vnitřní geometrie nebo schématu správy paměti flash (jako je Flash Translation Layer nebo FTL), podporuje různé parametry nejen pro konfiguraci rozložení na disku, ale také pro výběr alokačních a čisticích algoritmů.

Funkce

  • Protokolování více hlav
  • Víceúrovňová hashovací tabulka pro položky adresáře
  • Statická/dynamická separace dat za tepla a za studena
  • Schéma adaptivního protokolování
  • Konfigurovatelné provozní jednotky
  • Dvojí kontrolní bod
  • Obnovení vrácení a vrácení vpřed
  • Přidělení bloku ve stylu haldy
  • Podpora TRIM/FITRIM
  • Online defragmentace fs /defragmentace souboru
  • Vložené xattrs/data/dir
  • Offline kontrola souborového systému (Kontrola a oprava nekonzistence)
  • Atomové operace
  • Šifrování na úrovni souborového systému
  • Offline změna velikosti (zmenšení není podporováno.)
  • Vnitřní periodické proplachování dat
  • Rozsáhlá mezipaměť
  • Transparentní komprese souborů pomocí LZO nebo LZ4 (s Linuxem 5.6) nebo zstd (s Linuxem 5.7)

Design

Rozložení na disku

F2FS rozděluje celý svazek na několik segmentů, z nichž každý je pevně stanoven na 2 MB. Sekce se skládá z po sobě jdoucích segmentů a zóna se skládá ze sady sekcí. Ve výchozím nastavení jsou velikosti sekcí a zón nastaveny na stejnou velikost, ale uživatelé mohou velikost snadno upravit pomocí mkfs.

F2FS rozděluje celý svazek do šesti oblastí a všechny kromě oblasti superbloku se skládají z více segmentů, jak je popsáno níže.

Superblock (SB)
SB je umístěn na začátku oddílu. Aby nedošlo k poškození systému souborů, existují dvě kopie. Obsahuje základní informace o oddílech a některé výchozí parametry F2FS.
Kontrolní bod (CP)
CP obsahuje informace o systému souborů, bitmapy pro platné sady NAT/SIT, seznamy sirotkových uzlů a souhrnné záznamy aktuálních aktivních segmentů.
Informační tabulka segmentů (SIT)
SIT obsahuje platný počet bloků a bitmapu platnosti všech bloků hlavní oblasti.
Tabulka adres uzlů (NAT)
NAT je tabulka adres pro bloky uzlů hlavní oblasti.
Oblast souhrnu segmentu (SSA)
SSA obsahuje položky, které obsahují informace o majiteli dat hlavní oblasti a bloků uzlů.
Hlavní oblast
Hlavní oblast obsahuje data souborů a adresářů a jejich indexy.

Aby se předešlo nesouososti mezi souborovým systémem a flash úložištěm, F2FS zarovná počáteční blokovou adresu CP s velikostí segmentu. Rovněž zarovná adresu začátku bloku hlavní oblasti s velikostí zóny rezervováním některých segmentů v oblasti SSA.

Struktura metadat

F2FS používá schéma kontrolních bodů k zachování integrity systému souborů. V době připojení se F2FS nejprve pokusí vyhledat poslední platná data kontrolního bodu skenováním oblasti CP. Aby se zkrátil čas skenování, F2FS používá pouze dvě kopie CP. Jeden z nich vždy označuje poslední platná data, která se nazývá mechanismus stínové kopie. Kromě CP používají NAT a SIT také mechanismus stínové kopie. Kvůli konzistenci systému souborů každý CP ukazuje, na které kopie NAT a SIT jsou platné.

Struktura indexu

Klíčovou datovou strukturou je „uzel“. Podobně jako tradiční souborové struktury má F2FS tři typy uzlů: inode, přímý uzel, nepřímý uzel. F2FS přiřadí 4 kB bloku inodů, který obsahuje 923 indexů datových bloků, dva ukazatele přímých uzlů, dva ukazatele nepřímého uzlu a jeden dvojitý ukazatel nepřímého uzlu, jak je popsáno níže. Blok přímého uzlu obsahuje 1018 indexů datových bloků a blok nepřímého uzlu obsahuje 1018 indexů bloků uzlů. Jeden blok inodů (tj. Soubor) tedy pokrývá:

4 KB × (923 + 2×1018 + 2×10182 + 10183) = 3.94 TB

Všimněte si, že všechny bloky uzlů jsou mapovány pomocí NAT, což znamená, že umístění každého uzlu je překládáno pomocí NAT. Ke zmírnění problému s bloudícím stromem je F2FS schopen omezit šíření aktualizací uzlů způsobených zápisy listových dat.

Adresářová struktura

Položka adresáře (dentry) zabírá 11 bytů, která se skládá z následujících atributů.

Vstupní struktura adresáře
hash Hodnota hash názvu souboru
ino Inodové číslo
len Délka názvu souboru
typ Typ souboru, jako je adresář, symbolický odkaz atd.

Dentry blok se skládá z 214 slotů pro dentry a názvů souborů. Bitmapa se používá k vyjádření, zda je každý dentry platný nebo ne. Dentry blok zabírá 4 KB a má následující složení:

Dentry Block (4 K) = bitmap (27 bytes) + reserved (3 bytes) +
                      dentries (11 * 214 bytes) + file name (8 * 214 bytes)

F2FS implementuje víceúrovňové hashovací tabulky pro adresářovou strukturu. Každá úroveň má tabulku hash se vyhrazeným počtem sekcí hash, jak je znázorněno níže. Pamatujte, že „A (2B)“ znamená, že segment obsahuje 2 datové bloky.

Období
A označuje kbelík
B označuje blok
N označuje MAX_DIR_HASH_DEPTH
level #0    A(2B)
level #1    A(2B) - A(2B)
level #2    A(2B) - A(2B) - A(2B) - A(2B)
    ...
level #N/2  A(2B) - A(2B) - A(2B) - A(2B) - A(2B) - ... - A(2B)
    ...
level #N    A(4B) - A(4B) - A(4B) - A(4B) - A(4B) - ... - A(4B)

Když F2FS najde název souboru v adresáři, nejprve se vypočítá hodnota hash názvu souboru. Poté F2FS prohledá hashovací tabulku na úrovni #0, aby našel dentry skládající se z názvu souboru a jeho čísla inodu. Pokud není nalezen, F2FS prohledá další hashovací tabulku na úrovni #1. Tímto způsobem F2FS skeny hashovací tabulky v každé úrovni přírůstkově od 1 do N . Na každé úrovni musí F2FS skenovat pouze jeden segment určený následující rovnicí, která ukazuje O (log (počet souborů)) složitost.

 bucket number to scan in level #n = (hash value) % (# of buckets in level #n)

V případě vytváření souboru F2FS najde prázdné po sobě jdoucí sloty, které zakrývají název souboru. F2FS prohledává prázdné sloty v hashovacích tabulkách celých úrovní od 1 do N stejným způsobem jako operace vyhledávání.

Výchozí přidělení bloku

Za běhu spravuje F2FS šest aktivních protokolů v „hlavní oblasti“: data Hot/Warm/Cold a data Hot/Warm/Cold.

Zásady blokové alokace
Hot uzel Obsahuje přímé uzlové bloky adresářů.
Teplý uzel Obsahuje přímé bloky uzlů kromě bloků horkých uzlů.
Studený uzel Obsahuje bloky nepřímých uzlů.
Žhavá data Obsahuje dentry bloky.
Teplá data Obsahuje datové bloky kromě horkých a studených datových bloků.
Studená data Obsahuje multimediální data nebo migrované datové bloky.

LFS má dvě schémata pro správu volného místa: vláknový protokol a kopírování a zhutňování. Schéma kopírování a zhutňování, známé jako čištění, je vhodné pro zařízení vykazující velmi dobrý výkon sekvenčního zápisu, protože volné segmenty jsou obsluhovány po celou dobu pro zápis nových dat. Při vysokém využití však trpí úklidem nad hlavou. Naopak schéma vláknového protokolu trpí náhodným zápisem, ale není potřeba žádný proces čištění. F2FS přijímá hybridní schéma, kde je ve výchozím nastavení přijato schéma kopírování a zhutňování, ale zásada se dynamicky mění na schéma vláknového protokolu podle stavu systému souborů.

Aby bylo možné sladit F2FS s podkladovým úložištěm typu flash, F2FS přiděluje segment v jednotce sekce. F2FS očekává, že velikost sekce bude stejná jako velikost jednotky uvolňování paměti v FTL. S ohledem na granularitu mapování ve FTL, F2FS alokuje každou část aktivních protokolů do co nejvíce různých zón. FTL může zapisovat aktivní data protokolu do jedné alokační jednotky podle své mapovací granularity.

Proces čištění

F2FS provádí čištění jak na vyžádání, tak na pozadí. Čištění na vyžádání se spustí, když není k dispozici dostatek volných segmentů k obsluze volání VFS. Čistič pozadí je spuštěn vláknem jádra a spouští úlohu čištění, když je systém nečinný.

F2FS podporuje dvě zásady výběru obětí: chamtivé a nákladově výhodné algoritmy. V chamtivém algoritmu F2FS vybere obětní segment s nejmenším počtem platných bloků. V algoritmu nákladů a přínosů F2FS vybírá obětní segment podle stáří segmentu a počtu platných bloků, aby se vyřešil problém mlátícího bloku bloku, který je přítomen v chamtivém algoritmu. F2FS používá chamtivý algoritmus pro čištění na vyžádání, čistič pozadí používá algoritmus nákladů a přínosů.

Aby F2FS identifikoval, zda jsou data v obětním segmentu platná nebo ne, spravuje bitmapu. Každý bit představuje platnost bloku a bitmapa se skládá z bitového proudu pokrývajícího celé bloky v hlavní oblasti.

Přijetí

Motorola Mobility používá F2FS ve svých telefonech Moto G/E/X a Droid od roku 2012. Google poprvé použil F2FS ve svém Nexusu 9 v roce 2014. Ostatní produkty Google však F2FS přijaly až v Pixel 3, když byl F2FS aktualizován pomocí vloženého krypto hardwarová podpora.

Huawei používá F2FS od Huawei P9 v roce 2016. OnePlus používá F2FS od OnePlus 3T v roce 2016. ZTE používá F2FS od ZTE Axon 10 Pro v roce 2019.

Arch Linux a Gentoo Linux podporují F2FS, Debian jej podporuje také od verze 10 výše.

Viz také

Reference

externí odkazy