You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何判断Linux磁盘是否为只读模式?含SATA DOM硬件开关检测方法

检测SATA DOM硬件只读开关的方法

绝对可以通过/sys/class/scsi_disk/路径下的属性来检测硬件只读开关状态!这其实是这类硬件锁最可靠的软件检测方式之一——毕竟硬件锁是直接作用于SATA控制器层面的,和文件系统的只读挂载完全是两回事。

具体步骤:

  1. 定位你的DOM对应的scsi_disk节点
    首先得找到磁盘对应的SCSI设备路径。比如你的磁盘是/dev/sda,可以用udev快速定位:

    udevadm info --query=path --name=/dev/sda
    

    输出结果里会包含类似/sys/class/scsi_disk/0:0:0:0的路径,这就是你要找的节点。

    或者也可以通过块设备的符号链接追踪:

    ls -l /sys/block/sda
    

    链接目标里的scsi_deviceX:Y:Z:W对应的就是/sys/class/scsi_disk/X:Y:Z:W/

  2. 读取硬件只读状态
    进入对应的scsi_disk目录,读取readonly文件:

    cat /sys/class/scsi_disk/0:0:0:0/readonly
    
    • 返回1:硬件开关已切换到只读模式
    • 返回0:磁盘处于可读写状态

    划重点:这个readonly值是硬件层面的状态,和你是否把文件系统挂载成ro无关。哪怕你强行尝试挂载成rw,只要硬件锁是开的(返回1),挂载操作也会失败——而这个属性能直接反映硬件开关的真实状态。

为什么你之前用的工具没效果?

  • lsblkRO列:显示的是文件系统的挂载状态,不是硬件锁的状态。比如硬件锁了但没挂载,lsblk可能会显示0,这会误导你。
  • smartctl:主要负责读取磁盘的SMART健康数据,绝大多数DOM的硬件只读开关不会通过SMART协议暴露状态,所以查不到很正常。
  • parted:只能识别分区表和文件系统信息,完全不涉及SATA控制器层面的硬件锁状态。

额外提示:

如果切换硬件开关后,readonly的值没更新,可能需要重新扫描SCSI总线让系统识别状态变化:

echo "1" > /sys/class/scsi_device/0:0:0:0/device/rescan

把命令里的0:0:0:0换成你对应的scsi_device编号就行。

内容的提问来源于stack exchange,提问作者Rusty Weber

火山引擎 最新活动