近日入手一块固态硬盘,考虑到固态硬盘使用寿命跟读写次数有很大关系,所以有必要在装完系统后做一些优化,并对网上很多优化方案在测试通过后,撰写了本篇文章.
文章目录
2018/9 补充:
经过几次折腾,总结下在SSD上装ubuntu系统的正确步骤应该是这样的:
确定分区方案–>制作U盘启动盘–>安装系统–>系统优化–>定期检查硬盘状态
2018/6 补充:
1)关于分区方案
参考:https://juejin.im/post/5a321db6f265da430c11d5c0
先将windows安装在HDD,后将ubuntu安装在SSD
考虑到需要跨硬盘启动系统,所以需要在HDD中预留200M的空间用于安装ubuntu的boot,参考:win10下安装linux双系统进不了linux,如果不这样做的话,每次启动都要在bois option来选择则启动硬盘,参考:双硬盘分别安装windows和Ubuntu双系统
另外也将ubuntu的swap分区放到HDD,避免了对固态硬盘的频繁读写,
/home
和根目录安装到SSD即可,也可以不划分
关于使用UEFI+GPT方案的,参考:https://www.jianshu.com/p/036fa0ca31b1
2)关于交换空间
交换空间也叫,虚拟内存,linux基本上是在raw用完了才使用交换空间(这里需要设置一下),一般设置个256M的交换分区足够,如果需要休眠的话(注意:休眠与挂起的区别),考虑留个与raw同等大小的swap,需要注意,swap分区尽量放在机械硬盘上,如果放在SSD上也需要做一定的优化(下面会解决这个问题).
没有必要在装系统的时候新建了交换空间的分区,可以考虑新建一个swap文件,效果跟swap分区一样,不需要的时候可以删除,相比删除一个分区更为简单.
0. 常识
参考: https://www.jianshu.com/p/nQpqsN
1)BIOS设置为AHCI;
2)购买SSD的1年内,每隔几个月去官网检查是否有固件升级;
3)有条件的加满RAM,因为它比SSD便宜。
4)不要使用TLC芯片的SSD
5)不要做碎片整理操作Defragmentation
6)不建议开启hibernation休眠功能,因为会有大量的数据读写。但是从笔记本使用角度来说,还是开着吧,关了也要操作很多配置。
1. 开启TRIM功能
SSD要保持长期稳定和速度,就需要启用TRIM,这是让SSD在非尖峰读写时间才去真正抹除芯片上被标记抹除的资料。
1)首先,检查内核版本是否支持TRIM:
uname -a
2)然后,检查SSD硬盘是否支持TRIM:
hdparm -I /dev/sda
3)如果显示比如(不同硬件可能不同提示):
* Data Set Management TRIM supported
4)要开启TRIM支持,就得编辑fstab,在指定的磁区挂载选项加上discard,这个设置。
这一步用在所有/
或者/home
等分区,不要用在/swap
如果有/boot/efi
分区,不要加进来,不需要。swap也不需要
注意,对于长期不关机电脑,该任务需要使用cron
定时执行,参考: Ubuntu使用SSD需要做的配置和优化
手动执行:sudo fstrim -v /
下面是我的/etc/fstab
的配置文件
UUID=ca27d8c3-a572-4c81-9d7a-ffcbcd3afa12 / ext4 noatime,discard,errors=remount-ro 0 1
# /boot was on /dev/sda1 during installation
UUID=ecccb054-de0c-4a90-b2ef-1b11d72cd1b0 /boot ext4 noatime,discard,defaults 0 2
# /home was on /dev/sda5 during installation
UUID=eccb1720-0af7-43bc-8e63-47d96dec201a /home ext4 noatime,discard,defaults 0 2
# /storage was on /dev/sda
UUID=77a63891-de5c-4846-9b12-d704177179de /media/cy/storage ext4 noatime,discard,defaults 0 2
# swap was on /dev/sda6 during installation
UUID=15c56286-4568-4b67-b248-cf243604a8bb none swap sw 0 0
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,noatime,mode=1777 0 0
tmpfs /var/log tmpfs defaults,noatime,mode=1777 0 0
5)其中noatime
, nodiratime
是禁用
noatime
是为了,当访问文件时,系统会更新last-access
这个文件/目录元数据,设置noatime
后可以减少这种操作。使用 noatime选项阻止了读文件时的写操作,noatime已经包含了nodiratime。不需要同时指定
6)文件的最后将 /tmp、/var/tmp 和 /var/log 三个目录挂载到内存上了,这样做有两个目的:
- 利用内存来加速:内存的速度比硬盘的速度快得多,将这种频繁读写的目录挂载到内存中可以大大提高它们的读写速度
- 减少对 SSD 的写入次数:因为这种临时目录通常都会保存很多小文件,而且读写频繁,为了提高 SSD 的寿命,把它们挂载到内存中
注意:上面的 /var/log 目录是系统日志所在的目录,如果挂载到内存中将意味着关机之后这些日志全部都会丢失!当然,对于个人来说通常历史系统日志是没什么用的,所以 LZ 把它们也挂载到内存中了。
7)测试新的fstab
文件:
mount -o remount /dev/sda1
然后挂载:
mount
如果显示discard
字样,说明成功,如:
/dev/sda1 on / type ext4 (rw,discard)
2. swap配置
在/etc/sysctl.cnf
末尾加入vm.swappiness=1
, 代表着尽量不使用交换空间, 除非是内存已经用完了。
echo 1 > /proc/sys/vm/swappiness
0到100之间,值越大换出量越大。
或者通过设置/proc/sys/vm/swappiness
里面的值(上一种方法好像不起作用,这里推荐这种方法修改),来减少swap换出量:
>$ su
Password:
># echo 1 > /proc/sys/vm/swappiness
>#
其实这一步通常仅适用于把 SWAP 分配在 SSD 上的童鞋,像 LZ 这种把 SWAP 分配在机械硬盘上的,设不设置都无所谓.
3. 将 /tmp
以 tmpfs
形式挂载
1)如果内存够大,可以用ramdisk的方式,将一些经常变化的位置如/tmp放入内存,加快速度,减少对SSD的访问
sudo gedit /etc/fstab
在文件的最下面加上这一行
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,noatime,mode=1777 0 0
tmpfs /var/log tmpfs defaults,noatime,mode=1777 0 0
重启或不重启,用 sudo mount -o remount /
也可以
2)记得将浏览器等程序的缓存目录设置到/tmp
下
-
设置firefox的缓存移到
/tmp
:
打开firefox,输入about:config
打开设置。添加一个新字符串,名称为:browser.cache.disk.parent_directory
,值为/tmp
要检查的话,浏览地址输入about:cache
-
Chrome设置 Chrome 在Linux下cache的位置是
~/.cache/google-chrome/Cache
.
参考:http://teckoo.com/knowledge/linux/ssd.html
第一种:
cd ~/.cache/google-chrome/Default
rm -rf Cache
ln -s /tmp Cache
rm -rf Media\ Cache
ln -s /tmp Media\ Cache
第二种: make the entire cache folder to /tmp
cd ~
rm -rf .cache
ln -s /tmp .cache
4. 关闭日志文件
参考:http://www.cnblogs.com/0xcafebabe/p/4491140.html
针对
EXT4
文件系统,选择了Ext4
系统,接下来需要关闭日志功能(只针对EXT4分区)
没有日志的情况下,文件系统更容易损坏,如突然断电,如果你甘愿冒这样的风险,从而延长SSD使用寿命,值得一试
1)首先,系统挂载时无法停用日志功能,所以需要进入刚才的U盘系统,利用root
权限执行:
tune2fs -O ^has_journal /dev/sda1
即关闭/dev/sda1
上的日志功能。其它所有EXT4分区
都要这么处理
2)然后,运行操作系统检测:
e2fsck -f /dev/sda1
不这样,文件系统可能会出错。
3)最后,重启,进入SSD中的系统,检查是否设置成功:
dmesg | grep EXT4
如果出现:
EXT4-fs (sda1): mounted filesystem without journal
说明设置成功。原来是:
mounted filesystem with ordered data mode
4)如果需要再次开启日志功能,只要运行
tune2fs -O has_journal /dev/sda1
5. 使用noop磁盘调度
通常操作系统调度机械硬盘时会提供一些数据的物理位置,这样有利于机械硬盘优化寻道,但是对SSD没意义,所以采用
noop
磁盘调度,即简单发送请求,可以提高效率。
可以通过以下命令查看调度方法:(下面被中括号选中的表示当前的调度算法)
cat /sys/block/sda/queue/scheduler
比如显示:
noop [deadline] cfq
配置文件/etc/default/grub
将
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash video-1024x768M@75m"
修改为:
GRUB_CMDLINE_LINUX_DEFAULT="elevator=noop quiet splash video-1024x768M@75m"
6. 测试SSD速度
sudo hdparm -Tt /dev/sdX
这个X
是a
或b
,看你的SSD是第一个或第二个硬盘。我的是sda。
Timing cached reads: x MB in y seconds = z MB/sec
这是读的速度,与你的SSD支持SATAII或SATAIII、以及上面的DRAM读的速度有关。
Timing buffered disk reads: x MB in y seconds = z MB/sec
这个才是真正的SSD读的数值。
我的就是这样的结果:
/dev/sda:
Timing cached reads: 7148 MB in 2.00 seconds = 3576.12 MB/sec
Timing buffered disk reads: 1298 MB in 3.00 seconds = 432.40 MB/sec
7. 分区对齐
0)貌似不用考虑这步了,近年来SSD在出厂时已经对齐了
1)分区对齐(使用LiveUSB)
在LiveUSB内使用gparted
分区后,再验证一下:
sudo fdisk -lu
看每个分区起始的数字,能被8整除,就是4K
对齐。
另查看Sector size (logical/physical): 512 bytes / 4096 bytes
,物理对齐为4k。
2)分区时选择ext4
;如果同时有普通硬盘存在,swap
放普通硬盘上;无需单独分出/home
8. 定期检查SSD状态,并做数据备份
可以使用命令sudo smartctl -data -A /dev/sda
查看SSD状态,观察寿命。
233一行的值就是寿命,默认为100,当小于10的时候就要非常注意了。
通过这个命令来检测某个硬盘的健康状况
smartctl -s on -a /dev/sda
硬盘的SMART信息包含很多部分。其中,"READ SMART DATA"部分显示出硬盘的整体健康状况。
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment rest result: PASSED
这个测试的结果是PASSED
或FAILED
。后者表示即将出现硬件故障,所以需要开始备份这块磁盘上的重要数据!
@leatherwang