为何我的机械硬盘(HDD)能达到320MB/s的读取速度?
为何我的机械硬盘(HDD)能达到320MB/s的读取速度?
兄弟你猜的完全没错!这种情况就是磁盘控制器的空块优化机制在起作用——当你读取那些未被使用、已经被标记为“全零”的区块时,硬盘固件根本不会真的去磁道上读取数据,而是直接返回一串零给系统,这速度自然能飙升到接近USB3接口的带宽上限(USB3.0理论带宽5Gbps,实际跑320MB/s完全合理)。
为啥前半段速度正常?
因为开头读取的是磁盘上已经存储了数据的区块,这些数据必须从物理磁道上读取,120MB/s左右的速度刚好符合2.5寸希捷机械硬盘的正常顺序读取性能,完全没问题。
能不能手动标记空块来提速?
当然可以!Linux下有几种实用的方法,不过操作前一定要确认目标磁盘正确,重要数据先备份:
- 全盘标记空块:用
blkdiscard /dev/sdb命令,它会告诉硬盘控制器把整个磁盘的空闲区块标记为“已丢弃”,之后读取这些块时就会触发快速返回零的机制。注意:这个命令会清除磁盘上的所有数据,谨慎使用! - 针对挂载的文件系统优化:如果磁盘已经挂载(比如挂载到
/mnt/hdd),可以用fstrim /mnt/hdd命令,它会让文件系统告诉硬盘哪些区块已经是空闲的,硬盘会记录这些信息,后续读取这些块时就会加速。这个操作不会删除数据,很安全。 - 创建稀疏镜像更高效:如果你只是想生成磁盘镜像,其实可以直接创建稀疏镜像——也就是只保存有数据的区块,空块不占用镜像文件空间。用
cp --sparse=always /dev/sdb my1TBdisk.img或者dd if=/dev/sdb of=my1TBdisk.img conv=sparse就能实现,这样不仅镜像文件更小,创建速度也会快很多,因为空块直接跳过写入。
你现在用pv /dev/sdb > my1TBdisk.img是把所有块(包括空块的零数据)都写入镜像文件,所以虽然读取速度快,但最终镜像文件还是会占满1TB空间,用稀疏镜像的方式能省不少存储空间哦。
备注:内容来源于stack exchange,提问作者golimar
相关产品推荐
相关产品推荐

