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(公共领域)