需要脚本自动重启 Mac 直到协商 SATA Link 速度为 SATA II
Need Script To Automatically Restart Mac Until Negotiated SATA Link Speed is SATA II
我有几辆 2009 年末的 Mac Minis 运行 Mavericks。我最近用 SSD 更换了他们的硬盘。一切似乎都很好,但是,我并不总是能获得 SATA II 速度。计算机通常会降低到 SATA I 速度。如果我重新启动计算机足够多次,它最终会以 SATA II 速度注册,我可以继续了。
我认为这个问题没有完美的解决方案,但是是否有可用的脚本,或者有人可以编写脚本,在启动时检查我协商的 SATA link 速度,如果小于3.0GBPS会自动重启电脑并循环直到读出合适的速度?
谢谢!任何帮助将不胜感激
仅使用 AppleScript 是不可能的,因为它需要执行一些终端代码。因此最好创建一个使用终端的脚本。无论是来自 AppleScript 还是来自 bash 脚本都没有关系,尽管最快的方法是 bash 脚本。
可以找到示例命令 here。
如果我发现自己处于您所描述的情况,并且无法更换硬件,我会设置 bash
脚本 来检查 SATA 协商 Link SSD 的速度,如果它小于 3
,请重新启动,直到它不小于 [=17] =].
这是我会做的示例:
备注:
- 这是在 macOS Sierra 10.12.6 的全新安装下测试的,默认情况下
/usr/local/bin
不存在,因此目标目录需要首先创建。
bash
脚本命名为snls
,代表:SATA N协商 Link Speed
- 如编码所示,这假设您只有一个 SATA SSD 而没有其他 SATA 设备 连接的。如果你有多个,
awk
命令将需要根据需要进行修改。
- 此处显示的 代码 与测试的唯一区别是
-lt 3
设置为 -lt 7
,因为在我的系统上 6
是 值 输出到 -lt
operator[=] 左侧的 command 的正常 value 156=],并通过将其设置为 7
它重新启动,直到表达式从 恢复模式 修改为启用正常启动,我将其更改为 -lt 6
所以它会正常启动。我的系统没有问题,这是测试它的唯一方法。
在终端中,执行以下命令来设置bash
脚本 和 Launch Daemon 将检查 SATA Negotiated Link Speed SSD:
sudo mkdir -p /usr/local/bin
sudo touch /usr/local/bin/snls
sudo nano /usr/local/bin/snls
在 nano
中,键入或复制并粘贴以下内容:
#!/bin/bash
[[ $(system_profiler SPSerialATADataType | awk '/Negotiated Link Speed:/{print int()}') -lt 3 ]] && shutdown -r now
保存更改并按以下键序列退出 nano
:
ControlX
Y
输入
还在终端:
使 snls
可执行,仅对 root
:
sudo chmod 744 /usr/local/bin/snls
为 snls
创建 启动守护进程 .plist
文件:
sudo touch /Library/LaunchDaemons/com.sata.snls.plist
sudo nano /Library/LaunchDaemons/com.sata.snls.plist
将以下内容复制并粘贴到 nano
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.sata.nls.com</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/snls</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
保存更改并按以下键序列退出 nano
:
ControlX
Y
输入
加载启动守护进程:
sudo launchctl load /Library/LaunchDaemons/com.sata.snls.plist
使用此设置,每次启动时 SATA Negotiated Link Speed SSD 小于 3
,它将重新启动,直到 3
,无论需要多少次。
警告:除非您知道如何启动到恢复模式并且恢复模式正在您的系统上运行,或者有其他方法来访问和修改 SSD 上的文件系统,否则不要执行此过程.此外,您可以在 Recovery Mode Terminal 中轻松导航到创建的目标文件并删除它们,这样您就可以在出现问题时正常重启,例如在您的系统上使用此方法陷入无休止的重启循环。
请注意,当启动至 macOS Recovery 并启动 Terminal 时,这与打开 Terminal[ 时不同=157=] 正常启动。默认情况下,您不在正常的 Home 目录中,并且键入 cd /
不会将您带到 root 的 root Macintosh HD
,您将位于 OS X Base System
的 root 中。此外,nano
不在 Terminal 在 macOS Recovery 中使用的 PATH
中,尽管如果您键入正确的 path 文件名.
当您在 macOS Recovery 下打开 Terminal 时,PWD
是 /private/var/root
,例如Macintosh HD
,您键入:cd /Volumes/Macintosh\ HD
同样,如果您对这种方法有疑问,从 macOS Recovery 中删除 snsl
或 com.sata.snls.plist
将允许系统正常启动,通常适合你的任何东西。
我有几辆 2009 年末的 Mac Minis 运行 Mavericks。我最近用 SSD 更换了他们的硬盘。一切似乎都很好,但是,我并不总是能获得 SATA II 速度。计算机通常会降低到 SATA I 速度。如果我重新启动计算机足够多次,它最终会以 SATA II 速度注册,我可以继续了。
我认为这个问题没有完美的解决方案,但是是否有可用的脚本,或者有人可以编写脚本,在启动时检查我协商的 SATA link 速度,如果小于3.0GBPS会自动重启电脑并循环直到读出合适的速度?
谢谢!任何帮助将不胜感激
仅使用 AppleScript 是不可能的,因为它需要执行一些终端代码。因此最好创建一个使用终端的脚本。无论是来自 AppleScript 还是来自 bash 脚本都没有关系,尽管最快的方法是 bash 脚本。
可以找到示例命令 here。
如果我发现自己处于您所描述的情况,并且无法更换硬件,我会设置 bash
脚本 来检查 SATA 协商 Link SSD 的速度,如果它小于 3
,请重新启动,直到它不小于 [=17] =].
这是我会做的示例:
备注:
- 这是在 macOS Sierra 10.12.6 的全新安装下测试的,默认情况下
/usr/local/bin
不存在,因此目标目录需要首先创建。 bash
脚本命名为snls
,代表:SATA N协商 Link Speed- 如编码所示,这假设您只有一个 SATA SSD 而没有其他 SATA 设备 连接的。如果你有多个,
awk
命令将需要根据需要进行修改。 - 此处显示的 代码 与测试的唯一区别是
-lt 3
设置为-lt 7
,因为在我的系统上6
是 值 输出到-lt
operator[=] 左侧的 command 的正常 value 156=],并通过将其设置为7
它重新启动,直到表达式从 恢复模式 修改为启用正常启动,我将其更改为-lt 6
所以它会正常启动。我的系统没有问题,这是测试它的唯一方法。
在终端中,执行以下命令来设置bash
脚本 和 Launch Daemon 将检查 SATA Negotiated Link Speed SSD:
sudo mkdir -p /usr/local/bin
sudo touch /usr/local/bin/snls
sudo nano /usr/local/bin/snls
在 nano
中,键入或复制并粘贴以下内容:
#!/bin/bash
[[ $(system_profiler SPSerialATADataType | awk '/Negotiated Link Speed:/{print int()}') -lt 3 ]] && shutdown -r now
保存更改并按以下键序列退出 nano
:
ControlX
Y
输入
还在终端:
使 snls
可执行,仅对 root
:
sudo chmod 744 /usr/local/bin/snls
为 snls
创建 启动守护进程 .plist
文件:
sudo touch /Library/LaunchDaemons/com.sata.snls.plist
sudo nano /Library/LaunchDaemons/com.sata.snls.plist
将以下内容复制并粘贴到 nano
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.sata.nls.com</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/snls</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
保存更改并按以下键序列退出 nano
:
ControlX
Y
输入
加载启动守护进程:
sudo launchctl load /Library/LaunchDaemons/com.sata.snls.plist
使用此设置,每次启动时 SATA Negotiated Link Speed SSD 小于 3
,它将重新启动,直到 3
,无论需要多少次。
警告:除非您知道如何启动到恢复模式并且恢复模式正在您的系统上运行,或者有其他方法来访问和修改 SSD 上的文件系统,否则不要执行此过程.此外,您可以在 Recovery Mode Terminal 中轻松导航到创建的目标文件并删除它们,这样您就可以在出现问题时正常重启,例如在您的系统上使用此方法陷入无休止的重启循环。
请注意,当启动至 macOS Recovery 并启动 Terminal 时,这与打开 Terminal[ 时不同=157=] 正常启动。默认情况下,您不在正常的 Home 目录中,并且键入 cd /
不会将您带到 root 的 root Macintosh HD
,您将位于 OS X Base System
的 root 中。此外,nano
不在 Terminal 在 macOS Recovery 中使用的 PATH
中,尽管如果您键入正确的 path 文件名.
当您在 macOS Recovery 下打开 Terminal 时,PWD
是 /private/var/root
,例如Macintosh HD
,您键入:cd /Volumes/Macintosh\ HD
同样,如果您对这种方法有疑问,从 macOS Recovery 中删除 snsl
或 com.sata.snls.plist
将允许系统正常启动,通常适合你的任何东西。