Linux使用hdparm操作硬盘
硬盘加密
检查硬盘状态
首先用 hdparm -I /dev/sdb
命令检查是否满足硬盘加密需求:
[root@localhost ~]# hdparm -I /dev/sdb
/dev/sdb:
ATA device, with non-removable media
...
Security:
Master password revision code = 65534
supported
not enabled
not locked
not frozen
not expired: security count
not supported: enhanced erase
more than 508min for SECURITY ERASE UNIT.
Security
部分必须为 supported
,而且必须为 not frozen
状态(如果结果是 frozen
,有可能是主机的 BIOS 禁止发送 ATA Security Erase
等指令,需要在 BIOS 中打开这个限制)。
提示
如果主板 BIOS 设置中 SATA 模式不是 AHCI,而是 IDE 或者 Compatible 兼容模式,那么硬盘很可能为
frozen
状态。对于 SATA 模式正确却仍然为
frozen
状态的磁盘,可以运行:echo -n mem > /sys/power/state
使系统进入睡眠模式,然后重新唤醒,一般可以恢复为
not frozen
状态。
enabled
表示是否已经设定了使用者密码,locked
表示是否为锁定状态,另外对于 SSD 还有 supported: enhanced erase
状态。
设置密码
[root@localhost ~]# hdparm --user-master u --security-set-pass PASS /dev/sdb
hdparm
的 --user-master
参数可以指定为 u
(用户密码) 或者 m
(管理密码),默认为用户密码。
解锁硬盘
[root@localhost ~]# hdparm --user-master u --security-unlock PASS /dev/sdb
security_password="PASS"
/dev/sdb:
Issuing SECURITY_UNLOCK command, password="PASS", user=user
清除密码
[root@localhost ~]# hdparm --security-disable PASS /dev/sdb
security_password="PASS"
/dev/sdb:
Issuing SECURITY_DISABLE command, password="PASS", user=user
安全擦除
注意
安全擦除操作会删除硬盘上所有的数据,而且这些数据不能被恢复。
如果你不幸碰到了的操作系统内核 bug 或 SSD 硬盘的 firmware bug,可能会导致硬盘不可写或操作系统 crash。
[root@localhost ~]# time hdparm --user-master u --security-erase PASS /dev/sdb
security_password="PASS"
/dev/sdb:
Issuing SECURITY_ERASE command, password="PASS", user=user
real 0m55.408s
user 0m0.000s
sys 0m0.000s
另外安全擦除操作对于非 SSD 硬盘来说可能要花费很长时间,如果硬盘支持 enhanced erase
那也可以使用 --security-erase-enhanced
参数来进行安全擦除。
修改硬盘容量
首先确认硬盘当前的容量(以扇区为单位):
~ # hdparm -N /dev/sdb
/dev/sdb:
max sectors = 1953525168/1953525168, HPA is disabled
然后修改为需要的新容量:
~ # hdparm -N p1465149168 --yes-i-know-what-i-am-doing /dev/sdb
/dev/sdb:
setting max visible sectors to 1465149168 (permanent)
max sectors = 1465149168/1953525168, HPA is enabled
此时能看到修改后的容量和实际容量值,参数中的 p
表示 permanent,否则重启之后容量就会恢复。
设置硬盘缓存
查看硬盘当前写缓存是否启用:
~ # hdparm -W /dev/sdb
/dev/sdb:
write-caching = 1 (on)
关闭及打开硬盘写缓存:
~ # hdparm -W 0 /dev/sdb
~ # hdparm -W 1 /dev/sdb
SCSI 硬盘缓存
SCSI 或者 SAS 等硬盘使用 hdparm
命令很可能会失败,可以使用 sdparm
命令设置缓存。
查看写缓存是否启用:
~ # sdparm --get=WCE /dev/sdb
/dev/sdb: SEAGATE ST6000NM0034 E005
WCE 1 [cha: y, def: 1, sav: 0]
关闭及打开 SCSI 硬盘写缓存:
~ # sdparm --clear=WCE /dev/sdb
~ # sdparm --set=WCE /dev/sdb
如果需要保存设置可以增加 --save
(-S
)参数:
~ # sdparm --clear=WCE --save /dev/sdb