WinBTRFS是下一代Linux文件系統BTRFS的Windows驅動程序。從頭開始重新實現,它不包含Linux內核中的代碼,並且應該從Windows XP開始使用任何版本。它也作為免費操作系統ReactOS的一部分包括在內。
如果您的BTRFS文件系統位於Linux創建的MD軟件RAID設備上,則您還需要WinMD才能使其在Windows下出現。
另請參見Quibble,這是一種實驗性引導加載程序,允許Windows從BTRF啟動,而NTFS2BTRFs是允許NTFS Filesystems進行現場轉換的工具。
首先,免責聲明:
您使用此軟件自擔風險。我對您可能對您的文件系統造成的任何損害不承擔任何責任。它應該適合日常使用,但無論如何您都可以備份。
這裡的所有內容均在GNU較少的通用公共許可證(LGPL)下發布;有關更多信息,請參見文件許可證。鼓勵您隨心所欲地介紹源代碼,如果您想出任何nifty,我將不勝感激([email protected])。
有關此處包含的第三方代碼的版權詳細信息,請參見本文檔的末尾。
mkbtrfs.exe和ubtrfs.dll創建新文件系統free_space_cache )要安裝驅動程序,請下載並提取最新版本,右鍵單擊btrfs.inf,然後選擇“安裝”。駕駛員已簽名,因此也應該在現代版本的Windows上進行操作。
如果您使用Windows 10或11並啟用了安全啟動,則可能必須更改註冊表才能加載驅動程序 - 請參見下文。除非您特別需要它,否則要關閉BIOS中的安全啟動,但要更容易。請記住,Windows 11軟性要求安全啟動要安裝,但可以將其關閉後效果很好。
WinBTRFS也可以在以下包裝管理人員上使用:
choco install winbtrfs
scoop bucket add nonportable
scoop install winbtrfs-np -g
如果要卸載,請從命令提示符下運行:
RUNDLL32.EXE SETUPAPI.DLL,InstallHinfSection DefaultUninstall 132 btrfs.inf
您可能需要給BTRFS.INF提供完整的道路。
您也可以轉到設備管理器,在“存儲量”下找到“ BTRFS控制器”,右鍵單擊並選擇“卸載”。勾選複選框以卸載驅動程序,然後重新啟動Windows。
如果您需要通過註冊表卸載,請打開regedit並設置HKLM System CurrentControlset Services services btrfs start to 4的值,以禁用服務。重新啟動後,您可以刪除BTRFS鍵並刪除C: Windows System32 drivers btrfs.sys。
要使用Visual C ++ 2019編譯,請打開目錄並讓Cmake做事。如果您正確安裝了Windows DDK,則應工作。
要使用Linux上的GCC編譯,您將需要設置一個交叉補償器,對於i686-w64-mingw32或x86_64-w64-mingw32 。創建一個構建目錄,然後使用mingw-x86.cmake或mingw-amd64.cmake作為cmake工具鏈文件來生成您的makefile。
用戶映射存儲在註冊表密鑰HKLM System CurrentControlset Services btrfs mappings中。創建一個帶有Windows SID名稱(例如S-1-1-5-21-137988684-2432464051-424789967-1001)的DWORD,以及Linux UID的值(例如1000)。下次加載驅動程序時,它將生效。
您可以通過運行wmic useraccount get name,sid來找到當前的SID。
同樣,組映射也存儲在GroupMappings下。默認條目將Windows的用戶組映射到GID 100,該組通常是Linux上的“用戶”。您還可以在此處指定用戶SID,以強制用戶創建的文件屬於某個組。 SETGID標誌也可以按照Linux上的方式工作。
請注意,在用戶訪問控制代幣下運行的過程創建文件作為內置管理員SID(S-1-5-32-544),而不是用戶帳戶。
駕駛員將將Linux元數據傳遞到最新版本的LXSS,但是您必須讓Windows知道您希望這樣做。從Windows上的bash提示符中,編輯/etc/wsl.conf看起來如下:
[automount]
enabled = true
options = "metadata"
mountFsTab = false
然後,下次您重新啟動時將生效。是的,如果需要,您應該能夠將其切入實際的Linux安裝。
dll文件shellbtrfs.dll提供GUI接口,但也可以與Rundll32.EXE一起使用,以從命令行執行一些任務,如果您希望安排某些內容以定期運行,這可能會很有用。
請記住,rundll32沒有提供任何錯誤代碼的機制,因此這些命令中的任何一個都可能會默默失敗。
rundll32.exe shellbtrfs.dll,CreateSubvol <path>
rundll32.exe shellbtrfs.dll,CreateSnapshot <source> <destination>
rundll32.exe shellbtrfs.dll,ReflinkCopy <source> <destination>這也接受通配符和任何數量的源文件。
以下命令需要各種特權,因此必須以管理員的方式運行:
rundll32.exe shellbtrfs.dll,SendSubvol <source> [-p <parent>] [-c <clone subvol>] <stream file> -p and -c flags是在Linux上btrfs send 。您可以指定任意數量的克隆子Volumes。
rundll32.exe shellbtrfs.dll,RecvSubvol <stream file> <destination>
rundll32.exe shellbtrfs.dll,StartScrub <drive>
rundll32.exe shellbtrfs.dll,StopScrub <drive>
在發布頁面上,有zip文件可下載包含PDB的文件。或者,您可以嘗試使用符號服務器http://symbols.burntcomma.com/-在windbg中,將符號路徑設置為這樣的東西:
symsrv*symsrv.dll*C:symbols*http://msdl.microsoft.com/download/symbols;symsrv*symsrv.dll*C:symbols*http://symbols.burntcomma.com
驅動程序假設所有文件名都在UTF-8中編碼。如今,這應該是大多數設置的默認值 - 如果您不使用UTF -8,則可能值得考慮轉換文件。
對於後來的Windows 10版本,Microsoft引入了更多繁重的簽名要求,而開源驅動程序似乎無法使用。
要解決此問題,請訪問HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlCIPolicy ,創建一個稱為UpgradedSystem的新的dword值,並將其設置為1,然後重新啟動。
或者,您總是可以在BIOS設置中關閉安全啟動。
這是Microsoft Hard編碼中LXSS的東西,大概是為了通過運行mkdir /mnt/c/WiNdOwS來阻止人們對系統的侵害。
安裝了外殼擴展名後,右鍵單擊Explorer中的驅動器,單擊屬性,然後轉到BTRFS選項卡。應該有一個按鈕,使您可以更改驅動器字母。
在Regedit中,嘗試刪除HKEY_LOCAL_MACHINESYSTEMMountedDevices中的相關條目,然後重新啟動。
使用隨附的命令行程序mkbtrfs.exe。不幸的是,我們無法將BTRF添加到Windows自己的對話框中,因為它的文件系統列表已被硬編碼。如果您不需要設置任何BTRFS特定選項,則還可以運行format /fs:btrfs 。
如果Windows的格式對話框拒絕出現,請嘗試使用 /fs標誌,例如format /fs:ntfs D:
Synology似乎將LVM用於其塊設備。直到有人為Windows編寫LVM驅動程序之前,您就不幸了。
Thecus將Linux的MD RAID用於其塊設備。您也需要安裝WinMD。
確保安裝了KB303929。或考慮從包含所有更新的“託管” ISO安裝。
眾所周知,Paragon的文件系統閱讀軟件可禁用自動啟動。禁用或卸載Paragon,然後通過運行diskpart並鍵入automount enable 。
在非常舊的Windows版本(XP,Server 2003?)上,Windows完全忽略了Linux分區。如果是您的情況,請嘗試在Linux上運行fdisk ,然後將分區類型從83更改為7。
Windows和Posix權限模型之間沒有映射,它們太差異了,無法實用。如果這困擾您,則可以在不想編輯的文件上創建一個Windows ACL。
V1.9(2024-03-15):
V1.8.2(2023-01-10):
V1.8.1(2022-08-23):
V1.8(2022-03-12):
V1.7.9(2021-10-02):
V1.7.8.1(2021-06-13):
V1.7.8(2021-06-09):
inode_cache已被使用V1.7.7(2021-04-12):
V1.7.6(2021-01-14):
V1.7.5(2020-10-31):
V1.7.4(2020-08-23):
V1.7.3(2020-05-24):
V1.7.2(2020-04-10):
V1.7.1(2020-03-02):
V1.7(2020-02-26):
case=dir選項設置時在LXSS上創建目錄V1.6(2020-02-04):
V1.5(2019-11-10):
V1.4(2019-08-31):
V1.3(2019-06-10):
v1.2.1(2019-05-06):
V1.2(2019-05-05):
V1.1(2018-12-15):
V1.0.2(2018-05-19):
V1.0.1(2017-10-15):
V1.0(2017-09-04):
free_space_cache )V0.10(2017-05-02):
btrfs checkV0.9(2017-03-05):
V0.8(2016-12-30):
btrfs fi usageV0.7(2016-10-24):
raid56 )V0.6(2016-08-21):
V0.5(2016-07-24):
V0.4(2016-05-02):
V0.3(2016-03-25):
btrfs check中出現的“不正確的本地BackRef計數”消息V0.2(2016-03-13):
CcCopyRead中的僵局V0.1(2016-02-21):
WinBTRFS具有三個級別的調試消息:錯誤和固定文件,警告和痕跡。驅動程序的發行版僅顯示通過DbgPrint登錄的錯誤和fixmes。您可以通過Microsoft Program Debugview查看這些消息,可在https://technet.microsoft.com/en-gb/sysinternals/debugview中找到。
如果您想報告問題,如果您還可以附加完整的調試日誌,這將有很大的幫助。為此,您需要使用驅動程序的調試版本;將文件中的文件複製到debug x64或debug x86中,以x64或x86。您還需要在HKLM System CurrentControlset Services btrfs中設置註冊表條目:
DebugLogLevel (dword):0對於沒有消息,錯誤和fixmes的1,警告也為2,對於絕對的所有內容,包括痕跡。LogDevice (字符串,可選):要輸出的串行設備,例如DeviceSerial0 。這可能僅在虛擬機上有用。LogFile (字符串,可選):如果未設置LogDevice ,則希望輸出的文件。請記住,這是一個內核文件名,因此您必須以“ ?? ”(例如,“ ?? c: btrfs.log”)前綴。它可能不用說,但是不要將其存儲在駕駛員本身正在使用的音量上,否則您將導致無限循環。 驅動程序將根據HKLM System CurrentControlset Services btrfs在每個已安裝的文件系統中以其UUID命名。如果您不確定UUID指的是哪個音量,則可以在Linux上使用btrfs fi show檢查。您可以在此子鑰匙中添加每一體積安裝選項,這將在重新啟動中生效。如果在此上方的鍵中設置了一個值,則默認情況下將使用此值。
Ignore (dword):將此設置為1,以告訴驅動程序不要嘗試加載此文件系統。使用Readonly標誌,這可能是多餘的。
Readonly (dword):將其設置為1,以告訴驅動程序不要允許寫入此卷。這是Linux上ro標誌的等效物。
Compress (dword):將此設置為1,以告訴驅動程序默認情況下寫入文件。這是Linux上compress標誌的等效物。
CompressForce (dword):將其設置為1以強制壓縮,即忽略nocompress Inode Flag,甚至嘗試壓縮不可壓縮的文件。這不是一個好主意,但相當於Linux上的compress-force標誌。
CompressType (dword):將其設置為1以更喜歡Zlib壓縮,2偏愛LZO壓縮,或者3個偏愛ZSTD壓縮。默認值為0,如果設置了Ingompat標誌,則使用ZSTD或LZO壓縮,否則Zlib。
FlushInterval (dword):元數據沖洗之間的幾秒鐘間隔。默認值為30,如Linux上 - 該參數在此處稱為commit 。
ZlibLevel (dword):-1和9之間的數字,該數字確定了嘗試壓縮文件的花費時間。如果您的CPU快速但磁盤慢速,則可能需要解決這個問題,反之亦然。默認值為3,這是Linux上的硬編碼值。
MaxInline (dword):“直列”文件將允許使用的最大大小,即存儲在元數據中的文件。默認值為2048,也是Linux現代版本的默認值 - 該參數在那裡稱為max_inline 。它將被刪除為最大值,除非您更改了節點大小,否則它將是16 kb以下的陰影。
SubvolId (qword):我們將嘗試作為根部安裝的子彈的ID。如果不存在,則將默默地忽略此參數。子體積ID可以在Inode屬性表上找到;它在十六進制中,而不是在Linux工具上的小數。默認值是通過btrfs subvolume set-default設置的任何內容;或者,未能使該子體積5 subvolid
SkipBalance (Dword):設置為1,以告訴駕駛員不要嘗試恢復系統上次電源時正在運行的平衡。默認值為0。 linux上的等效參數為skip_balance 。
NoPNP (dword):僅對調試有用,這會迫使任何量出現,而不是通過通常的插件和播放方法暴露它們。
ZstdLevel (DWORD):ZSTD壓縮級別,默認3。
NoTrim (dword):將其設置為1以禁用裝飾支持。
AllowDegraded (dword):將其設置為1,以允許安裝退化的音量,即缺少設備的一個。強烈建議您除非需要,否則不要啟用這一點。
NoRootDir (DWORD):如果您已更改了默認子量,則本地或通過註冊表選項更改了一個名為$ root的隱藏目錄,該目錄指向root通常所在的位置。將此值設置為1,以防止此值出現。
NoDataCOW (dword):將其設置為1,以禁用新文件的複印件。這是Linux上nodatacow標誌的等效物。
我感謝您可能獲得的任何反饋,即正面或負面的:[email protected]。
該代碼包含以下軟件的一部分:
版權(c)1995-2017讓·拉普·蓋伊(Jean-Loup Gailly)和馬克·阿德勒(Mark Adler)
該軟件提供了“原樣”,而無需任何明示或暗示的保證。在任何情況下,作者都不應對使用此軟件造成的任何損害負責。
授予任何人,包括任何目的,包括商業應用程序,並將其更改並自由重新分配,但要予以自由限制:
Winbtrfs包含LZO的早期版本的一部分,該版權1996 Markus Oberhumer。現代版本已在GPL下獲得許可,但這是在LGPL下許可的,因此我相信可以使用。
版權所有(C)2016年至今,Facebook,Inc。保留所有權利。
如果滿足以下條件:
源代碼的再分配必須保留上述版權通知,此條件列表和以下免責聲明。
二進制形式的重新分配必須複製上述版權通知,此條件列表以及文檔和/或分發提供的其他材料中的以下免責聲明。
未經具體的事先書面許可,均不能使用Facebook和其貢獻者的名稱來認可或推廣從該軟件中衍生的產品。
該軟件由版權所有者和貢獻者“按原樣”提供,任何明示或暗示的保證,包括但不限於對適銷性和特定目的適合性的隱含保證。在任何情況下,版權持有人或貢獻者均不得對任何直接,間接,偶然,特殊,特殊,示例性或結果損害均承擔任何責任(包括但不限於替代商品或服務的採購,損失,數據或利潤損失,數據或利潤;還是造成的,無論是在合同中造成的,或者在任何責任中造成的責任,或者是否有任何責任,或者在任何責任中,是否有任何責任,或者是否有任何責任,或者是否有責任,是否有責任,是否有責任。告知可能造成這種損害的可能性。
https://github.com/blake2/blake2(公共領域)
https://github.com/amosnier/sha-2(公共領域)