Удаление содержимого /private/tmp, перемещенного на другой жесткий диск

У меня Macbook pro с 2 внутренними HD (стандартный HD для данных и удвоитель данных + SSD вместо оптического привода, на котором размещается ОС). Сейчас я пытаюсь оптимизировать эту настройку, чтобы учесть наличие SSD, и я хочу переместить временную папку с SSD (/private/tmp) на дополнительный диск (/Volume/MacintoshHD/private/tmp) .

После этого ( http://blog.alutam.com/2012/04/01/optimizing-macos-x-lion-for-ssd/comment-page-1/#ramdisk ) я сделал следующее:

sudo ditto /private/tmp /Volumes/MacintoshHD/private/tmp
sudo rm -rf /private/tmp
sudo ln -s /Volumes/MacintoshHD/private/tmp /private/tmp

Все хорошо, но когда я перезагружаюсь, я ожидаю, что папка будет очищена, как обычно. Однако я обнаружил, что любые файлы, которые присутствовали в предыдущем исполнении ОС, все еще присутствуют.

Я предполагаю, что любой скрипт, очищающий папку /private/tmp, выполняется до того, как магнитный HD будет смонтирован, а это означает, что ссылка, указывающая на папку tmp, тогда никуда не указывает, и, следовательно, неудачное удаление.

Есть идеи, как это исправить? Любые другие предложения по перемещению папки /private/tmp на другой диск и сохранению автоматического удаления?

Я бы подумал, что /private/tmp, вероятно, лучшая папка на SSD.
Вы пробовали запускать periodicсценарий один раз для каждого периода времени после монтирования системы? Это может также сделать очистку.
@Mark Причина, по которой я хочу поместить папку tmp на жесткий диск, заключается в том, что я также использую эту папку в качестве папки загрузки как для вложений электронной почты, так и для сафари. Я бы предпочел не тратить свой SSD на временные вещи, тем более что этот SSD является сторонним, а поддержка TRIM в Yosemite далека от наилучшей.
@bmike Я еще не пробовал запускать периодический скрипт, обязательно попробую. Однако ежедневный сценарий по умолчанию запускается в 3 часа ночи, а это означает, что он может никогда не запуститься, если я выключу ноутбук на ночь. В результате есть вероятность, что эта папка tmp никогда не опустеет.
По этим причинам я бы использовал другой каталог для загрузок.

Ответы (1)

Проведя некоторые исследования, я написал сценарий оболочки и использовал launchd, чтобы он выполнялся во время загрузки.

Сценарий, который я использую (/usr/local/bin/empty-tmp.sh):

#!/bin/bash

# Delete files (other than directories) that haven't been modified in more than 1 day
find /Volumes/MacintosHD/private/tmp -not -type d -ctime +1d -delete

# Delete empty directores that have been created more than 1 day ago
find /Volumes/MacintoshHD/private/tmp -d -type d -empty -mindepth 1 -Btime +1d -delete

и список свойств (в /Library/LaunchDeamons):

<?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.samric.emptytmp</string>

  <key>ProgramArguments</key>
  <array>
    <string>/bin/bash</string>
    <string>-c</string>
    <string>/bin/wait4path /Volumes/MacintoshHD/private/tmp/ && /usr/local/bin/empty-tmp.sh</string>
  </array>

  <key>RunAtLoad</key>
  <true/>

  <key>LaunchOnlyOnce</key>
  <true/>
  </dict>
</plist>

Теперь ключ использует wait4path, чтобы убедиться, что вторичный жесткий диск (MacintoshHD) правильно смонтирован перед вызовом сценария. Если этого не сделать, сценарий не удалит файлы, поскольку они будут недоступны.