I bought my first SSD more than 5 years ago (late 2007), for my white MacBook Core2Duo 2.0 Ghz. It may be needless to say that my MacBook ran faster than many MacBook Pro’s at that time. The look on peoples faces when they saw my MacBook boot faster than their MacBook Pro was unforgettable.

By that time I was also experimenting with running 2 x 8GB CompactFlash with SATA converters in RAID-0 mode in my completely silent (but old and under-clocked) Pentium 3 Linux desktop. When people would visit my home they couldn’t believe my PC was actually turned on: it was dead silent.

Even today I still enjoy building low-power, silent and ultra-fast (Linux) computers with an SSD as the primary drive. Nowadays the new mSATA standard (see picture) is being used. During the past years I learned a thing or two about configuring Linux on a SSD drive. Today I will share those things with you:

1) Buy more than enough RAM

Yep, you should have at least 16GB of RAM. I know you’ll say that you don’t use that, but that is exactly the point. If you would be using it, it would not be enough. And why not? RAM is relatively cheap these days and you don’t want your system to start swapping, since this will wear out your expensive SSD.

2) Use the default partition layout

Contrary to popular belief, the default (guided) partitioning will do. If you partition manually, keep in mind that you do need a swap partition that is bigger than your RAM size.

3) Avoid using swap

You have plenty of RAM, so you could turn off swap or even create a system without swap. I have been running without swap for a year or so and never experienced significant problems (other people say the same). The most annoying side-effect is that the hibernate function is not available, since it uses the swap partition. This is why I recommend to not completely disable swap, but to reduce the swappiness of Linux. This way Linux will use all available RAM before starting to write to your precious SSD, while still allowing you to hibernate. Still, be aware when it comes to using hibernate, because it uses a lot of writes. Run this one-liner to add a permanent swappiness setting:

1
echo -e "vm.swappiness=0" | sudo tee -a /etc/sysctl.conf

This will only be effective after reboot.

4) Disable access time logging

Remove the access time logging on the file system. Without the “noatime” flag on your file system every read will cause a write, because the file system will update the access time. This is bad for the life-time of your SSD, since it supports a limited number of writes and this is causing significantly more writes. Edit the “fstab” to add the “noatime” flag:

1
sudo nano /etc/fstab

Now change “errors=remount-ro” to “noatime,errors=remount-ro”. Save the file and reboot.

5) Enable TRIM

TRIM will stop your SSD from slowing down after using it for a while. If you do not enable TRIM the writes may become slower due to the erasing of the deleted blocks. By running this one-liner you can add TRIM as a daily cron job:

1
echo -e "#\x21/bin/sh\\nfstrim -v /" | sudo tee /etc/cron.daily/trim

You have to make the cron job executable using:

1
sudo chmod +x /etc/cron.daily/trim

It will be run every day to avoid slowing down your writes and you will hardly notice it.

More advice: monitor the expected life-time

Your disk will not run forever. It has an expected life-time and you should probably monitor it using:

1
sudo smartctl -data -A /dev/sda

This will output something like this:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
maurits@nuc:~$ sudo smartctl -data -A /dev/sda
smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.8.0-26-generic] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net
 
=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 18
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
1   Raw_Read_Error_Rate     0x0000   006   000   000    Old_age   Offline      -       6
3   Spin_Up_Time            0x0000   100   100   000    Old_age   Offline      -       0
4   Start_Stop_Count        0x0000   100   100   000    Old_age   Offline      -       0
5   Reallocated_Sector_Ct   0x0000   100   100   000    Old_age   Offline      -       0
9   Power_On_Hours          0x0000   100   100   000    Old_age   Offline      -       2592
12  Power_Cycle_Count       0x0000   100   100   000    Old_age   Offline      -       258
232 Available_Reservd_Space 0x0000   100   100   000    Old_age   Offline      -       4914564640
233 Media_Wearout_Indicator 0x0000   100   000   000    Old_age   Offline      -       100
 
maurits@nuc:~$

At ID# 233 you see the MWI. This is a value starting at 100 and when it reaches values below 10 you should start to worry. Note that different manufacturers may have different names and numbers for this indicator.

Final advice: avoid buying TLC drives

Triple Level Cell (TLC) drives are making their entry in the market. These drives have a dramatically lower expected life-time. The life-time of a drive is measured in Program/Erase (PE) cycles or in Peta Bytes Written (PBW). Check the specs carefully to avoid buying a cheap drive, thinking you made a good deal, while actually buying a model with a lower expected life-time.

A swap partition on your SSD will let you wake up faster from hibernation (aka "suspend to disk") as compared to swap on a hard drive. But given the incredibly fast boot time of Ubuntu when booting from SSD a wake up from hibernation may be slower than a reboot.

If you do not hibernate you may never need to swap at all.

Only in case you often have very many RAM intensive applications running in parallel, your system may eventually use swap. Then a swap on SSD will be somewhat faster than a swap on a hard drive. Still there is no need to worry about wearing of your SSD from extensive swapping.

If not used for hibernation you can alway add a swap partition or swap on file later:

5 crucial optimizations for SSD usage in Ubuntu Linux的更多相关文章

  1. Ubuntu Linux 使用桂电校园网 上网

    2016年9月1日 星期四 桂电校园网今天升级新的出校器,旧的出校器已经不能使用,所以本篇博客已经过期,下面的方法已经不能让Ubuntu使用桂电校园网上外网了.详细的原因,请到这个网站查看:校园网计费 ...

  2. ubuntu linux 下wine的使用

    ubuntu linux 下wine的使用 之前写了一篇 ubuntu15.10下编译安装wine1.8rc4 这一篇是来写它的使用的. 1.安装Wine支持包 现在,需要安装非开源(但免费)的支持包 ...

  3. Ubuntu Linux上安装oracle jdk

    说明:由于很多系统不支持使用OpenJDK,因此在ubuntu下会需要安装Oracle JDK.而Oracle JDK的安装貌似没有提供apt方式,因此安装Oracle JDK的方式相对麻烦一些,我经 ...

  4. ubuntu Linux 测试PHP却提示下载文件的解决办法

    ubuntu Linux 测试PHP却提示下载文件的解决办法   一般这种情况都是在刚刚开始配置环境时出现的, 输入 sudo a2enmod php5  看提示如果出现“$ This module ...

  5. 安装Ubuntu Linux系统时硬盘分区最合理的方法

    无论是安装Windows还是Linux操作系统,硬盘分区都是整个系统安装过程中最为棘手的环节,网上的一些Ubuntu Linux安装教程一般都是自动分区,给初学者带来很大的不便,下面我就根据多年来在合 ...

  6. Shell script for logging cpu and memory usage of a Linux process

    Shell script for logging cpu and memory usage of a Linux process http://www.unix.com/shell-programmi ...

  7. HOWTO install Oracle 11g on Ubuntu Linux 12.04 (Precise Pangolin) 64bits

    安装了Ubuntu 12.04 64bit, 想在上面安装Oracle 11gr2,网上找了好多文档都没成功,最后完全参考了MordicusEtCubitus的文章. 成功安装的关键点:install ...

  8. Ubuntu Linux启用root用户登录

    Ubuntu Linux有一个与众不同的特点,那就是初次使用时,你无法作为root来登录系统,为什么会这样?这就要从系统的安装说起.对于其他Linux系统来 说,一般在安装过程就设定root密码,这样 ...

  9. Ubuntu Linux下如何配置Android开发环境

    下载和安装Win7系统Android开发环境中讲了怎样在Win7系统中安装Android开发环境,那么怎样在Linux系统中配置Android开发环境呢?本篇文章就将演示如何使用Eclipse.And ...

随机推荐

  1. Java线程(转)

    1.Java线程的实现. 第一种方式可以通过继承Thread.在Thread类中,有许多关于线程操作的方法,比如:sleep();activeCount();等 继承Thread的代码: public ...

  2. EF性能优化(一)

    一:背景 说到EF的性能问题,我相信都是大家比较头痛的问题,有很多初学者望而却步,可是每每菜鸟在群里面抱怨EF太慢的时候,这个时候总有一些大牛登场说一句:怪EF咯?怪你不会用! 当然我从未嫌弃过它,因 ...

  3. HTML5下通过response header解决跨域AJAX cookie的问题

    ajax: 通过给Response Header添加Access-Control-Allow-Origin:*  来解决跨域请求,*代表允许所有的跨域请求,或者把*换成指定的域名 cookie: 服务 ...

  4. Excel技巧收录

    帮老婆弄Excel,自己也把学到的东西记录下,免得以后被问到又给忘了 数据透视,需先在数据透视区域加上表头,如公司名称.销量等,Excel数据透视默认将选择区域的第一行作为表头 VLOOKUP,VLO ...

  5. CSS文档流与块级元素和内联元素(文档)

    CSS文档流与块级元素(block).内联元素(inline),之前翻阅不少书籍,看过不 少文章, 看到所多的是零碎的CSS布局基本知识,比较表面.看过O'Reilly的<CSS权威指 南> ...

  6. POJ 1236 Network of Schools[连通分量]

    题目链接:http://poj.org/problem?id=1236题目大意:给出N台电脑,电脑间单向连通传送文件问题1.网络中最少放几个文件保证所有电脑都能接受到文件问题2.最少向网络中加几条线保 ...

  7. BZOJ 1688: [Usaco2005 Open]Disease Manangement 疾病管理

    Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) is running through the fa ...

  8. 机器学习算法与Python实践之(四)支持向量机(SVM)实现

    机器学习算法与Python实践之(四)支持向量机(SVM)实现 机器学习算法与Python实践之(四)支持向量机(SVM)实现 zouxy09@qq.com http://blog.csdn.net/ ...

  9. hdu 3480

    斜率dp #include<cstdio> #include<cstring> #include<algorithm> #include<queue> ...

  10. 如何使用 Xcode Targets 管理开发和生产版本?

    在开始此教程之前,我们假设你已经完成了应用程序的开发和测试,现在准备提交生产发布.问题是,某些 Web 服务 URLs 指向测试服务器,而 API keys 则为测试环境而配置.在提交应用程序给苹果审 ...