在登录时加载任何程序之前挂载 Windows 11 WSL2 zfs 池

在登录时加载任何程序之前挂载 Windows 11 WSL2 zfs 池

我希望能够在 WSL2 Ubuntu 发行版中挂载 zfs 池,以便本机 Windows 程序可以透明地使用它。我在本指南的帮助下创建了一个启用了 zfs 的自定义内核:https://wsl.dev/wsl2-kernel-zfs/

一切正常,我可以导入 zpool 并访问 Windows 中的数据。不幸的是,Windows 不会保留 wsl2 挂载,因此每次都需要这样做,因此我创建了 Windows 计划任务,该任务执行挂载物理驱动器并在 ubuntu 中导入 zpool:

@echo off
wsl --mount \\.\PHYSICALDRIVE0 --bare
wsl --mount \\.\PHYSICALDRIVE1 --bare
wsl --mount \\.\PHYSICALDRIVE2 --bare
wsl --mount \\.\PHYSICALDRIVE3 --bare
wsl --mount \\.\PHYSICALDRIVE4 --bare

wsl -u root  zpool import zstore

但是,有些启动程序依赖于 zpool 的挂载,但如果在加载之前没有挂载,它们可能会失败,因为存在竞争条件。有没有办法延迟程序的自动启动,或者有办法有效地让 wsl 挂载的驱动器在重新启动之间持续存在?

答案1

/r/zfs 上有一两个很棒的帖子, https://www.reddit.com/r/zfs/comments/lcdxs5/zfs_in_wsl2_raw_disk_access/

出色的总结还指出了区分大小写对于 wsl2 zfs 数据集的重要性,此处:https://stackoverflow.com/questions/51591091/apply-setcasesensitiveinfo-recursively-to-all-folders-and-subfolders

还有一个完全不同的选择@/u/ShaRose关于 wsl 中 zpool 的另一种基于文件的环回选项,来自她原始帖子的引用和代码:https://www.reddit.com/r/zfs/comments/lcdxs5/comment/gms8056/

所以,当我第一次看到这个帖子时,我就想到了这一点,但从来没有机会去尝试它。这个想法是,如果您只需要一个 zfs 池来备份 nas,则不要使用原始磁盘(这需要一些技巧),而是在驱动器(或更多)上设置磁盘映像。出于某种原因,似乎 wsl2 上的 zpool create 不喜欢传递给文件,但使用 losetup 设置环回是可行的。编辑:有趣的花絮:如果我使用 dd 和 urandom 完全损坏了一个“驱动器”,它只会说它有数千个校验和错误。如果我分离一个,突然它就损坏了数据。您可以将其粘贴到脚本中并根据需要自动执行。dkms autoinstall 应该安装任何已设置的模块,只要它们是兼容的,即使没有它,如果您在执行 apt install zfs-dkms 之前运行它,它应该会为您设置好一切,只需要 modprobe zfs。但是有些模块不起作用:wireguard 不兼容,但 virtualbox 似乎运行良好。

KERNVER=$(uname -r | cut -f 1 -d'-')
git clone --branch linux-msft-$KERNVER --depth 1 https://github.com/microsoft/WSL2-Linux-Kernel.git ~/kern-$KERNVER
zcat /proc/config.gz > ~/kern-$KERNVER/.config
make -C ~/kern-$KERNVER -j $(nproc)
make -C ~/kern-$KERNVER -j $(nproc) modules_install
ln -s /lib/modules/$KERNVER-microsoft-standard-WSL2+ /lib/modules/$KERNVER-microsoft-standard-WSL2
dkms autoinstall -k $KERNVER-microsoft-standard-WSL2

root@DESKTOP-FVKI47F:~# dkms status
virtualbox, 6.1.16, 5.4.72-microsoft-standard-WSL2+, x86_64: installed
virtualbox, 6.1.16, 5.4.72-microsoft-standard-WSL2, x86_64: installed
wireguard, 1.0.20201112: added
zfs, 2.0.2, 5.4.72-microsoft-standard-WSL2, x86_64: installed

root@DESKTOP-FVKI47F:~# zpool status
  pool: testpool
 state: ONLINE
config:
        NAME        STATE     READ WRITE CKSUM
        testpool    ONLINE       0     0     0
          raidz3-0  ONLINE       0     0     0
            loop1   ONLINE       0     0     0
            loop2   ONLINE       0     0     0
            loop3   ONLINE       0     0     0
            loop4   ONLINE       0     0     0
            loop5   ONLINE       0     0     0
            loop6   ONLINE       0     0     0
            loop7   ONLINE       0     0     0
            loop8   ONLINE       0     0     0
            loop9   ONLINE       0     0     0
errors: No known data errors

相关内容