Matrix 首页推荐
Matrix是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。
文章代表作者个人观点,少数派仅对标题和排版略作修改。
AI 辅助创作声明:本文写作过程中使用 AI 辅助核对技术思路、整理命令和润色文字。文章结构、操作步骤与结论均由作者撰写和审阅;涉及微信的关键步骤由作者在文末所列环境中实际测试。题图由 AI 生成。
阅前须知:
- 本文方案保留 Mac App Store 微信的官方签名,不需要执行
codesign操作重新签名 - 这不是普通的文件搬家操作
- 本文会修改 APFS 宗卷的挂载位置和
/etc/fstab,填写错误的设备标识符、UUID 或路径,可能导致微信找不到聊天记录或丢失聊天记录 - 开始前请退出微信,并至少保留一份可用备份
- 本文介绍的方法亦可用于其它 App 或游戏,实现空间扩容的效果
我的 Mac mini「丐中丐」版本只有 256 GB 存储空间,但微信聊天记录的占用空间却会随着图片、视频和文件不断增长。按照传统思路把数据目录改成符号链接看似简单,但 Mac App Store 版微信运行在 App Sandbox 中,系统会解析链接的真实目标,指向外置硬盘的符号链接并不会自动获得访问权限。
一种常见做法是用 codesign 给微信重新签名,再授权它访问外置硬盘。这个方案有用,但会改变 App 原有的签名状态,每次更新后都可能需要重新操作。我更希望保留 Mac App Store 版本的官方签名。
于是我在想有没有一种更好的方案,比如创建一个独立的 APFS 宗卷,并把它直接挂载到微信容器内的聊天数据目录——如此一来,对微信来说它仍在访问自己的 xwechat_files,但对 macOS 来说,这个目录实际上又是外置硬盘上的一个宗卷。
整个过程不修改微信 App,也不需要预先切出固定大小的传统分区,更适合以下情况:
- 微信聊天记录占用了大量内置存储
- 外置硬盘通常会长期连接 Mac
- 外置硬盘已经采用 APFS 格式
如果你经常拔掉外置硬盘、需要随时带着 Mac 离开,或者不熟悉备份与恢复操作,那么定期导出聊天记录通常更稳妥。
另外,本文迁移的是微信的工作数据,不等同于备份。外置硬盘损坏后,数据仍可能丢失,因此还要另行保留备份。
原理
我们上面提到的「符号链接」,其实只是一个指向其他位置的路径。微信通过它访问外置硬盘时,App Sandbox 看到的仍是未经授权的外部路径。
挂载则不同。macOS 会把整个 APFS 宗卷接入微信容器内部的 xwechat_files 目录,即便底层存储位置其实是外置硬盘,微信看到的路径是没变的。
不过挂载点不能随意上移。在我的测试中,将宗卷挂载到微信容器的 Data 或 Data/Documents 都会触发容器完整性检查,导致微信运行崩溃。
只有挂载到更深一层的 Data/Documents/xwechat_files 才能正常运行。
第一步:创建 APFS 宗卷
打开「磁盘工具」,选中准备用来存放微信数据的外置 APFS 容器,然后点击工具栏中的「添加宗卷」。
建议使用以下设置:
- 名称:
WeChatData - 格式:APFS,不区分大小写
- 保留大小:留空
- 配额:留空,或者根据需要设置
APFS 宗卷会共享所在容器的可用空间,因此无须像传统分区那样预先划定固定容量。

创建完成后,打开「终端」,查看宗卷信息:
diskutil info "/Volumes/WeChatData" | grep -E 'Device Identifier|Volume Name|Mount Point|Disk / Partition UUID'你会看到类似 disk7s2 的设备标识符,以及一串宗卷 UUID。把它们记下来。(不记也没关系,后面也会用到)
注意:后文中的 disk7s2、宗卷 UUID、用户名和路径都只是示例,必须替换为你自己的实际值。设备标识符在重新连接硬盘后可能变化,因此自动挂载应使用 UUID。
第二步:复制微信聊天数据
这里有两种方法,一种是复制粘贴法,另外一种则是通过终端。
- 复制粘贴:完全退出微信,然后
command+shift+G在 Finder 中中前往:
~/Library/Containers/com.tencent.xinWeChat/Data/Documents/xwechat_files/将 xwechat_files 目录里面的全部内容复制到 WeChatData 宗卷根目录。
复制完成后,宗卷根目录应该直接出现 all_users、Backup、用户名_… 等目录,而不是再多嵌套一层 xwechat_files。
- 终端:继续保持微信退出,使用 macOS 自带的
ditto保留目录结构和扩展属性:
SRC="$HOME/Library/Containers/com.tencent.xinWeChat/Data/Documents/xwechat_files"
DST="/Volumes/WeChatData"
ditto --rsrc --extattr "$SRC" "$DST"
du -sh "$SRC" "$DST"
find "$SRC" -type f 2>/dev/null | wc -l
find "$DST" -type f 2>/dev/null | wc -l无论哪一种方法,都需要检查文件数量和占用空间大致一致后,把 Mac 上原来的 xwechat_files 重命名为 xwechat_files-backup。注意不要立即删除这个备份!确认微信稳定运行一段时间,并且另有完整备份后再处理。
第三步:把宗卷挂载到微信数据目录
原来的 xwechat_files 已经改名为 xwechat_files-backup ,因此先重新创建一个空目录作为挂载点,你可以直接在 xwechat_files-backup当前目录新建 xwechat_files:
mkdir "$HOME/Library/Containers/com.tencent.xinWeChat/Data/Documents/xwechat_files"
然后卸载新宗卷,再把它挂载到这个目录。请将 disk7s2 换成自己的设备标识符:
diskutil unmount disk7s2
diskutil mount -mountPoint "$HOME/Library/Containers/com.tencent.xinWeChat/Data/Documents/xwechat_files" disk7s2
检查挂载结果:
diskutil info disk7s2 | grep -E 'Mounted|Mount Point|Volume Name'
输出中的 Mount Point 应该准确指向:
/Users/你的用户名/Library/Containers/com.tencent.xinWeChat/Data/Documents/xwechat_files
如果挂载点不正确,不要启动微信。先卸载宗卷,再检查命令中的设备标识符和路径。
第四步:启动微信并验证数据
启动微信,依次检查:
- 聊天列表是否完整;
- 多个不同日期的历史图片和文件能否打开;
- 聊天记录搜索是否正常;
- 新消息和新附件能否写入;
- 完全退出并重新启动微信后是否仍然正常。
特别注意,「微信能够启动」并不代表迁移已经成功。至少要确认旧数据可读、新数据可写,并完成一次退出和重新启动测试。如果微信像刚安装一样显示空白聊天列表,请立即退出微信。
只要原来的 xwechat_files-backup 和外置宗卷中的数据还在,通常只是挂载点或目录层级不正确,并不代表聊天记录已经消失。
第五步:使用 UUID 自动挂载
手动指定的挂载点不会在重启或重新连接硬盘后自动保留。确认前四步全部正常后,可以通过 /etc/fstab 固定挂载位置。
再次读取 UUID:
diskutil info disk7s2 | grep 'Disk / Partition UUID'
示例输出:
Disk / Partition UUID: 12345678-1234-1234-ABCD-1234567890AB
使用系统提供的方式编辑 fstab:
sudo vifs
添加下面一行,并替换其中的 UUID、用户名和路径:
UUID=你的宗卷UUID /Users/你的用户名/Library/Containers/com.tencent.xinWeChat/Data/Documents/xwechat_files apfs rw,nobrowse 0 0
其中:
UUID=用来准确识别宗卷,不受disk7s2等临时编号变化影响rw表示以读写方式挂载nobrowse会隐藏 Finder 桌面和侧边栏中的宗卷图标,但不会影响读写
如果实际路径包含空格,需要按照 fstab 的规则转义。保存前务必逐项核对,尤其不要把 UUID 或用户名照抄成示例内容。保存后重新挂载:
diskutil unmount disk7s2
diskutil mount disk7s2
再次检查 Mount Point,然后启动微信并重复上一节的验证。
可选保护:避免硬盘缺席时误写
外置硬盘没有连接时,底层的空挂载目录会重新出现。如果此时启动微信,它可能在本机创建一套新的空数据,实际表现嘛,你的聊天记录可能会突然消失。
你可以在微信退出、宗卷卸载的状态下,把底层空目录设置为不可写:
diskutil unmount disk7s2
chmod 000 "$HOME/Library/Containers/com.tencent.xinWeChat/Data/Documents/xwechat_files"
diskutil mount disk7s2
宗卷挂载后,它会覆盖权限为 000 的底层空目录,微信仍可正常读写宗卷;宗卷缺席时,微信则无法在空目录里写入新数据。可以在宗卷卸载时测试:
touch "$HOME/Library/Containers/com.tencent.xinWeChat/Data/Documents/xwechat_files/test"预期结果为:Permission denied。测试后立即重新挂载宗卷。如果以后需要恢复底层目录的权限,请先卸载宗卷,再执行:
chmod 700 "$HOME/Library/Containers/com.tencent.xinWeChat/Data/Documents/xwechat_files"一石二鸟:这套方法还能用于其他 App 吗
理论上,它也可能适用于把大型资源集中存放在固定子目录中的其他 App。我曾在《异环》NTE 上测试同一思路,该 App 会把约 50 GB 的 Unreal Engine 资源下载到:
~/Library/Containers/tw.com.iwplay.nte/Data/Documents/HT将独立宗卷挂载到这个固定子目录后 App 可以正常运行,不过,这只是特定版本和环境中的实测结果。不同 App 的沙盒规则、完整性检查与更新机制并不相同,不能把微信的操作步骤直接套用到所有 App。
写在最后
这个方案没有让微信获得额外的外置硬盘访问权限、重置相应的权限,也没有修改微信的官方签名。它做的事情是让 macOS 把外置 APFS 宗卷,接入微信原本就能访问的数据目录。
对长期把 Mac 放在固定位置、外置硬盘常年连接的用户来说,它可以让体积庞大的聊天记录不再挤占有限的内置存储;对经常移动使用 Mac 的用户来说,传统备份或定期清理可能还是更加省心一点。
附测试环境:
- macOS 26.5.2
- Mac App Store 微信 4.1.11
> 关注少数派小红书,感受精彩数字生活 🍃
> 实用、好用的 正版软件,少数派为你呈现 🚀

