前提
- 升級(jí)到最新的Linux發(fā)行版本(主要是Kernel)
- 升級(jí)到最新的SSD Firmware
使用sudo smartctl -a /dev/sda
命令查看Firmware版本老厌。 - 使用Ext4文件系統(tǒng)
btrfs 雖然支持專門的SSD mountc參數(shù),但是本身文件系統(tǒng)的穩(wěn)定性還不高。 - 開(kāi)啟BIOS AHCI
- 有條件的加滿RAM务嫡,因?yàn)樗萐SD便宜寞焙。
配置RAMDISK可以有效的將SWAP操作減少航夺。參見(jiàn)Reduction of SSD write frequency via RAMDISK - 不要使用TLC芯片的SSD
- 不要做碎片整理操作Defragmentation
- 不建議開(kāi)啟hibernation休眠功能莺匠,因?yàn)闀?huì)有大量的數(shù)據(jù)讀寫闻丑。但是從筆記本使用角度來(lái)說(shuō)挠锥,還是開(kāi)著吧众羡,關(guān)了也要操作很多配置。
開(kāi)啟磁盤的TRIM功能:
Linux對(duì)文件的刪除只是刪除對(duì)數(shù)據(jù)的指向蓖租,所以文件恢復(fù)非常方便粱侣。在刪除數(shù)據(jù)后,文件系統(tǒng)在了解到這些存儲(chǔ)空間的釋放后蓖宦,會(huì)對(duì)其進(jìn)行重新分配齐婴。HDD在對(duì)這些空間的數(shù)據(jù)重寫上效率很高,但是SSD就慢很多稠茂。SSD具有非常高效的寫操作速度柠偶,但是對(duì)已有數(shù)據(jù)的重寫速度比較忙。TRIM可以定期的將刪除文件清除掉睬关,避免重寫過(guò)程诱担,釋放出空間,保證SSD的高效寫操作电爹。如果SSD空間充足蔫仙,可以不必開(kāi)啟TRIM。
引用資料描述:
An SSD organizes data internally into 4k pages and groups 128 pages into a 512k block. SSDs can write only into empty 4k pages and erase in big 512k block increments. This means that although SSDs can write very quickly, overwriting is a much slower process. The TRIM command keeps your SSD running at top speed by giving the filesystem a way to tell the SSD about deleted pages. This gives the drive a chance to do the slow overwriting procedures in the background, ensuring that you always have a large pool of empty 4k pages at your disposal.
方法1-修改/etc/rc.local文件 推薦
在最后一條命令exit 0 前增加如下內(nèi)容:
fstrim -v /
/為root分區(qū)(SSD硬盤分區(qū))
不建議使用fstrim-all命令丐箩,在非三星和Intel SSD上會(huì)有性能瓶頸摇邦,參考URL:deepin 2014對(duì)SSD支持如何
方法2-cron
echo -e "#\x21/bin/sh\nfstrim -v /" | sudo tee /etc/cron.daily/trim
sudo chmod +x /etc/cron.daily/trim
方法3-修改/etc/fstab文件
修改SSD相關(guān)分區(qū)條目,增加discard 和 noatime參數(shù)
/dev/sda1 / ext4 discard,noatime,commit=600,errors=remount-ro 0 1
- discard參數(shù)啟動(dòng)SSD的TRIM功能雏蛮,可以提升性能和使用持久性涎嚼。
- notime參數(shù)告訴文件系統(tǒng)不要記錄文件的最后訪問(wèn)(讀取)時(shí)間挑秉,只記錄最后修改時(shí)間法梯。可以有效減少對(duì)磁盤的讀寫次數(shù),因?yàn)樵L問(wèn)頻率相對(duì)修改來(lái)說(shuō)非常多立哑。
PS:
1.如果發(fā)現(xiàn)noatime參數(shù)影響了某些應(yīng)用的使用夜惭,可以修改notime為relatime,將會(huì)讓文件系統(tǒng)將最后修改時(shí)間作為文件的最后訪問(wèn)時(shí)間铛绰。
2.不推薦這個(gè)方式(只針對(duì)discard參數(shù)诈茧,noatime還是推薦的)。The disadvantage of this method is, that it may cause the system to slow down. Because it forces the system to apply TRIM instantly on every file deletion. That's why this method is not my favourite.
分區(qū)對(duì)齊
SSD硬盤內(nèi)部的操作是512k的塊大小捂掰。在SSD剛剛發(fā)布的時(shí)候敢会,磁盤分區(qū)系統(tǒng)可能會(huì)有分區(qū)對(duì)其的問(wèn)題,現(xiàn)在的版本都支持SSD的512k分區(qū)范圍了:
- fdisk uses a one megabyte boundary since util-linux version 2.17.1 (January 2010).
- LVM uses a one megabyte boundary as the default since version 2.02.73 (August 2010).
建議使用fdisk这嚣, fdisk 會(huì)預(yù)留 2048 個(gè)扇區(qū)鸥昏,gdisk 卻是從 64 扇區(qū)開(kāi)始分。 姐帚。
一個(gè)例子看一下512k對(duì)其的效果:
~$ sudo sfdisk -d /dev/sda
Warning: extended partition does not start at a cylinder boundary.
DOS and Linux will interpret the contents differently.
# partition table of /dev/sda
unit: sectors
/dev/sda1 : start= 2048, size= 497664, Id=83, bootable
/dev/sda2 : start= 501758, size=155799554, Id= 5
/dev/sda3 : start= 0, size= 0, Id= 0
/dev/sda4 : start= 0, size= 0, Id= 0
/dev/sda5 : start= 501760, size=155799552, Id=83
每一個(gè)分區(qū)的開(kāi)始和結(jié)束都是可以整除512的吏垮。
減少SWAP讀寫頻率
完全不使用SWAP將會(huì)導(dǎo)致hibernation(休眠)機(jī)制失效,所以最好的方案就是將swappiness 值修改為最小罐旗,最小化SWAP分區(qū)的操作膳汪。這樣Linux會(huì)優(yōu)先使用RAM,然后才是SSD九秀。
$ sudo vim /etc/sysctl.d/99-sysctl.conf
vm.swappiness = 1
vm.vfs_cache_pressure = 50
vm.swappiness=0太激進(jìn)遗嗽,有可能會(huì)導(dǎo)致內(nèi)存不夠用。
重啟后生效
更換低延遲 IO-Scheduler
默認(rèn)的IO調(diào)度器CFQ(Copletely Fair Queuing)是針對(duì)HDD的優(yōu)化鼓蜒,對(duì)多個(gè)讀操作進(jìn)行分組隊(duì)列媳谁。但是SSD的讀取效率非常高,完全不必要分組排隊(duì)友酱,使用一個(gè)隊(duì)列就可以了。建議更換為:
- NOOP(當(dāng)系統(tǒng)只有SSD的情況下非常建議)
- Deadline模式
配置文件/etc/default/grub
將
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash video-1024x768M@75m"
修改為:
GRUB_CMDLINE_LINUX_DEFAULT="elevator=noop quiet splash video-1024x768M@75m"
更新grub配置:grub-mkconfig -o /boot/grub/grub.cfg
插播小技巧
如果grub需要改變分辨率柔纵,修改/etc/default/grub
GRUB_GFXMODE=1024x768
定期檢查SSD狀態(tài)缔杉,并做數(shù)據(jù)備份
可以使用命令sudo smartctl -data -A /dev/sda
查看SSD狀態(tài),觀察壽命搁料。
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:~$
233一行的值就是壽命或详,默認(rèn)為100,當(dāng)小于10的時(shí)候就要非常注意了郭计。
更加深入的優(yōu)化
Solid State Drive (SSD): optimize it for Ubuntu 14.04, Linux Mint 17.1 and Debian
參考鏈接
- Archlinux Wiki SSD
- How To Optimize Linux For SSDs
- 5 crucial optimizations for SSD usage in Ubuntu Linux
- Solid State Drive (SSD): optimize it for Ubuntu 14.04, Linux Mint 17.1 and Debian
- Debian Wiki's SSDOptimization
- How to properly activate TRIM for your SSD on Linux: fstrim, lvm and dm-crypt
- Linux系統(tǒng)中對(duì)SSD硬盤優(yōu)化的方法
- linux下SSD優(yōu)化