F2FS - F2FS

F2FS
Geliştirici(ler) Samsung Electronics , Motorola Mobility , Huawei ve Google
Ad Soyad Flash Dostu Dosya Sistemi
tanıtıldı v3.8, 2012-12-20 Linux ile
Yapılar
Dizin içeriği çok seviyeli hash tablosu
Dosya tahsisi bitmap (boş alan), tablo
önyüklenebilir Evet, GRUB 2.04'ten başlayarak (2019-07-05)
limitler
Maks. hacim boyutu 16 TB
Maks. Dosya boyutu 3,94 TB
Maks. dosya sayısı Hacim boyutuna bağlıdır
Maks. dosya adı uzunluğu 512 bayt
Özellikleri
Kaydedilen tarihler değişiklik (mtime), öznitelik değişikliği (ctime), erişim (atime)
Tarih çözünürlüğü 1 ns
Öznitellikler POSIX, genişletilmiş özellikler
Dosya sistemi izinleri POSIX, ACL
Şeffaf sıkıştırma LZO, LZ4 (Linux 5.6'dan beri), zstd (Linux 5.7'den beri)
Şeffaf şifreleme Evet
Başka
Desteklenen işletim sistemleri Linux ve Android
İnternet sitesi f2fs .wiki .kernel .org

F2FS ( Flash Dostu Dosya Sistemi ), başlangıçta Samsung Electronics tarafından Linux çekirdeği için geliştirilmiş bir flash dosya sistemidir .

F2FS'nin amacı , başlangıçtan itibaren, bilgisayarlarda yaygın olarak kullanılan NAND flash bellek tabanlı depolama cihazlarının ( katı hal diskleri , eMMC ve SD kartlar gibi) özelliklerini dikkate alan bir dosya sistemi oluşturmaktı. mobil cihazlardan sunuculara kadar değişen sistemler.

F2FS, daha yeni depolama biçimlerine uyarlanmış, günlük yapılı dosya sistemi yaklaşımı temelinde tasarlanmıştır . Jaegeuk Kim, asıl F2FS yazar, ifade ettiğini o ilaçları gibi eski günlük yapılı dosya sistemleri, bazı bilinen sorunlar kartopu etkisi ait dolaşıp ağaçlara ve yüksek temizleme yükü. Ayrıca, NAND tabanlı bir depolama aygıtı, dahili geometrisine veya flash bellek yönetim şemasına ( Flash Translation Layer veya FTL gibi) göre farklı özellikler gösterdiğinden , yalnızca disk düzenini yapılandırmak için değil, aynı zamanda aşağıdakiler için de çeşitli parametreleri destekler. tahsis ve temizleme algoritmalarının seçilmesi.

Özellikleri

  • Çok kafalı günlük kaydı
  • Dizin girişleri için çok seviyeli karma tablo
  • Statik/dinamik sıcak ve soğuk veri ayrımı
  • Uyarlanabilir günlük düzeni
  • Yapılandırılabilir operasyonel birimler
  • Çift kontrol noktası
  • Geri alma ve ileri sarma kurtarma
  • Yığın tarzı blok tahsisi
  • TRIM/FITRIM desteği
  • Çevrimiçi fs birleştirme / dosya birleştirme
  • Satır içi xattrs/data/dir
  • Çevrimdışı dosya sistemi kontrolü (Tutarsızlığı kontrol edin ve düzeltin)
  • atomik işlemler
  • Dosya sistemi düzeyinde şifreleme
  • Çevrimdışı yeniden boyutlandırma (küçültme desteklenmez.)
  • Dahili periyodik veri yıkama
  • Kapsam önbelleği
  • LZO veya LZ4 (Linux 5.6 ile) veya zstd (Linux 5.7 ile) kullanarak şeffaf dosya sıkıştırma

Tasarım

Disk düzeni

F2FS, tüm birimi, her biri 2 MB'de sabitlenmiş bir dizi segmente böler. Bir bölüm ardışık bölümlerden oluşur ve bir bölge bir dizi bölümden oluşur. Varsayılan olarak, bölüm ve bölge boyutları aynı boyuta ayarlanmıştır, ancak kullanıcılar boyutu ile kolayca değiştirebilir mkfs.

F2FS, tüm hacmi altı alana böler ve süper blok alanı hariç tümü, aşağıda açıklandığı gibi birden çok bölümden oluşur.

Süper blok (SB)
SB, bölümün başında bulunur. Dosya sistemi bozulmasını önlemek için iki kopya vardır. Temel bölüm bilgilerini ve bazı varsayılan F2FS parametrelerini içerir.
Kontrol noktası (CP)
CP, dosya sistemi bilgilerini, geçerli NAT/SIT kümeleri için bit eşlemleri, yetim düğüm listelerini ve geçerli etkin bölümlerin özet girişlerini içerir.
Segment Bilgi Tablosu (SIT)
SIT, tüm Ana Alan bloklarının geçerli blok sayısını ve geçerlilik bit eşlemini içerir.
Düğüm Adres Tablosu (NAT)
NAT, Ana Alan düğüm blokları için bir adres tablosudur.
Segment Özet Alanı (SSA)
SSA, Ana Alan verilerinin ve düğüm bloklarının sahip bilgilerini içeren girişleri içerir.
Ana alan
Ana alan, dosya ve dizin verilerini ve bunların dizinlerini içerir.

Dosya sistemi ve flash depolama arasında yanlış hizalamayı önlemek için F2FS, CP'nin başlangıç ​​bloğu adresini segment boyutuyla hizalar. Ayrıca, SSA alanındaki bazı segmentleri ayırarak Ana Alan başlangıç ​​bloğu adresini bölge boyutuyla hizalar.

Meta veri yapısı

F2FS, dosya sistemi bütünlüğünü korumak için kontrol noktası şemasını kullanır. Montaj zamanında, F2FS önce CP alanını tarayarak son geçerli kontrol noktası verilerini bulmaya çalışır. Tarama süresini azaltmak için F2FS, CP'nin yalnızca iki kopyasını kullanır. Bunlardan biri her zaman gölge kopya mekanizması adı verilen son geçerli verileri gösterir. CP'ye ek olarak, NAT ve SIT de gölge kopya mekanizmasını kullanır. Dosya sistemi tutarlılığı için her CP, hangi NAT ve SIT kopyalarının geçerli olduğunu gösterir.

dizin yapısı

Anahtar veri yapısı "düğüm"dür. Geleneksel dosya yapılarına benzer şekilde, F2FS'nin üç tür düğümü vardır: inode, doğrudan düğüm, dolaylı düğüm. F2FS, aşağıda açıklandığı gibi 923 veri bloğu indeksi, iki doğrudan düğüm işaretçisi, iki dolaylı düğüm işaretçisi ve bir çift dolaylı düğüm işaretçisi içeren bir inode bloğuna 4 KB atar. Doğrudan bir düğüm bloğu, 1018 veri bloğu indeksi içerir ve bir dolaylı düğüm bloğu, 1018 düğüm bloğu indeksi içerir. Böylece, bir düğüm bloğu (yani bir dosya) şunları kapsar:

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

Tüm düğüm bloklarının NAT tarafından eşlendiğine dikkat edin; bu, her düğümün konumunun NAT tarafından çevrildiği anlamına gelir. Gezici ağaç sorununu azaltmak için F2FS, yaprak veri yazmalarının neden olduğu düğüm güncellemelerinin yayılmasını kesebilir.

dizin yapısı

Bir dizin girişi (diş hekimliği), aşağıdaki özniteliklerden oluşan 11 baytlık bir yer kaplar.

Bir dizin giriş yapısı
doğramak Dosya adının karma değeri
ben hayır düğüm numarası
uzun Dosya adının uzunluğu
tip Dizin, sembolik bağlantı vb. gibi dosya türleri.

Bir diş bloğu, 214 dişçilik yuvası ve dosya adından oluşur. Her dişçiliğin geçerli olup olmadığını göstermek için bir bitmap kullanılır. Bir diş bloğu 4 KB yer kaplar ve aşağıdaki bileşime sahiptir:

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

F2FS, dizin yapısı için çok düzeyli karma tabloları uygular. Her seviyede, aşağıda gösterildiği gibi özel sayıda karma kovası olan bir karma tablosu vardır. "A(2B)" ifadesinin bir kovanın 2 veri bloğu içerdiği anlamına geldiğini unutmayın.

Terim
A, kovayı gösterir
B bloğu gösterir
N, MAX_DIR_HASH_DEPTH'yi gösterir
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)

F2FS bir dizinde bir dosya adı bulduğunda, önce dosya adının bir karma değeri hesaplanır. Ardından, F2FS, dosya adı ve inode numarasından oluşan dişçiyi bulmak için #0 düzeyindeki karma tablosunu tarar. Bulunamazsa, F2FS, düzey #1'deki bir sonraki karma tabloyu tarar. Bu şekilde, 1 ila aşamalı olarak her düzeyde F2FS tarar karma tablo N . Her düzeyde F2FS'nin, O(log(# of files)) karmaşıklığını gösteren aşağıdaki denklem tarafından belirlenen yalnızca bir kovayı taraması gerekir.

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

Dosya oluşturma durumunda, F2FS dosya adını kapsayan boş ardışık yuvaları bulur. F2FS , arama işlemiyle aynı şekilde 1'den N'ye kadar tüm seviyelerin karma tablolarındaki boş yuvaları arar .

Varsayılan blok tahsisi

Çalışma zamanında, F2FS "Ana Alan" içindeki altı aktif günlüğü yönetir: Sıcak/Sıcak/Soğuk düğümü ve Sıcak/Sıcak/Soğuk verileri.

Blok ayırma politikası
Sıcak düğüm Doğrudan düğüm dizin bloklarını içerir.
sıcak düğüm Sıcak düğüm blokları dışında doğrudan düğüm bloklarını içerir.
Soğuk düğüm Dolaylı düğüm blokları içerir.
Sıcak veriler Diş blokları içerir.
Sıcak veriler Sıcak ve soğuk veri blokları dışındaki veri bloklarını içerir.
Soğuk veri Multimedya verilerini veya taşınan veri bloklarını içerir.

LFS'nin boş alan yönetimi için iki planı vardır: iş parçacıklı günlük ve kopyala ve sıkıştır. Temizleme olarak bilinen kopyala ve sıkıştır şeması, çok iyi sıralı yazma performansı gösteren cihazlar için çok uygundur, çünkü yeni veri yazmak için her zaman ücretsiz segmentler sunulur. Bununla birlikte, yüksek kullanım sırasında temizleme yükünden muzdariptir. Tersine, iş parçacıklı günlük şeması rastgele yazmalardan muzdariptir, ancak temizleme işlemine gerek yoktur. F2FS, kopyalama ve sıkıştırma şemasının varsayılan olarak benimsendiği, ancak dosya sistemi durumuna göre politikanın dinamik olarak iş parçacıklı günlük şemasına değiştirildiği karma bir şema benimser.

F2FS'yi temel flash tabanlı depolama ile hizalamak için F2FS, bir bölümün birimine bir segment ayırır. F2FS, bölüm boyutunun FTL'deki çöp toplama birimi boyutuyla aynı olmasını bekler. FTL'deki eşleme ayrıntı düzeyi ile ilgili olarak, F2FS, etkin günlüklerin her bir bölümünü mümkün olduğu kadar çok farklı bölgeye tahsis eder. FTL, etkin günlük verilerini eşleme ayrıntı düzeyine göre tek bir ayırma birimine yazabilir.

Temizleme işlemi

F2FS, hem talep üzerine hem de arka planda temizlik yapar. VFS çağrıları sunmak için yeterli boş segment olmadığında isteğe bağlı temizleme tetiklenir. Arka plan temizleyici bir çekirdek iş parçacığı tarafından yürütülür ve sistem boştayken temizleme işini tetikler.

F2FS, iki kurban seçim politikasını destekler: açgözlü ve maliyet-fayda algoritmaları. Açgözlü algoritmada F2FS, en az sayıda geçerli bloğa sahip bir kurban segmenti seçer. Maliyet-fayda algoritmasında, F2FS, açgözlü algoritmada mevcut olan log blok thrashing problemini ele almak için segment yaşına ve geçerli blok sayısına göre bir kurban segmenti seçer. F2FS, isteğe bağlı temizlik için açgözlü algoritmayı kullanır, arka plan temizleyici maliyet-fayda algoritmasını kullanır.

Kurban segmentindeki verilerin geçerli olup olmadığını belirlemek için F2FS bir bitmap yönetir. Her bit, bir bloğun geçerliliğini temsil eder ve bitmap, Ana Alandaki tüm blokları kapsayan bir bit akışından oluşur.

Benimseme

Motorola Mobility , 2012'den beri Moto G/E/X ve Droid telefonlarında F2FS kullanıyor . Google, F2FS'yi ilk olarak 2014'te Nexus 9'larında kullandı . Ancak Google'ın diğer ürünleri , F2FS satır içi kripto ile güncellendiğinde Pixel 3'e kadar F2FS'yi benimsemedi. donanım desteği.

Huawei'nin yana F2FS kullandı Huawei P9 2016 yılında OnePlus 2016 yılında OnePlus 3T yana F2FS kullandı ZTE 2019 Pro ZTE Axon tarihi 10 F2FS kullanmıştır.

Arch Linux ve Gentoo Linux F2FS'yi destekler , Debian da sürüm 10'dan itibaren destekler.

Ayrıca bakınız

Referanslar

Dış bağlantılar