Mac 重启=用户目录损坏?
开机竟把我当 「新用户」
竟是后台 APP 抢了挂载点
OPPO 互联 O+Connect · 启动竞态 · WD 1
Mac mini 外置 SSD 排查实录
📦 8 Parts + Conclusion
👉 滑动
PART 01
变成新用户?
桌面空了
PART 02
SSD 变 WD 1
挂载路径不对
PART 03
检查挂载点
目录已存在
PART 04
lsof 找元凶
O+Connect
PART 05
开机自启
RunAtLoad
PART 06
启动顺序
时间线还原
PART 07
根治方案
禁用后台服务
PART 08
问题定位
完整链路
PART ///
写在最后
排查心得
数据其实没丢,只是外置 SSD 挂错了位置
最近我的 Mac mini 遇到了一个非常奇怪的问题。
有几次重启之后,登录系统时突然发现整个桌面环境像是「新装的一样」:原来的桌面文件没了,很多软件配置也没了,系统似乎把我当成了一个全新的用户。
一开始我甚至怀疑是不是用户目录损坏了。
但后来排查发现,数据其实并没有消失,真正的问题是存放用户目录的外置 SSD 没有按正常路径挂载。
而最终让我没想到的是,导致这一切的竟然是一个平时很少关注的后台软件——OPPO 互联(O+Connect)。
下面记录一下这次问题的完整排查过程。
01
PART
为什么重启后会变成「新用户」?
WHY A NEW USER
我的 Mac mini 外接了一块 WD SSD,并且将用户目录放到了这块 SSD 上。
正常情况下,SSD 会挂载到:
/Volumes/WD
用户目录则位于:
/Volumes/WD/Users/<用户名>
因此,每次登录系统时,macOS 都需要能够正常访问这个路径。
但出现问题的时候,SSD 没有挂载到 /Volumes/WD,而是变成了:
/Volumes/WD 1
于是原来的 /Volumes/WD/Users/<用户名> 就无法按照正常路径访问了。
这就导致 macOS 登录之后表现得像是进入了一个全新的用户环境:
原来的桌面文件看不到
软件配置像第一次运行
桌面环境恢复成默认状态
但实际上,原来的用户数据还在 SSD 里,只是 SSD 挂载到了错误的位置。
02
PART
为什么 SSD 会变成 WD 1?
WHY WD 1
先确认实际的挂载位置:
CMD mount | grep "/Volumes/WD"
正常情况下应该类似:
/dev/disk7s1 on /Volumes/WD
而出现问题时变成:
/dev/disk7s1 on /Volumes/WD 1
这里的 /dev/disk7s1 是 macOS 给磁盘分区分配的设备名称,/Volumes/WD 则是这块磁盘的挂载路径。
所以这并不是 SSD 真的改名成了 WD 1。
macOS 原本准备把 SSD 挂载到 /Volumes/WD,但发现这个路径已经存在,于是换成了 /Volumes/WD 1。
于是问题就变成了:谁提前创建了 /Volumes/WD?
03
PART
检查 /Volumes/WD 和 /Volumes/WD 1
INSPECT THE MOUNT POINTS
执行:
CMD ls -ldO "/Volumes/WD" "/Volumes/WD 1"
可以看到:/Volumes/WD 是一个普通目录,而 /Volumes/WD 1 才是真正的 SSD 挂载点。
这说明:在 SSD 真正挂载之前,系统里已经出现了一个 /Volumes/WD 目录。
接下来需要找出是谁创建、使用了这个目录。
04
PART
用 lsof 找到占用 /Volumes/WD 的程序
FIND THE CULPRIT WITH LSOF
执行:
CMD sudo lsof +D "/Volumes/WD"
这个命令可以查看当前有哪些进程正在使用指定目录。
结果发现:
O+Connect
正在访问:
/Volumes/WD/Users/<用户名>/Library/Application Support/O+Connect/dcs.db
这时候,OPPO 互联(O+Connect)成为了重点怀疑对象。
不过仅凭 lsof 还不能直接确定就是它导致的,所以继续检查它的启动方式。
05
PART
发现 O+Connect 是开机自动启动的
AUTO-START ON BOOT
查看 O+Connect 对应的进程:
CMD ps -p <PID> -o pid,ppid,user,lstart,command
发现它运行的是:
/Applications/O+Connect.app/Contents/Resources/daemon/O+Connect Service
而且是由 macOS 的 launchd 以系统服务的方式运行。
继续查看它的 LaunchDaemon:
CMD sudo cat /Library/LaunchDaemons/com.oplus.dsp.core.plist
其中有:
<key>Label</key>
<string>com.oplus.dsp.core</string>
<key>ProgramArguments</key>
<array>
<string>/Applications/O+Connect.app/Contents/Resources/daemon/O+Connect Service</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
这里最关键的是:
<key>RunAtLoad</key>
<true/>
说明 O+Connect 的后台服务会在系统启动时自动运行。
06
PART
检查文件创建时间,确认启动顺序
CONFIRM THE BOOT ORDER
到这里已经有了比较明确的怀疑,但还需要确认:是不是 O+Connect 启动后,在 SSD 挂载之前创建了 /Volumes/WD?
于是继续检查:
sudo stat "/Volumes/WD"
sudo stat "/Volumes/WD/Users"
sudo stat "/Volumes/WD/Users/<用户名>"
sudo stat "/Volumes/WD/Users/<用户名>/.oplus_devicespace_pid_flag"
sudo stat "/Volumes/WD/Users/<用户名>/Library/Application Support/O+Connect/dcs.db"
结果发现,这些目录和文件的创建时间都集中在 O+Connect 服务启动之后。
尤其是:
.oplus_devicespace_pid_flag
以及:
O+Connect/dcs.db
都出现在这个提前创建的 /Volumes/WD 目录中。
至此,整个启动过程基本可以还原出来:
Mac 开机
↓
外置 SSD 还在初始化
↓
O+Connect Service 提前启动
↓
访问 /Volumes/WD
↓
创建 /Volumes/WD 目录及相关文件
↓
SSD 后续完成挂载
↓
发现 /Volumes/WD 已经存在
↓
SSD 挂载到 /Volumes/WD 1
↓
原用户目录路径失效
↓
登录后表现得像一个「新用户」
这也解释了为什么问题不是每次重启都会出现。
本质上是 O+Connect 的启动时间和外置 SSD 的挂载时间存在竞争。有时候 SSD 先完成挂载就不会出问题,有时候 O+Connect 抢先启动,就会出现 WD 1。
07
PART
最终解决:禁用 O+Connect 核心后台服务
THE FIX
确认问题来自 O+Connect 后,我不需要它在 Mac 启动阶段运行,因此直接禁用了它的核心后台服务:
com.oplus.dsp.core
先停止当前运行的服务:
CMD sudo launchctl bootout system /Library/LaunchDaemons/com.oplus.dsp.core.plist
然后禁止它以后开机自动启动:
CMD sudo launchctl disable system/com.oplus.dsp.core
可以通过下面的命令检查:
CMD sudo launchctl print-disabled system | grep -i oplus
如果看到:
"com.oplus.dsp.core" => true
就说明已经禁用。
✦ 不需要处理的部分
这里不需要处理 com.oplus.O+Connect.uninstall。这次真正导致问题的是 com.oplus.dsp.core,也就是 O+Connect 的核心后台服务。
08
PART
问题最终定位
ROOT CAUSE SUMMARY
整个问题最终可以归纳成:
OPPO 互联(O+Connect)
↓
开机时过早启动
↓
提前创建 /Volumes/WD
↓
WD SSD 无法使用原挂载点
↓
macOS 将 SSD 挂载为 /Volumes/WD 1
↓
外置 SSD 上的用户目录无法通过原路径访问
↓
登录后看起来像进入了一个全新的用户
最终通过禁用 com.oplus.dsp.core 解决了这个问题。
这次排查过程中,最关键的几个命令就是:
mount | grep "/Volumes/WD"
ls -ldO "/Volumes/WD" "/Volumes/WD 1"
sudo lsof +D "/Volumes/WD"
sudo stat "/Volumes/WD"
从最开始的「Mac 怎么突然变成新用户了」,一路查到外置 SSD 的挂载点,再查到占用挂载点的进程,最终定位到 OPPO 互联的开机服务,整个问题也就串起来了。
///
LAST
写在最后
A PERSONAL NOTE
这次问题折腾了我一段时间,最开始看到「进入了一个全新的用户」,确实很容易往用户数据丢失或者 SSD 出问题的方向去想。
最后顺着用户目录的位置、SSD 的实际挂载点,一步步查到 /Volumes/WD 被谁提前创建,再定位到 OPPO 互联的后台服务,才把整个问题串了起来。
最终禁用 com.oplus.dsp.core 后,外置 SSD 可以正常挂载到 /Volumes/WD,用户环境也恢复正常。
记录下来,主要是给自己留个备忘。如果以后这台 Mac 再出现类似问题,至少知道应该从哪里开始查。
既然看到这里了,如果觉得有用,随手点个赞、在看、转发三连吧。
THANKS FOR READING
夜雨聆风