= SSD installation checklist =
'''IMPORTANT NOTE''': This document was initially written around November 2010 when SSD support was still considered recent in GNU/Linux distributions and Ubuntu in general. Be careful when deciding to apply any of the information it contains.
A few assumptions are made in this list:
* '''/dev/sda''' is your SSD device
* Performance is preferred to reliability. Therefore, you backup regularly or use this for non-critical (even expendable) data.
* You already have a backup of any important data (can't stress this enough).
If you contribute something to this list, please make sure whatever it is has a justification, explanation, reference, or all three.
== Ubuntu 10.10 ==
* Check for firmware upgrades for your drive and apply any pending.<
>`$ sudo hdparm -I /dev/sda | grep Firmware`<
>`Firmware Revision: 2CV102M3`<
> Bugs [[https://bugs.launchpad.net/ubuntu/+source/lshw/+bug/663349|#663349]] and [[https://bugs.launchpad.net/ubuntu/+source/udev/+bug/672764|#672764]] have been filed about lshw and udev, mark those as affecting you if you wish so. Once you know your firmware version, go to your manufacturer's site:
* [[http://www.intel.com/go/ssdfirmware/|Intel SSD firmware updates]]
* [[http://www.runcore.com/content/support/|RunCore SSD firmware updates]]
& [[http://www.corsair.com/support/faq/solid-state-drives/#answer1 Corsair FAQ on firmware updates]]
* ...
* Boot from a Live CD
* Find out your hard disk information with '''sudo fdisk -l /dev/sda | grep sectors'''. Example output:<
>`255 heads, 63 sectors/track, 4865 cylinders`
* Partition & format your disk aligning the partition blocksize to the SSD erase block size, with the above information (1 partition, no swap, no journaling ext4):<
>`sudo fdisk -H 255 -S 63 /dev/sda`<
>`sudo mke2fs -t ext4 -O ^has_journal /dev/sda1`<
>
''Warning: formatting without journaling will increase chances of data loss. Use with caution''. Omit the `-O ^has_journal` option otherwise. The Linux Documentation Project has complete information about [[http://tldp.org/HOWTO/Partition/fdisk_partitioning.html|fdisk partitioning]].
* Make sure SATA AHCI mode is enabled in BIOS. See [[http://www.techmetica.com/howto/sata-ahci-mode-bios-setting.-what-does-it-do/|SATA AHCI Mode Bios Setting. What Does it do?]]
* Reboot the the Alternate Ubuntu installer CD, install normally - use manual partitioning though, mounting / to your single partition, accepting warnings about swap not being present.
* Kernel boot options:
* Change the I/O scheduler to NOOP:
* If you only have one disk and it is SSD, and don't use external storage often, just add '''elevator=noop''' to your kernel boot parameters in /etc/default/grub (append to GRUB_CMDLINE_LINUX_DEFAULT). This is also OK if you occasionally use USB sticks.
* If you have several disks or a mix of SSD and mechanical disks, install the '''sysfsutils''' package and add the following line at the end of '''/etc/sysfs.conf''':<
>`block/sda/queue/scheduler = noop`
* To change the scheduler without rebooting:<
>`sudo echo noop > /sys/block/sda/queue/scheduler`
* Disk mounting options (in /etc/fstab):
* Example mounting line:<
>`UUID=41b6b187-be76-4447-b18b-d39cc744b184 / ext4 noatime,discard,data=writeback,errors=remount-ro 0 1`
* Add the '''noatime''' mounting option. The default is '''relatime''' which adds write operations to set the Last Accessed Time attribute to files.
* Add the '''discard''' mounting option. This controls whether ext4 should issue discard/TRIM commands to the underlying block device when blocks are freed. This is useful for SSD devices and sparse/thinly-provisioned LUNs, but it is off by default until sufficient testing has been done.
* Add the '''data=writeback''' mounting option ''if you formatted the disk without journaling''. Otherwise add '''data=ordered''' which sould be a good compromise between full journaling and none at all. See [[http://www.mjmwired.net/kernel/Documentation/filesystems/ext4.txt|Ext4 Filesystem]] documentation for more details.
= Other considerations: =
* Mount /tmp in ram
* Use the following line in /etc/fstab and reboot:<
>{{{tmpfs /tmp tmpfs nodev,nosuid,noexec,mode=1777 0 0}}}<
>'''Rationale:''' In the past when SSD controllers had bad wear leveling and limited amounts of writes, mounting anything that was often wrote to (like /tmp) was a good idea. Nowadays it helps with performance but also as some caveats.
* Put the Firefox cache in /tmp (which is in RAM)
* Type '''about:config''' in the location bar
* Find/create this key: '''browser.cache.disk.parent_directory'''. Set it to {{{/tmp}}}
* Verify the cache location information in '''about:cache'''
* '''Pros:'''
* Placing your browser cache in /tmp, and mounting /tmp in RAM is a sure boost to page rendering.
* '''Cons:'''
* Do only with at least 4Gb of RAM
* Watch for GUI apps (disc burners etc) writing large files to /tmp
* In multi-user systems if other users are logged in they will have access to your temporary files in /tmp
= Reference links =
* http://ubuntuforums.org/showthread.php?t=1041524
* http://www.zdnet.com/blog/perlow/geek-sheet-a-tweakers-guide-to-solid-state-drives-ssds-and-linux/9190
* http://www.linuxhowtos.org/System/iosched.htm - including information on how to change the I/O scheduler at runtime