Windows11 读取 APFS 移动硬盘

Table Of Contents

之前买了个 2TB 的移动硬盘存储文件给我的丐版 MacMini 扩容用,现在换回了 Windows 台式机,就想着把移动硬盘里的文件挪到台式机里。Windows 本身不支持直接读取 APFS 文件系统,感觉最方便还是使用一台 MacOS 的机器通过网络迁移,但是我手上只有一台公司的 MacBook Pro 而且安装了 DLP 监控软件,不太方便做这种事,只能通过其他方法迁移。

网上有一些第三方软件,但是都是付费的,而且比较贵。

我挑了个 MacDrive, 因为他家官网上写着支持完整功能免费试用。但是试用结果并不太好,虽然安装之后,能直接识别出分区盘,查看文件列表,但是拷贝文件的时候一直卡死,可能我的文件比较大,我拷贝一个 40G 的 zip 压缩包,进度一直卡在 8% 的样子,最后直接死机。

我这台电脑配置还是比较高的,14700KF + 128GB 内存,这就很尴尬了,只能想其他方法。

还好,我安装了 WSL2 开发环境,就想着能不能通过 Linux 的方式搞定,结果很容易的就找到了 sgan81/apfs-fuse 这个开源工具,Windows 不愧是最好的 Linux 发行版。

# 编译 apfs-fuse

由于我的 WSL2 系统版本是 Debian, 所以编译命令和官方教程有些许区别

使用 gcc g++ 代替 gcc-c++

ccmake 等同于 make CC=gcc

编译安装完之后,可以把 build 下的可执行文件挪到 PATH 目录下

# 挂载磁盘

由于之前死机了几次,都是直接断电重启的,我现在插上移动磁盘已经识别不了盘了,但是还好,去设备管理里查看还能看到这个盘。

要在 WSL2 里加载这块 APFS 移动磁盘,首先要挂载磁盘到 WSL2 上,这里可以参考微软的官方教程

需要注意的是得使用管理员运行 CMD

wmic diskdrive list brief

wsl --mount \.\PHYSICALDRIVE2

这里装载失败的错误不用管

我们直接用 sudo apfs-fuse /dev/sdd /mnt/apfs 将 /dev/sdd 这块 APFS 盘挂载到 /mnt/apfs 目录

wsl --mount \.\PHYSICALDRIVE2

通过 sudo ls 命令可以查看目录下的文件,后续通过 cp 命令拷贝出来

最终文件在 /mnt/apfs/root 里读取,试了下拷贝大文件都很稳定,但是内存占用可能比较高,也许是因为这个拷贝操作导致占用了我 70G 的内存,可以自行搜索下 WSL2 怎么限制内存。

结束后在 wsl 中使用 sudo umount /mnt/apfs 卸载挂载的磁盘