千家信息网

ssd存储原理是什么

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍"ssd存储原理是什么",在日常操作中,相信很多人在ssd存储原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"ssd存储原理是什么"的疑惑有所帮
千家信息网最后更新 2026年11月01日ssd存储原理是什么

这篇文章主要介绍"ssd存储原理是什么",在日常操作中,相信很多人在ssd存储原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"ssd存储原理是什么"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

众所周知SSD的读写速度远比hdd磁盘要快,理解ssd的工作原理使我们开发处高效储存方案。

linux 相关指令

fstrim --fstab --verbose ## 回收(discard)文件系统上对应磁盘未使用的块blkdiscard /dev/nvme1n1  ## 回收并擦除(discard)整个SSD块设备wipefs -a /dev/nvme1n1   ## 擦除(erase)文件系统的签名

fstrim

fstrim命令实际可以视为手动对SSD磁盘下发TRIM指令。使用-v参数可以直接查看TRIM回收擦除空间的大小。fstrim是针对已挂载的文件系统的SSD分区

root@xxxx:~# fstrim --helpUsage: fstrim [options] Discard unused blocks on a mounted filesystem.Options: -a, --all           trim all supported mounted filesystems -A, --fstab         trim all supported mounted filesystems from /etc/fstab -o, --offset   the offset in bytes to start discarding from -l, --length   the number of bytes to discard -m, --minimum  the minimum extent length to discard -v, --verbose       print number of discarded bytes -n, --dry-run       does everything, but trim -h, --help          display this help -V, --version       display versionFor more details see fstrim(8).

以下是执行后返回的结果,以NVMe 为列

/home: 32.5 GiB (313011310592 bytes) trimmed on /dev/mapper/gat204--vg-root/boot/efi: 102.2 MiB (607301632 bytes) trimmed on /dev/nvme1n1p1/boot: 732.5 MiB (825778176 bytes) trimmed on /dev/nvme1n1p2/: 60.7 GiB (65154805760 bytes) trimmed on /dev/mapper/gat204--vg-swap_1

ubuntu与debian的systemd 服务可以定时执行fstrim,省去手写crontab脚本工作。

systemctl status fstrim.timer ##查询服务状态systemctl enable fstrim.timer ##开启定时TRIM功能

blkdiscard

blkdiscard用于擦除(discard)SSD设备扇区,和fstrim不同这条命令直接用在块设备上,默认擦除整个块设备的所有扇区。

root@xxxx:~# blkdiscard -helpUsage: blkdiscard [options] Discard the content of sectors on a device.Options: -o, --offset   offset in bytes to discard from -l, --length   length of bytes to discard from the offset -p, --step     size of the discard iterations within the offset -s, --secure        perform secure discard -z, --zeroout       zero-fill rather than discard -v, --verbose       print aligned length and offset -h, --help          display this help -V, --version       display versionFor more details see blkdiscard(8).root@ECSab169d:~# man blkdiscard

擦除(discard)成功后,没有返回结果

root@xxxx:~# blkdiscard /dev/nvme1n1root@xxxx:~#

wipefs

wipefs是linux自带的程序,用来擦除(erase)文件系统的签名,不会清空文件系统或设备中的任何其他数据。默认情况下, wipefs 不会擦除非整个磁盘设备上的嵌套分区表。为此,需要-force选项。

root@gat204:~# wipefs --helpUsage: wipefs [options] Wipe signatures from a device.Options: -a, --all           wipe all magic strings (BE CAREFUL!) -b, --backup        create a signature backup in $HOME -f, --force         force erasure -i, --noheadings    don't print headings -J, --json          use JSON output format -n, --no-act        do everything except the actual write() call -o, --offset   offset to erase, in bytes -O, --output  COLUMNS to display (see below) -p, --parsable      print out in parsable instead of printable format -q, --quiet         suppress output messages -t, --types   limit the set of filesystem, RAIDs or partition tables -h, --help          display this help -V, --version       display versionAvailable output columns:     UUID  partition/filesystem UUID    LABEL  filesystem LABEL   LENGTH  magic string length     TYPE  superblok type   OFFSET  magic string offset    USAGE  type description   DEVICE  block device nameFor more details see wipefs(8).

检查SSD是否支持TRIM

##可以通过 /sys/block 下的信息来判断 SSD 支持 TRIM, discard_granularity 非 0 表示支持。# cat /sys/block/sda/queue/discard_granularity0# cat /sys/block/nvme0n1/queue/discard_granularity512

存储元器件(闪存颗粒类别)

SSD的储存是NAND-Flash闪存颗粒,分为SLC、MLC和QLC四种。可以粗略地把闪存颗粒理解成是一个电容加上电压计的组合。一个电容能存放一个比特的数据,电压计使电容能区分不同电压,不同的电压能存放更多的比特数据。


SLC(Single-Level Cell): 每个Cell单元存储1bit信息,也就是只有0、1两种电压变化,结构简单,电压控制也快速,反映出来的特点就是寿命长,性能强,P/E寿命在1万到10万次之间,但缺点就是容量低而成本高.

MLC(Multi-Level Cell): 每个cell单元存储2bit信息,需要更复杂的电压控制,有00,01,10,11四种变化,这也意味着写入性能、可靠性能降低了。其P/E寿命根据不同制程在3000-5000次不等.

TLC(Triple-Level Cell):每个cell单元存储3bit信息,电压从000到001有8种变化,容量比MLC再次增加1/3,成本更低,但是架构更复杂,P/E编程时间长,写入速度慢,P/E寿命也降至1000-3000次,部分情况会更低.寿命短只是相对而言的,通常来讲,经过重度测试的TLC颗粒正常使用5年以上是没有问题的.

QLC(Quad-Level Cell):QLC或者可以叫4bit MLC,电压有16种变化,但是容量能增加33%,就是写入性能、P/E寿命与TLC相比会进一步降低。具体的性能测试上,美光有做过实验。读取速度方面,SATA接口中的二者都可以达到540MB/S,QLC表现差在写入速度上,因为其P/E编程时间就比MLC、TLC更长,速度更慢,连续写入速度从520MB/s降至360MB/s,随机性能更是从9500 IOPS降至5000 IOPS,损失将近一半.

这四类当中,SLC的性能最优,价格超高;MLC性能够用,价格适中为消费级SSD应用主流;TLC综合性能最低,价格最便宜,但可以通过高性能主控、主控算法来弥补、提高TLC闪存的性能;QLC出现的时间很早,价格便宜,容量大。

P/E以及其SSD底层储存结构

P指的是Program(编程),E指的是Erease (擦除), 闪存完全擦写一次可以称为1次P/E,因此闪存的寿命以P/E为单位。和HDD机械硬盘不同,HDD的数据是可以覆写的(Overwrite),而SSD在写入数据前必须先进行擦除(erase),一般在格式化文件系统步骤或者SSD出厂配置的过程中,SSD已进行了全盘擦除(erase),因此SSD的首次写入数据是直接编程。

SSD 在闪存单元中存取数据时有 page 和 block 的概念。SSD 被划分成很多 block, 而 block 被划分成很多 page。

NAND-Flash读写流程

Page是NAND-Flash单次读写单位,大小一般为4K或者4K字节的倍数,写操作只能写到空的 page,而清除数据(Erase) 是以 块(block) 为单位的。块的擦除次数有寿命限制,超限制就会变成坏块。

用户对SSD的写入数据操作可以分为两种类型

1.原来SSD磁盘上没有数据,写入数据。

2.SSD磁盘上有数据,对该数据进行修改(包括删除)。

前者只需把数据直接写入到空白页即可,后者则是read-modify-write方式操作,读取原有page的内容到缓存中并进行更新,最后写入到其他空的page,原有的page置为无效页。

可以想象对文件的持续反复的修改,将会产生大量的无效页,这就需要"垃圾回收"(Garbage Collection-gc)机制来回收这些无效页,否则可以写入空间越来越小。

FTL 和磨损均衡

SSD的主控执行磨损均衡(Wear-Leveling)策略,使SSD磁盘各个块的擦除次数均匀分摊到各个块上。就像内存MMU一样,SSD内部使用闪存转换层(FTL)存放了逻辑块地址(Logical Block Address,简称 LBA)到物理块地址(Physical Block Address,简称 PBA)的映射。操作系统访问的硬盘地址,其实都是逻辑地址。只有通过 FTL 转换之后,才会变成实际的物理地址,找到对应的块进行访问。操作系统本身,不需要去考虑块的磨损程度,只要和操作机械硬盘一样来读写数据就好了。

"垃圾回收"机制

写入放大(write amplification)

上文提及过数据的反复修改会产生大量的无效页,一旦整个块(block)的空间不足以写入数据,SSD会将这个块(block)的数据读入到缓存中,擦除这个块(block)所中的页,然后再把缓存中已更新的数据写入进去。这种read-erase-modify-write过程,就好比写入的数据可能只有一个页4KB,但实际要擦除并且写N个页,称之为写入放大。

写入放大的倍数越大,写入的速度就越慢。

TRIM指令
TRIM是SSD的ATA-8指令,解决写入放大的关键。

文件系统在修改或者删除过程中,发送给通知给SSD记录产生的无效页,间隔一定时间再统一回收擦除所有无效页,擦除更新无效页所在的块(block)。

一方面预留足够多的空间,避免因空间不足产生写入放大的情况。另一方面,使用TRIM,在IO闲时回收擦除无效页,这样有效保证SSD的性能以及提高寿命。

discard与TRIM的区别

在linux术语中,discard指的就是TRIM

不建议使用linux系统默认的TRIM功能

TRIM功能有两种方式启动,一种是连续TRIM,就是直接在文件系统回收块的时候直接发TRIM命令,这种方式对性能影响比较大,在fstab挂载的时候把default修改成discard。另外一种是定期执行fstrim批量进行TRIM操作,这样避免平时的性能影响,不过fstrim的执行时机要选好,毕竟批量TRIM的时候会对其它任务性能影响较大。

根据文章《Ubuntu Doesn't TRIM SSDs By Default: Why Not and How To Enable It Yourself》提及到

"The kernel implementation of realtime trim in 11.2, 11.3, and 11.4 is not optimized. The spec. calls for trim supporting a vectorized list of trim ranges, but as of kernel 3.0 trim is only invoked by the kernel with a single discard / trim range and with current mid 2011 SSDs this has proven to cause a performance degradation instead of a performance increase. There are few reasons to use the kernels realtime discard support with pre-3.1 kernels. It is not known when the kernels discard functionality will be optimized to work beneficially with current generation SSDs." [Source]

利用内核方式的discard 方式无法感知对SSD当前性能的影响。

实践

使用fio测试nvme裸设备

使用fio对裸设备直接进行randwrite测试,在超过30分钟速度由400MiB/s降低至80MiB/s 分析原因得出SSD触发了放大写现象,并且由于没有挂载文件系统,无法使用fstrim手动回收空间(可以理解成,在没有文件系统标记下,SSD也不知道哪些是无效页),再次进行fio测试速度依然是80MiB/s。使用blkdiscard进行全盘擦除后,速度恢复正常。

参考文献

《Trim命令》 wiki百科

《浅谈分布式存储之SSD基本原理》滴滴云

《Linux 下启用 SSD TRIM 功能》Louis

结束语

当使用fio直接ssd磁盘进行写入测试后,对磁盘使用blkdiscard可恢复原来的速度。

到此,关于"ssd存储原理是什么"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

数据 性能 系统 文件 速度 存储 寿命 电压 磁盘 设备 闪存 原理 空间 测试 不同 地址 就是 方式 价格 信息 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网扶贫科技 没上市的科技互联网公司 深圳科技互联网 智网互联网科技 互联网 的科技创新 撒么互联网科技公司 深圳卡尔迅互联网科技有限公司怎么样 互联网校园科技培训 互联网经济与金融科技 互联网科技公司实习生 苏州五指互联网络科技有限 互联网科技大奖都有哪些公司 群盈汇互联网科技有限公司 互联网金融科技公司的优势 深圳互联网科技的发展 互联网相关科技技术 互联网与数字科技关系 35岁以上互联网科技行业 北京品多多互联网科技有限公司 互联网企业和网络科技有限公司 深圳恒合互联网络科技有限公司 互联网科技行业发展 科技互联网技术 互联网 科技 奇酷互联网科技 哈尔滨新华互联网科技 湖南洣水互联网科技有限公司扣款 朱啸虎曾投资哪些互联网科技企业 上海万顺科技互联网有限公司招聘 恒生科技互联网指数十大成分股
0