btrfs - Btrfs

Btrf'ler
Geliştirici(ler) Facebook , Fujitsu , Fusion-IO , Intel , Linux Foundation , Netgear , Oracle Corporation , Red Hat , STRATO AG ve openSUSE
Ad Soyad B-ağacı dosya sistemi
tanıtıldı Linux çekirdeği 2.6.29, Mart 2009 ; 12 yıl önce ( 2009-03 )
Yapılar
Dizin içeriği B ağacı
Dosya tahsisi Kapsamlar
limitler
Maks. hacim boyutu 16  EiB
Maks. Dosya boyutu 16 EiB
Maks. dosya sayısı 2 64
Maks. dosya adı uzunluğu 255 ASCII karakter ( Unicode gibi çok baytlı karakter kodlamaları için daha az )
Dosya adlarında izin verilen karakterler '/'ve NUL( '\0') hariç tümü
Özellikleri
Kaydedilen tarihler Oluşturma (otime), değişiklik (mtime), öznitelik değişikliği (ctime) ve erişim (atime)
Tarih aralığı 1970-01-01T00:00:00Z'den 64-bit imzalı int ofseti
Tarih çözünürlüğü nanosaniye
Öznitellikler POSIX ve genişletilmiş özellikler
Dosya sistemi izinleri POSIX ve ACL
Şeffaf sıkıştırma Evet ( zlib , LZO ve ( 4.14'ten beri) ZSTD )
Şeffaf şifreleme planlı
Veri tekilleştirme Evet
Yazma üzerine kopyalama Evet
Başka
Desteklenen işletim sistemleri Linux , ReactOS
İnternet sitesi btrfs .wiki .kernel .org Bunu Vikiveri'de düzenleyin

Btrfs ("daha iyi FS ", "tereyağı FS", "b-ağacı FS " olarak telaffuz edilir veya basitçe yazıldığından), yazma üzerine kopyala (COW) ilkesine dayalı bir dosya sistemini birleştiren bir bilgisayar depolama biçimidir. birlikte geliştirilen mantıksal bir birim yöneticisiyle (Linux'un LVM'si ile karıştırılmamalıdır ). Başlangıçta Oracle Corporation'da 2007'de Linux'ta kullanılmak üzere tasarlandı ve Kasım 2013'ten bu yana dosya sisteminin disk üzerindeki biçimi Linux çekirdeğinde kararlı olarak ilan edildi. Oracle'a göre, Btrfs "gerçek bir kısaltma değil".

Btrfs, Linux dosya sistemlerinde havuz oluşturma , anlık görüntüler , sağlama toplamları ve tümleşik çoklu cihaz kapsamı eksikliğini gidermeyi amaçlamaktadır . Btrfs'in baş yazarı Chris Mason, amacının "[Linux]'un mevcut olacak depolamayı ölçeklendirmesine izin vermek olduğunu belirtti. Ölçeklendirme sadece depolamayı ele almakla ilgili değil, aynı zamanda onu temiz bir şekilde yönetebilmek ve yönetebilmek anlamına geliyor. insanların ne kullanıldığını görmelerini sağlayan ve onu daha güvenilir hale getiren arayüz".

Tarih

Btrfs dosya sisteminin kullanım bilgilerinin ekran görüntüsü

Btrfs kopya üzerinde yazma çekirdek veri yapısı B-tree -edildi aslen bir sunumda, IBM araştırmacısı Ohad Rodeh önerdiği USENIX 2007. Chris Mason, çalışan bir mühendis ReiserFS'deki için SUSE zamanda daha sonra Oracle katıldı o yıl ve bu B-ağaçlarına dayalı yeni bir dosya sistemi üzerinde çalışmaya başladı.

2008 yılında, ext3 ve ext4 dosya sistemlerinin baş geliştiricisi Theodore Ts'o , ext4'ün gelişmiş özelliklere sahip olmasına rağmen, bunun büyük bir ilerleme olmadığını belirtti; eski teknolojiyi kullanır ve bir durak noktasıdır. Ts'o, Btrfs'nin "ölçeklenebilirlik, güvenilirlik ve yönetim kolaylığı konularında iyileştirmeler sunduğu" için daha iyi bir yön olduğunu söyledi. Btrfs ayrıca " reiser3 / 4'ün sahip olduğu aynı tasarım fikirlerine " sahiptir.

Btrfs 1.0, son haline getirilmiş disk formatı ile, orijinal olarak 2008 sonlarında bir sürüm için planlanmıştı ve nihayet 2009'da Linux çekirdeği ana hattına kabul edildi . Birkaç Linux dağıtımı , kurulum sırasında deneysel bir kök dosya sistemi seçeneği olarak Btrfs'yi sunmaya başladı .

Temmuz 2011'de, Btrfs otomatik birleştirme ve temizleme özellikleri, Linux çekirdek ana hattının 3.0 sürümünde birleştirildi . Oracle'da Mason'ın yanı sıra Fujitsu'da Miao Xie performans iyileştirmelerine katkıda bulundu. Haziran 2012'de Chris Mason , bir yıl sonra Josef Bacik ile birlikte Facebook'a katılmak için ayrıldığı Fusion-io için Oracle'dan ayrıldı . Her iki şirkette de Mason, Btrfs üzerindeki çalışmalarına devam etti.

2012'de iki Linux dağıtımı, Btrfs'yi deneyselden üretime veya desteklenen duruma taşıdı: Mart'ta Oracle Linux ve Ağustos'ta SUSE Linux Enterprise .

2015 yılında Btrfs, SUSE Linux Enterprise Server 12 için varsayılan dosya sistemi olarak kabul edildi .

Ağustos 2017'de Red Hat, Red Hat Enterprise Linux (RHEL) 7.4 sürüm notlarında , RHEL 6 beta'dan bu yana bir "teknoloji önizlemesi" olarak dahil edilen Btrfs'yi artık tam olarak desteklenen bir özelliğe taşımayı planlamadığını duyurdu. RHEL 7 sürüm serisinde mevcut kalacağını belirterek. Btrfs, Mayıs 2019'da RHEL 8'den kaldırıldı.

2020'de masaüstü varyantları için Fedora 33 için varsayılan dosya sistemi olarak Btrfs seçildi.

Özellikleri

uygulandı

Linux çekirdeğinin 5.0 sürümünden itibaren Btrfs aşağıdaki özellikleri uygular:

  • Yazma üzerine kopyalamanın doğası gereği bazı konfigürasyonlarda çoğunlukla kendi kendini onaran
  • Çevrimiçi birleştirme ve otomatik birleştirme bağlama seçeneği
  • Çevrimiçi hacim büyümesi ve küçülmesi
  • Çevrimiçi blok cihaz ekleme ve kaldırma
  • Çevrimiçi dengeleme (yükü dengelemek için nesnelerin blok cihazlar arasında hareketi)
  • Çevrimdışı dosya sistemi kontrolü
  • Hataları bulmak ve gereksiz kopyaları olan dosyalar için bunları otomatik olarak düzeltmek için çevrimiçi veri temizleme
  • RAID 0 , RAID 1 ve RAID 10
  • Alt hacimler ( her disk bölümü içinde bir veya daha fazla ayrı olarak monte edilebilir dosya sistemi kökü )
  • zlib , LZO ve ( 4.14'ten beri) ZSTD aracılığıyla şeffaf sıkıştırma , dosya veya birim başına yapılandırılabilir
  • Atomik yazılabilir (yazma üzerine kopyalama yoluyla) veya alt hacimlerin salt okunur Anlık Görüntüleri
  • Dosya klonlama ( referans linkinizi , kopya üzerinde yazma) üzerindencp --reflink <source file> <destination file>
  • Veriler ve meta veriler üzerinde sağlama toplamları ( CRC-32C ). 5.5'ten beri yeni hash fonksiyonları uygulanmaktadır: xxHash , SHA256 , BLAKE2B .
  • Ext3/4'ten Btrfs'ye yerinde dönüştürme (geri alma ile). Bu özellik, 4.6'da sıfırdan yeniden yazılan btrfs-progs sürüm 4.0 civarında geriledi.
  • Dosya sistemi tohumlaması olarak bilinen salt okunur depolamanın birleşik montajı (yazılabilir bir Btrfs için yazma üzerine kopyalama desteği olarak kullanılan salt okunur depolama)
  • Atmayı engelle (bazı sanallaştırılmış kurulumlarda yer kaplar ve TRIM ile SSD'lerde aşınma düzeyini iyileştirir )
  • (Tasarruf gönder / al diffs bir ikili akışına anlık arasında)
  • Artımlı yedekleme
  • Bant dışı veri tekilleştirme (kullanıcı alanı araçları gerektirir)
  • Takas dosyalarını işleme ve bölümleri takas etme yeteneği

Uygulandı, ancak üretim kullanımı için önerilmez

Planlandı ancak henüz uygulanmadı

  • Bant içi veri tekilleştirme
  • Çevrimiçi dosya sistemi kontrolü
  • Altı adede kadar eşlik aygıtına sahip RAID, RAID 5 ve RAID 6'nın güvenilirliğini aşar
  • Nesne düzeyinde RAID 0, RAID 1 ve RAID 10
  • şifreleme
  • Kalıcı okuma ve yazma önbelleği ( L2ARC + ZIL , lvmcache vb.)

2009'da Btrfs'in Sun Microsystems tarafından geliştirilen ZFS ile karşılaştırılabilir bir özellik seti sunması bekleniyordu . Oracle'ın 2009'da Sun'ı satın almasının ardından Mason ve Oracle, Btrfs geliştirmeye devam etmeye karar verdi.

klonlama

Btrfs bir sağlar klon operasyonu atomik bir kopyası üzerinde yazma anlık görüntü oluşturur dosyası . Bu tür klonlanmış dosyalara , önerilen ilişkili Linux çekirdek sistem çağrısı ışığında bazen yeniden bağlantılar olarak atıfta bulunulur .

Klonlamayla, dosya sistemi var olan bir düğüme işaret eden yeni bir bağlantı oluşturmaz ; bunun yerine, başlangıçta orijinal dosyayla aynı disk bloklarını paylaşan yeni bir düğüm oluşturur. Sonuç olarak, klonlama yalnızca aynı Btrfs dosya sisteminin sınırları içinde çalışır, ancak Linux çekirdeğinin 3.6 sürümünden bu yana, belirli koşullar altında alt birimlerin sınırlarını geçebilir. Gerçek veri blokları çoğaltılmaz; aynı zamanda, Btrfs'nin yazma üzerine kopyalama (CoW) yapısı nedeniyle, klonlanmış dosyalardan herhangi birinde yapılan değişiklikler orijinal dosyada görünmez ve bunun tersi de geçerlidir.

Klonlama , birden çok dosya adını bir dosya sistemindeki gerçek dosyalarla ilişkilendiren dizin girdileri olan sabit bağlantılar ile karıştırılmamalıdır . Sabit bağlantılar aynı dosya için farklı isimler olarak alınabilirken, Btrfs'de klonlama, başlangıçta tüm disk bloklarını paylaşan bağımsız dosyalar sağlar.

Bu Btrfs özelliği için destek , komut seçeneği aracılığıyla GNU coreutils'in 7.5 sürümüne eklendi . --reflinkcp

Veri klonlamaya ( FICLONE ) ek olarak , Btrfs ayrıca FIDEDUPERANGE aracılığıyla bant dışı tekilleştirmeyi de destekler . Bu işlevsellik, (kısmen de olsa) aynı verilere sahip iki dosyanın depolamayı paylaşmasına izin verir.

Alt hacimler ve anlık görüntüler

Snapper ile yönetilen bir Btrfs dosya sisteminin anlık görüntüleri örneği

Bir Btrfs alt hacim ayrı POSIX dosya olarak düşünülebilir ad , monte geçerek ayrı ayrı subvolveya subvolidseçenekler mount(8)yardımcı programı. Ayrıca, üst düzey alt birim monte edilerek de erişilebilir; bu durumda alt birimler, alt dizinleri olarak görünür ve erişilebilir durumdadır.

Alt hacimler, dosya sistemi hiyerarşisi içinde herhangi bir yerde oluşturulabilir ve bunlar iç içe yerleştirilebilir. İç içe geçmiş alt birimler, üst düzey bir alt birimin alt birimlerini alt dizinler olarak sunmasına benzer şekilde, üst alt birimleri içinde alt dizinler olarak görünür. İç içe yerleştirme hiyerarşisinde altındaki tüm alt hacimler silinene kadar bir alt birimin silinmesi mümkün değildir; sonuç olarak, üst düzey alt hacimler silinemez.

Herhangi bir Btrfs dosya sisteminin her zaman varsayılan bir alt hacmi vardır; bu, başlangıçta en üst düzey alt birim olarak ayarlanır ve mount. Varsayılan alt hacim gerektiği gibi değiştirilebilir.

Bir Btrfs anlık görüntüsü , Btrfs'nin yazma üzerine kopyalama yeteneklerini kullanarak verilerini (ve meta verilerini) başka bir alt birim ile paylaşan bir alt birimdir ve bir anlık görüntüde yapılan değişiklikler orijinal alt birim içinde görünmez. Yazılabilir bir anlık görüntü oluşturulduğunda, orijinal dosya sisteminin alternatif bir sürümü olarak ele alınabilir. Örneğin, bir anlık görüntüye geri dönmek için, değiştirilmiş bir orijinal alt birimin bağlantısının kesilmesi ve anlık görüntünün yerine takılması gerekir. Bu noktada, orijinal alt hacim de silinebilir.

Btrfs'nin yazma üzerine kopyalama (CoW) doğası, başlangıçta çok az disk alanı tüketirken anlık görüntülerin hızlı bir şekilde oluşturulduğu anlamına gelir. Anlık görüntü bir alt hacim olduğundan, iç içe anlık görüntüler oluşturmak da mümkündür. Bir alt hacmin anlık görüntülerini almak özyinelemeli bir süreç değildir; bu nedenle, bir alt birimin anlık görüntüsü oluşturulursa, alt birimin zaten içerdiği her alt birim veya anlık görüntü, anlık görüntü içinde aynı ada sahip boş bir dizine eşlenir.

Yalnızca alt hacimlerin anlık görüntüleri olabileceğinden, bir dizinin anlık görüntülerini almak mümkün değildir. Ancak, alt birimlere yayılmış yeniden bağlantıları içeren bir geçici çözüm vardır: hedeflenen dizinin içeriğine çapraz alt hacim yeniden bağlantıları içeren yeni bir alt birim oluşturulur. Bu mevcut olduğunda, bu yeni birimin bir anlık görüntüsü oluşturulabilir.

Btrfs'deki bir alt birim, geleneksel Mantıksal Birim Yöneticisi (LVM) mantıksal biriminden oldukça farklıdır . LVM ile, mantıksal bir birim ayrı bir blok aygıtı iken, bir Btrfs alt hacmi böyle değildir ve bu şekilde ele alınamaz veya kullanılamaz. Her ikisi de aynı bilgisayardayken orijinal veya kopya takılıysa, btrfs'nin dd veya LVM anlık görüntülerini oluşturmak veri kaybına yol açar.

Gönder-al

Herhangi bir alt hacim çifti (veya anlık görüntü) verildiğinde, Btrfs, daha sonra ( kullanılarak ) muhtemelen farklı bir Btrfs dosya sisteminde yeniden oynatılabilen (komut kullanılarak) aralarında ikili bir fark oluşturabilir . Gönder-al özelliği, bir alt hacmi diğerine dönüştürmek için gereken bir dizi veri değişikliğini etkin bir şekilde oluşturur (ve uygular). btrfs sendbtrfs receive

Gönder/al özelliği, basit bir dosya sistemi çoğaltma biçimi uygulamak için veya artımlı yedeklemeler gerçekleştirmek amacıyla düzenli olarak zamanlanmış anlık görüntülerle kullanılabilir .

kota grupları

Btrfs kota grupları örneği

Bir kota grubu (veya qgroup ), bir alt hacmin veya anlık görüntünün tüketebileceği alana bir üst sınır getirir. Yeni bir anlık görüntü, verileri üst öğesiyle paylaşıldığından başlangıçta kota tüketmez, ancak daha sonra yeni dosyalar ve mevcut dosyalar üzerinde yazma üzerine yazma işlemleri için ücretlendirilir. Kotalar etkin olduğunda, her yeni alt hacim veya anlık görüntü ile otomatik olarak bir kota grubu oluşturulur. Bu ilk kota grupları, btrfs qgroupkota havuzlarını uygulamak için hiyerarşiler halinde gruplandırılabilen ( komutla birlikte) yapı taşlarıdır .

Kota grupları yalnızca alt hacimler ve anlık görüntüler için geçerlidir; tek tek alt dizinler, kullanıcılar veya kullanıcı grupları üzerinde kota uygulanması mümkün değildir. Ancak, bir kotanın uygulanması gereken tüm kullanıcılar veya kullanıcı grupları için farklı alt birimler kullanılarak geçici çözümler mümkündür.

ext2/3/4 ve ReiserFS'den yerinde dönüştürme

Sabit konumlara sabitlenmiş çok az meta veriye sahip olmanın bir sonucu olarak, Btrfs, arka uç depolama cihazlarının olağandışı uzamsal düzenlerine uyacak şekilde çarpıtılabilir. btrfs-convertAracı Bir ext2 / 3/4 veya bir yerinde dönüşüm yapmak için bu yeteneği açıklarını ReiserFS , orijinal dosya sisteminin değiştirilmemiş bir kopyasını korurken uzay-onun ayrılmamış eşdeğer Btrfs meta yerleştirerek dosya sistemi.

Dönüştürme, tüm ext2/3/4 meta verilerinin bir kopyasını oluşturmayı içerirken, Btrfs dosyaları yalnızca ext2/3/4 dosyaları tarafından kullanılan bloklara işaret eder. Bu, dönüşüm kalıcı hale gelmeden önce iki dosya sistemi arasında paylaşılan blokların çoğunu yapar. Btrfs'nin yazma üzerine kopyalama özelliği sayesinde, tüm dosya değişiklikleri sırasında dosya veri bloklarının orijinal sürümleri korunur. Dönüşüm kalıcı hale gelene kadar, yeni Btrfs değişikliklerini tutmak için yalnızca ext2/3/4'te ücretsiz olarak işaretlenen bloklar kullanılır; bu, dönüştürmenin herhangi bir zamanda geri alınabileceği anlamına gelir (ancak bunu yapmak, dönüştürmeden sonra yapılan değişiklikleri silecektir). Btrfs'ye).

Dönüştürülen tüm dosyalar, Btrfs'nin varsayılan alt biriminde bulunur ve yazılabilir. Orijinal ext2/3/4 dosya sistemine yapılan tüm referansları içeren seyrek bir dosya, kendi başına salt okunur bir disk görüntüsü olarak monte edilebilen ve hem orijinal hem de dönüştürülmüş dosya sistemlerine erişime izin veren ayrı bir alt hacimde oluşturulur. aynı zamanda. Bu seyrek dosyayı silmek, alanı boşaltır ve dönüştürmeyi kalıcı hale getirir.

Ana hat Linux çekirdeğinin 4.x sürümlerinde, yerinde ext3/4 dönüşümü denenmemiş ve nadiren kullanılmış olarak kabul edildi. Ancak, özellik 2016 yılında btrfs-progs4.6 için sıfırdan yeniden yazılmıştır . ve o zamandan beri istikrarlı olarak kabul edildi.

ReiserFS'den yerinde dönüştürme, Eylül 2017'de çekirdek 4.13 ile tanıtıldı.

Birlik montajı / tohum cihazları

Yeni bir Btrfs oluştururken, mevcut bir Btrfs, salt okunur bir "tohum" dosya sistemi olarak kullanılabilir. Yeni dosya sistemi, daha sonra, bir birleşim montajı biçimi olarak, tohum üzerinde yazma üzerine kopyalanan bir bindirme görevi görecektir . Çekirdek daha sonra Btrfs'den ayrılabilir; bu noktada yeniden dengeleyici, ayırmadan önce yeni dosya sistemi tarafından hala referans verilen herhangi bir tohum verisini kopyalayacaktır. Mason , bunun bir optik diskteki salt okunur bir Btrfs çekirdeğinden önyükleme yapabilen, kullanıcı çalışmaya devam ederken arka planda yükleme diskindeki hedef bölüme göre yeniden dengeleyebilen ve ardından diski çıkarabilen bir Canlı CD yükleyicisi için yararlı olabileceğini öne sürdü. Yeniden başlatmadan yüklemeyi tamamlamak için disk.

şifreleme

2009 röportajında ​​Chris Mason, Btrfs için şifreleme desteğinin planlandığını belirtti. Bu arada, şifrelemeyi Btrfs ile birleştirmek için bir geçici çözüm , temel alınan cihazlarda dm-crypt  / LUKS gibi bir tam disk şifreleme mekanizması kullanmak ve bu katmanın üzerinde Btrfs dosya sistemini oluşturmaktır.

2020 itibariyle, geliştiriciler HMAC ( SHA256 ) gibi anahtarlı karma eklemek için çalışıyorlardı .

Kontrol ve kurtarma

Unix sistemleri, dosya sistemlerini kontrol etmek ve onarmak için geleneksel olarak " fsck " programlarına güvenir . Bu işlevsellik btrfs checkprogram aracılığıyla uygulanır . 4.0 sürümünden bu yana bu işlevsellik nispeten kararlı kabul edilir. Ancak, Ağustos 2017 itibariyle, btrfs belgeleri, bunun yalnızca diğer kurtarma yöntemlerini denedikten sonra kullanılmasını önermektedir.

btrfs-restoreBağlanamayan bir dosya sisteminden, bozuk dosya sistemini değiştirmeden (yani, tahribatsız bir şekilde) dosyaları kurtarmak için kullanılabilecek , adlı başka bir araç vardır .

Normal kullanımda, Btrfs çoğunlukla kendi kendini onarır ve varsayılan olarak her 30 saniyede bir kalıcı depolamaya periyodik veri boşaltmaları yapılması sayesinde, bağlama zamanında kırık kök ağaçlarından kurtarılabilir. Bu nedenle, izole edilmiş hatalar, bir sonraki bağlamada maksimum 30 saniyelik dosya sistemi değişikliklerinin kaybolmasına neden olur. Bu süre, commitmount seçeneği için istenen bir değer (saniye cinsinden) belirtilerek değiştirilebilir .

Tasarım

Ohad Rodeh'in USENIX 2007'deki orijinal önerisi, veritabanları için disk üstü veri yapıları olarak yaygın olarak kullanılan B+ ağaçlarının , yaprak düğümleri birbirine bağlı olduğu için yazma üzerine kopyalama tabanlı anlık görüntülere verimli bir şekilde izin veremediğini belirtti: eğer bir yaprak kopya olsaydı olduğu gibi -on-yazılı, onun kardeşleri ve ebeveynleri, hem de olması gerekir onların kardeşleri ve ebeveynleri ve böylece tüm ağaç kopyalandı kadar üzerinde. Onun yerine modifiye önerdi B-ağacı sahip (yaprak bağlantısı vardır), RefCount onları kopya üzerinde yazma uygun hale getirmenin ağacın dengeleme algoritmaları için bir ad hoc Ücretsiz harita yapısı ve bazı gevşemeler her ağaç düğümüne bağlı ama saklanan . Sonuç, iyi bir eşzamanlılık sağlarken yazma üzerine kopyalanan anlık görüntüleri gerçekleştirebilen yüksek performanslı bir nesne deposuna uygun bir veri yapısı olacaktır .

O yılın ilerleyen saatlerinde Oracle'da Chris Mason, bu veri yapısını neredeyse yalnızca kullanacak olan anlık görüntü özellikli bir dosya sistemi üzerinde çalışmaya başladı - yalnızca meta veriler ve dosya verileri için değil, aynı zamanda ağaçların kendilerinin alan tahsisini tekrar tekrar izlemek için. Bu, tüm geçiş ve değişikliklerin tek bir kod yolu üzerinden yönlendirilmesine izin verdi, buna karşı yazma üzerine kopyalama, sağlama toplamı ve yansıtma gibi özelliklerin tüm dosya sistemine fayda sağlamak için yalnızca bir kez uygulanması gerekiyordu.

Btrfs, tümü aynı B-ağacı uygulamasını kullanan bu tür ağaçların birkaç katmanı olarak yapılandırılmıştır. Ağaçlar , 136 bitlik bir anahtara göre sıralanmış genel öğeleri depolar . Anahtarın en önemli 64 biti benzersiz bir nesne kimliğidir . Ortadaki sekiz bit, bir öğe türü alanıdır: kullanımı, ağaç aramalarında bir öğe filtresi olarak koda bağlanır. Nesneler , birden çok türde birden çok öğeye sahip olabilir. Kalan (en az önemli) 64 bit, türe özgü şekillerde kullanılır. Bu nedenle, aynı nesne için öğeler, türe göre gruplandırılmış şekilde ağaçta birbirine bitişik olur. Belirli anahtar değerleri seçerek, nesneler aynı türdeki öğeleri belirli bir sıraya yerleştirebilir.

İç ağaç düğümleri, işaretçinin bir alt düğümün mantıksal blok numarası olduğu, anahtar işaretçi çiftlerinin basitçe düz listeleridir. Yaprak düğümleri, düğümün önüne paketlenmiş öğe anahtarlarını ve uçta paketlenmiş öğe verilerini içerir, ikisi yaprak doldukça birbirine doğru büyür.

Dosya sistemi ağacı

Her dizin içinde, dizin girdileri , anahtar değerlerinin en az önemli bitleri dosya adlarının bir CRC32C karması olan dizin öğeleri olarak görünür . Verileri bir konum anahtarı veya işaret ettiği inode öğesinin anahtarıdır . Dizin öğeleri birlikte bu nedenle inode'a giden yol aramaları için bir dizin görevi görebilir, ancak yineleme için kullanılmazlar, çünkü bunlar karmalarına göre sıralanır ve etkin bir şekilde rasgele izin verilir. Bu, büyük bir dizindeki dosyaları yineleyen ve açan kullanıcı uygulamalarının bu nedenle bitişik olmayan dosyalar arasında daha fazla disk araması üreteceği anlamına gelir - ReiserFS , ext3 (Htree-indexes etkinleştirilmiş) gibi karma sıralı dizinlere sahip diğer dosya sistemlerinde kayda değer bir performans kaybı ) ve ext4, tümü TEA - karma dosya adlarına sahiptir. Bunu önlemek için, her dizin girişinin, öğenin anahtar değeri, her yeni dizin girişiyle artan bir dizin başına sayaca ayarlanan bir dizin dizin öğesi vardır . Bu dizin öğeleri üzerinde yineleme, girdileri kabaca diskte depolananla aynı sırada döndürür.

Birden çok dizinde sabit bağlantıları olan dosyalar, her bir üst dizin için bir tane olmak üzere birden çok başvuru öğesine sahiptir. Aynı dizinde birden çok sabit bağlantıya sahip dosyalar, bağlantıların tüm dosya adlarını aynı referans öğesinde toplar. Bu, aynı dizindeki sabit bağlantıların sayısını sınırlayan bir tasarım hatasıydı, ancak çoğu tek bir ağaç bloğuna sığabiliyordu. (4 KiB'lik varsayılan blok boyutunda, ortalama dosya adı uzunluğu 8 bayt ve dosya adı başına 4 bayt başlıkta, bu 350'den az olacaktır.) git , GNUS , GMame ve BackupPC'nin bu limitte başarısız olduğu gözlemlendi. Aksi halde uymayan sabit bağlantı dosya adlarını tutmak için yayılma genişletilmiş referans öğeleri getirilerek sınır sonunda kaldırıldı (ve Ekim 2012'den itibaren Linux 3.7'de yayınlanmak üzere birleştirildi) .

Kapsamlar

Dosya verileri, disk veri bloklarının bitişik çalışmaları olan uzantılarda ağacın dışında tutulur . Extent blokları varsayılan olarak 4 KiB boyutundadır, başlıkları yoktur ve yalnızca (muhtemelen sıkıştırılmış) dosya verilerini içerir. Sıkıştırılmış uzantılarda, tek tek bloklar ayrı ayrı sıkıştırılmaz; bunun yerine, sıkıştırma akışı tüm kapsamı kapsar.

Dosyalar , içeriklerini tutan kapsamları izlemek için kapsam veri öğelerine sahiptir. Öğenin anahtar değeri, kapsamın başlangıç ​​bayt ofsetidir. Bu, birçok uzantıya sahip büyük dosyalarda verimli aramalar yapılmasını sağlar, çünkü herhangi bir belirli dosya ofseti için doğru kapsam yalnızca bir ağaç aramasıyla hesaplanabilir.

Anlık görüntüler ve klonlanmış dosyalar uzantıları paylaşır. Böyle büyük bir kapsamın küçük bir bölümünün üzerine yazıldığında, ortaya çıkan yazma üzerine kopyalama üç yeni uzantı oluşturabilir: üzerine yazılan verileri içeren küçük bir uzantı ve üzerine yazmanın her iki tarafında değiştirilmemiş veriler içeren iki büyük uzantı. Değiştirilmemiş verileri yeniden yazmak zorunda kalmamak için, yazma üzerine kopyalama bunun yerine kitap sonu uzantıları veya yalnızca mevcut uzantıların dilimleri olan uzantılar oluşturabilir. Kapsamlı veri öğeleri, izledikleri ölçüde bir ofset ekleyerek buna izin verir: kitap ayraçları için öğeler, sıfır olmayan ofsetlere sahip olanlardır.

Kapsam ayırma ağacı

Ölçüde tahsisi ağaç dosya sistemi için bir tahsisat haritası gibi davranır. Diğer ağaçların aksine, bu ağaçtaki öğelerin nesne kimlikleri yoktur. Uzayın bölgelerini temsil ederler: anahtar değerleri, temsil ettikleri bölgelerin başlangıç ​​uzaklıklarını ve uzunluklarını tutar.

Dosya sistemi, tahsis edilen alanını, tercih edilen meta veri kapsamları (ağaç düğümleri) ve veri kapsamları (dosya içerikleri) arasında değişen değişken boyutlu tahsis bölgeleri olan blok gruplarına böler . Verilerin meta veri blok gruplarına varsayılan oranı 1:2'dir. İlgili dosyaları birlikte tahsis etmek ve gruplar arasında boş alan bırakarak parçalanmaya direnmek için Orlov blok ayırıcı kavramlarını kullanmaları amaçlanmıştır . (Ancak, Ext3 blok grupları, dosya sisteminin boyutundan hesaplanan sabit konumlara sahiptir, oysa Btrfs'dekiler dinamiktir ve gerektiğinde oluşturulur.) Her blok grubu, bir blok grubu öğesiyle ilişkilendirilir . Dosya sistemi ağacındaki düğüm öğeleri, geçerli blok gruplarına bir başvuru içerir.

Kapsam öğeleri , ağaç düğümüne veya bu kapsamı kaplayan dosyaya bir geri referans içerir. Kapsam, anlık görüntüler arasında paylaşılıyorsa, birden çok geri referans olabilir. Öğeye sığmayacak kadar çok geri referans varsa, bunlar tek tek kapsamlı veri referans öğelerine yayılır . Ağaç düğümleri, sırayla, içerdiği ağaçlara geri referanslara sahiptir. Bu, o bölgeyi parantez içine alan bir çift ofset üzerinde bir B-ağaç aralığı araması yaparak ve ardından geri referansları izleyerek uzayın herhangi bir bölgesinde hangi uzantıların veya ağaç düğümlerinin bulunduğunu bulmayı mümkün kılar. Verileri yeniden yerleştirmek için bu, tüm dosya sistemini taramak zorunda kalmadan, bu bloklara yönelik tüm aşağı referansları hızla bulmak ve düzeltmek için yeniden konumlandırılan bloklardan verimli bir yukarı geçişe izin verir. Bu da dosya sisteminin çevrimiçi depolamasını verimli bir şekilde küçültmesine, taşımasına ve birleştirmesine olanak tanır.

Kapsam ayırma ağacı, dosya sistemindeki diğer tüm ağaçlarda olduğu gibi, yazma üzerine kopyalanır. Bu nedenle dosya sistemine yazma işlemleri, değişen ağaç düğümleri ve dosya verilerinin yeni uzantıların tahsis edilmesiyle sonuçlandığı ve kapsam ağacının kendisinin değişmesine neden olduğu bir kademeye neden olabilir. Bir geri besleme döngüsü oluşturmaktan kaçınmak için , hala bellekte olan ancak henüz diske bağlanmamış olan kapsam ağacı düğümleri, yazılı olarak yeni kopyalanmış kapsamları yansıtacak şekilde yerinde güncellenebilir.

Teoride, kapsam tahsisi ağacı , bir BSP ağacının B-ağacı versiyonu gibi davrandığı için, geleneksel bir boş-alan bitmap'ini gereksiz kılar . Ancak uygulamada, bir in-bellek kırmızı-siyah ağaç ait sayfa tahsisleri hızlandırmak için kullanılır bitmap'leri ölçüsünde. Bu bit eşlemler, sağlama toplamından ve yazma üzerine kopyalamadan muaf özel uzantılar olarak (Linux 2.6.37'den başlayarak, bağlama seçeneği aracılığıyla ) diskte kalıcıdır . space_cache

Sağlama ağacı ve ovma

CRC-32C sağlama toplamları, hem veri hem de meta veriler için hesaplanır ve bir sağlama toplamı ağacında sağlama toplamı öğeleri olarak saklanır . Veri sağlama toplamları için 256 bitlik meta veri sağlama toplamı ve bir tam düğüme (kabaca 4 KB veya daha fazla) kadar yer vardır. Btrfs, dosya sisteminin gelecekteki sürümlerine eklenecek ek sağlama toplamı algoritmaları için hükümlere sahiptir.

Öğe verilerine uçtan uca paketlenmiş blok başına sağlama toplamları ile, tahsis edilen blokların bitişik çalışması başına bir sağlama toplamı öğesi vardır. Sığabilecek olandan daha fazla sağlama toplamı varsa, bunlar yeni bir yaprakta başka bir sağlama toplamı öğesine dökülür. Dosya sistemi bir bloğu okurken bir sağlama toplamı uyuşmazlığı algılarsa, dahili yansıtma veya RAID teknikleri kullanılıyorsa, önce bu bloğun iyi bir kopyasını başka bir cihazdan almaya (veya oluşturmaya) çalışır.

Btrfs, arka planda gerçekleştirilen bir dosya sistemi temizleme işini tetikleyerek tüm dosya sisteminin çevrimiçi kontrolünü başlatabilir. Temizleme işi, tüm dosya sistemini bütünlük açısından tarar ve yol boyunca bulduğu bozuk blokları otomatik olarak rapor etmeye ve onarmaya çalışır.

Günlük ağacı

Bir fsync isteği, değiştirilen verileri hemen kararlı depolamaya gönderir . fsync-ağır iş yükleri ( işletim sistemi fsync'leri sıklıkla çalıştıran bir veritabanı veya sanal makine gibi ), dosya sistemini tekrar tekrar yazmaya ve ağaçların sık sık değiştirilen kısımlarını temizlemeye zorlayarak potansiyel olarak büyük miktarda yedekli yazma G/Ç oluşturabilir. depolamak. Bunu önlemek için, geçici başına alt hacim günlük ağacı için oluşturulan dergi fsync tetiklemeli kopya-on-yazma. Günlük ağaçları bağımsızdır, kendi kapsamlarını izler ve kendi sağlama toplamı öğelerini tutar. Öğeleri bir sonraki tam ağaç işleminde veya (sistem çökmesi varsa) bir sonraki yeniden yüklemede tekrar oynatılır ve silinir.

Parça ve cihaz ağaçları

Blok cihazlar , veriler için 1 GiB ve meta veriler için 256 MiB'lik fiziksel parçalara bölünmüştür . Birden çok cihazdaki fiziksel parçalar yansıtılabilir veya tek bir mantıksal parça halinde bir araya getirilebilir . Bu mantıksal parçalar, dosya sisteminin geri kalanının kullandığı tek bir mantıksal adres alanında birleştirilir.

Öbek ağaç bir şekilde buradaki her bir cihaz saklayarak bu izler cihaz öğesi olarak ve mantıksal parçalar öbek haritası öğelerin kendi anahtarın en önemsiz 64 bit kendi uzaklıklar saklayarak fiziksel adreslere mantıksal bir ileri eşlemesi sağlamak. Parça haritası öğeleri birkaç farklı türden biri olabilir:

bekar
1 fiziksel parçaya 1 mantıksal
çift
1 blok cihazda 2 fiziksel parçaya 1 mantıksal parça
baskın0
N≥2 blok cihazlarda N mantıksal parçadan N≥2 fiziksel parçaya
baskın1
N fiziksel parçaya sahip geleneksel RAID 1'in aksine, N≥2 blok aygıtların 2'sinde 2 fiziksel parçaya 1 mantıksal parça
raid1c3
N≥3 blok cihazlarından 3 fiziksel parçaya 1 mantıksal parça
raid1c4
N≥4 blok cihazlarından 4 fiziksel parçaya 1 mantıksal parça
baskın5
N+1 blok cihazlarda N+1 fiziksel parçaya N (N≥2 için) mantıksal parça, eşlik olarak kullanılan 1 fiziksel parça
baskın6
N+2 blok cihazlarda N+2 fiziksel parçaya N (N≥2 için) mantıksal parça, eşlik olarak kullanılan 2 fiziksel parça

N , yığın tahsis edildiğinde hala boş alana sahip olan blok cihazlarının sayısıdır. N, seçilen yansıtma/eşleme için yeterince büyük değilse, dosya sistemi etkin bir şekilde boştur.

Yer değiştirme ağaçları

Birleştirme, küçültme ve yeniden dengeleme işlemleri, uzantıların yeniden konumlandırılmasını gerektirir. Ancak, yeniden yerleştirme kapsamının basit bir yazma üzerine kopyalanması, anlık görüntüler arasındaki paylaşımı bozacak ve disk alanı tüketecektir. Paylaşımı korumak için, etkilenen meta veriler için kazıma alanı olarak hizmet veren özel bir yer değiştirme ağacına sahip bir güncelleme ve takas algoritması kullanılır . Taşınacak yer ilk olarak hedefine kopyalanır. Ardından, etkilenen alt birimin dosya sistemi ağacında yukarı doğru geri referansları izleyerek, eski kapsamı gösteren meta veriler, yenisini gösterecek şekilde aşamalı olarak güncellenir; yeni güncellenen tüm öğeler, yer değiştirme ağacında saklanır. Güncelleme tamamlandıktan sonra, yer değiştirme ağacındaki öğeler, etkilenen alt hacimdeki karşılıklarıyla değiştirilir ve yer değiştirme ağacı atılır.

süper blok

Tüm dosya sisteminin ağaçlar dahil yığın ağacın kendisi-olan potansiyel oluştururken, parçalar saklanan önyükleme sırasında sorunla montaj dosya sistemi. Bir mount'a önyükleme yapmak için, yığına ve kök ağaçlara ait parçaların fiziksel adreslerinin bir listesi süper blokta saklanır .

Süper blok aynalar sabit konumlarda tutulur: 64 MiB, 256 GiB ve 1 PiB'de ek kopyalar ile her blok cihaza 64 KiB. Bir süper blok aynası güncellendiğinde, nesil numarası artırılır. Montaj zamanında, en yüksek nesil numarasına sahip kopya kullanılır. Tüm süper blok aynalar, bir miktar aşınma dengelemesi sağlamak için güncellemeleri aynalar arasında değiştiren SSD modu dışında birlikte güncellenir .

Ticari destek

Desteklenen

Artık desteklenmiyor

Ayrıca bakınız

Notlar

Referanslar

Dış bağlantılar