
Это мой первый пост на этом сайте, так что извините, если это двойной пост, но я не смог найти ничего похожего.
У меня Macbook Pro 13 начала 2011 года, я установил SSD и переместил HDD в OptiBay, сделал чистую установку Yosemite, мой второй HDD имеет объем 1 ТБ, на нем я храню свою работу и данные, а затем делаю резервную копию, когда прихожу домой.
Мне не нужно, чтобы жесткий диск был постоянно подключен, и мне нужно экономить энергию и скрывать его, поэтому я удалил его из поиска Spotlight, выполнил команду «sudo pmset -a disksleep 1» и создал два сценария AppleScript: один для запуска при входе в систему для прямого отключения жесткого диска, а второй запускается с помощью клавиши извлечения, которую я модифицировал с помощью karabiner (ранее известного как KeyRemap4MacBook).
Второй скрипт запускает диалоговое окно, в котором запрашивается пароль, а затем спрашивает, хочу ли я получить доступ к жесткому диску. Если да, жесткий диск будет смонтирован, если нет, он будет размонтирован.
Проблема в том, что я заметил, что если я выключаю свой MacBook, когда жесткий диск смонтирован, идентификатор жесткого диска меняется с disk2 на disk1, и оба скрипта попытаются размонтировать SSD, поэтому мне нужно вручную извлечь жесткий диск и перезагрузить его, чтобы все вернулось на круги своя.
Я хочу изменить скрипт, который запускается с помощью клавиши извлечения, чтобы он запускал первое диалоговое окно, точно такое же, как диалоговое окно выключения, удалив кнопку отмены и добавив кнопку под названием «Расширение» (это название жесткого диска).
Я новичок в работе с AppleScript, поэтому вот что я хочу сделать: Пример
Если нажат Restart, то отмонтировать hdd и перезагрузить
Если нажат Sleep, то отмонтировать hdd и заснуть
Если нажат shutdown, то отмонтировать hdd и выключить
Если нажат Expansion, то запустить старый скрипт
Вот мой старый сценарий, новый сценарий должен идти прямо перед ним.
set my_password to display dialog ¬
"Allow access to Expansion" with title ¬
"Expansion" with icon caution ¬
default answer ¬
"" buttons {"Cancel", "OK"} default button 2 ¬
giving up after 295 ¬
with hidden answer
if text returned of my_password is "password here" then
set answer to the button returned of (display dialog "Allow access to Expansion?" with icon caution buttons {"Yes", "No"})
if answer = "Yes" then
do shell script "diskutil mountDisk disk2"
tell application "Notifications Scripting"
display notification "Expansion" subtitle "is now mounted" sound name "Blow"
end tell
else if answer = "No" then
try
do shell script "hdiutil eject disk2"
on error
tell application "System Events"
set termOpen to count (processes whose name is "Terminal")
set amOpen to count (processes whose name is "Activity Monitor")
end tell
tell application "Terminal"
activate
set newTab to do script "lsof /Volumes/'HFS HD'"
end tell
tell application "Activity Monitor"
activate
end tell
delay 3
set question to display dialog "Kill running?" buttons {"Yes", "No"} default button 2
set answer to button returned of question
if answer is equal to "Yes" then
do shell script "lsof -P | grep '/Volumes/HFS HD' | awk '{print $2}' | xargs kill -9"
do shell script "hdiutil eject disk2"
end if
tell application "Activity Monitor"
if amOpen is 0 then
quit
end if
end tell
tell application "Terminal"
if termOpen is 0 then
quit
else
close (first window whose selected tab is newTab) saving no
end if
end tell
end try
tell application "Notifications Scripting"
display notification "Expansion" subtitle "is now unmounted" sound name "Blow"
end tell
end if
else
tell application "Notifications Scripting"
display notification "A Goomba killed Mario!" subtitle "Next time, try jumping on it" sound name "Sosumi"
end tell
quit
end if
Спасибо за помощь, и извините, если это будет кратко :p
решение1
Итак, после 3 часов гугления и попыток я нашел решение.
Монтирование и размонтирование жесткого диска с помощью «diskutil mountDisk disk2» и «hdiutil eject disk2» было ПЛОХОЙ ИДЕЕЙ, потому что я понял, что идентификатор диска продолжает меняться случайным образом независимо от того, был ли жесткий диск размонтирован или нет при последнем выключении, поэтому скрипт, который я пытался добавить, был бесполезен.
Решение, которое я нашел, очевидно, заключалось в UUID. Поначалу мне не удавалось заставить его работать правильно, но после нескольких попыток все заработало нормально.
Как: Запустите Disk Utility, слева вы увидите каждый диск с его разделами. Выберите раздел, для которого вы хотите создать скрипт, и нажмите «Информация» в левом верхнем углу, появится информационное окно. Убедитесь, что это правильный раздел. В информационном списке вы найдете (Универсальный уникальный идентификатор: набор букв и цифр). Это и есть UUID.
Мой окончательный сценарий:
set answer to the button returned of (display dialog “Mount the second HDD?” with icon caution buttons {"Yes", "No"})
if answer = "Yes" then
do shell script "diskutil mount *YOUR UUID WITHOUT THE ASTERISK* ”
else if answer = "No" then
try
do shell script "diskutil unmount *YOUR UUID WITHOUT THE ASTERISK*"
end try
end if
Команда Try позволяет избежать отображения сообщения, если диск уже размонтирован.
Вот и все, просто и точно, надеюсь, это поможет в будущем.