Ubuntu 针对 SSD 的优化方案
.
.
.
.
.
首先看下 LZ 的分区情况:
>$ sudo fdisk -l Disk /dev/sda: 120.0 GB, bytes
heads, sectors/track, cylinders, total sectors
Units = sectors of * = bytes
Sector size (logical/physical): bytes / bytes
I/O size (minimum/optimal): bytes / bytes
Disk identifier: 0x0001cbca Device Boot Start End Blocks Id System
/dev/sda1 * Linux
/dev/sda2 Linux Disk /dev/sdb: 1000.2 GB, bytes
heads, sectors/track, cylinders, total sectors
Units = sectors of * = bytes
Sector size (logical/physical): bytes / bytes
I/O size (minimum/optimal): bytes / bytes
Disk identifier: 0x000a1ddb Device Boot Start End Blocks Id System
/dev/sdb1 Linux
/dev/sdb2 Extended
Partition does not start on physical sector boundary.
/dev/sdb5 Linux swap / Solaris
两块硬盘,/dev/sda 是固态硬盘,/dev/sdb 是机械硬盘,所以这里只针对 /dev/sda 进行优化。
/dev/sda1 是 /boot 分区,/dev/sda2 是 / 分区。
1.针对 /etc/fstab 的优化配置
>$ sudo vim /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab().
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda2 during installation
UUID=d9a9c636-a561-4b71-acc5-51d3204c75ba / ext4 noatime,discard,errors=remount-ro
# /boot was on /dev/sda1 during installation
UUID=1716571d-14c5-4d09-9e69-8c97d5543de1 /boot ext4 noatime,discard,defaults
# /home was on /dev/sdb1 during installation
UUID=aa94f45f-8dcb-45c8-bef4-c8adace32a3b /home ext4 defaults
# swap was on /dev/sdb5 during installation
UUID=d93e0ac2-c372-470c-9dd6-1e17a9242ee4 none swap sw
tmpfs /tmp tmpfs defaults,noatime,mode=
tmpfs /var/tmp tmpfs defaults,noatime,mode=
tmpfs /var/log tmpfs defaults,noatime,mode=
上面红色和加粗的部分是 LZ 手工添加进去的,下面 LZ 详细解释一下手工添加的部分的含义。
noatime 表示访问文件时不更新文件访问时间,这样可以减少对磁盘的写入动作。
Linux 文件系统中有三种时间,想要详细了解可以查阅 LZ 的博文《(三) 一起学 Unix 环境高级编程(APUE) 之 文件和目录》。
discard 表示开启 TRIM 功能。
TRIM 的作用主要有两个:1 提高硬盘写入效率;2 根据平均写入算法提高 SSD 寿命。
具体原理各位自行查找资料吧。
Linux 内核从 2.6.33 开始支持 TRIM 指令,所以首先查看内核版本以确定操作系统是否支持 TRIM:
>$ uname -a
Linux yuhuashi-Linux 3.13.--generic #-Ubuntu SMP Thu Apr :: UTC x86_64 x86_64 x86_64 GNU/Linux
>$
LZ 的内核版本是 3.13.0,所以是支持 TRIM 的。
接下来检查 SSD 是否支持 TRIM,虽然现在绝大多数 SSD 都支持 TRIM,但是也并非所有的 SSD 都支持。
$ sudo hdparm -I /dev/sda | grep TRIM
* Data Set Management TRIM supported (limit blocks)
$>
显示类似这个信息的表示支持,不同的 SSD 显示的提示可能不一样。
当然,上面这两个配置是没有依赖关系的,所以先配置谁或仅配置谁都是可以的。
文件的最后将 /tmp、/var/tmp 和 /var/log 三个目录挂载到内存上了,这样做有两个目的:
1)利用内存来加速:内存的速度比硬盘的速度快得多,将这种频繁读写的目录挂载到内存中可以大大提高它们的读写速度。
2)减少对 SSD 的写入次数:因为这种临时目录通常都会保存很多小文件,而且读写频繁,为了提高 SSD 的寿命,把它们挂载到内存中。
注意:上面的 /var/log 目录是系统日志所在的目录,如果挂载到内存中将意味着关机之后这些日志全部都会丢失!当然,对于个人来说通常历史系统日志是没什么用的,所以 LZ 把它们也挂载到内存中了。
下面检查一下上面的配置是否生效:
>$ sudo mount -oremount /dev/sda1
>$ mount -l
/dev/sda2 on / type ext4 (rw,noatime,discard,errors=remount-ro)
tmpfs on /tmp type tmpfs (rw,noatime,mode=)
tmpfs on /var/tmp type tmpfs (rw,noatime,mode=)
tmpfs on /var/log type tmpfs (rw,noatime,mode=)
/dev/sda1 on /boot type ext4 (rw,noatime,discard)
/dev/sdb1 on /home type ext4 (rw)
>$
可以看到,/dev/sda1 和 /dev/sda2 已经有 noatime 和 discard 挂载属性了;并且 /tmp、/var/tmp 和 /var/log 也已经被挂载为 tmpfs 了。这说明我们上面的配置成功了。
2.减少 SWAP 换出量
LZ 分配了很大的 SWAP,但在实际使用中发现 SWAP 空间实际使用得很少,而且 LZ 从来不使用休眠功能,所以不分配或少分配 SWAP 也是可以的。
当然前提是你的内存足以满足你日常的使用,LZ 是 8GB 内存。
LZ 的 SWAP 是分配在机械硬盘上的,由于平时 SWAP 用得少所以速度慢点也无所谓。
其实这一步通常仅适用于把 SWAP 分配在 SSD 上的童鞋,像 LZ 这种把 SWAP 分配在机械硬盘上的,设不设置都无所谓。
>$ su
Password:
># echo > /proc/sys/vm/swappiness
>#
0 到 100 之间,值越大换出量越大。
3.使用 noop I/O 调度算法
noop 相当于实现了一个最简单的 FIFO 队列,由于 SSD 不需要像机械硬盘一样寻址,所以采用最简单的调度算法也能相应的提高效率。
>$ su
Password:
# 查看当前的调度算法,下面被中括号选中的表示当前的调度算法
># cat /sys/block/sda/queue/scheduler
noop [deadline] cfq
# 修改调度算法再重新查看
># echo noop > /sys/block/sda/queue/scheduler
># cat /sys/block/sda/queue/scheduler
[noop] deadline cfq
# LZ 发现这种方式只能临时设置,下次重启又变回去了,所以需要修改系统启动脚本
># vim /etc/rc.local
# 在最下面(exit 0 的上面) 添加这句,保存退出,可重启后用上面的 cat(1) 指令验证
echo noop > /sys/block/sda/queue/scheduler
>#
4.关闭 EXT4 日志功能
把这步放在最后是因为需要进入 LiveCD 才能做,所以装完系统之后首次进入系统还是先把其它的优化工作做完吧,不然先做这步的话一会儿还要再重启一次再做前面的优化。
关闭文件系统日志是为了减少 I/O 操作对 SSD 的写入次数,从而提高 SSD 的寿命。
但是,关闭文件系统的日志更容易导致文件系统的损坏,比如发生突然断电的情况等。不过 LZ 使用的是笔记本电脑,不怕突然断电哈。为了提高 SSD 的寿命,还是值得一试的。
1)重启进入 LiveCD。
2)在 shell 中执行命令:
# 修改 root 密码,因为命令要在 root 下运行,所以需要先取得 LiveCD 的 root 权限。
>$ sudo passwd root
输入新的 UNIX 密码:
重新输入新的 UNIX 密码:
passwd:已成功更新密码
>$ su
密码: # 查看分区的设备文件,还好设备文件名与在系统中查看的是一样的,这样大家就不用费力气的重新对照了。
># fdisk -l Disk /dev/sda: 120.0 GB, bytes
heads, sectors/track, cylinders, total sectors
Units = 扇区 of * = bytes
Sector size (logical/physical): bytes / bytes
I/O size (minimum/optimal): bytes / bytes
Disk identifier: 0x0001cbca 设备 启动 起点 终点 块数 Id 系统
/dev/sda1 * Linux
/dev/sda2 Linux Disk /dev/sdb: 1000.2 GB, bytes
heads, sectors/track, cylinders, total sectors
Units = 扇区 of * = bytes
Sector size (logical/physical): bytes / bytes
I/O size (minimum/optimal): bytes / bytes
Disk identifier: 0x000a1ddb 设备 启动 起点 终点 块数 Id 系统
/dev/sdb1 Linux
/dev/sdb2 扩展
分区 未起始于物理扇区边界。
/dev/sdb5 Linux 交换 / Solaris # 关闭 /boot 分区的文件系统日志,这个是针对分区的,所以要在每一个 SSD 分区上做。
># tune2fs -O ^has_journal /dev/sda1
tune2fs 1.42. (-Feb-)
# 关闭 / 分区的文件系统日志
># tune2fs -O ^has_journal /dev/sda2
tune2fs 1.42. (-Feb-)
# 运行文件系统检测,据说不运行可能会导致文件系统出错,LZ 没有亲自挑战过,所以还是乖乖的运行比较好。这个也是针对分区的,所以要在每一个关闭了文件系统日志的分区上做。
># e2fsck -f /dev/sda1
e2fsck 1.42. (-Feb-)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass : Checking reference counts
第5步: 检查簇概要信息
/dev/sda1: / files (1.0% non-contiguous), / blocks
># e2fsck -f /dev/sda2
e2fsck 1.42. (-Feb-)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass : Checking reference counts
第5步: 检查簇概要信息
/dev/sda2: / files (0.2% non-contiguous), / blocks
# 在 LiveCD 上面的工作就做完了,重启进入系统
># reboot
>#
由于上面的内容比较多,所以 LZ 把需要手工执行的命令用红色加粗标记出来了。
3)重启进入系统之后,验证一下是否成功了:
>$ dmesg | grep EXT4
[ 3.787513] EXT4-fs (sda2): mounted filesystem without journal. Opts: (null)
[ 4.194035] EXT4-fs (sda2): re-mounted. Opts: discard,errors=remount-ro
[ 4.362051] EXT4-fs (sda1): mounted filesystem without journal. Opts: discard
[ 4.382329] EXT4-fs (sdb1): mounted filesystem with ordered data mode. Opts: (null)
>$
出现了类似上面加粗字体的提示表示配置成功了,如果出现了上面蓝色字体的内容就说明没有生效。当然对于 LZ 来说配置是生效了的,因为 LZ 仅关闭了 sda1 和 sda2 的文件系统日志。sdb1 本来就不是固态硬盘,LZ 根本没有关闭它的文件系统日志。
参考文献:
Ubuntu 针对 SSD 的优化方案的更多相关文章
- hbase 学习(十四)Facebook针对hbase的优化方案分析
使用hbase的目的是为了海量数据的随机读写,但是在实际使用中却发现针对随机读的优化和gc是一个很大的问题,而且hbase的数据是存储在Hdfs,而Hdfs是面向流失数据访问进行设计的,就难免带来效率 ...
- 详解MySQL大表优化方案( 转)
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
- MySQL 大表优化方案探讨
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
- MySQL大表优化方案
转:https://segmentfault.com/a/1190000006158186?hmsr=toutiao.io&utm_medium=toutiao.io&utm_sour ...
- MySQL 大表优化方案
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
- 优秀后端架构师必会知识:史上最全MySQL大表优化方案总结
本文原作者“ manong”,原创发表于segmentfault,原文链接:segmentfault.com/a/1190000006158186 1.引言 MySQL作为开源技术的代表作之一,是 ...
- MySQL 大表优化方案(长文)
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
- [转帖] 数据库用优化方案 https://segmentfault.com/a/1190000006158186
Mysql大表优化方案 当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部 ...
- MySQL大表优化方案 Mysql的row_format(fixed与dynamic)
转自:https://mp.weixin.qq.com/s/VY69wWlrVLjRtKU7ULrYGw 当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除 ...
随机推荐
- 快速理解Java中的五种单例模式
解法一:只适合单线程环境(不好) package test; /** * @author xiaoping * */ public class Singleton { private static S ...
- 信号处理基础概念比较----频谱vs功率谱vs能谱
频谱: 对动态信号在频率域内进行分析,分析的结果是以频率为坐标的各种物理量的谱线和曲线,可得到各种幅值以频率为变量的频谱函数F(ω).频谱是个很不严格的东西,常常指信号的Fourier变换.频谱分析中 ...
- sqlserver开窗函数
从 http://jimshu.blog.51cto.com/3171847/1376637/ 转 开窗函数是在 ISO 标准中定义的.SQL Server 提供排名开窗函数和聚合开窗函数. 在开窗函 ...
- Visual Studio技巧之打造拥有自己标识的代码模板
可能经过很多博客的介绍,大家都知道代码段的使用,使用代码段可以很方便地生成一些常用的代码格式,确实对我们开发很方便.在团队开发中或者在某些情况下我们经常可能还会希望使用Visual Studio生成的 ...
- .net4缓存笔记
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- javascript性能优化总结一(转载人家)
一直在学习javascript,也有看过<犀利开发Jquery内核详解与实践>,对这本书的评价只有两个字犀利,可能是对javascript理解的还不够透彻异或是自己太笨,更多的是自己不擅于 ...
- [家里蹲大学数学杂志]第041期中山大学数计学院 2008 级数学与应用数学专业《泛函分析》期末考试试题 A
1 ( 10 分 ) 设 $\mathcal{X}$ 是 Banach 空间, $f$ 是 $\mathcal{X}$ 上的线性泛函. 求证: $f\in \mathcal{L}(\mathcal{X ...
- iOS8通讯录之联系人增删查,多号码增删操作
#import <AddressBook/AddressBook.h> #pragma mark 删除一个号码 - (void)deleteLocalMarkSuccess:(void(^ ...
- 3. sort命令
转自:http://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html sort是在Linux里非常常用的一个命令,管排序的,集中精力,五分 ...
- rpm包形式安装MySQL
1.下载Mysql安装所需的rpm包 http://cdn.mysql.com/Downloads/MySQL-5.6/MySQL-server-5.6.21-1.linux_glibc2.5.x86 ...