Qualche tempo fa, stufo dei rallentamenti del mio Mac Book pro ho deciso, invece di cambiarlo con un nuovo modello, per la sostituzione dell’Har Disk con una SSD. Ho scelto per l’occasione una OCZ Vertex 4, di capacità pari al vecchio disco (512 Gb). Per la migrazione, ho semplicemente utilizzato Carbon Copy Cloner per creare un immagine del disco originale poi, dopo un primo test avviando il MAC dalla nuova SSD collegata alla porta Thunderbolt, ho definitivamente montato la SSD rimuovendo il vecchio disco. Il cambiamento nelle prestazioni è stato di gran lunga superiore a quanto mi potessi ragionevolmente aspettare; tutti quei fastidiosi rallentamenti sono improvvisamente scomparsi e non ho mai più dovuto preoccuparmi di aprire solo i programmi strettamente necessari. Ora, lavoro regolarmente con aperti più browser contemporaneamente per controllare i risultati degli sviluppi Web, Eclipse, Photoshop per editare le immagini da pubblicare, la macchina virtuale windows con Notes Designer ed Aministrator (IBM si deciderà mai a realizzare il Designer anche per MAC?)…
Fatto tutto ciò, ho cominciato a preoccuparmi della durata della preziosa SSD. Ho trovato molti post in rete, ed ho messo in pratica i suggerimenti che mi sono sembrati più utili e ragionevoli.
Le note seguenti, raccolgono gli accorgimenti da me adottati.
FUNZIONI BASE
Raccomandazione: NON LANCIARE BENCHMARK SULLA SSD
Può essere gratificante vedere quanto la SSD sia più veloce del vecchio HDD. I programmi di benchmark, però, eseguono moltissime operazioni di lettura e scrittura che non farebbero altro che stressare l’SSD ed accorciarne la vita ancora prima di cominciare ad utilizzarla.
Disabilitare il sensore “antiurto” dell’hard disk.
La SSD non ha parti in movimento; dunque questo sensore diventa inutile
> sudo pmset -a sms 0
Trim Enabler
La funzione di TRIM è molto importante per ridurre i cicli di lettura/scrittura sull’SSD con il passare del tempo. Serve per far sapere all’SSD quali blocchi non sono più utilizzati (vd. articolo su wikipedia qui: http://it.wikipedia.org/wiki/TRIM)
MacOS abilita questa funzione solo per gli SSD montati da Apple, non per quelli prodotti da terze parti. Per abilitare la funzione su questi ultimi serve un utility esterna com TRIM Enabler.
Verificare tramite le info del sistema se TRIM è abilitato sulla SSD
Se, come nel caso sopra, la funzione è disabilitata, si può scaricare TRIM Enabler dal sito http://www.groths.org/trim-enabler/ e installarlo sul MAC secondo la consueta procedura.
Anche se non specificamente indicato, Trim Enabler funziona anche su Mountain Lion.
Una volta installata, lanciare l’applicazione, spostare l’interruttore su ON e riavviare il MAC. Rientrando in Tim Enabler, dovrebbe apparire la dicitura seguente.
Disabilitare Hibernate
Questa operazione è importante per ridurre inutili scritture sulla SSD ogni volta che si chiude il coperchio del MAC
> sudo pmset -a hibernatemode 0
Nota:
macOS ha diverse opzioni per questo parametro. Apple invita ad utilizzare solo una fra le seguenti 3:
– hibernatemode 0: quando il sistema va in “sleep”, il contenuto della RAM NON viene scritto sul disco. La RAM rimane alimentata. Unico problema: se le batterie vanno a 0, il sistema si spegne in maniera “brutale” (come staccando la spina ad un desktop).
– hibernatemode 3 (default per i portatili): quando il sistema va in sleep, copia tutto il contenuto della RAM sul Disco. Tuttavia, la RAM rimane alimentata e normalmente al riavvio riparte da questa. La copia sul disco viene utilizzata soltanto in caso di interruzione dell’alimentazione della RAM (batterie a terra)
– hibernatemode 25 (impostabile SOLO via pmset): quando il sistema va in sleep, copia tutto il contenuto della RAM sul Disco e toglie l’alimentazione alla RAM stessa. Al riavvio, riparte utilizzando la copia salvata sul disco
Disabilitare Local Snapshots in Time Machine
Come impostazione di dafault, Time Machine quando non trova collegato il disco di backup, crea periodicamente degli snapshot sul disco locale. Ciò provoca operazioni di lettura e scrittura aggiuntive rispetto al normale funzionamento.
per disabilitare la funzione:
> sudo tmutil disablelocal
per riabilitare la funzione:
> sudo timeutil enablelocal
Nota:
Ogni volta che si riattiva Time Machine dopo averla disabilitata, la funzione “local snapshot” viene riattivata. Bisogna quindi ricordarsi di disattivarla tramite il comando qui sopra.
noatime flag
MacOS, come altri sistemi basati su Unix, registra l’orario di accesso per ogni file. Dunque, ogni volta che viene aperto un file, viene eseguita un’operazione di scrittura sul filesystem. Disabilitare questa funzione non comporta alcuna controindicazione.
Per farlo, bisogna creare un file con nome a piacere (io ho utilizzato lo stesso nome “com.nullvision.noatime.plist” utilizzato nei numerosi post che lo citano sul web) con il seguente contenuto:
<?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.nullvision.noatime</string>
<key>ProgramArguments</key>
<array>
<string>mount</string>
<string>-vuwo</string>
<string>noatime</string>
<string>/</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
ed impostarlo per essere eseguito al riavvio il computer.
Bisogna stare attenti alla corretta sintassi del contenuto, ed hai diritti impostati sul file. Io ho creato in file nella mia cartella Documents utilizzando vi per essere certo di non inserire caratteri “strani”, poi lanciato i comandi seguenti:
> sudo plutil -lint com.nullvision.noatime.plist
fino a quando non ha restituito errori (avevo dimenticato uno “/” sulla chiusura di un tag)
> sudo cp com.nullvision.noatime.plist /Library/LaunchDaemons/
> ls -la /Library/LaunchDaemons/com.nullvision.noatime.plist
questa la risposta:
-rwxr-xr-x 1 root wheel 439 11 Mag 10:50
/Library/LaunchDaemons/com.nullvision.noatime.plist
se necessario, cambiare owner e diritti sul file utilizzando:
> sudo chown root:wheel /Library/LaunchDaemons/com.nullvision.noatime.plist
> sudo chmod 755 /Library/LaunchDaemons/com.nullvision.noatime.plist
Per finire:
> sudo launchctl load -w /Library/LaunchDaemons/com.nullvision.noatime.plist
e riavviato il MAC
Per verificare che la modifica sia andata a buon fine, aprire il Terminale e lanciare il comando:
> mount | grep ” / “
La risposta deve essere del tipo:
/dev/disk0s2 on / (hfs, local, journaled, noatime)
notare la presenza di noatime nella lista fra parentesi.
il file che ho utilizzato (com.nullvision.noatime.plist) è scaricabile dalle risorse qui a fianco
Disattivare la funzione di arresto automatico dell’Hard Disk (risparmio energetico)
Alcuni siti indicano che l’SSD potrebbe bloccarsi quando la funzione di “sleep” dell’Hard Disk è attiva. Dunque, conviene disabilitarla, anche perché inutile. A meno che sul computer non sia presente anche un HDD.
FUNZIONI FACOLTATIVE (a piacere dell’utente)
Disabilitare o modificare le preferenze di spotlight
Spotlight è il tool di indicizzazione e ricerca. Per indicizzare i file, esegue operazioni di scrittura ogni volta che un file viene modificato.
La funzione può essere disabilitata totalmente tramite il comando:
> sudo mdutil -a -i off
Ovviamente, la disabilitazione toglie una funzione potenzialmente utile (per chi la utilizza).
In alternativa, è possibile modificare le impostazioni per escludere dall’indicizzazione cartelle che vengono modificate spesso e per le quali l’indicizzazione è inutile (o poco utile)
Per fare ciò, bisogna aprire le preferenze di spotlight (da System Preferences) ed inserire le cartelle da escludere nel tab “Privacy”. Io ho per il momento aggiunto le seguenti cartelle (in parte di mia iniziativa, in parte seguendo i consigli trovati su diversi post):
/Library/Caches
/Downloads
/Documents/Virtual Machines (= la cartella dove tengo le macchine virtuali VMWare Fusion)
/Library/Application Support/Lotus Notes Data
ricordo che per accedere all Library bisogna andare su Finder –> Go e premere il pulsante “Alt” (option)
FUNZIONI AVANZATE
Usare RAM disk o HDD (se presente) per i file temporanei
Consigliabile solo in presenza di una quantità di RAM abbondante (io ho 4Gb e non l’ho fatto) oppure un HDD aggiuntivo
un buon post che descrive questa operazione si trova a questo indirizzo: http://blog.alutam.com/2012/04/01/optimizing-macos-x-lion-for-ssd/
Spostare le user home directories sull’eventuale HDD presente (ad esempio, il vecchio HDD montato al posto del DVD)
Ovviamente, questa operazione è possibile solo in presenza di un HDD aggiuntivo
1) spostare le cartelle utenti:
> sudo ditto /Users /Volumes/nome_hdd/Users
> sudo mv /Users /Users.bak
> sudo ln -s /Volumes/nome_hdd/Users /Users
Aprire le preferenze di sistema su Users&Groups. Sbloccare il lucchetto (password richiesta), cliccare con il pulsante destro sul nome di ciascun utente e cambiare il percorso della “Home directory”
infine:
> sudo rm -rf /Users.bak
Ottimizzare le preferenze delle VM Windows (in VMWare)
Esiste una guida molto completa: “VMWare View Optimization Guide” al seguente url: http://www.vmware.com/files/pdf/VMware-View-OptimizationGuideWindows7-EN.pdf
In un post (http://sysadmin.flakshack.com/post/9253439680/ssd-tweaks-for-mac-os-x), ho trovato le seguenti note:
bcdedit /set BOOTUX disabled
vssadmin delete shadows /All /Quiet
Powershell disable-computerrestore -drive c:\
netsh advfirewall set allprofiles state off
powercfg -H OFF
net stop “sysmain”
fsutil behavior set DisableLastAccess 1
schtasks /change /TN “\Microsoft\Windows\Defrag\ScheduledDefrag” /Disable
schtasks /change /TN “\Microsoft\Windows\SystemRestore\SR” /Disable
schtasks /change /TN “\Microsoft\Windows\Registry\RegIdleBackup” /Disable
schtasks /change /TN “\Microsoft\Windows Defender\MPIdleTask” /Disable
schtasks /change /TN “\Microsoft\Windows Defender\MP Scheduled Scan” /Disable
schtasks /change /TN “\Microsoft\Windows\Maintenance\WinSAT” /Disable
Alcune sono chiare, altre meno. Devo ancora verificarle utilizzando il documento VMWare, per poi utilizzarle sul mio MAC
ATTIVITA’ PERIODICHE
MacOS X maintenance scripts
Esistono tre script: daily, weekly,monthly che eseguono operazioni di routine quali la pulizia di diversi log di sistema e file temporanei. Per default, questi script sono programmati per essere eseguiti nottetempo (vedere il contenuto dei files:
/System/Library/LaunchDeamons/com.apple.periodic-daily.plist
/System/Library/LaunchDeamons/com.apple.periodic-weekly.plist
/System/Library/LaunchDeamons/com.apple.periodic-monthly.plist
per verificare l’ora della programmazione. Per verificare quando gli script sono stati eseguiti l’ultima volta, utilizzare il comando
> ls -la /var/log/*.out
La risposta sarà del tipo:
Bernardinos-MacBook-Pro:~ bernardino$ ls -la /var/log/*.out
-rw-r–r– 1 root wheel 542606 11 Mag 11:50 /var/log/daily.out
-rw-r–r– 1 root wheel 1814 11 Mag 11:51 /var/log/monthly.out
-rw-r–r– 1 root wheel 4122 11 Mag 11:51 /var/log/weekly.out
in questo caso, gli script sono stati eseguiti l’11 Maggio fra le 11:50 e le 11:51 (li ho appena lanciati a mano, vd.sotto)
Per essere sicuri che gli script siano eseguiti regolarmente, bisogna lasciare il mac acceso nottetempo, avendo disabilitato la funzione di sleep quando il MAC stesso è alimentato. In teoria, lo schedulatore dovrebbe lanciare nel corso della giornata gli script programmati per girare di notte, nel caso che il computer fosse spento al momento previsto per l’esecuzione.
Tuttavia, ciò potrebbe non avvenire in determinate circostanze: lo schedulatore non tiene in considerazione il tempo in cui il MAC rimane spento. Dunque, se il computer passa in sleep a mezzanotte e lo script è progammato per le 3:15, riavviando il MAC alle 8:30, lo script stesso dovrebbe essere eseguito attorno alle 11:45 (se non ho sbagliato i calcoli!).
Se però, per un motivo qualsiasi, il MAC viene riavviato prima du questo orario, gli eventi in coda vengono persi e gli script non gireranno fino al giorno successivo.
E’ possibile lanciare i 3 script manualmente, come al solito dal terminale
tutti assieme:
> sudo periodic daily weekly monthly
oppure, uno per volta:
> sudo periodic daily
> sudo periodic weekly
> sudo periodic monthly
Non è previsto alcun output a fine esecuzione. Si capisce che lo script ha completato l’esecuzione quando il prompt torna attivo. Servono comunque pochi secondi.