肇鑫的日常博客

日常

macOS备份策略(2023修正版)

长久以来,我一直同时使用时光机和CCC(Carbon Copy Cloner)来对我的系统进行备份。这种双备份的策略能够兼顾备份和恢复的效率,同时还能支持文件的多个版本进行恢复。

最近,我从Intel版本的Mac,过渡到了苹果芯片的Mac。苹果芯片的Mac,对于很多方面进行了改变,这导致原本的备份策略不再完全适用。因此,写下此文进行小结。此文分Intel芯片篇和苹果芯片篇。

Intel芯片篇

时光机

无论你是使用何种备份方式,时光机都是首要推荐的。不仅是因为它是系统自带的,完全免费,而且它真的好用。

使用时光机备份,只需要打开时光机,选择合适的备份磁盘就可以了。相比较于网络备份,我更推荐使用移动硬盘。因为后者的备份/恢复速度更快。有条件的,可以直接使用移动固态硬盘进行备份,这样恢复的时候,你能体验到飞一般的感觉。

时光机的另一个主要功能,是用于单独文件/文件夹的恢复。只需要点击时光机,选择要恢复的时间,然后选择指定的文件或者文件夹,最后选择恢复就可以了。

CCC

CCC是我常用的备份恢复工具。我将它设置为每天上午七点半自动备份。相比于时光机,它的优势是恢复系统的时间更短。另外,通过传统模式备份的CCC备份,包含完整的系统,可以直接从备份盘启动。

CCC备份的问题是,传统模式备份的CCC备份,包含的系统是不会随着源盘的系统进行升级的。如果你想将系统也同时升级,就只能格盘重新运行一遍全新的传统模式备份。

苹果芯片篇

时光机的部分参考Intel芯片篇,不再赘述。

CCC

苹果芯片的Mac从外置硬盘启动时,修改了启动策略。对于苹果芯片的Mac,要想从外置硬盘启动,Mac的内置硬盘必须包含完整的系统,然后使用内置硬盘系统中的管理员账号授权,才能从外置硬盘启动。

这直接导致了,苹果芯片的Mac,是无法直接从外置硬盘启动系统的。这样,在外置硬盘保存完整的系统并用于单独启动的可能就变小了。为此,CCC也在文档中说明,在目前的Mac中,相对于传统备份方式,更推荐标准备份。标准备份只备份所有数据,不包含操作系统本身。因此不能用于单独启动,但是因为苹果芯片的Mac在系统挂掉的情况下,本来也不能从外置硬盘启动,因此可以说是没啥影响。

所以,如果你使用的是苹果芯片的Mac,并且没有多系统的需求。那么直接使用CCC的标准备份就可以了。如果你需要使用多个版本的Mac,那么还是使用传统备份,格式化硬盘,然后备份完整的系统。这样在内置系统完整的情况下,还是可以多系统启动的。

2023年1月31日更新

这两天遇到了一个新情况。之前原本能够成功启动的移动硬盘里的macOS Ventura无法启动了。并且重新制作也无法启动成功。没办法,我写了邮件给CCC,询问原因。

CCC的客服回复说,就目前M1芯片的苹果电脑。CCC的传统备份,仅支持备份完成之后立即使用这种形式。不再推荐长期使用这种方式进行备份,并随时准备从外置硬盘启动的情况。

有鉴于此,今后CCC的备份,推荐默认的备份方式。不再推荐传统备份的方式。传统备份,仅在大版本改变时推荐。即比如macOS 13升级到14之前,可以用传统备份,保存一个macOS 13的版本,单独保存。这样,可以双启动。

截屏2023-01-31 20.18.12

路由安装ShellClash后,设置方面的一些小结

这段时间一直使用路由翻墙,重中之重是ShellClash的各种设置。设置好了,一切正常,设置冲突,可能就上不了网了。我并没有所有的设置都尝试过,因此,这只是我体验过的部分设置。

ShellClash的能力和限制

ShellClash可以代理TCP和UDP的流量。TCP的流量可以通过转发和TUN的方式,UDP的流量只能通过TUN的方式,但UDP必须是通过域名访问,直接通过IP访问的ShellClash会略过不处理。

模式、内核和设置

ShellClash的模式、内核和设置,是彼此相关的,你在设置时需要仔细阅读说明,考虑到他们之间的匹配性。

Redirect模式、官方内核、redirect DNS运行模式

官方内核占用的资源最小,但是功能也最精简。仅支持redirect模式和redirect DNS,能够代理TCP流量,对于UDP流量不做处理。

混合模式、Pre内核、fake-ip DNS运行模式

Pre内核功能更多一些,因此也占用更多的内存。除了可以代理TCP流量,UDP流量也可以通过TUN的方式进行代理。需要注意的是,此时必须选择fake-ip的DNS运行模式,不然UDP的流量还是无法代理。

TUN模式、Pre内核、fake-ip DNS运行模式

和上面的类似,但是TCP流量也不再使用转发,而是同样适用TUN的方式。

使用这个模式的时候,Telegram会上不了网。这是因为它是采用IP直连,会被TUN给略过。可以在Telegram的设置里,手动指定代理,方法就按照原的socks5的方式进行设置就可以。
此模式下,如果Firefox无法上网,可能是因为你同时安装了AdGuard应用。可以在AdGuard中,将Firefox设置为不过滤,然后在Firefox中使用AdGuard插件即可。

定时设置

刚开始启动时,ShellClash占用的内存是最小的,随着代理的增多,消耗内存逐渐变大。我们可以通过重启ShellClash的服务来释放内存,以免内存占用过多导致路由出现问题。我设置为每天3点自动重启ShellClash服务,因为那时我一般都在睡觉。

其他

ShellClash还有其他的一些模式和内核,但是由于我都没有尝试过,就不进行说明了。另外,本文针对的是1.6.8内测版。

Mac睡眠时经常异常唤醒问题的处理

问题

最近从英特尔芯片的iMac 5K,换成了苹果芯片的Mac mini。一切都好,就是电脑在睡眠之后,经常会异常唤醒。表现为显示器由黑转亮,同时显示为无信号;键盘背景灯变亮;外置机械硬盘启动,发出噪音。然后几秒后,电脑又睡眠了。这个过程在电脑睡眠不久就会出现,而且会连续多次出现。

这个问题对于Mac mini这种无电池的台式机还算是小问题,最多就是有点儿烦人,费些电。但是如果是使用电池的Macbook,问题就严重多了。论坛上甚至有人反馈说,自己的电脑的电池电量,一小时就耗光了。

处理

确定了问题,就要研究如何处理。网上有很多种说法。甚至苹果自己也专门为这个问题开了技术说明。

如果 Mac 意外睡眠或唤醒

你可以先尝试使用苹果的提供的方法,如果还是没能解决你的问题。你再来使用我的方式。不过,我更建议你先使用我的方式进行调查,确定原因了之后,再使用苹果的或我的方式进行处理。

分析问题

网上对于这个问题的分析有多个思路。比如利用各种日志,通过命令行过滤来查询是什么原因唤醒了系统之类的。这些方法能查到原因,但是那些原因,一般都写得很技术,往往需要上网去查是什么意思,而且指向虽然有了,但是好多却不具备可操作性。

这里,我们采取更直接的方式,直接使用pmset来进行电源设置的查询。

我注意到Ventura下M1芯片的Mac min的节能设置中,并没有Power Nap的选项。我以为是Ventura的原因,毕竟我用M1不久。但是后来我在论坛上看到,有网友指出,苹果在M1芯片的Mac,移除了Power Nap的选项。我猜测,苹果大概是认为M1芯片的Mac足够省电,所以就把这个选项移除了。保持默认开启状态。

这个是我目前正常,没有异常唤醒状态的电源设置

zhaoxin@zhaoxins-Mac-mini-M1 ~ % pmset -g
System-wide power settings:
Currently in use:
 disksleep            10
 powernap             0
 womp                 1
 networkoversleep     0
 sleep                1 (sleep prevented by powerd, mds_stores)
 Sleep On Power Button 1
 ttyskeepawake        1
 tcpkeepalive         0
 autorestart          0
 standby              0
 displaysleep         10

每个选项的具体含义,可以参考下面的链接。

pmset
另外提一下第8行的sleep项,如果你的系统无法睡眠。那可能是有应用阻止了它睡眠。你可以看看这一行括号里的应用。这些应用都是可能阻止系统睡眠的。注意,是可能,而不是一定。所以你可以先尝试将能关闭的应用先关闭了,然后再来重新执行pmset -g这个命令,看看是不是生效了。然后再次尝试睡眠。

我的Mac mini,因为是从英特尔平台的系统迁移过来的,所以powernap默认时关闭的,如果是全新安装的系统,这一项应该是开启的。此外tcpkeepalive默认是开启的。在我的系统中,这一项的开启是导致系统的在睡眠后还被频繁唤醒的主要原因。

我的理解是,当系统睡眠后,如果tcpkeepalive还开着,那么系统就会因为各种通知唤醒。同时,由于苹果系统中的一些bug,一些可能具备网卡功能设备,比如各种USB设备(因为存在USB网卡这种设备),也能将系统唤醒。比如,我就在日志中发现,系统被我的M.2的外置移动硬盘唤醒过。

sudo pmset -a tcpkeepalive 0
sudo pmset -a powernap 0 // 如果有需要的话

现在再睡眠你的电脑,应该就不会有异常唤醒了。

New macbook Pro M1 chip waking when asleep with log "SMC.OutboxNotEmpty" wake reason