USB关闭写保护


92

我有一个受写保护的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. 使用过Google,已经看到约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

7
由于写保护,我无法格式化它。
noob 2012年

2
@micha-它是哪种USB设备-显然您已经检查了它是否具有硬件开关?如果尝试安装它有任何错误?sudo mount /dev/sdb1 -v
fossfreedom

1
米夏,还算公平。您是否尝试过运行efsck或使用Ubuntu的Disk Utility检查闪存盘的运行状况?如果一切正常,然后突然停止工作,则可能是硬件故障。
kingmilo 2012年

1
@kingmilo e2fsckBad magic number in super-block while trying to open /dev/sdb1 SuperBlock is not readable.
noob

1
@micha-很好,尽管不幸,但这并不表示它没有问题。实际上,当存储设备出现故障时(在不同的故障阶段),它们似乎可以正常工作。我认为,对这个问题你应该问的小额捐款的所有活动的驱动来代替,它会更容易😜
kingmilo

Answers:


81

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

sudo hdparm -r0 /dev/sdb

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

希望能有所帮助。


你是我的英雄。在执行此魔术魔术命令后,我在哪里可以了解到什么情况?
Marcos Modenesi

3
您可以通过在此处键入该命令来找到解释> explainshell.com
bagustris

75
它显示,readonly = 0 (off)但仍然无法编写或格式化。
shyammakwana.me,2016年

1
@OP我和你一样,那就是:sdxc卡安装在任何计算机上都是只读的;hdparm -r会显示“ 1-开”,然后在解锁后显示r0:“ 0-关”,但无论如何都以只读方式安装。但是将我的SanDisk sd卡安装在另一个适配器中,我应该将其rw安装。事实证明,我的两个microSD-to-SD适配器在两个连接器之间有一个断针。无论我做什么,这两个都将装载为只读。Kuddos对@Angel_Genchev的回答最多。
tuk0z

2
@lliseil很可能是通过插入的卡(通常是卡上的卡舌)按压了读取器的写保护开关,但是该开关(不是卡舌)可能会弯曲并卡在上面。您可以通过切断写保护开关针来固定sdcard读卡器,该针与卡上的锁定卡舌物理接触。当阅读器中的开关打开时,写保护关闭;当关闭时(通过按下卡上的卡舌,将其关闭),写保护打开。卸下一个或两个开关金属臂将永久禁用读取器上的写保护。
Hydranix

31

在研究了您的问题之后,对于某些品牌的USB闪存驱动器(某些较旧的三星,金士顿型号)来说,这似乎不是一个太罕见的问题,它实际上只是出于未知原因而“淘汰”。人们试图打开它们并跳过两条引线(也许是从片状的开关?)无济于事。如果您仍然有此驱动器并且仍在保修期内,我将把它退回并获得更换。

我不愿意向您透露这个坏消息= \,但是在这种情况下,您似乎不走运,因为我阅读的所有内容都指向硬件故障。

编辑2016年5月27日:我个人遇到了一个问题,因为闪存驱动器最近掉落在我身上。以我为例,这是Corsair Flash Voyager 128GB,开始对我造成极大的影响。虽然它没有显示此处指出的症状,但有时也不会挂载并显示为“ Silicon Power”设备。这是由于驱动器产生了大量坏扇区并进入诊断/编程模式的结果。由于这是我比较受欢迎的答案之一,并且也属于“闪存驱动器故障”类别,因此,我想在此将其包括在内以供参考。


5
@admins:我想知道是否允许这种类型的答案:)
Tachyons,2012年

7
@AboobackerMk如果是答案,那么就是答案。:)
jrg

4
@Tachyons“是否允许这种类型的答案?” 一直试图抹黑别人的问题或答案的stackexchange上的人怎么办?这个答案显然是有效的答案。出于jrg说的原因。
GoProCameraByGoPro 2015年

@GoProCameraByGoPro已有3年的评论,我关注的并不是问题的答案。和jrg已经回答了我的问题:-)
Tachyons

@Tachyons我正在尽我的职责在这里对stackexchange的自称进行质疑。如果我有数据,我将研究那些人的人口趋势,而我可能会忽略它,但是现在我不得不问他们我所看到的问题。
GoProCameraByGoPro 2015年

20

使用fdisk -l找到驱动器,即:/ dev / sdc1

现在

umount /dev/sdc1

最后,重新格式化闪存驱动器

sudo mkfs -t vfat /dev/sdc1

我发现这很容易。尝试格式化之前,请确保先拆开驱动器。


2
sudo mkfs -t vfat / dev / sdc1>大多数博客都这么说,但是人们说它不起作用,让我们看看它是否起作用。
一零

8
未安装...但是mkfs.vfat 3.0.9 (31 Jan 2010) mkfs.vfat: unable to open /dev/sdb1
noob 2012年

它对我有用,只需要使用-I使其成为一个大分区,就可以使用/ dev / sdc代替/ dev / sdc1。
mchid 2015年

我尝试了其他所有方法(hdparm -r0, blockdev --setrw, remount,rw),但除了此以外,没有其他解决方法!
伊曼·米尔扎德

1
它说mkfs.vfat: unable to open /dev/sdc: Read-only file system
Shayan

14

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

现在,我可以以普通用户身份写入磁盘。如果它实际上失败了,我会非常小心,但是这些命令使我可以完成自己的工作。


注意:我的卡实际上出了故障(Ubuntu将其安装为只读,但是我的相机很高兴将其写入)。几个月后,它正在损坏文件-因此尽管这可以正常工作,但要小心!
安德鲁·洛里安(Andrew lorien)

我尝试了stpes的获取...。#sudo mount -o uid = 1000 / dev / sdc1 / mnt /只能以只读方式打开'/ dev / sdc1'磁盘包含不干净的文件系统(0,0)。Windows上没有安全关闭文件系统。定影。
Ashish Karpe

1
这对我有用,上面没有其他...
Pierre

1
在尝试了许多解决方案后,此方法奏效了。感谢@andrewlorien
Abk

6

到目前为止提供的所有答案均不正确。

要使其真正发挥作用,您可以使用USB quirks设置覆盖检测到的USB磁盘,并宣布其为只读。运作方式如下。

1)插入USB设备并执行lsusb,例如:

$ lsusb
Bus 002 Device 012: ID 0781:5583 SanDisk Corp. 

2)注意冒号之间的这两个代码(称为idVendoridProduct)。拔下USB设备。

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

$ sudo modprobe -r $(lsmod | sed -n 's:,: :g ; s,^usb_storage[ 0-9]*,,p') usb_storage

4)现在,我们将使用怪异模式设置将模块放回原处,以覆盖对设备的只写标志的检测。

v4.19中获取的source / drivers / usb / storage / usb.c# L572中,您可以看到我们正在寻找的quirks模式设置为w。这是我们重新加载内核模块的方法:

$ sudo modprobe usb_storage quirks=0781:5583:w

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

5)重新插入USB存储设备。我们现在可以通过dmesg确认它是否有效:

之前: 断只写

之后: 工作读/写

在发出安装命令后,您还将看到:

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

现在,立即将您的东西从该磁盘上移开,这是失败的。


非常感谢您的回答。我的USB读卡器中的CF卡出现了写保护,这是一个问题,这是我发现的唯一解决方法。奇怪的是其他CF卡工作正常。
njh

1

好吧,这真是个无赖。

我在这里和其他地方都尝试过一切,但没有任何效果。

在朋友的Windows笔记本电脑上将其格式化-现在可以正常工作。FFS!

叹了口气...(现在想知道是否可以在Mint桌面的Win 7 VM中修复它?)。


-1

插入记忆棒并开始分装。通过右上方的按钮选择它。如果要检查记忆棒,则应该很明显(大小是个很好的线索)。选择分区->卸载。

选择顶部的“设备”,然后选择“创建分区表”,并采用默认值,即msdos。

现在您应该能够创建一个新分区并将其格式化为f32。如果您做不到,那可能是破产。

高温超导


6
由于具有写保护,分区不可编辑。
noob 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.