肇鑫的日常博客

肇鑫 / Owen Zhao

独立开发者,主要开发 iOS、watchOS、macOS 应用。

目前在维护 SleepTapRooster Time,以及 Markdown Writer 相关工具。

最新文章

记一次尝试了两天的系统恢复

技术

起因:系统出现故障

7月31号晚,iMac上的多个应用出现了故障。现象是需要弹出文件对话框的时候,应用会卡住。经过检查,发现是iCloud Drive的同步出现了问题。通过查看macOS Catalina 10.15 beta 4的发布说明,发现iCloud的同步出现错误,是个已知的问题。苹果给出的临时解决方案为手动点击下载。

但是我即便手动点击也无法下载。我决定采用常规的手段,禁用iCloud Drive,然后再开启。多次尝试都没能成功。系统每次都提示遇到了错误。于是我又想,那我可以注销掉iCloud账户,然后再重新登录。又尝试了多次,同样也没能成功,系统提示遇到了错误。

我只好用iCloud账户无法注销来进行搜索,尝试了两个不同的方案,第一个没起作用,第二个起作用了,重启之后,显示我没有已登录iCloud账户了。然后我尝试重新登录,结果这下无论如何都无法登录成功。

此时,我只能进行系统恢复了。

第一次恢复

我的备份自以为还是很充分的。

我有CCC(Carbon Copy Cloner)的每日备份,设定在每天清晨5点,如果备份失败则给我发邮件。鉴于我近期没有收到邮件,那么最近的备份就都应该是成功的。

此外,我还有时光机的网络备份。因为目前使用的是macOS 10.15的测试版,我还在测试版之初,就重新设定了备份磁盘,也就是说,我不仅有10.15 beta的单独时光机备份,还有之前10.14的时光机备份。

因为CCC的恢复最快,我决定重新启动到CCC备份分区,进行恢复。

进入到CCC的备份分区,我发现了第一个问题。CCC最后一次的备份时间居然不是31日,而是25日。也就是有近一周的时间没有备份。由于是没有备份,而非备份失败,我并没有收到备份失败的邮件,也就没能知道没有备份这件事。

我决定使用这个25号的备份进行恢复。因为大部分文件还是存在的。程序源文件则可以从时光机和git恢复。

恢复大约进行了40分钟。重新进入系统后,我发现了另外一个问题。以往从CCC恢复之后,磁盘的可用空间有140GB以上,这次则只剩下了50多GB。也就是说,恢复了很多多余的文件。这个是不应该的。我猜可能是因为配合macOS 10.15 beta的CCC也是测试版,程序存在bug。

但是我在系统中看不出来是哪些文件多出来了。传统上,CCC会有一个叫SafetyNet的文件夹,这个文件夹是冗余文件,但是我恢复的时候就选择了不使用该文件夹,因此不是这个问题。

小结

到这里,总结一下我犯的错误。

  1. 进行iCloud账户删除操作之前,没有查看CCC的备份是否最新。而是想当然的以为是最新。
  2. 测试版系统+测试版备份软件,出错的几率大大提升。比如CCC定期备份居然没有执行,不清楚是CCC没有计划上,还是测试系统需要额外的权限。
  3. 其实我应该使用APFS的快照功能进行恢复。(但是根据后面提到的,实际上即便我想使用这个功能,也不会成功。)

第二次恢复

没办法,我只能采用时光机恢复。我先尝试使用无线网络直接恢复,发现用时太长,提示接近20小时。于是我选择将外置硬盘从Mac mini上拿下来,直接连接到iMac上进行恢复。

这里我遇到了另一个问题。由于Mac mini上的时光机备份,我采用的是分享文件夹+限制配额的方式,时光机的文件是以映像文件的格式存在的,而非普通的磁盘分区的格式。这个格式,苹果的恢复系统不能直接识别。最终,我只能选择重装系统,然后再融合。(此时我又新犯了一个错误,等下小结时再谈。)

安装系统时,我突然想到我忘记提前格式化磁盘了。于是停止安装,格式化了磁盘。格式化磁盘之后,安装系统无法安装了。我只好重启重新进入恢复界面。

重启之后,原本的10.15 beta的恢复系统,变成了10.14的。于是安装了10.14的系统。重启之后,又安装了10.15 beta的系统,此时已经是半夜3点多了,苹果发布了macOS 10.15 beta 5,因此直接安装的是10.15 beta 5。安装完成后,采用迁移助手融合时光机备份,等待是漫长的,我去睡觉了。

小结

恢复系统虽然不能直接识别映像格式的时光机备份,但是可以使用磁盘工具将映像加载,这样恢复系统就能识别了。不过后面我们会看到,macOS 10.15 beta的恢复系统存在bug,即便采用磁盘工具加载了映像,也还是识别不出。

第三次&第四次恢复

清早起来,发现时光机融合结束,同时系统提示有几个内核扩展需要我允许它们的加载。选择了允许。重启之后,苹果图标下的进度条走完之后就卡在哪里,不能进入登录界面。

我知道这是遇到了内核扩展的问题。但是在删除内核驱动之前,我想到我可以使用APFS的本地快照功能,恢复系统到我允许内核扩展之前,也就是我在睡觉时系统自动创建的快照。

重启进入恢复系统,选择从时光机恢复,按照网上的说法,这时恢复系统会自动列出系统盘,选择之后就可以使用APFS的本地快照。但是macOS 10.15 beta的恢复系统,并没有列出系统盘。因此APFS恢复功能也没法使用。

我只能选择手动删除内核扩展了。上网查,发现需要删除掉有问题的内核扩展。重新启动,长按option,选择从CCC备份的分区启动,清空了扩展文件夹,重启,成功进入系统。

一切看起来都没问题,除了键盘。

我的键盘是雷蛇的黑寡妇RGB竞技版,需要配合雷蛇自己的驱动。我发现当前的系,键盘有问题:系统自带的多媒体按键都失效了。

卸载雷蛇驱动,重新下载并安装。故障依旧。对比雷蛇驱动文件夹和CCC备份分区中的对应文件夹,没发现有什么不同。

不过这种现象也不算罕见。有时macOS升级和全新安装,的确会出现不一致的现象。表现为,如果一款硬件的驱动,是在旧版macOS安装且使用正常的,那么升级到新版macOS,它的行为就还是正常的。但如果是全新安装的最新macOS,然后再安装驱动,有时就会出现问题。

我重装了10.14,但是没有安装雷蛇驱动,然后升级到了10.15 beta,进行系统融合,相当于是雷蛇驱动是全新安装的,出现了问题也正常。

此时我的选择是将就用,或者重新恢复系统。我选择重新恢复系统。

这次我终于想起来我可以使用磁盘工具加载磁盘映像的方式进行恢复,因为我使用迁移助手的时候就是这么干的。可是,我发现,macOS 10.15 beta的恢复系统,不能识别磁盘工具加载的磁盘映像里的时光机备份。

于是我祭出另外一招,我将外置硬盘连回Mac mini,并使用10米长的网线将路由与iMac连起来。这样虽然仍旧是网络恢复,但是不再是无线网络,而是千兆有限网络。

网络恢复时光机是一段漫长的过程。几个小时之后,系统在未完成恢复的情况下自动重启了。重启之后,果然是进不去系统。

我突发奇想,可否用CCC覆盖安装系统盘,看看能否进去,因为10.15将系统分成系统盘和数据盘。尝试失败,系统盘恢复后手动停止CCC恢复。重启仍旧进不去系统。

此时我完全对于10.15的时光机失去信心。为了键盘驱动,我决定从10.14的时光机进行恢复。又是几个小时的等待,这次时光机没有自动重启,而是提示时光机恢复遇到了错误,无法继续。我重启系统,发现还是无法进入。

小结

  1. 一天的时间又过去了,但是系统还是进不去。我开始有些着急了。
  2. 实在没想到居然两个时光机完全无效。不清楚是测试版的时光机备份存在问题,还是测试版的恢复系统有问题,还是因为我的网络经常需要切换VPN导致了网络备份存在问题。

第五次恢复

此时我已经完全没有耐心了。又把主意打到了CCC备份的分区,既然之前恢复的内容过多,我把备份中多余的内容删掉不就可以了吗?

我发现在CCC备份的数据盘有一个叫device的文件夹,这个文件夹是macOS中原本没有的。于是我删掉了这个文件夹里面的内容。然后进行恢复。重启,进不去系统。

小结

孤注一掷的赌博是没有意义的,还是不行。

第六次恢复

没有任何办法。我只能再一次选择重新安装系统,然后采用文件夹恢复的方式,恢复一部分文件,之后就缺啥补啥吧。这个办法效率最低,但是保证能成功。

恢复系统的10.14的安装文件下载缓慢。于是我重启,长按cmd+option+r,从网上直接下载恢复环境,安装10.10,然后在10.10中安装雷蛇驱动,确认没有问题之后,才升级到macOS 10.15 beta 5。

系统终于没有问题了。但是两天时间也过去了。

总结

这次恢复过程历时两天。之所以用了这么久,有些原因是策略错误导致的,有些则是测试版系统导致的。总结如下:

  1. 采用任何风险操作之前,要查看备份是否最新,最好还要再备份一次。
  2. 测试版系统加测试版备份软件,会对备份造成极大的风险。
  3. 网络备份时光机虽然方便,但是恢复过于缓慢。即便是使用了千兆有线网,恢复也还是太慢。究其原因,时光机恢复是逐个文件恢复,而网络传送单个文件的额外开销太大。
  4. APFS的本地快照应该是恢复的最快方式,但是不知道是不是测试版系统的原因,macOS 10.15 beta的恢复系统,不识别APFS的快照。

新备份策略

之前我是一个CCC每日备份+时光机网络备份。新策略改为CCC每日备份+时光机网络备份+时光机本地移动硬盘备份。

将MWeb的代码加亮从highlightjs替换为prismjs

技术

我一直使用MWeb来维护我的网站。MWeb应用内的预览可以显示代码的行号。但是生成的网页不行。一年前我将这个问题提交给了MWeb的作者,他也承诺会尽快解决。但是一年过去了,完全没修。今天,我决定自己看看能不能弄好。

作者虽然没有修,但是提供了思路,说是需要将highlightjs改为prismjs。于是我来到了两者的网站,通过比较MWeb生成的网页代码,以及综合我之前修改MWeb主题的经验,我总结出了正确的替换步骤。

替换步骤

  1. 来到prism的下载页,选择你需要的语言和代码风格。此外,还要把插件Plugins功能中的行号Line Numbers选上。

  2. 点击网页最下放的下载,分别下载js文件和css文件。

  3. 在MWeb中,右键点击你网站对应的分类,点编辑。

    MWeb menu

  4. 在你选择的主题右侧,点击编辑。

    MWeb dialog

  5. MWeb会在Finder中显示主题所在的文件夹。

    theme folde

  6. 在asset文件夹中创建文件夹,命名为prism。

  7. 将之前下好的js和css放到上面新建的prism文件夹。

  8. 用文本编辑器打开header.html,将第27,28行注释掉或删除,内容类似下方

<script src="asset/highlightjs/highlight.pack.js"></script>
<link href="asset/highlightjs/styles/xcode.css" media="screen, projection" rel="stylesheet" type="text/css">

并新增

<link href="asset/prism/prism.css" rel="stylesheet" type="text/css" />
<script src="asset/prism/prism.js" type="text/javascript">

最后保存这个文件。

现在你可以在MWeb中选择“清空并重新生成网站”,新的网站是会显示行号的了。

修改代码显示的字体

代码显示出来了,但是我觉得字体比较大。于是我打算修改字体。打开之前保存的prism.css文件。

  1. 找到第15行,font-size: 1em;,将它改为font-size: .88em;
  2. 如果你此时重新生成网站,你会发现行号和代码的位置不对应,存在错位。这是因为,行号是单独生成的,它和代码之间的距离是需要计算的,而非直接对应。
  3. 修改第21行,line-height: 1.5;line-height: 1.32;
  4. 修改第142行,font-size: 100%;font-size: 113.64%;

这个规律是这样的:15行的默认值为1,如果你将其修改为a。那么21行,就是1.5*a,第142行就是1÷a*100%

保存好这个文件。之后在MWeb中重新生成网站就可以了。

Dart Web的安装

技术

安装Dart

> brew tap dart-lang/dart
> brew install dart

命令行环境

> pub global activate webdev
> pub global activate stagehand

创建首个应用

> mkdir quickstart
> cd quickstart
> stagehand web-simple
> pub get

运行该应用

> webdev serve

访问该应用

打开Safari,输入localhost:8080,回车。

环境变量

需要将下面的环境变量加入到~/.bashrc

# for dart command line
export PATH="$PATH":"$HOME/.pub-cache/bin"

# dart pub get mirror
export PUB_HOSTED_URL="https://mirrors.tuna.tsinghua.edu.cn/dart-pub/"

第一个环境变量是缓存,这个都需要。第二个是将dart的包的源换成清华的,因为国外的访问特别慢。这个可选,如果你直连很快的话就可以去掉。

使用IDE编辑

可以使用IDE来进行编辑。但是运行和调试还是需要使用命令行。比如你用Android Studio编辑,可以享受的好处是命令行补全等。但是当你需要调试时,还是需要使用pub get来获得依赖。通过webdev serve来运行,之后你编辑的新内容,会时时进行检测,遇到错误,会在webdev serve的终端上进行提示。要停止运行,在终端按cmd+c

参考

https://dart.dev/tutorials/web/get-started

Ubuntu 16.04 服务器安装

技术

缘起

由于美区应用商店买错了礼品卡要怎么办?的缘故,还没能用上HyperApp。于是先钻研一下手工要如何做。

选取虚拟主机

首先是在虚拟主机列表中选择64位的Ubuntu 16.04。我其实是Debian的拥护者。我自己使用的虚拟主机,一般都会用Debian。但是由于我之后会用到Swift。而官方支持的是Ubuntu,所以我这次就选它了。另外,HyperApp的文档建议的是64位。

配置用户

主机选择好之后。等待安装完成,就可以进入系统了。

进入系统之后,我们首先要创建一个普通用户。今后我们就用它登入,然后禁用root用户通过密码登录。因为有很多无聊的菜鸟黑客,会尝试使用破解root密码的方式来入侵你的电脑。

创建新用户

# adduser sammy

#是root账户的提示符,sammy是演示用的用户名。你只需要输入密码,其它按照默认就可以。

为新用户添加sudo权限

# usermod -aG sudo sammy

为新用户添加远程登录的证书

生成生成证书

这个证书是在本地机器生成的。不是在服务器。

$ ssh-keygen

生成后,查看公开密钥。

$ cat ~/.ssh/id_rsa.pub

配置服务器端

将内容复制。在服务器,输入

# su - sammy
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ nano ~/.ssh/authorized_keys

粘贴之前复制的公开密钥,按ctrl+x退出,按y保存,按回车确认。之后输入

$ chmod 600 ~/.ssh/authorized_keys
$ exit

回到本机,你现在可以通过证书访问服务器了。

禁用密码登录

$ sudo nano /etc/ssh/sshd_config

找到PasswordAuthentication,取消它的注释,将它的内容改成PasswordAuthentication no

另外,文件中有这两行。

PubkeyAuthentication yes
ChallengeResponseAuthentication no

保存退出后,执行

$ sudo systemctl reload sshd

这样通过密码登录的方式就被禁用了。

开启防火墙

$ sudo ufw allow OpenSSH
$ sudo ufw enable

参考文献

Xbox One S手柄在macOS下的安装使用流程

技术

起因

之前买的北通震动手柄3是有线的。macOS下可以免驱,打一些模拟器的小游戏。不过它不支持Xbox 360模式,Steam里的游戏没法玩儿。

于是我打算买升级版的阿修罗2无线版。可以无线,可以模拟Xbox 360,价格还便宜。唯一缺点是,据说手感不如Xbox One的手柄。于是我想不如加钱买Xbox的手柄算了,Xbox的手柄一共有3种,360手柄,One手柄,One S手柄,分别是有线/无线/蓝牙,其中后两者也可以有线玩儿。

买之前搜索了一下,发现说法是,Xbox的手柄,macOS下虽然可以无线连,但是打游戏的时候,手柄会被同时识别为鼠标,导致没法玩儿游戏,因为会经常点到别的东西。但是实际上这个说法是错误的,或者说,至少它是不适合Xbox One S手柄的,应该指的是Xbox One的无线手柄。

综合比较

  • 北通阿修罗2无线版:可无线、可模拟Xbox 360手柄,价格便宜,做工据说较差。
  • Xbox One S手柄:可无线、可有线,价格贵(大概是2.5倍的阿修罗2无线版的价格),据说做工较好。

于是我买了后者。

测试

第一轮

收到货之后,发现无法连接。原因有两点:

  1. 手柄背面的电池位置,看起来两个电池是并联,实际上是串联的。你要看弹簧片上的正负极标注,一个是正,一个是负。我刚开始以为是并联的。这点还不如很多年前的设计。那时弹簧片一侧是负极,另一边是正极。这个手柄的弹簧片有正也有负。
  2. 微软的快速安装手册的描述是错误的。它说安装好电池之后,按3秒无线连接键,然后Xbox的灯会闪动,就可以蓝牙配对了。这个说法是错误的。正确的操作是电池装好之后,按Xbox标志的按钮,等灯开始闪烁之后,再按住无线连接按钮几秒,这时灯会更快速的闪动,此时就可以蓝牙配对了。

macOS High Sierra下,蓝牙可以配对之后,一些模拟器的小游戏,比如OpenEmu,就可以直接玩儿了。但是Steam的游戏不识别。安装了Xbox 360 Controllers应用,重启之后,无论是否连接USB线,都无法识别手柄。

第二轮

到Github上的Xbox 360 Controllers的页面查看issues,看看有没有人提到Xbox One S手柄的不兼容问题,发现的确有。但是有的人说没问题。

为了定位问题,我安装了OS X Mavericks 10.10,以及Xcode 6.4到Parallels Desktop 13中。我一共测试了3个版本的macOS,10.10、10.12、10.13。我发现前两个重启之后都能自动识别手柄。但是10.13不可以。可喜的是,这次我注意到,重启之后会提示有软件被禁用,到系统偏好设置->安全与隐私查看,果然提示来自开发者“Drew Mills”的系统软件已被阻止载入。点击允许之后,手柄就正确被识别了。

正确流程

有线连接,适用于玩儿Steam平台的大型游戏以及模拟器游戏

下载这个。我安装时最新的是0.16.5版。

英文说明在这里

macOS Sierra 10.12及以前的版本的系统

正常安装驱动,重启电脑即可。然后再升级到macOS High Sierra,可以保证后者也还能继续识别。

macOS High Sierra 10.13

  1. 安装好电池,按Xbox标志按钮,此时按钮会闪动。(这个闪动是比较慢的,不同于蓝牙配对时的快速闪动)
  2. 使用USB连线与电脑相连。
  3. 安装Xbox 360 Controllers应用。如果期间Xbox按钮的闪动停止了,再次按一次Xbox标志,保证按钮一直处于闪动状态。
  4. 重启系统。
  5. 重新进入系统后,点击系统偏好设置->安全与隐私,点击允许。此时有可能会提示你需要重启,如果提示,就重启。如果不提示,就去看系统偏好设置->Xbox 360 Controllers。手柄的灯一直亮就代表驱动安装成功了。
    驱动被系统阻止

伪装成Xbox 360手柄,这样Steam的游戏才会识别

这时Steam的大型游戏也还是不识别,需要再伪装一下。

  1. 打开系统偏好设置->Xbox 360 Controllers->Advanced,点击右下角的Pretend to be an Xbox 360 Controller

伪装成Xbox 360的手柄

  1. 打开你要玩儿的游戏。
    古墓丽影9正确识别了手柄

蓝牙连接,适用于玩儿模拟器游戏

  1. 按Xbox按钮,按钮会慢慢的闪动。
  2. 长按无线连接按钮,Xbox按钮会快速闪动。
  3. 打开系统偏好设置->蓝牙。当出现手柄时点连接。

上面这几步比较简单。主要的问题在于从有线连接切换到蓝牙连接时有些问题。比如你在有线连接时,直接拔下USB线,这时,并不会直接切换到蓝牙连接。Xbox按钮会慢慢的闪,你这时有两个选择:

  • 按住Xbox按钮,直到灯灭。然后再按Xbox按钮,将手柄打开。此时,会自动连接蓝牙。
  • 或者,你可以打开系统的蓝牙设置,先删除掉手柄,然后重复上面的第2步,重新配对蓝牙。

说说Xbox按钮指示灯

它有4个状态:

  1. 慢闪。代表手柄没有连接到电脑,处于等待的状态。此时如果一段时间还是没连接,会自动进入到省电状态。
  2. 快闪。代表手柄等待蓝牙配对。
  3. 常亮。代表手柄已经正常连接到了设备上,可以正常操作。
  4. 不亮。电池没装好。或者手柄处于关闭或节电状态。

电池正确安装后,长按Xbox键可以开启手柄,慢闪。慢闪状态,长按配对按钮,可以配对,快闪。快闪状态,配对成功后,会常亮。常亮状态,连接USB线会变成有线连接。有线连接拔掉USB线,会变成慢闪。

说说Parallels Desktop虚拟机里的Xbox One S手柄

  • 在Windows 10的虚拟机里,通过蓝牙分享可以识别出来无线连接下的手柄。但这个手柄在游戏中无法使用。
  • 在Windows 10的虚拟机里,USB连接的手柄,通过指派给虚拟机,可以在Windows 10里正确识别手柄,并且可以在游戏中使用。另外,安装Xbox 附件应用,可以更新手柄的固件。值得说的有一点,即便是Xbox 附件应用,也仅支持USB连线下更新固件,而不支持蓝牙更新。这个是微软的限制,和虚拟机无关。

记一次CCC4提示Clone出错的故障排除

技术

macOS 10.12的磁盘工具移除了之前的磁盘查错功能,号称磁盘不会再出错,其实不然。今早CCC4(Carbon Copy Cloner 4)提示备份完成但有错误。

ccc erro

点开查看日志,发现已经连续5天备份错误,达到极值,因此弹出特别提醒。查看最早那天,是一个警告,说是一些文件名字太长,没法备份。之后几天就都是错误了。日志内部记录是,有一个文件夹,出现了无限循环的自引用的情况,类似“a/a/a/a.../a”,具体几层我没数。

ccc alert

我删掉了多出来的文件夹,再次点击CCC的clone,但是过了一会儿再看,它又卡在这个文件夹里的".DS_Store"文件的位置。于是我打开磁盘工具,在源盘和目标盘,分别做了一次急救。再次重新运行clone,这次成功了。

仔细回想这段期间发生的事情,几天之前的一次意外断电嫌疑最大。那天突然断电,又马上来电,结果家里的电脑都灭了。当时这台电脑是处于睡眠状态,而非开机,但应该还是受到了一些影响。

结论:当涉及磁盘的故障发生时,我们还是可以使用磁盘工具进行修复的。虽然磁盘查错表面上看没有了,但是其实是被转移到了急救当中。

另外,我还发现,虽然CCC每天都会有一个通知,但是由于它大部分时间都是成功的,所以那个通知我很少看。而今天之所以能发现错误, 是因为CCC在连续5次错误后,使用了提示风格的通知(平时都是横幅的,过一会就会自动消失那种)。为了今后能第一时间收到错误的通知,我开启了CCC的邮件通知功能。它在备份错误时,会发一封邮件到我的邮箱。这样就不用等5天才知道有错误发生了。

iMac 27 5K 2014 late 故障现象

技术

先说结论

在24小时之内发生了5次问题,其中4次是使用时电脑自动断电并无法立刻开机,需要切断电源并等上一段时间再开机。1次是我主动关机之后,无法再开机,症状与自动断电的相同。

从某次开机到自动断电,最短的时间是30分钟左右。例如下文提到的第三次和第四次是在1小时之内发生的。最长,可能用了整晚都没事。

我个人倾向于这个和系统的负载有关,CPU负载高或系统整体功耗高时,更容易自动断电。我的系统没有安装游戏,因此没测试显卡负载高的部分。

第一次故障

2016年12月21日下午5点10分左右,正在运行的iMac突然断电(屏幕全黑,USB鼠标灯灭)。我开始还以为是停电了,但是看了一下插线板,发现灯都还亮着。

  • 按iMac背部的电源键,没有反应(正常开机会有“当……”的声音)。
  • 拔掉所有外接设备(USB鼠标,USB移动硬盘),再按电源键,依然没有反应。
  • 插拔电源线与插座,换另外一个插口,再试。没反应。
  • 拔开电源线与iMac,再试,没反应。
  • 拔下电源线,将iMac放到床上,打开iMac后盖,拔下内存再重新插上。
  • 只连电源线再开机,正常开机。进入系统之后连接鼠标和移动硬盘。一切正常。

第二次故障

本来这一切就应该结束了。但是我好奇究竟是什么原因导致这个问题。于是晚上我在iPad上搜索类似的故障。

其中,有一种说法引起了我的注意。该说法说,如果是电源的问题,那么你只要不关机,就不会有问题。比如你每次不使用时,都是用睡眠而不是关机,那么就没问题。一旦你选择了关机,那么再开就有一定的几率无法开机。

我一直都是使用睡眠而非关机的,所以这个说法很吸引我。22号上午8点多,我选择了关机。然后按电源键开机,发现的确没法打开了。

8:50的时候,我去苹果网站申请服务。这个时间我记得很清楚,因为苹果的服务是从9:00开始的。

9:00的时候我接到苹果打来的电话。听了我的说法后,苹果说可以安排上门,但是由于当时苹果的内部系统有问题,说是稍后安排好之后再通知我。期间我收到了苹果高级客服的邮件确认。

此时我尝试重新开机,发现竟然可以开机了。然后选择关机,再开机,竟然也都没有问题。于是我给苹果的高级客服写邮件,说明如果还没有申请维修的话,就先停下,我要再测试几天。苹果回复说系统还没有好,还没申请维修。

第三次和第四次故障

收到苹果回复的邮件的时间是上午10点。我使用了一段时间,iMac突然又自动断电了。这一次,我选择将内存插槽更换一下,之前是1、3,我更换为了2、4。更换没有起到作用,11点刚过不久,iMac又自动断电一次。

我只好再次预约了维修。

更进一步的研究

现阶段故障的定位还是太模糊了。自动断电太过随机,我期望可以更快的定位故障。

我仔细回想了一下。这几次故障时的共同点。第一故障时,我在Safari里看在线视频,Parallels Desktop的虚拟机开了两个,一个是macOS 10.12,一个是macOS 10.11,都在升级系统。当时CPU的负载较高。

第三次故障时,我为了进一步的测试,运行了视频转码软件,对系统进行压力测试,也是CPU高负载的项目。

因此,我猜可能是CPU高负载导致耗电升高,然后电源温度过高导致无法开机。

为了测试这个结论,我设计了一个实验。打开转码软件,让它把一个1080p的mkv,转码为mp4。我用手表定时了5分钟。软件显示转码要8分钟。5分钟时间到的时候,我点转码软件的暂停,结果就在我点暂停之后的瞬间,iMac断电黑屏了。

但是这个结论在后来的验证中没能证实。接下来的使用,包括整晚的使用,都没能出现断电的情况。因此,我这里还是没能得到一定能复现问题方式。

macOS Sierra 增强了与磁盘加密的兼容性

技术

之前的macOS,一旦启用了FileVault。在升级系统之后就会无法自动开启远程登录,必须本机登录才可以。新的macOS Sierra,同样的情形下,会自动进入到输入用户名和密码的地方。这样就方便多了。

现在,除非是断电,否则就不需要本机直连服务器了。可以一直远程登录。