This past year I purchased a laptop that came with two drives, a small 24GB SSD and a larger 1TB HDD. My configuration has placed the root filesystem (i.e. /) on the SSD and my home directory (i.e. /home) on the HDD so that I benefit from very fast system booting and application loading but still have loads of space for my personal files. The only downside to this configuration is that linux is sometimes not the best at ensuring your SSD lives a long life.
Unlike HDDs, SSDs have a finite number of write operations before they are guaranteed to fail (although you could argue HDDs aren’t all that great either…). Quite a few linux distributions have not yet been updated to detect and configure SSDs in such a way as to extend their life. Luckily for us it isn’t all that difficult to make the changes ourselves.
Change #1 – noatime
The first change that I do is to configure my system so that it no longer updates each files access time on the SSD partition. By default Linux records information about when files were created and last modified as well as when it was last accessed. There is a cost associated with recording the last access time and including this option can not only significantly reduce the number of writes to the drive but also give you a slight performance improvement as well. Note that if you care about access times (for example if you like to perform filesystem audits or something like that) then obviously disabling this may not be an option for you.
Open /etc/fstab as root. For example I used nano so I ran:
sudo nano /etc/fstab
Find the SSD partition(s) (remember mine is just the root, /, partition) and add noatime to the mounting options:
UUID=<some hex string> /Â Â Â Â Â Â Â Â Â Â Â Â Â Â ext4Â Â Â noatime,errors=remount-ro
Change #2 – discard
UPDATE: Starting with 14.04 you no longer need to add discard to your fstab file. It is now handled automatically for you through a different system mechanism.
TRIM is a technology that allows a filesystem to immediately notify the SSD when a file is deleted so that it can more efficiently manage the underlying storage and improve the lifespan of the drive. Not all filesystems support TRIM but if you are like most people and use ext4 then you can safely enable this feature. Note that some people have actually had drastic write performance decreases when enabling this option but personally I’d rather have that than a dead drive.
To enable TRIM support start by again opening /etc/fstab as root and find the SSD partition(s). This time add discard to the mounting options:
UUID=<some hex string> /Â Â Â Â Â Â Â Â Â Â Â Â Â Â ext4Â Â Â noatime,errors=remount-ro,discard
Change #3 – tmpfs
If you have enough RAM you can also dedicate some of it to mounting specific partitions via tmpfs. Tmpfs essentially makes a fake hard drive, known as a RAM disk, that exists only in your computer’s RAM memory while it is running. You could use this to store commonly written to temporary filesystems like /tmp or log file locations such as /var/logs.
This has a number of consequences. For one anything that gets written to tmpfs will not be there the second you restart or turn the computer off – it never gets written back to a real hard drive. This means that while you can save your SSD all of those log file writes you also won’t be able to debug a problem using those log files on a computer crash or something of the like. Also being a RAM disk means that it will slowly(?) eat up your RAM growing larger and larger the more you write to it between restarts. There are options for putting limits on how large a tmpfs partition can grow but I’ll leave you to search for those.
To set this up open /etc/fstab as root. This time add new tmpfs lines using the following format:
tmpfs  /tmp   tmpfs  defaults 0      0
You can lock it down even more by adding some additional options like noexec (disallows execution of binaries on the filesystem) and nosuid (block the operation of suid, and sgid bits). Some other locations you may consider adding are /var/log, /var/cache/apt etc. Please read up on each of these before applying them as YMMV.
As an alternative to the ‘discard’ filesystem mount option, in my day job we opted to run the fstrim binary manually through a cron.daily script. There were several reasons, including the ability to specifically schedule when the task is run; avoiding issues with ext3 mounts (as the mount becomes read-only) and avoiding the all-the-time performance penalty associated with writes on certain hardware.
Details here from the Arch wiki: https://wiki.archlinux.org/index.php/Solid_State_Drives#Apply_TRIM_via_cron
Interestingly enough, a weekly cron solution is what the Ubuntu folks have picked for 14.04 on non-mobile devices:
https://blueprints.launchpad.net/ubuntu/+spec/core-1311-ssd-trimming
Which is good because very few people would have gone through the trouble of fixing it themselves. Then again this is Linux so the ‘average user’ carries a slightly more technical definition.
Now that this has been released I have amended the original post to reflect the change.