【问题标题】:programmatically detect SD card write protect以编程方式检测 SD 卡写保护
【发布时间】:2012-01-10 02:07:14
【问题描述】:

在过去的软盘时代,如果您启用软盘的写保护,DOS 会很高兴地告诉您,您不能对其进行写操作。现在我们有了可以保存数千张软盘内容的 SD 卡,而且我们仍然有写保护 - 有时它很方便。但是没有人能告诉我我不能给它写信,至少在 Linux 上是这样。我有一个可爱的脚本,可以按照我喜欢的方式对 SD 卡进行分区和格式化。我花了 1/2 小时调试才发现 SD 卡被写保护了。

那么问题来了,有没有办法让软件检测到这种情况?

谢谢,

【问题讨论】:

    标签: linux sd-card


    【解决方案1】:

    驱动知道卡何时被写保护,当你通过命令行挂载它时它实际上会发出警告:

    # mount /dev/sdc1 /media/flash
    mount: block device /dev/sdc1 is write-protected, mounting read-only
    

    如果您想在设备级别自行检查,可以使用hdparm command查询磁盘设备的只读状态,一般包括SD卡和USB闪存驱动器。这个程序应该在大多数 GNU/Linux 发行版中都可用,通常在一个名为“hdparm”的包中。

    如果您不是root,请务必指定hdparm 命令的完整路径;当然,这假设您已读取卡上的权限。

    例如:我的SD卡插入,检测为/dev/sdc,写保护标签在解锁

    $ /sbin/hdparm -r /dev/sdc
    
    /dev/sdc:
     readonly      =  0 (off)
    

    当我将写保护选项卡滑动到锁定时,重新插入卡,然后再次运行命令:

    $ /sbin/hdparm -r /dev/sdc
    
    /dev/sdc:
     readonly      =  1 (on)
    

    如果您想在 shell 脚本中执行此操作,可以尝试以下操作:

    READONLY=`/sbin/hdparm -r /dev/sdc 2>&1 | sed -n 's/^.*= *\([01]\) .*$/\1/p'`
    if [ "$READONLY" = "0" ]
    then
        echo Card is writable.
    else
        echo Card is not writable.
    fi
    

    注意:如果您更喜欢在 C 中执行此操作,您可以尝试:

    • 以写入模式打开设备文件并查看它是否失败并显示errnoEROFS只读文件系统),或者...
    • 以读取方式打开设备文件,然后发出ioctl()命名为BLKROGET,并检查结果值是否非零;这就是hdparm 的工作方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-17
      • 2016-04-15
      • 2010-11-16
      • 2014-11-26
      • 2012-09-11
      • 2019-12-17
      • 2016-03-15
      • 2013-02-05
      相关资源
      最近更新 更多