Linux下减少SSD磨损

Linux下减少SSD磨损,第1张

因为我的破烂电脑有一个硬盘位,且无其他多余接口。只能装一块硬盘,所以没有办法,就只能先上一块小容量SSD了:(

周所周知,SSD容量越小,在相同写入量的情况下,单颗闪存遭到磨损的次数就越多。而闪存寿命由磨损次数决定,所以SSD容量越小寿命越短。想想我那可怜的120GTLC颗粒SSD可能经不起我多久的暴力使用就可能寿终正寝了。

所以,今天就要给他减负,将 *** 作系统系统下的缓存、部分日志丢给内存保管。

直接修改/etc/fstab 将缓存、日志挂载到/tmp下面。

0x02

swap索性直接关了。直接注释掉 swapfile 一行。

暂时就只能想到这么多了,还有其他方法日后更新。

1.使用Ext4 without journaling文件系统

传统的SSD+Linux组合一般推荐Ext2文件系统,主要是考虑到Ext3、Ext4需要额外的记录日志,会缩短SSD使用寿命,而且新出现的TRIM技术在Ext2中有两个缺点:

仅支持离线TRIM,换句话说文件系统必须只读挂载;

需要手动执行hdparm命令或wiper.sh脚本。

Ext4则没有这些限制,允许TRIM后台运行,并且日志记录功能可以手动关闭(没有日志的情况下,文件系统更容易损坏,如突然断电),如果你甘愿冒这样的风险,从而延长SSD使用寿命,值得一试。另外,许多测试中如:Testing EXT4 &Btrfs On A Serial ATA 3.0 SSD,像Btrfs这样为SSD准备的文件系统不如Ext4速度快(用SSD不就为了快么)。

所以,上面安装系统时,选择了Ext4系统,接下来需要关闭日志功能。

首先,系统挂载时无法停用日志功能,所以需要进入刚才的U盘系统,利用root权限执行:

tune2fs -O ^has_journal /dev/sda1

即关闭/dev/sda1上的日志功能。

然后,运行 *** 作系统检测:

e2fsck -f /dev/sda1

不这样,文件系统可能会出错。

最后,重启,进入SSD中的系统,检查是否设置成功:

dmesg | grep EXT4

如果出现:

EXT4-fs (sda1): mounted filesystem without journal

说明设置成功。

原来是:mounted filesystem with ordered data mode

如果需要再次开启日志功能,只要运行tune2fs -O has_journal /dev/sda1即可。

2.开启TRIM功能

TRIM是一种 *** 作系统调度SSD块写入的方式。主要是因为同一个SSD的闪存单元频繁 *** 作会磨损,影响使用寿命,区别于传统的机械硬盘处理删除数据。Linux内核自2.6.33开始支持TRIM。

首先,检查内核版本是否支持TRIM:

uname -a

然后,检查SSD硬盘是否支持TRIM:

hdparm -I /dev/sda

如果显示比如(不同硬件可能不同提示):

* Data Set Management TRIM supported

说明支持。

这两个条件都满足,在/etc/fstab中将:

/dev/sda1 / ext4 defaults 改为:

/dev/sda1 / ext4 discard,defaults 分区、挂载点、已经存在的选项不一定一样。

测试新的fstab文件:

mount -oremount /dev/sda1

然后挂载:

mount

如果显示discard字样,说明成功,如:

/dev/sda1 on / type ext4 (rw,discard)

3.swap空间处理

对于大内存来说swap基本上都是空闲的,除非电脑进入休眠状态,系统会将内存内容转到swap中。有了SSD,开关机都在几秒中,对我来说swap没用,所以上面直接不分配swap空间。

如果分配了也行,空间要小,而且通过设置/proc/sys/vm/swappiness里面的值,来减少swap换出量:

echo 1 >/proc/sys/vm/swappiness

0到100之间,值越大换出量越大。

4.设置noatime

当访问文件时,系统会更新last-access这个文件/目录元数据,设置noatime后可以减少这种 *** 作。

将2步中的:

/dev/sda1 / ext4 discard,defaults 改为:

/dev/sda1 / ext4 noatime,discard,defaults 测试设置成功方法与上面一样。

5.使用noop磁盘调度

通常 *** 作系统调度机械硬盘时会提供一些数据的物理位置,这样有利于机械硬盘优化寻道,但是对SSD没意义,所以采用noop磁盘调度,即简单发送请求,可以提高效率。

可以通过以下命令查看调度方法:

cat /sys/block/sda/queue/scheduler

比如显示:

[noop] deadline cfq

在/etc/rc.local中添加如下语句:

echo noop >/sys/block/sda/queue/scheduler

6.内存分区加速

如果内存够大,可以用ramdisk的方式,将一些经常变化的位置如/tmp放入内存,加快速度,减少对SSD的访问。

依然是加在/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

更新方法与2相同,记得将浏览器等程序的缓存目录设置到/tmp下。

对于采用Nand Flash作为存储介质的SSD来说,怀疑其使用寿命也不是没有道理的,理论上MLC的写入寿命为1万次,SLC的写入寿命为10万次,那么,我们是否这样认为:当我们连续保存一万张图片或者1万个word文档到基于MLC芯片的固态硬盘时,这款硬盘就意味着寿命的终结呢?

显然,一定不是这样的,即使我们使用照相机的SD卡(同样采用MLC芯片) 不停的拍照,让图片写入卡内,循环使用几年,我们的SD卡依然“健在”。这样因为,所谓的1万次理论寿命是指在同一区块上写入1万次才会导致该区块损坏, 举例来说,1GB的Nand Flash你每次都将这块Nand Flash中写满文件(不一定是写入1GB文件,因为Nand Flash有写入放大系数,为便于理解,可以宏观的理解为每次写入1GB文件),循环写入1万次才会导致该块Nand Flash的寿命终结,事实上,固态硬盘的主控芯片的最重要的作用之一就是防止系统不停的向同一区块写入内容,这就是所谓的“磨损平衡”算法。所以,一款 SSD好坏的核心不是仅仅看其读写速度有多快,而是其控制芯片的算法,事实上,大部分的主控厂商都可以通过软件方面的更改让SSD产生更快的读写速度,为 了保证SSD的稳定性,一些厂家宁愿选择刻意降低其读写性能来保证用户数据的安全。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8291862.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-15
下一篇2023-04-15

发表评论

登录后才能评论

评论列表(0条)

    保存