到目前为止,我知道这cat /sys/block/<devicename>/queue/rotational会告诉我我的驱动器是 SSD 还是 HDD。是否有类似的东西可以确定它是否使用 SMR(叠瓦式磁记录)?
Mik*_*nen 11
唯一可以确定的方法是使用足够的随机写入访问对驱动器进行基准测试。“驱动器管理”SMR 应该对主机完全透明,有时制造商没有提及 SMR。但是,“透明”仅与逻辑行为有关,与性能(或延迟)无关。
我建议跟随。运行fio如下(首先cd到磁盘上的目录进行测试,因为以下将在当前工作目录中创建基准测试文件):
fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randwrite --size=500g --io_size=1500g --blocksize=10m --ioengine=libaio --iodepth=1 --direct=1 --numjobs=1 --runtime=3600 --group_reporting
Run Code Online (Sandbox Code Playgroud)
此示例将创建 500 GB 文件并在其中选择随机位置并写入 10 MB 随机数据。然后它会重复测试长达 1 小时或直到写入 1.5 TB。观看看起来像这样的 ETA 行:
Jobs: 1 (f=1): [w(1)] [20.0% done] [0KB/40960KB/0KB /s] [0/4/0 iops] [eta 00m:28s]
Run Code Online (Sandbox Code Playgroud)
上面的命令将每 5 秒发出一个新的 ETA 行。查看上面斜线 (40960KB和4)之间的速度和 IOPS 。对于 SMR 驱动器,您应该首先获得良好的值(100MB+/s 和 10+ IOPS),但随着测试的进行和 SMR 驱动器的内部缓存填满(通常约为 20 GB),性能将无处不在。有时它会接近启动速度,有时它会在 0 MB/s 和 0-1 IOPS 附近很长一段时间。但是,永远不应该有错误。
请注意,SMR 驱动器在使用或进行基准测试时会变慢!某些驱动器支持 TRIM 命令,fstrim可能有助于将驱动器速度恢复到原始速度。
即使没有 TRIM,一个做得好的“驱动管理”SMR 将在单独供电足够长的时间后获得其原始速度。如果在内部缓存完全刷新到 SMR 区域之前它进入睡眠状态,您可能需要禁用磁盘旋转(电源管理)。对于我使用过的 Seagate SMR 驱动器,完全刷新缓存似乎需要大约半小时。在此期间,即使计算机未向驱动器写入任何内容,驱动器也听起来像是在写入数据。不幸的是,我不知道从驱动器中查询刷新状态的任何方法。要么听驱动声音,要么干脆等待足够长的时间。
示例:希捷 SMR 硬盘似乎很乐意在 SMR 刷新过程中进入睡眠状态(可能假装对用户完全透明),并在将来再次醒来时继续刷新。这是透明的,即使断电也不会发生数据损坏。但是,如果您不时写入大量突发数据,然后立即将驱动器置于休眠状态,则会导致性能非常差(例如,将此类驱动器用作备份驱动器,在逻辑上完成备份后立即卸载和断开连接)。下次您进行另一个备份时,新备份将与先前备份的 SMR 刷新竞争,并且性能将非常低。如果您让此类驱动器始终通电并且一次最多只能写入 10 GB,它将与常规 PMR HDD 驱动器一样快或更快。
sg3_utils 的现代版本有一个命令 sg_rep_zones,它将询问驱动器并询问其 SMR 配置。如果您的发行版没有最新版本,您可能需要手动构建它。
这可以明确地告诉您驱动器是否为SMR。
但是,即使命令报告Report zones command not supported,也不能确定驱动器不是SMR。一些 SMR 驱动器使用“驱动器管理”SMR,这意味着驱动器可以神奇地处理所有事情,您应该不必担心。在这种情况下,它不一定支持报告区域命令。
另一件事要尝试 - 查看驱动器是否支持“取消映射”或“修剪”命令 - sg_unmap,也是 sg3_utils 的一部分。非 SMR 驱动器不太可能支持该命令(但同样,并非所有 SMR 驱动器都支持它)。