Ottimizzazione MacOSX con SSD ?

Informatica
Condividi questo articolo

Ottimizzazione completa MacOSX con SSD. A causa dei limiti imposti agli SSD dei cicli di Scrittura, a differenza di quanto avviene con gli Hard Disk, occorre limitare al massimo tutte le operazioni di scrittura su uno di questi “gingilli” superveloci.

Una delle prime operazioni che si consiglia di mettere in pratica, qualora ovviamente sulla stessa macchina ci siano installati un SSD (contenente il Sistema Operativo) ed uno o più Hard Disk (contenenti i Dati) è quella di spostare tutti i files temporanei che MacOSX crea durante l’utilizzo quotidiano.
I primi elementi che conviene spostare su un Hard Disk sono i files di Swap, files creati dal S.O. quando l’utilizzo della RAM diventa più intensivo e questa comincia ad esaurirsi.
Passiamo quindi ad esaminare alcuni accorgimenti che sicuramente possono contribuire a salvaguardare il nostro “beneamato” SSD:

FONDAMENTALE: ATTIVARE IL TRIM
 
Il supporto del TRIM è essenziale per la salvaguardia dell’SSD: purtroppo Apple supporta il TRIM solo per gli SSD che sono in dotazione di serie sui propri Mac.
Per cui, se avete comprato un SSD da un altro produttore (come avviene praticamente sempre), occorre scaricare un programma, denominato TrimEnabler, gratuito, a questo indirizzo:

SPOSTAMENTO CARTELLA “INIZIO” SU ALTRO DISCO (HDD):
 
Questa soluzione vale però solamente se sul Mac vi sono installati contemporaneamente un SSD ed un HDD.
Si consiglia di installare sul SSD tutto il Sistema Operativo mentre sul HDD andremo a mettere tutte le cartelle Utente.
In tal modo le Applicazioni partiranno tutte (quasi) istantaneamente, mentre sull’HDD (più capiente, anche se più lento), andremo a mettere tutti i nostri files (foto, documenti, PDF , video, etc.).
1. Aprire il Terminale
Digitare questi comandi:
sudo ditto /Users /Volumes/your_hdd_name/Users sudo mv /Users /Users.bak
sudo ln -s /Volumes/your_hdd_name/Users /Users
Poi, per sicurezza, occorre andare nelle Preferenze di Sistema, cliccare su “Utenti e Gruppi”, e poi cliccare sul lucchetto posto in basso a sinistra per sbloccare le impostazioni avanzate. Una volta sbloccate inserendo la password richiesta, occorre cliccare con il tasto destro sul nome dell’utente del quale si vuole spostare la cartella “Inizio” (Home, in inglese) e comparirà una finestra di dialogo che ci permetterà di scegliere tale cartella.
Una volta fatto questo potete controllare se tale cartella compare correttamente nel Finder come “Inizio”.
Una volta fatto ripartire il Mac si potrà cancellare la vecchia cartella “Inizio” presente sull’SSD con il comando, sempre da Terminale:
sudo rm -rf /Users.bak

SPOSTAMENTO FILES DI “SWAP” SU ALTRO DISCO:
 
Soluzione completa:

1. Aprire il Terminale e fare una copia di Backup del file denominato: dynamic_pager.plist:

 $ cd /System/Library/LaunchDaemons $ sudo cp com.apple.dynamic_pager.plist{,_bak}

2. Convertire il file nel formato XML:

 $ sudo plutil -convert xml1 com.apple.dynamic_pager.plist

3. Aprire il file con l’editor chiamato “pico”, direttamente dal Terminale:

 $ sudo pico -w com.apple.dynamic_pager.plist
Il file aperto dovrebbe apparire così:
 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs$ <plist version="1.0"> <dict>
<key>EnableTransactions</key>     <true/>     <key>HopefullyExitsLast</key>     <true/>     <key>Label</key>
<string>com.apple.dynamic_pager</string>     <key>OnDemand</key>     <false/>
<key>ProgramArguments</key>     <array>         <string>/sbin/dynamic_pager</string>
<string>-F</string>         <string>/private/var/vm/swapfile</string>     </array> </dict> </plist>
4. Modificare la parte relativa a ProgramArguments array (linee da 13 a 18) per utilizzare il comando shell wait4path prima di lanciare il dynamic_pager. Nell’esempio seguente la mia cartella di Swap si trova nell’Hard Disk chiamato “WD750-DATI” ed è chiamata’Swap’, dovete essere certi che tale cartella esista realmente.
Il file XML finale dovrebbe apparire come segue:
 <?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>EnableTransactions</key>
        <true/>
        <key>HopefullyExitsLast</key>
        <true/>
        <key>Label</key>
        <string>com.apple.dynamic_pager</string>
        <key>OnDemand</key>
        <false/>
        <key>ProgramArguments</key>
        <array>
                <string>/bin/bash</string>
                <string>-c</string>
                <string>/bin/wait4path /Volumes/WD750-DATI/ && /sbin/dynamic_pager -F /Volumes/WD750-DATI/Swap/swapfile</string>
        </array>
</dict>
</plist>
5. Salvare il file plist, e tornare al prompt del terminale. Usando il programma pico, i comandi saranno:
 <ctrl+o> to save the file <enter>  to accept the same filename (com.apple.dynamic_pager.plist) <ctrl+x> to exit
6. Adesso occorre convertire di nuovo il file in formato binario:
 $ sudo plutil -convert binary1 com.apple.dynamic_pager.plist

7. Far ripartire il Mac. Qualora ci fossero problemi tenere premuto Command-v immediatamente dopo il “gong” (modo ‘verbose’). Questo vi lascerà leggere i messaggi di startup del computer. Qualora i problemi fossero ancora più seri, allora occorrerà premere Command-s. Questo farà partire il computer in modalità singolo utente, senza interfaccia grafica  e vi permetterà comunque di ripristinare la copia di backup del file com.apple.dynamic_pager.plist che abbiamo creato al passo 1.

8. Una volta che il Mac partirà, fate partire il Terminale e verificate che i files di swap siano stati effettivamente spostati sulla cartella prescelta:

$ cd /Volumes/WD750-DATI/Swap ls -l

Dovreste leggere qualcosa come:

 -rw-------  1 someUser  staff  67108864 18 Sep 12:02 swapfile0

9. Possiamo cancellare a questo punto i vecchi files di Swap presenti sull’SSD:

 $ cd /private/var/vm$ sudo rm swapfile*
10. Fatto!

DISABILITARE LE TRACCE DI ACCESSO AI FILE PRESENTI SULL’SSD:
MacOSX tiene traccia, di default, di tutte le volte che si accede ad un file. E questa traccia viene scritta negli attributi estesi di ogni file. Questo fatto ovviamente non è positivo per gli SSD, i quali, come noto, presentano un limite ai cicli di scrittura e questo costituisce in effetti l’unica pecca rispetto ai tradizionali Hard Disk.
Pertanto, per disattivare questa tenuta delle tracce dei file sul nostro SSD, occorrerà procedere come segue:
Aprire il Terminale ed eseguire i seguenti comandi:
Creiamo un nuovo file con estensione plist:
 sudo touch /Library/LaunchDaemons/com.noatime.plist
Editiamo il file con pico:
 sudo pico -w /Library/LaunchDaemons/com.noatime.plist
ed inseriamo in esso questo testo:
 <?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.my.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 eseguiamo il seguente comando per assegnare al file i diritti di root:
sudo chown root:wheel /Library/LaunchDaemons/com.nullvision.noatime.plist
Facciamo ripartire il Mac.
Possiamo controllare che tutto sia a posto con il comando, sempre da Terminale:
mount | grep ” / “
Si dovrebbe leggere il seguente output (si legga il flag ‘noatime’ nella parentesi):
/dev/disk0s2 on / (hfs, local, journaled, noatime)
Terminato.

CREAZIONE DI DUE DISCHI RAM VIRTUALI PER I FILES TEMPORANEI:
 
Sempre nell’ottica di risparmiare il più possibile l’SSD dalle operazioni di scrittura, e nel caso in cui si disponga di abbastanza RAM da poterne sacrificare una piccola parte (256 + 64 MB), si potrebbero creare due dischi RAM (assai più veloci come accesso anche dello stesso SSD) nei quali il S.O. andrà a creare tutti i suoi files temporanei.
Soluzione completa:
 
Occorrerà creare inizialmente un file, denominato “MoveTempFoldersToRamDisk.sh” che andremo a porre nella nostra cartella Inizio (quella con l’icona della casetta).
#!/bin/bash
# +———————————————————————-+
# | |
# | Set up Mac OS X to store temporary files in RAM rather than on disk.|
# | |
# | By Philipp Klaus <http://blog.philippklaus.de> |
# | |
# | Originally by Ricardo Gameiro <http://blogs.nullvision.com/?p=357> |
# | Changes by Daniel Jenkins |
# | <http://blogs.nullvision.com/?p=357#comment-1140> |
# | |
# +———————————————————————-+
cd /System/Library/StartupItems
sudo mkdir RamFS
sudo chown -R root:wheel RamFS
sudo chmod -R u+rwX,g+rX,o+rX RamFS
cat << “EOF” | sudo tee RamFS/RamFS > /dev/null
#!/bin/sh
# Create a RAM disk with same perms as mountpoint
RAMDisk() {
mntpt=$1
rdsize=$(($2*1024*1024/512))
echo “Creating RamFS for $mntpt”
# Create the RAM disk.
dev=´hdik -drivekey system-image=yes -nomount ram://$rdsize´
# Successfull creation…
if [ $? -eq 0 ] ; then
# Create HFS on the RAM volume.
newfs_hfs $dev
# Store permissions from old mount point.
eval ´/usr/bin/stat -s $mntpt´
# Mount the RAM disk to the target mount point.
mount -t hfs -o union -o nobrowse $dev $mntpt
# Restore permissions like they were on old volume.
chown $st_uid:$st_gid $mntpt
chmod $st_mode $mntpt
fi
}
# Test for arguments.
if [ -z $1 ]; then
echo “Usage: $0 [start|stop|restart] “
exit 1
fi
# Source the common setup functions for startup scripts
test -r /etc/rc.common || exit 1
. /etc/rc.common
StartService () {
ConsoleMessage “Starting RamFS disks…”
RAMDisk /private/tmp 256
RAMDisk /var/run 64
#RAMDisk /var/db 1024
#mkdir -m 1777 /var/db/mds
}
StopService () {
ConsoleMessage “Stopping RamFS disks, nothing will be done here…”
# diskutil unmount /private/tmp /private/var/run
# diskutil unmount /private/var/run
}
RestartService () {
ConsoleMessage “Restarting RamFS disks, nothing will be done here…”
}
RunService “$1”
EOF
sudo chmod u+x,g+x,o+x RamFS/RamFS
cat << EOF | sudo tee RamFS/StartupParameters.plist > /dev/null
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE plist SYSTEM “file://localhost/System/Library/DTDs/PropertyList.dtd”>
<plist version=”0.9″>
<dict>
<key>Description</key>
<string>RamFS Disks Manager</string>
<key>OrderPreference</key>
<string>Early</string>
<key>Provides</key>
<array>
<string>RamFS</string>
</array>
<key>Uses</key>
<array>
<string>Disks</string>
</array>
</dict>
</plist>
EOF

Dopo di che, occorre digitare, da Terminale:


 chmod 755 ~/MoveTempFoldersToRamDisk.sh ~/MoveTempFoldersToRamDisk.sh
Questo comando crea DUE dischi RAM al momento dell’accensione del Mac, uno da 256MB, largo quanto basta per /private/tmp (il comando “RAMDisk /private/tmp 256″ a metà dello script di cui sopra) ed un’altro da 64MB per  /var/run. Adesso possiamo cancellare il file ~/MoveTempFoldersToRamDisk.sh da nostro computer, in quanto non più necessario.
Affinché i cambiamenti abbiano effetto, occorre far ripartire il Mac.
N.B.: Se si decidesse in futuro di annullare questa soluzione, occorre semplicemente cancellare il file /System/Library/StartupItems/RamFS dal Mac, con il comando:

sudo rm -rf /System/Library/StartupItems/RamFS

E successivamente far ripartire il Mac affinché la modifica abbia effetto.
Ci sono alcune piccolissime penalizzazioni a questo trucchetto:
  • Dopo averlo applicato ci vogliono 2 o 3 secondi in più per spegnere il Mac (sul mio neanche me ne accorgo);
  • Diminuisce di poco la RAM disponibile per le applicazioni (ma 384MB sono nulla rispetto alle RAM cui siamo abituati adesso).

SOLO PER PORTATILI: IMPEDIRE L’IBERNAZIONE
 
Un’altra caratteristica del MacOSX attivata di default sui portatili è quella che salva tutto il contenuto della RAM sul disco quando entra in modalità “sleep” (ad es. quando si chiude il display).
Questo serve a garantire che il computer non perda alcun dato in caso si esauriscano le batterie mentre si trova in modalità “sleep”. Più RAM si ha a disposizione, e più grande sarà questo file che verrà scritto ogni volta che chiuderemo il display. Se si fa questa operazione un paio di volte al giorno, e se il vostro Mac ha 8 GB di RAM, ciò vuol dire che verranno scritti da 16 a 24GB di dati ogni giorno sull’SSD. Ciò porterebbe rapidamente all’esaurire le possibilità di scrittura dell’SSD che, come noto, hanno un limite ben preciso (di solito non sopportano cicli di scrittura superiori a 10.000 volte, limite che può apparire grande, ma che in realtà può esaurirsi abbastanza rapidamente).
Il comando per disattivare l’ibernazione del Mac è, da Terminale:
sudo pmset -a hibernatemode 0

SOLO PER PORTATILI E OSX LION E SUCCESSIVI: IMPEDIRE GLI SNAPSHOTS DI TIME MACHINE
 
Se si usa un SSD su un portatile, ed avete attivato Time Machine, dovreste sapere che OSX Lion fa degli “snapshots” (delle “istantanee”, cioé) locali, nei periodi in cui il disco di Time Machine non è disponibile.
Questo è abbastanza comune, soprattutto per i portatili.
Il comando per disattivare tali “snapshots” è accessibile solamente da Terminale:
sudo tmutil disablelocal
Qualora li si volesse riattivare:
sudo tmutil enablelocal
Poi occorre notare anche che la caratteristica degli Snapshots viene automaticamente riattivata ogni volta che viene disattivato e riattivato successivamente Time Machine: occorre quindi non dimenticarsi di digitare nuovamente il comando di cui sopra per impedire che l’SSD si riempia di snapshots.

Condividi questo articolo