1 puan yazan GN⁺ 2024-04-08 | 1 yorum | WhatsApp'ta paylaş
  • WinBtrfs v1.9, Linux dosya sistemi Btrfs’i Windows’ta okuyup yazmayı sağlayan bir sürücüdür; Linux çekirdek kodu kullanılmadan sıfırdan yeniden uygulanmıştır
  • Windows XP ve sonrası sürümlerde çalışması gerekir; ücretsiz işletim sistemi ReactOS’a da dahildir. Linux’un MD yazılım RAID’i üzerindeki Btrfs için ayrıca WinMD gerekir
  • İşlev kapsamı okuma/yazma, RAID0/1/10/5/6, alt birimler ve snapshot’lar, reflink copy, send/receive, zlib/LZO/Zstd sıkıştırma, LXSS desteği, ACL/ADS/izin eşlemesine kadar uzanır
  • Kurulum için en son sürümü indirip btrfs.inf dosyasını kurabilir veya Chocolatey/Scoop kullanabilirsiniz; Windows 10/11’de Secure Boot ortamında kayıt defteri değişikliği ya da Secure Boot’u devre dışı bırakmak gerekebilir
  • Proje LGPL ile dağıtılır ancak dosya sistemi bozulmalarından sorumluluk kabul etmez; günlük kullanıma uygun olması gerektiğini belirtse de yedek alınmasını önerir

WinBtrfs ne yapar?

  • WinBtrfs, Linux’un yeni nesil dosya sistemi Btrfs için bir Windows sürücüsüdür
  • Linux çekirdek kodu içermeden sıfırdan yeniden uygulanmıştır ve Windows XP sonrası sürümlerde çalışması gerekir
  • Ücretsiz işletim sistemi ReactOS’a da dahildir
  • Btrfs dosya sistemi Linux’ta oluşturulmuş bir MD yazılım RAID aygıtı üzerindeyse Windows’ta görünmesi için WinMD gerekir
  • İlgili projeler arasında Windows’u Btrfs’ten başlatmayı sağlayan deneysel bootloader Quibble ve NTFS dosya sistemini yerinde dönüştüren Ntfs2btrfs bulunur

Desteklenen özellikler

  • Temel özellikler
    • Btrfs dosya sistemini okuma ve yazma
    • Windows’un normalde yok sayacağı Btrfs bölümlerini keşfetme
    • Bölümsüz Btrfs birimleri
    • Asenkron okuma ve yazma
    • Önbellekleme, free-space cache, free space tree
  • RAID ve birim yönetimi
    • RAID0, RAID1, RAID10
    • RAID5, RAID6
    • Linux’ta başlatılmış balance işlemini sürdürme dahil balancing
    • Aygıt ekleme ve kaldırma
    • Degraded mount
    • Birim küçültme ve genişletme
  • Dosya sistemi özellikleri
    • Alt birim ve snapshot oluşturma/tanımlama için kabuk uzantısı
    • Hard link, symbolic link, reparse point
    • Sparse file, preallocation
    • reflink copy
    • subvolume send ve receive
    • scrubbing, TRIM/DISCARD
  • Windows-Linux birlikte çalışabilirliği
    • ACL’leri xattr security.NTACL olarak alma ve ayarlama
    • Alternate Data Streams’i xattr olarak saklama; örneğin :Zone.Identifier, user.Zone.Identifier olarak saklanır
    • Linux kullanıcıları ile Windows kullanıcılarını eşleme
    • LXSS, yani “Ubuntu on Windows” desteği
    • LXSS için izinler gibi metadata passthrough
    • Windows 10’un büyük/küçük harf duyarlı dizin bayrağı desteği
  • Sıkıştırma ve uyumluluk özellikleri
    • zlib, LZO, Zstd sıkıştırma
    • Metadata UUID incompat flag, Linux 5.0 itibarıyla desteklenir
    • 3/4 diskli RAID1 ile xxhash/sha256/blake2 checksum, Linux 5.5 itibarıyla desteklenir
    • block group tree, Linux 6.1 itibarıyla desteklenir

Henüz kalan işler

  • fs-verity için tam destek, Linux 5.15 maddesi olarak duruyor
  • Zoned desteği Linux 5.11 maddesi olarak duruyor; HM-SMR’nin Windows’ta desteklenmeyebileceği notu var
  • Disk birleştirme, Btrfs quota, tam transaction log desteği ve Windows transactions olan TxF desteği yapılacaklar listesinde

Kurulum ve kaldırma

  • Kurulum için en son sürümü indirip arşivden çıkarın ve btrfs.inf dosyasına sağ tıklayıp Install’ı seçin
  • Sürücü imzalıdır, bu nedenle güncel Windows’ta doğrudan çalışması gerekir
  • Windows 10 veya 11’de Secure Boot açıksa sürücünün yüklenmesi için kayıt defteri değişikliği gerekebilir
    • Daha kolay bir yöntem olarak BIOS’tan Secure Boot’u kapatmak da önerilir
    • Windows 11’in kurulum sırasında Secure Boot’u zayıf biçimde şart koştuğu, ancak kurulumdan sonra kapatılsa da çalıştığı belirtilir
  • Paket yöneticisiyle kurulum da mümkündür
    • Chocolatey: choco install winbtrfs
    • Scoop: scoop bucket add nonportable, scoop install winbtrfs-np -g
  • Kaldırma, RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultUninstall 132 btrfs.inf komutuyla veya Device Manager’daki “Btrfs controller”ı kaldırarak yapılabilir
  • Kayıt defteriyle kaldırmak gerekirse HKLM\SYSTEM\CurrentControlSet\services\btrfs\Start değerini 4’e ayarlayıp servisi devre dışı bırakın; yeniden başlattıktan sonra anahtarı ve C:\Windows\System32\drivers\btrfs.sys dosyasını silin

Derleme ve kullanıcı eşleme

  • Visual C++ 2019 ile derlemek için dizini açıp CMake’in işlemesine bırakmak yeterlidir; Windows DDK düzgün kurulmuşsa çalışması gerekir
  • Linux’ta GCC ile derlemek için i686-w64-mingw32 veya x86_64-w64-mingw32 cross compiler gerekir
  • Kullanıcı eşlemesi HKLM\SYSTEM\CurrentControlSet\services\btrfs\Mappings kayıt defteri anahtarında saklanır
    • Windows SID adında bir DWORD oluşturup Linux uid değerini girin
    • Geçerli SID, wmic useraccount get name,sid ile görülebilir
  • Grup eşlemesi GroupMappings altında saklanır
    • Varsayılan öğe, Windows’taki Users grubunu Linux’ta genellikle users olan gid 100’e eşler
    • Belirli bir kullanıcının oluşturduğu dosyaların belirli bir gruba ait olması için kullanıcı SID’si belirtilebilir
  • User Access Control token’ıyla çalışan süreçlerin, dosyaları kullanıcı hesabı yerine BUILTIN\Administrators SID’siyle oluşturduğu uyarısı vardır

WSL/LXSS desteği

  • Sürücü, güncel LXSS sürümlerine Linux metadata’sını passthrough edebilir
  • Bunu kullanmak için Windows’taki Bash isteminde /etc/wsl.conf dosyasını şu biçimde ayarlayın
    • [automount]
    • enabled = true
    • options = "metadata"
    • mountFsTab = false
  • Değişiklikler bir sonraki yeniden başlatmada uygulanır
  • Gerçek bir Linux kurulum ortamına chroot yapılabilmesi gerektiği belirtilir

Komut satırı işlemleri

  • shellbtrfs.dll GUI arayüzü sağlar, ancak rundll32.exe ile bazı işlemler komut satırından çalıştırılabilir
  • rundll32’nin hata kodu döndürme yolu olmadığı için komutlar sessizce başarısız olabilir
  • Genel komutlar
    • CreateSubvol <path>
    • CreateSnapshot <source> <destination>
    • ReflinkCopy <source> <destination>; wildcard ve birden fazla kaynak dosya alabilir
  • Yönetici yetkisi gerektiren komutlar
    • SendSubvol <source> [-p <parent>] [-c <clone subvol>] <stream file>
    • RecvSubvol <stream file> <destination>
    • StartScrub <drive>
    • StopScrub <drive>

Sorun gidermede önemli kısıtlar

  • Tüm dosya adlarının UTF-8 ile kodlandığı varsayılır
  • Secure Boot açık olan Windows 10’un sonraki sürümlerinde, Microsoft’un imza gereksinimleri nedeniyle açık kaynak sürücülerde kullanılamıyor gibi görünen bir koşul oluştuğu belirtilir
    • Geçici çözüm: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CI\Policy altında UpgradedSystem DWORD’u oluşturup 1’e ayarladıktan sonra yeniden başlatmak
    • Ya da BIOS’tan Secure Boot kapatılabilir
  • LXSS’te sürücü kökünün büyük/küçük harf duyarlı olmaması, Microsoft’un hardcoded davranışıdır
  • Windows’un kendi format iletişim kutusuna Btrfs eklenemez; dosya sistemi listesi hardcoded’dır
    • Btrfs formatlamak için dahil gelen mkbtrfs.exe kullanılır
    • Btrfs’e özgü seçenekler gerekmiyorsa format /fs:btrfs de mümkündür
  • Synology NAS’in blok aygıtlarında LVM kullandığı görünüyor; Windows için LVM sürücüsü yoksa mount edilemez
  • Thecus NAS, Linux MD RAID kullandığı için WinMD birlikte kurulmalıdır
  • Windows ve POSIX izin modelleri birbirinden çok farklı olduğundan pratik bir eşleme yoktur; Windows’ta düzenlenmesini istemediğiniz dosyalar için Windows ACL oluşturabilirsiniz

v1.9 değişiklikleri

  • v1.9, 15 Mart 2024’te yayımlandı
  • Linux 6.1’in block group tree desteği eklendi
  • Sistem yüksek yük altındayken donma sorunu düzeltildi
  • mkbtrfs’e /blockgrouptree, /freespacetree seçenekleri eklendi
  • mkbtrfs’te /noholes varsayılanı Linux’taki gibi açık hale getirildi
  • aarch64’te CRC32C komut desteği eklendi

Hata ayıklama ve mount seçenekleri

  • WinBtrfs, hata ayıklama mesajlarını errors/FIXMEs, warnings ve traces olmak üzere üç seviyeye ayırır
  • Sürüm sürücüsü yalnızca errors ve FIXMEs’i DbgPrint ile kaydeder; Microsoft DebugView ile görüntülenebilir
  • Sorun bildirirken tam debug log’unu eklemek için debug sürüm sürücüsü ve kayıt defteri ayarları kullanılır
    • DebugLogLevel: 0 mesaj yok, 1 errors/FIXMEs, 2 warnings dahil, 3 traces dahil tümü
    • LogDevice: isteğe bağlıdır; çıktı verilecek seri aygıt
    • LogFile: isteğe bağlıdır; çıktı verilecek dosya
  • Mount seçenekleri, HKLM\SYSTEM\CurrentControlSet\Services\btrfs altındaki her dosya sistemi UUID alt anahtarında saklanır
  • Başlıca seçenekler
    • Ignore: ilgili dosya sistemini yüklemez
    • Readonly: Linux’taki ro bayrağı gibi yazmaya izin vermez
    • Compress, CompressForce, CompressType: varsayılan sıkıştırma, zorunlu sıkıştırma ve tercih edilen sıkıştırma yöntemini ayarlar
    • FlushInterval: metadata flush aralığıdır; varsayılan Linux ile aynı şekilde 30 saniyedir
    • SubvolId: kök olarak mount edilecek alt birim ID’si
    • SkipBalance: son kapanışta devam eden balance işleminin sürdürülmesini atlar
    • NoTrim: TRIM desteğini devre dışı bırakır
    • AllowDegraded: aygıtı eksik degraded birimlerin mount edilmesine izin verir
    • NoDataCOW: yeni dosyalarda copy-on-write’ı devre dışı bırakır; Linux’taki nodatacow bayrağıyla aynıdır

Lisans ve sorumluluk kapsamı

  • Projenin tamamı GNU Lesser General Public Licence, yani LGPL ile dağıtılır
  • Yazılımın kullanımının kullanıcının sorumluluğunda olduğu ve dosya sisteminde oluşabilecek bozulmalardan sorumluluk kabul edilmediği açıkça belirtilir
  • Günlük kullanıma uygun olması gerektiğini belirtirken yine de yedek alınmasını önerir
  • Dahil edilen üçüncü taraf kodlar için Zlib, LZO, Zstd, BLAKE2 ve SHA256 ile ilgili telif hakkı/lisans bildirimleri yer alır

1 yorum

 
GN⁺ 2024-04-08
Hacker News yorumları
  • Bir süredir denemek istiyordum ama GitHub issue’larına göz atınca hemen vazgeçtim
    mavi ekran, kilitlenme, kullanımın aniden yükselmesi, bozulma gibi sorunlar gördüm; kararlı bir btrfs/ZFS sürücüsü olsaydı seve seve para verirdim
    Bu tür projelerin neden daha fazla ilgi görmediğini pek anlayamıyorum

    • “Seve seve para verirdim” diyorsanız bağış bağlantısı var: https://github.com/maharmstone/btrfs?tab=readme-ov-file#dona...
    • Microsoft desteklemediği ve sürücü geliştiricileri Windows kernel kodunu okuyamadığı için
      Bu yüzden yukarıda söylenen sorunlar düzeltilse bile Windows’u btrfs üzerinden önyüklemek muhtemelen hâlâ zor olacaktır
      Roma’dayken Roma’nın kurallarına uy derler; belki de Windows’u sadece sanallaştırarak çalıştırmak gerekir
  • Linux kodu kullanmadan tamamen yeniden implemente edilmiş olması gerçekten harika; XP/2k3 ve ReactOS’u bile desteklemesi de müthiş
    Eski makinelerimden birinde bir denemem gerekecek

    • Rust tarafında ilginç bir kalıp olarak girdi/çıktısı olmayan kütüphaneler artıyor
      Bu olguyu nereye bağlamak uygun olur bilmiyorum ama 2019’da açılmış, girdi/çıktısız bir QUIC kütüphanesi issue’su var: https://github.com/aiortc/aioquic/issues/4
      Dosya sistemleri de bu kalıbı izlese gerçekten güzel olurdu
      Dosya sistemi mantığını yeniden kullanıp Windows, FUSE, Linux, wasm’in doğrusal adres deposu vb. ortamlara uygulayabilsek taşınabilirlik, yeniden kullanım ve hack’lenebilirlik muazzam artabilir
    • ReactOS, Windows ile API uyumluluğunu hedeflediği için XP/2k3 ve ReactOS’un ikisini birden desteklemesi çok da şaşırtıcı değil
  • İlgili yazılar:
    WinBtrfs – A Windows driver for the next-generation Linux filesystem Btrfs - https://news.ycombinator.com/item?id=15177002 - Eylül 2017, 100 yorum
    WinBtrfs v0.7 - https://news.ycombinator.com/item?id=12794214 - Ekim 2016, 1 yorum

  • Birkaç hafta önce bir btrfs sabit diskinde denemeye çalıştım ama düzgün çalıştıramadım
    Sonra WSL ile eriştim; birkaç kez sorunsuz oldu, ardından giderek başarısız olmaya başladı ve sonunda mount bile edilemedi
    Nihayetinde bir Linux live ISO ile önyükleyip Windows sürücüsü ile btrfs sürücüsü arasında dosya kopyalayıp/taşıyabileceğimi fark ettim; şimdi Ventoy USB’deki Fedora Workstation live ISO’yu kullanıyorum

    • Gerçek bir deneyim gibi geliyor
      Artık Windows’ta da btrfs ile veri kaybedebiliyoruz :-D
  • Bu sürücüyü dizüstü bilgisayarımda bir süredir kullanıyorum
    Linux’ta iş için kodlama, Windows’ta oyun·film·medya için birlikte kullandığım bir ortam
    btrfs bölümü ve sürücüsündeki veri bozulmasından endişe ediyorsanız README’deki mount seçeneklerine odaklanmak yeterli
    Arch Linux sistem bölümü için Ignore, geri kalanların tamamı için Readonly kullanın
    Bununla birlikte 20 TB harici HDD’de btrfs zstd:2 sıkıştırmasıyla tamamen mount edip kullanırken bile CPU sıçraması veya bozulma yaşamadım

  • README’nin tamamını okumanızı öneririm
    Yazar, merak ettiğiniz sorulara ve daha fazlasına yanıt vermiş

  • Bunun “temel ve gelişmiş” RAID 5/6’yı nasıl desteklediğini merak ediyorum
    btrfs’in kendisi böyle değil; burada “temel/gelişmiş” ile ne kastedildiği de belirsiz: https://btrfs.readthedocs.io/en/latest/btrfs-man5.html#raid5...

    • Bu tam olarak doğru değil
      Linux btrfs de genel olarak RAID5’i destekliyor, ancak güvenli kullanımı zorlaştıran bilinen uç durumlar var
      Pratikte “kullanılabilir ama deneysel ve geliştiricilere yönelik” demeye daha yakın
      WinBtrfs, RAID5 modunu yalnızca özelliklerinden biri olarak listeliyor; ne kadar iyi çalıştığını doğru dürüst ele almıyor
      İlgili issue’daki sorular da gerçek bir yanıt olmadan kapatılmış: https://github.com/maharmstone/btrfs/issues/293
      Geliştiriciden durumu ve testleri hakkında net bir yanıt duymadan verilerimi RAID 5/6’ya emanet etmem
    • RAID0/1/10’a “temel” RAID, RAID5/6’ya “gelişmiş” RAID diyor gibi görünüyorlar
      Nedenini bilmiyorum ama belki de ilk grupta “gelişmiş” parite hesaplaması gibi şeyler gerekmediği içindir
  • Steam Deck’te kütüphaneyi önceden doldurmak için bu sürücüyü ve btrfs’i kullandım
    Ağ üzerinden indirmek çok uzun sürüyordu; o zamanki internetle bunun 100 kat daha uzun süreceğini sanıyorum
    Bu, FAT’ten sonra nix, Mac ve Windows’ta öylece çalışan ilk dosya sistemi olabilir

    • Herkes UDF’yi hep unutuyor
  • Harika
    Uzun süreli ya da prodüksiyonda kullanan biri varsa gerçekte nasıl olduğunu merak ediyorum
    TRIM’in desteklendiğini gördüm, ama RETRIM’in de desteklenip desteklenmediğini merak ediyorum
    Başta komut kuyruğu dolu olduğu için TRIM yapılamayan alanları sürücü optimizasyonu sırasında serbest bırakmak için gereken özellikten bahsediyorum
    ReFS’ten hoşlanmayan biri için veri paritesi olan bir NTFS alternatifi olarak kullanılmaya değer mi, ayrıca Windows için ZFS ile kıyaslandığında ne kadar olgun, bunu da bilmek isterim

    • Birkaç yıldır ana makinemde hafif kullanım için kullanıyorum
      Windows bölümü, Linux bölümü (LUKS üzerindeki btrfs) ve dosyaları sakladığım üçüncü bir btrfs bölümü olan bir kurulum
      Sık kullanmıyorum ama kullandığımda varlığını fark etmeyecek kadar sorunsuz
      Windows’un baştan beri btrfs’i yerel olarak okuyabiliyormuş gibi hissettirdi; yalnızca dosyalara erişme, değiştirme ve silme düzeyindeki kullanımda herhangi bir “gelişmiş” özellik kullanmadım
    • Bir keresinde yanlışlıkla Visual Studio derlemesini ana NTFS sürücüsünde değil, btrfs’teki git klonundan çalıştırdım
      Fark edip derlemeyi iptal ettiğimde, adı aynı ama içeriği farklı iki klasör oluşmuştu ve aynı klasör adını iki kez silmem gerekti
      Bu sürücüde eşzamanlılık sorunu var gibi görünüyor
    • WinBTRFS ile OpenZFS on Windows birlikte kurulursa sorun çıkabilir
      “Win OpenZFS driver and WinBtrfs driver dont play well with each other”
      https://github.com/openzfsonwindows/openzfs/issues/364
    • ReFS ve Storage Spaces zaten bu amacı karşılıyor, entegre ve tamamen destekleniyor
      Duyduğuma göre BTRFS’in, en ufak yanlış müdahalede durmasına ya da veriyi bozmasına yol açan kusurlar listesi akıl almaz derecede uzunmuş
      Kendi yerel işletim sisteminde bile güvenilirliği şüpheli olan bir şeyi Windows’a zorla uydurup kullanmak neredeyse delilik
      Eğlence için denemek sorun değil, ama gerçek verileri asla bu kombinasyona emanet etmem
      “Benim 2 diskli aynalamamda sorunsuz çalışıyor” demek yalnızca anekdottur, veri değildir
  • Bunu kullanınca btrfs ile biçimlendirilmiş bir Windows USB belleğinden Windows 10/11 önyüklemesi yapmanın mümkün olup olmadığını merak ediyorum

    • Rufus kullanarak bir USB SATA/NVMe disk kutusuna 10/11’i “Windows To Go” olarak kurabilirsiniz
      Bir süre Windows 10’u her gün bu şekilde kullanmış biri olarak oldukça iyi çalıştığını söyleyebilirim, ancak dikkat edilmesi gereken birkaç nokta var
      Kararlı bir USB bağlantısı ve denetleyici çipi kararlı olup aşırı ısınmayan bir USB disk kutusu gerekiyor
      Sürücü güç kaybına dayanıklı olmalı
      Ne yazık ki güç kaybını ne kadar iyi tolere ettiğini değerlendiren bir kaynak bilmiyorum
      Bazı sürücüler ani güç kesintilerinde ciddi sorun yaşayabilir
      Intel kurumsal SATA SSD ve kapasitörlü Dockcase NVMe sürücüsüyle iyi deneyimlerim oldu
      Sürücü görünmez hâle gelirse gücü kesip tekrar vermek yardımcı olabilir: https://dfarq.homeip.net/fix-dead-ssd/
      Otomatik yedekleme de ayarlamalısınız
      Performans testleri veya yalnızca Windows’a özel donanım firmware güncellemeleri için çok kullanışlı
      Bilgisayarlar arasında geçiş yaparken, önyüklemeden sonra Windows çoğu kez kafası karışmış gibi davranıyor ve yeniden başlatmak gerekiyor; sonrasında çalışıyor
      Ancak WinBTRFS ya da ayrı bir bootloader projesi kullanmışlığım yok; o bootloader da birkaç aydır bozuk görünüyor
      Ventoy ile Windows VHD dosyasından önyükleme yapmak da iyi bir seçenek olabilir
    • Tek başına olmaz
      Ayrı bir bootloader da gerekir
      Geliştirici Quibble adlı bir uygulama yaptı ve bu da btrfs’i destekliyor
      [0] https://github.com/maharmstone/quibble