苹果系统祖传Bug概述
- 在MacOS中如果在系统偏好设置/用户和群组中
- 尝试修改用户名或用户ID,当且仅当只有一个管理员账号的时候
- 重启,就可能面临到无法进入操作系统,即使出现了登录框,但是一直是 loading状态
- 在这个期间,你有可能因为人的正常思维修改用户名的同时也修改了用户对应的路径
- 官方其实知道这块会有问题,在文档上也给出过警告提示,如下
- 但是这类操作是非常敏感而且是有风险的,但是大家要理解小白用户有恐怖的破坏力
- 其实我不理解的是,如果修改会出现大的问题,为何官方还把这个问题放出来,如果客户误操作,进不去系统导致数据丢失,苹果官方到底有没有责任呢?
- 外加互联网上一大堆的教程,弄着弄着,可能本来不是一个大问题,就变成了一个大问题
- 而且每个人的电脑环境不同,也许别人的解决方案并不适合你的
- 客服告诉我,这个Bug起码有5年了,我也是醉了 ...
- 现在把解决步骤分享出来
解决方案
- 网上有很多 command + s 进入后执行一些终端命令,挂载和删除
- 实际上,我遇到的问题更邪门,压根无法进入到输出模式,一大堆底层代码输出后,仍旧是 loading,所以这种方案被遗弃
- 现在我来讲下解决这个问题的过程,有一部分是借助搜索引擎,有一部分是动手实践,还有一部分是靠猜
1 )初步研究和客服电话沟通流程
- command + r 进入恢复模式
- 检查硬盘数据是否挂载,这一步很重要,如果不挂挂载是没法在终端中看到的
- 进入磁盘管理工具,对数据盘进行挂载, 一般而言,挂载的是 Macintosh HD 数据 这个盘,选中,进行挂载操作 (必须)
- 之后退出 磁盘管理工具,在最顶部菜单栏选择 实用工具下的终端,执行 $
cd /Volumes/Macintosh HD/var/db/
- 好进入这里之后,执行 $
ls
或ls -la
可以看到有一个.AppleSetupDone
文件 - 我们可以进行删除
rm .AppleSetupDone
- 一般而言,如果再次执行 $
reboot
重启后进入系统 即可重置管理员,但是我遇到的问题并没有那么简单 - 昨日,我联系苹果客服,告诉我大概也就这几个步骤
- 客服电话中说如果还解决不了,可以再次到磁盘工具中,新建文件夹镜像进行数据的拷贝来避免数据丢失造成的损失
- 这里他没有告诉我,要先挂载
Macintosh HD 数据
这个盘,导致我执行 $rm "/Volumes/Macintosh HD/var/db/.AppleSetupDone"
(包括引号)会有 no such file or directory 的提示 - 而且,因此,我也没有办法避免数据的丢失,因为没有挂载,所以无法浏览到相关数据,我当时就没意识到这个问题
- 当时客服态度比较好,而且一直说,想着帮我解决问题,也花了不少时间,又夸我思路清晰,描述和思考的很专业
- 后来我想想,这算不算一种"捧杀" ... 在职场中"捧杀"和"贬低" 这两种都是要不得的,好,话说回来
- 在沟通当时,我并没有发现太多对我有用的信息
- 在沟通之后, 我看到了自己没有挂载磁盘,并且
- 最终发现了新大陆,找到了
.AppleSetupDone
这个文件 - 在这个文件删除之后,其实按照互联网大多数人的做法,执行 $
reboot
重启后,就可以重新设置管理员以此来解决问题 - 但是,我的电脑和系统,在重启后,在输入登录密码之后,菊花还是一直在转圈, 之前是加载进度条卡住
- 现在是菊花转圈圈,都是Loading状态, 这个问题仍旧没有解决
2 )最终解决
- 在这之前,我还使用恢复模式第二个选项,重新做了两次系统(无抹盘),但是都没有任何的效果,客服之前也说没有用
- 昨天我在我的另一台Mac上升级了一下系统,因为硬件不同,无法升级到同样的系统版本,但也无妨我多次模拟这个问题
- 昨天临睡前,我想了想,如果我把我的用户文件夹给删除掉(或重命名),它会不会重新走初始化流程呢
- 抱着这个想法,今天早晨,我尝试了一下
- 仍旧按照之前的步骤挂载数据盘,并删除
.AppleSetupDone
这个文件 - 之后,我在
/Volumes/Macintosh HD/Users
目录下重命名了我之前那个唯一的用户目录,比如这里原本是A
重命名改成M
(随意),因为里面的数据后期还需要还原回来, 之后执行重启 - 天终于亮了,在输入密码重新进入后,没有了 Loading, 出现了
辅助功能
的设定流程,也就是进入重置之前的那个用户的数据的流程 - 在我一步一步的处理好之后,终于进入了系统
- 还没完,进入系统设置/用户与群组,发现这个用户仍旧是一个管理员,并没有像是网上说的丢失了管理员权限
- 可以看到,右键 高级选项后,看到 用户名这一栏是灰色的 (这个注意了)
- 这次,我长了个心眼,重新设置了另一个管理员,来以防万一,后续弄好后可以删除也可以继续保留
- 登录另一个管理员,在经过一系列初始化操作后,进入用户目录,这里一般而言,除了 共享,客人,还应该有三个用户目录
- 分别是最开始改名的原始用户目录
M
,后来重新初始化的用户目录A
(代号),最后是刚刚新建管理员的用户目录,假设是B
- 现在已经进入了另一个管理员账户,所以就可以操作
M
和A
目录了,同样,这个操作也可以在恢复模式下操作(麻烦,没有必要) - 好的,现在,删除
A
目录,需要输入管理员密码,之后把M
目录重命名成A
- 再次说明,这里M, A, B目录都是代号(按照自己设定的来) A目录就是最原始的那个目录,对应用户与群组高级选项中
个人目录
设定的那个 - 好的,目前还剩两个用户目录:
A
和B
分别对应两个管理员账号,再次执行重启,选择最原始的管理员账号进行登录,再经过短暂的Loading后,发现一切都回来了 ... - 这里,如果之前修改过用户ID, 默认是 501,修改成别的,应该也回不来也同样卡在Loading,用类似的方法,可以把用户ID再改成501,看下别被另一个管理员占用
- 注意,用户ID最好不要乱改,否则容易出问题
- 如果到目前,仍旧恢复不了,可以直接用另一个管理员账号,可以将之前的管理员账号目录下的数据转移过来
- 如果发现当前用户下,账户名称是灰色,新建另一个管理员账号对当前账号的名称进行修改
- 仍旧按照之前的步骤挂载数据盘,并删除