在 SSD 上使用 btrfs 文件系统的相关优化
2015-10-16 07:41
609 查看
优化挂载参数
在 Linux 中挂载 SSD 上的 btrfs,可以采用各种参数进行优化:这些参数各有优缺点,酌情添加。# <file system> <mount point> <type> <options> <dump> <pass>UUID=<略> / btrfs defaults,ssd,discard,noatime,compress=lzo,subvol=@ 0 1
ssd
btrfs 文件系统有对 SSD 进行优化,在挂载参数中加入ssd即可。该参数不会自动启用 TRIM/discard。
discard
可以通过以下命令确认 SSD 是否支持 TRIM:若 SSD 支持 TRIM 命令,可以在 /etc/fstab 中启用sudo hdparm -I /dev/sdX | grep TRIM * Data Set Management TRIM supported (limit 8 blocks)
discard参数。建议将
discard挂载参数作为首选。据 debian wiki 所述,包括三星,镁光,英睿达在内的一些 SSD 在 discard/TRIM 上有问题,不能合适地处理 TRIM 命令。以下是 linux 内核相关处源代码 (2015/10/15):
该参数不是必需的,也可以自定义周期性运行/* devices that don't properly handle queued TRIM commands */{ "Micron_M500_*", NULL, ATA_HORKAGE_NO_NCQ_TRIM | ATA_HORKAGE_ZERO_AFTER_TRIM, },{ "Crucial_CT*M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM | ATA_HORKAGE_ZERO_AFTER_TRIM, },{ "Micron_M5[15]0_*"," MU01", ATA_HORKAGE_NO_NCQ_TRIM | ATA_HORKAGE_ZERO_AFTER_TRIM, },{ "Crucial_CT*M550*", "MU01", ATA_HORKAGE_NO_NCQ_TRIM | ATA_HORKAGE_ZERO_AFTER_TRIM, },{ "Crucial_CT*MX100*", "MU01", ATA_HORKAGE_NO_NCQ_TRIM | ATA_HORKAGE_ZERO_AFTER_TRIM, },{ "Samsung SSD 8*", NULL, ATA_HORKAGE_NO_NCQ_TRIM | ATA_HORKAGE_ZERO_AFTER_TRIM, },{ "FCCT*M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM | ATA_HORKAGE_ZERO_AFTER_TRIM, },/* devices that don't properly handle TRIM commands */{ "SuperSSpeed S238*", NULL, ATA_HORKAGE_NOTRIM, },
fstrim命令来取代该参数,使用该命令前要确认 SSD 支持 TRIM,否则可能造成数据丢失。当 SSD 有足够的空余空间或(未分配的)可用空间时不需要该参数。
noatime
挂载参数可以加入noatime,通过禁止更新访问记录来减少不必要的写操作以提高性能。该选项对 HDD 同样有性能提升。btrfs 的默认配置为
relatime。
compress
打开压缩功能在通常情况下有利于提高传输性能(并非绝对),也可以节省存储空间。加入以下挂载参数:lzo 速度更快,zlib 压缩率更高。注意确认 SSD 主控是否是非压缩主控,若为压缩主控不建议加入该参数。compress=lzo或compress=zlib
写缓存
若 SSD 带有缓存,启用 Write Cache 可以提高性能:Disks -> Drive Setting -> Enable Write Cache,但在突然断电的情况下可能造成数据丢失。I/O 调度
SSD 结构不同于传统硬盘,寻址时间短,I/O 调度算法可选择noop以降低延迟。以下命令可查看与修改调度器:
注意以上方法并不持久,重启后会重置。如果 SSD 是系统唯一的存储设备,可考虑通过cat /sys/block/sdX/queue/scheduler # sdX 指你的设备sudo tee /sys/block/sdX/queue/scheduler <<< noop
elevator=noop内核参数设置 I/O 调度器。也可使用 udev 规则来修改调度器,对多存储设备同样有效:
文件内容如下:/etc/udev/rules.d/60-ssd-scheduler.rules # 创建该文件
# set deadline scheduler for non-rotating disksACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="noop"
参考:
关于在SSD上使用btrfs文件系统需要做的优化 - akarin.cnSolid State Drives - Arch wiki
SSD Optimization - debian wiki
Btrfs wiki
相关文章推荐
- Java字段初始化规律:
- jdk环境配置
- HTML5学习笔记之拖放
- Android Api Demos登顶之路(九十九)Text-->Animation->Push
- java一个简单的内存泄漏的例子
- 大道至简第三章阅读笔记
- 引水入城——noip2010
- SPOJ IM -- Intergalactic Map
- SGU 438 -- The Glorious Karlutka River =)
- SGU 326 -- Perspective
- STM32入门学习之USART(STM32F030F4P6基于CooCox IDE)
- ZOJ 2760 -- How Many Shortest Path
- 史上最全的iOS面试题及答案
- POJ 3281 -- Dining
- Java实现约瑟夫环
- POJ 2391 -- Ombrophobic Bovines
- iOS 9新系统下App Store应用上传新指南
- POJ 1637 -- Sightseeing tour
- POJ 1149--PIGS
- mysql 学习记录(十二)--触发器