Windows için açık kaynaklı Btrfs sürücüsü: WinBtrfs
(github.com/maharmstone)- 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.infdosyası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.NTACLolarak alma ve ayarlama - Alternate Data Streams’i xattr olarak saklama; örneğin
:Zone.Identifier,user.Zone.Identifierolarak 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
- ACL’leri xattr
- 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.infdosyası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
- Chocolatey:
- Kaldırma,
RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultUninstall 132 btrfs.infkomutuyla veya Device Manager’daki “Btrfs controller”ı kaldırarak yapılabilir - Kayıt defteriyle kaldırmak gerekirse
HKLM\SYSTEM\CurrentControlSet\services\btrfs\Startdeğerini 4’e ayarlayıp servisi devre dışı bırakın; yeniden başlattıktan sonra anahtarı veC:\Windows\System32\drivers\btrfs.sysdosyası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-mingw32veyax86_64-w64-mingw32cross compiler gerekir - Kullanıcı eşlemesi
HKLM\SYSTEM\CurrentControlSet\services\btrfs\Mappingskayı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,sidile görülebilir
- Grup eşlemesi
GroupMappingsaltında saklanır- Varsayılan öğe, Windows’taki Users grubunu Linux’ta genellikle
usersolan 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
- Varsayılan öğe, Windows’taki Users grubunu Linux’ta genellikle
- User Access Control token’ıyla çalışan süreçlerin, dosyaları kullanıcı hesabı yerine
BUILTIN\AdministratorsSID’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.confdosyasını şu biçimde ayarlayın[automount]enabled = trueoptions = "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.dllGUI arayüzü sağlar, ancakrundll32.exeile bazı işlemler komut satırından çalıştırılabilirrundll32’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\PolicyaltındaUpgradedSystemDWORD’u oluşturup 1’e ayarladıktan sonra yeniden başlatmak - Ya da BIOS’tan Secure Boot kapatılabilir
- Geçici çözüm:
- 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.exekullanılır - Btrfs’e özgü seçenekler gerekmiyorsa
format /fs:btrfsde mümkündür
- Btrfs formatlamak için dahil gelen
- 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,/freespacetreeseçenekleri eklendimkbtrfs’te/noholesvarsayı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
DbgPrintile 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ıtLogFile: isteğe bağlıdır; çıktı verilecek dosya
- Mount seçenekleri,
HKLM\SYSTEM\CurrentControlSet\Services\btrfsaltındaki her dosya sistemi UUID alt anahtarında saklanır - Başlıca seçenekler
Ignore: ilgili dosya sistemini yüklemezReadonly: Linux’takirobayrağı gibi yazmaya izin vermezCompress,CompressForce,CompressType: varsayılan sıkıştırma, zorunlu sıkıştırma ve tercih edilen sıkıştırma yöntemini ayarlarFlushInterval: metadata flush aralığıdır; varsayılan Linux ile aynı şekilde 30 saniyedirSubvolId: kök olarak mount edilecek alt birim ID’siSkipBalance: son kapanışta devam eden balance işleminin sürdürülmesini atlarNoTrim: TRIM desteğini devre dışı bırakırAllowDegraded: aygıtı eksik degraded birimlerin mount edilmesine izin verirNoDataCOW: yeni dosyalarda copy-on-write’ı devre dışı bırakır; Linux’takinodatacowbayrağı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
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
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
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
İ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
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çinReadonlykullanınBununla birlikte 20 TB harici HDD’de btrfs
zstd:2sıkıştırmasıyla tamamen mount edip kullanırken bile CPU sıçraması veya bozulma yaşamadımREADME’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...
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
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
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
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
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
“Win OpenZFS driver and WinBtrfs driver dont play well with each other”
https://github.com/openzfsonwindows/openzfs/issues/364
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
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
Ayrı bir bootloader da gerekir
Geliştirici Quibble adlı bir uygulama yaptı ve bu da btrfs’i destekliyor
[0] https://github.com/maharmstone/quibble