USB关闭写保护

USB关闭写保护

我有一个受写保护的 USB:

dmesg | tail

[10098.126089] sd 7:0:0:0: [sdb] Write Protect is on
[10098.126098] sd 7:0:0:0: [sdb] Mode Sense: 23 00 80 00
[10098.126779] sd 7:0:0:0: [sdb] No Caching mode page present
[10098.126788] sd 7:0:0:0: [sdb] Assuming drive cache: write through
[10098.131418] sd 7:0:0:0: [sdb] No Caching mode page present
[10098.131425] sd 7:0:0:0: [sdb] Assuming drive cache: write through
[10098.133335]  sdb: sdb1
[10098.135509] sd 7:0:0:0: [sdb] No Caching mode page present
[10098.135515] sd 7:0:0:0: [sdb] Assuming drive cache: write through
[10098.135521] sd 7:0:0:0: [sdb] Attached SCSI removable disk

我怎样才能关闭写保护?

我尝试过的方法

  1. 检查是否有硬件开关 - 没有
  2. 尝试在 Windows 和 Linux 上格式化它(也通过终端)
  3. 已試過fdisk|chmod
  4. 尝试使用 Ubuntu 软件中心的几个工具来修复这个问题
  5. 使用谷歌并看到大约 10,000 条关于此问题的讨论,但从未得到解决

附加信息

fsck -n /dev/sdb1

fsck from util-linux 2.19.1
dosfsck 3.0.9, 31 Jan 2010, FAT32, LFN
There are differences between boot sector and its backup.
Differences: (offset:original/backup)
  65:01/00
  Not automatically fixing this.
Free cluster summary wrong (968250 vs. really 911911)
  Auto-correcting.
Leaving file system unchanged.
/dev/sdb1: 50 files, 93653/1005564 clusters

fdisk -l

   Device  boot.   Start        End      Blocks   Id  System
/dev/sdb1            32     8060927     4030448    b  W95 FAT32

umount /dev/sdb1

mkfs -t vfat /dev/sdb1

mkfs.vfat 3.0.9 (31 Jan 2010)
mkfs.vfat: unable to open /dev/sdb1

答案1

要关闭磁盘设备的写保护,我们使用低级系统实用程序 hdparm,如下所示:

sudo apt-get install hdparm    
sudo hdparm -r0 /dev/sdb

我们假设这/dev/sdb是正在处理的物理磁盘设备。如果该设备有以只读方式安装的分区,则应将其重新安装为读写方式,以便将数据写入其中。

希望有所帮助。

答案2

研究完您的问题后,发现这似乎是某些品牌的 USB 闪存盘(一些较旧的三星、金士顿型号)的一个不太罕见的问题,它们基本上会无缘无故地“出故障”。人们曾尝试打开它们并跳过两根导线(可能是从一个不稳定的开关?),但无济于事。如果您还有这个驱动器并且它仍在保修期内,我会将其退回并更换。

我不想向您透露这个坏消息=\但看起来您在这种情况下运气不佳,因为我读到的所有内容都指向硬件故障。

编辑于 2016 年 5 月 27 日:我最近遇到了一个闪存驱动器出现问题的问题。就我而言,这是一个 Corsair Flash Voyager 128GB,它开始在我身上大幅减速。虽然它没有出现此处提到的症状,但它偶尔无法安装并显示为“Silicon Power”设备。这是因为驱动器积累了大量坏扇区并进入诊断/编程模式。由于这是我最受欢迎的答案之一,并且也属于“故障闪存驱动器”类别,所以我想我会将其包含在此处以供参考。

更新 2:关于那台 Corsair Flash Voyager,我将其寄去进行 RMA,结果第二台也以同样的方式出故障了。问题实际上是机械的。滑动机制似乎对 PCB 施加了少量压力。通常,这不会对设备的正常使用寿命造成问题。但对于这个特定型号,它的焊点似乎很弱,滑动动作产生的压力加剧了焊点的脆弱性,导致破裂的焊点氧化并最终失效。我没有再进行 RMA,而是自己动手解决问题。我打开外壳,刮掉一些塑料外壳,为 PCB 留出一些活动空间,然后重新焊接 NAND 芯片以修复断裂的焊点。它到今天都运行良好!

答案3

到目前为止提供的这些答案都不正确。

要真正实现这一点,您可以使用 USB 怪癖设置覆盖 USB 磁盘的只读检测。下面是它的工作原理。

  1. 插入 USB 设备并执行以下lsusb操作:

    $ lsusb
    Bus 002 Device 012: ID 0781:5583 SanDisk Corp. 
    
  2. 记下ID冒号后面和中间的两个代码(称为 和idVendoridProduct。拔下 USB 设备。

  3. 删除usb_storage内核模块(假设它被编译为模块)

    $ sudo modprobe -r $(lsmod | sed -n 's:,: :g ; s,^usb_storage[ 0-9]*,,p') usb_storage
    
  4. 现在我们将使用怪癖模式设置将模块放回去,以覆盖对设备的只写标志的检测。

    源/驱动程序/usb/存储/usb.c#L572从 v4.19 中可以看到,我们正在寻找的怪癖模式设置是w。下面是我们如何重新加载内核模块:

    $ sudo modprobe usb_storage quirks=0781:5583:w
    

    将冒号之间的数字替换为您在上面的步骤(1)中看到的数字。

  5. 重新插入 USB 存储设备。我们现在可以确认dmesg这有效:

    前: 损坏,仅可写入

    之后: 工作读/写

    发出 mount 命令后你还将看到:

    /dev/sdb1 on /usb type ext4 (rw,relatime)
    

现在立即把你的东西从那个磁盘上拿下来,它坏了。

答案4

Angel 的回答很好,但实际的命令对我来说并不那么简单。这是有效的方法:插入卡(我的是一张 SD 卡,上面有一个手动写保护开关,但开关已关闭,在 Windows 机器上是可写的)。Ubuntu 自动将其安装在 /media/andrew/6AB0-1FD91 上,dmesg 显示分区为 /dev/sdb1。

卸载它,并使其可写

sudo umount /dev/sdb1
sudo hdparm -r0 /dev/sdb

创建一个新的挂载点并将其挂载在那里(我的 /etc/passwd 中的用户 ID 是 1000)

sudo mkdir /media/andrew/temp
sudo mount -o uid=1000 /dev/sdb1 /media/andrew/temp

它仍然会抱怨它是只读的。我不知道为什么我必须在安装之前和之后更改此标志,但这对我来说是唯一有效的方法。再次将其设置为可写,然后将其重新安装在同一位置

sudo hdparm -r0 /dev/sdb1
sudo mount -o remount,rw /dev/sdb1

现在我可以以普通用户的身份写入磁盘。我非常小心,以防它真的出现故障,但这些命令让我完成了我正在做的事情。

相关内容