对 MacBook 的调整和优化

关闭开盖自动开机

在“终端”输入命令:

  • 防止电脑在翻开屏幕盖或连接电源时启动:

    1
    sudo nvram BootPreference=%00
  • 仅防止电脑在翻开屏幕盖时启动:

    1
    sudo nvram BootPreference=%01
  • 仅防止电脑在连接电源时启动:

    1
    sudo nvram BootPreference=%02

重新启用在翻开屏幕盖或连接电源时自动启动,在“终端”中运行命令:

1
sudo nvram -d BootPreference

查看硬盘寿命

  1. 安装 Homebrew(macOS缺失的软件包的管理器),在“终端”运行命令:

    1
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  2. 通过 Homebrew安装 smartmontools 软件,在“终端”运行命令:

    1
    brew install smartmontools
  3. 运行查看硬盘寿命的命令:

    1
    smartctl -a disk0 | awk '/SMART\/Health Information/,/^$/'

​ 命令解释:

  • smartctl: 运行 smartctl 工具的命令。
  • -a: smartctl 命令的一个参数,指示它显示硬盘的所有可用 S.M.A.R.T. 属性和信息。即,显示硬盘的详细健康状态报告。
  • disk0: 目标硬盘的标识符。在这个命令中,”disk0” 是硬盘的名称或标识符,可以是系统中硬盘的设备名称或其他标识符,具体取决于操作系统和硬件配置。
  • |: 这是管道符号,将 smartctl -a disk0 的输出传递给下一个命令。
  • awk: 这是一个用于处理文本数据的强大工具。在这个命令中,我们使用 awk 来处理 smartctl 的输出。
  • ‘/SMART/Health Information/,/^$/‘: 这是 awk 命令的模式和动作部分。模式部分由两个正则表达式构成,它们用逗号分隔。第一个正则表达式 /SMART\/Health Information/ 是起始模式,用于匹配包含 “SMART/Health Information” 的行。第二个正则表达式 /^$/ 是结束模式,用于匹配空行。
  • 动作部分: 在模式匹配时执行的动作。在这个命令中,awk 将会从匹配到的起始模式开始打印输出,并在遇到结束模式(空行)时停止打印。
  1. 确认当前系统挂载的分区或启动的磁盘标志符,在“终端”运行命令:

    1
    diskutil list | grep \* -m 1

    在输出内容的最右边的“disk0”即为启动磁盘标志符。如果你要查看别的磁盘,请运行下面的命令查找磁盘标志符(输出结果最后一列IDENTIFIER):

    1
    diskutil list
  2. 分析输出结果

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    SMART/Health Information (NVMe Log 0x02)
    Critical Warning: 0x00 #严重警告。此处值为 0x00,表示没有严重警告。
    Temperature: 33 Celsius #温度。当前温度为 33 摄氏度
    Available Spare: 100% #可用备用空间。当前可用备用空间为 100%。
    Available Spare Threshold: 99% #可用备用空间阈值。当可用备用空间低于此阈值时,可能会出现警告。
    Percentage Used: 2% #使用百分比。当前使用了 2% 的存储器容量
    Data Units Read: 91,207,805 [46.6 TB] #读取的数据单元数量。
    Data Units Written: 95,333,096 [48.8 TB] #写入的数据单元数量。
    Host Read Commands: 2,236,552,092 #主机读命令数量。
    Host Write Commands: 1,626,904,490 #主机写命令数量。
    Controller Busy Time: 0 #控制器忙碌时间
    Power Cycles: 349 #电源循环次数。当前已进行了 349 次电源循环。
    Power On Hours: 1,237 #上电时间。当前已经上电运行了 1,237 小时。
    Unsafe Shutdowns: 10 #不安全的关闭次数。当前发生了 10 次不安全的关闭。
    Media and Data Integrity Errors: 0 #媒体和数据完整性错误。当前没有发生媒体和数据完整性错误。
    Error Information Log Entries: 0 #媒体和数据完整性错误。当前没有发生媒体和数据完整性错误。

关闭Swap或内存压缩

禁用 MacOS 的 Swap 分区, 目的是提高速度。众所周知,Swap 是将磁盘虚拟为内存来用的,所以速度肯定比不上扎扎实实的内存的。

但如果你的物理内存真的不够,禁用 Swap 可能会导致程序被内核 OOM(Out Of Memory) Kill 掉,甚至导致内核崩溃。请自行斟酌风险。

  1. 关闭 SIP:

    关机,然后持续按住电源按钮,Mac 会开机并载入启动选项。当你看到“正在载入启动选项”或“选项”图标时,松开电源按钮。在实用程序菜单中,选择“终端”。运行命令:

    1
    csrutil disable

    重启后查询当前SIP状态,在“终端”运行命令:

    1
    2
    csrutil status
    # 预期返回:System Integrity Protection status: disabled.
  2. 查看 vm.compressor_mode

    检查现在的内存模式(默认的数字是 4),在“终端”运行命令:

    1
    sysctl -a vm.compressor_mode

    1 代表不压缩内存且不启用 swap。

    2 代表压缩内存但不启用 swap。

    3 代表不压缩内存但启动 swap。

    4 代表着压缩内存并启用 swap。

  3. 设置 vm.compressor_mode

    建议设置为 2: sudo nvram boot-args="vm_compressor=2"

    不过,有可能你之前已经有设置过 boot-args 了,这样可能会把你原来的 boot-args 覆盖掉,建议先看看 boot-args 是不是有别的:

    1
    nvram -p

    假设你设置过 serverperfmode=1,那么这个时候就填 sudo nvram boot-args="vm_compressor=2 serverperfmode=1" 这样把之前的配置加上去(类似 $PATH 那样的处理)

    当然也可以一行搞定:

    1
    2
    # 我没试过这个核心是 $(nvram boot-args 2>/dev/null | cut -f 2-) 这个
    nvram boot-args="vm_compressor=2 serverperfmode=1 $(nvram boot-args 2>/dev/null | cut -f 2-)"
  4. 禁用 dynamic_pager

    1
    2
    sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
    sudo rm /private/var/vm/swapfile*
  5. 重启, 检查 Swap 是否已关闭:

    1
    sysctl -a vm.compressor_mode

    预期返回 2

  6. 回到恢复模式重新启用 SIP,在恢复模式的控制台运行命令:

    1
    csrutil enable

禁用其他系统服务

禁用 mds_stores

mdsSpotlight的一部分。也就是你按 Command (⌘) + 空格 弹出来的那个东西。它为所有文件建立索引,以便在你要搜索文件的时候快速的找到你想要的东西。 Spotlight 可以完全被 Alfred 替代,所以可以禁用它以节省CPU和内存。

  • 要禁用索引,在“终端”运行命令:

    1
    sudo mdutil -a -i off
  • 若想恢复索引,在“终端”运行命令:

    1
    sudo mdutil -a -i on

停用 spotlight 索引功能

停用 spotlight 索引功能, 也可以减少磁盘扫描,来提升ssd寿命和提升性能。

  1. 系统设置 - Siri与聚焦 - 去除所有聚焦勾选项, 聚焦隐私 - 把整个磁盘加进去(也就是黑名单)

  2. 禁用 mds_stores,在“终端”运行命令:

    1
    sudo mdutil -a -i off

恢复 spotlight 索引功能:

  1. 还原黑名单

  2. 重新启用 mds_stores,在“终端”运行命令:

    1
    sudo mdutil -a -i on


参考

Apple - 防止 Mac 笔记本电脑在翻开屏幕盖或连接电源时开机

CSDN - Mac查看磁盘寿命

GitHub Gist - eczn/mac-disable-swap

GitHub - digoal/blog/202212/20221207_01