如何判斷硬碟是否使用SMR

如何判斷硬碟是否使用SMR

到目前為止,我知道這cat /sys/block/<devicename>/queue/rotational會告訴我我的驅動器是 SSD 還是 HDD。有沒有類似的東西可以查出它是否使用SMR(疊瓦磁記錄)?

答案1

唯一確定的方法是使用足夠的隨機寫入存取對驅動器進行基準測試。 「驅動器管理」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

此範例將建立填充偽隨機資料的 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]

上述命令將每 5 秒發出一個新的 ETA 行。請參閱上面斜線 (40960KB4) 之間的當前吞吐量和 IOPS。對於 SMR 驅動器,您應該首先獲得良好的值(100MB+/s 和 10+ IOPS),但隨著測試的進行以及 SMR 驅動器的內部快取填滿(通常約為 20 GB),效能將會下降。有時會接近啟動速度,有時會長時間在 0 MB/s 和 0-1 IOPS 左右。但絕對不應該有錯誤。

請注意,SMR 驅動器在使用或基準測試時會變慢!某些驅動器支援 TRIM 命令,fstrim可能有助於使驅動器速度恢復到原始速度。

即使沒有 TRIM,一個做得好的「驅動管理」SMR 在空轉供電足夠長的時間後也將恢復其原始速度。如果磁碟在內部快取完全刷新到 SMR 區域之前進入睡眠狀態,您可能需要停用磁碟旋轉(電源管理)。作為替代方案,您可以設定一個不時寫一點的外觀。即使是單線,例如

while true; do date >> timestamps.txt; sleep 5m; done

在裝置上儲存的目錄中進行測試就可以了,完成後只需使用 Ctrl+C 結束即可。對於我使用的 Seagate SMR 硬碟,完全刷新快取似乎需要大約半個小時。在此期間,驅動器聽起來像是正在寫入數據,即使電腦沒有向驅動器寫入任何內容。不幸的是,我不知道有什麼方法可以查詢磁碟機的刷新狀態。要么聽一下駕駛聲音,要么只是等待足夠長的時間。

例如:希捷 SMR 硬碟似乎很樂意在 SMR 刷新過程中進入睡眠狀態(可能是為了假裝對使用者完全透明),並在將來再次喚醒時繼續刷新。這是透明的,即使斷電也不會發生資料損壞。然而,如果您不時寫入大量數據,然後立即將驅動器置於睡眠狀態(例如,使用此類驅動器作為備份驅動器,在備份邏輯完成後立即卸載並斷開連接),這會導致效能非常差。下次您進行另一個備份時,新備份將與先前備份的 SMR 刷新競爭,並且效能將非常低。如果您保持此類驅動器始終通電,並且一次最多只能寫入 10 GB,那麼它將與普通 PMR HDD 驅動器一樣快或更快。

答案2

現代版本sg3_utils有一個命令 sg_rep_zones,它將詢問驅動器並詢問其 SMR 配置。如果您的發行版沒有最新版本,您可能需要手動建立它。

這可以明確地告訴您驅動器是否SMR。

但是,即使命令報告Report zones command not supported,也不能確定驅動器不是SMR。一些 SMR 驅動器使用「驅動器管理」SMR,這意味著驅動器可以神奇地處理所有事情,您無需擔心。在這種情況下,它不一定支援報告區域命令。

另一件要嘗試的事情 - 看看驅動器是否支援“unmap”或“trim”命令 - sg_unmap,也是 sg3_utils 的一部分。非 SMR 驅動器不太可能支援該命令(但同樣,並非所有 SMR 驅動器都支援它)。

相關內容