Нужен скрипт для автоматической перезагрузки Mac, пока согласованная скорость соединения SATA не станет равной SATA II

У меня есть пара Mac в конце 2009 года под управлением Mavericks. Я недавно заменил их жесткие диски на SSD. Кажется, все работает нормально, но я не всегда получаю скорость SATA II. Компьютер часто согласовывает скорость до SATA I. Если я перезагружаю компьютер достаточно много раз, он в конечном итоге регистрируется на скоростях SATA II, и я готов к работе.

Я не думаю, что есть элегантное решение проблемы, но есть ли сценарий, или кто-то может написать, что при запуске проверил бы мою согласованную скорость соединения SATA, и если она меньше 3.0GBPS, он автоматически перезапустится компьютер и цикл, пока он не зачитает соответствующую скорость?

Спасибо! Любая помощь будет оценена

2 ответа

Решение

Если бы я оказался в описанной вами ситуации и не смог заменить оборудование, я бы настроил bash сценарий для проверки скорости SATA Negotiated Link SSD и если она меньше 3 перезагрузите, пока не станет меньше 3,

Вот пример того, что я бы сделал:

Заметки:

  • Это было протестировано в чистой установке macOS Sierra 10.12.6, где по умолчанию /usr/local/bin не существует, поэтому целевой каталог должен быть создан в первую очередь.
  • bash сценарий назван snls, обозначая: S ATA N договорная L чернила S peed
  • Как закодировано, это предполагает, что у вас есть только один SATA SSD и никакие другие устройства SATA не подключены. Если у вас есть более одного, то awk Команда должна быть изменена по мере необходимости.
  • Единственная разница в коде, представленном здесь, и в том, что было проверено, -lt 3 был установлен на -lt 7 потому что в моей системе 6 нормальное значение вывода команды в левой части -lt оператор, и, установив его 7 он перезагружался до тех пор, пока выражение не было изменено из режима восстановления для включения нормальной загрузки, где я изменил его на -lt 6 так что он будет загружаться нормально. Не имея проблем с моей системой, это был единственный способ проверить это.

В терминале выполните следующие команды для настройки bash скрипт и запуск демона, который проверит согласованную скорость соединения SATA 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($4)}') -lt 3 ]] && shutdown -r now

Сохраните изменения и выйдите nano нажав следующие последовательности клавиш:
Control X
Y
Войти

Все еще в Терминале:

Делать snls исполняемый, только для root:

sudo chmod 744  /usr/local/bin/snls

Создать Launch Daemon .plist файл для snls:

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 нажав следующие последовательности клавиш:
Control X
Y
Войти

Загрузите демон запуска:

sudo launchctl load /Library/LaunchDaemons/com.sata.snls.plist

С этим набором, каждый раз, когда вы загружаетесь, и SATA Negotiated Link Speed SSD меньше, чем 3 перезагрузится, пока не 3 Однако много раз это занимает.


ПРЕДУПРЕЖДЕНИЕ. Не выполняйте этот процесс, если вы не знаете, как загрузить режим восстановления и этот режим восстановления работает в вашей системе, или у вас есть альтернативный метод для доступа и изменения файловой системы на SSD. Кроме того, вам удобно в терминале режима восстановления перейти к любому созданному целевому файлу и удалить его, чтобы вы могли нормально перезагрузиться, если что-то не работает, например, застряло в бесконечном цикле перезагрузки, с помощью этого метода в вашей системе.

Посмотрите: О MacOS Recovery

Обратите внимание, что при загрузке в MacOS Recovery и запуске Терминала это не так, как при открытии Терминала при обычной загрузке. Вы находитесь не по умолчанию в вашем обычном домашнем каталоге, а набираете cd / не сводит вас к корню, например, Macintosh HD вы бы в корне OS X Base System, Также, nano не в PATH используется Терминалом в macOS Recovery, хотя он доступен, если вы введете правильный путь к файлу.

Когда вы открываете терминал в MacOS Recovery, PWD является /private/var/root так, например, чтобы добраться до Macintosh HD, вы вводите: cd /Volumes/Macintosh\ HD

Опять же, если у вас есть проблема с этим методом, удаление либо snsl или же com.sata.snls.plist Восстановление из MacOS позволит системе загружаться нормально, как обычно.

Это невозможно только с AppleScript, так как требует выполнения кода терминала. Поэтому лучше всего создать скрипт, который использует терминал. Неважно, идет ли речь об AppleScript или скрипте bash, хотя самым быстрым способом будет скрипт bash.

Пример команды можно найти здесь.

Другие вопросы по тегам