我有一个写保护的 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
Run Code Online (Sandbox Code Playgroud)
如何关闭写保护?
我试过的
fdisk|chmod附加信息
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
Run Code Online (Sandbox Code Playgroud)
fdisk -l
Device boot. Start End Blocks Id System
/dev/sdb1 32 8060927 4030448 b W95 FAT32
Run Code Online (Sandbox Code Playgroud)
umount /dev/sdb1
mkfs -t vfat /dev/sdb1
mkfs.vfat 3.0.9 (31 Jan 2010)
mkfs.vfat: unable to open /dev/sdb1
Run Code Online (Sandbox Code Playgroud)
小智 93
要关闭磁盘设备的写保护,我们使用低级系统实用程序 hdparm,如下所示:
sudo hdparm -r0 /dev/sdb
Run Code Online (Sandbox Code Playgroud)
我们假设这/dev/sdb是我们正在处理的物理磁盘设备。如果设备有以只读方式挂载的分区,您应该将它们重新挂载为可读写,以便向它们写入数据。
希望有帮助。
Chu*_*k R 36
在研究了您的问题后,这似乎是某些品牌的 USB 闪存驱动器(一些较旧的三星、金士顿型号)的一个并不少见的问题,它基本上会无缘无故地“胡说八道”。人们曾尝试打开它们并跳过两条引线(可能是从一个片状开关?)无济于事。如果你还有这个驱动器并且它还在保修期内,我会把它退回并更换。
我不想告诉你这个坏消息 =\ 但在这种情况下你似乎不太走运,因为我读到的所有内容都指向硬件故障。
2016 年 5 月 27 日编辑:我个人遇到了一个问题,最近我的闪存驱动器脱落。就我而言,这是一个 Corsair Flash Voyager 128GB,它开始显着降低我的速度。虽然它没有显示这里提到的症状,但它偶尔不会安装并显示为“硅电源”设备。这是由于驱动器累积了大量坏扇区并进入诊断/编程模式的结果。由于这是我更受欢迎的答案之一,而且这也属于“闪存驱动器故障”的范畴,我想我会将它包含在这里以供参考。
更新 2:关于 Corsair Flash Voyager,我把我的送去进行 RMA,结果我的第二个以同样的方式失败了。问题实际上是机械问题。滑动机构似乎对PCB施加了少量压力。通常,这不会对设备的正常使用寿命造成问题。但是对于这个特殊的模型,它的焊点似乎很弱,滑动动作产生的压力会加剧——导致裂纹接头氧化并最终失效。我没有再做一次 RMA,而是将事情掌握在自己手中。我打开外壳,刮掉一些塑料外壳,给 PCB 一些摆动空间,然后回流 NAND 芯片以修复损坏的焊点。直到今天它都很好用!
Rin*_*ail 26
使用fdisk -l定位驱动器,即:/dev/sdc1
现在
umount /dev/sdc1
Run Code Online (Sandbox Code Playgroud)
最后,重新格式化闪存驱动器
sudo mkfs -t vfat /dev/sdc1
我发现这又快又容易。在尝试格式化之前,请务必卸载驱动器。
and*_*ien 21
Angel 的回答很好,但实际的命令对我来说并不那么容易。这是有效的:插入卡(我的是一张带有手动写保护开关的 SD 卡,但开关是关闭的,它可以在 Windows 机器上写入)。Ubuntu 自动将其挂载在 /media/andrew/6AB0-1FD91 上,dmesg 显示该分区为 /dev/sdb1。
卸载它,并使其可写
sudo umount /dev/sdb1
sudo hdparm -r0 /dev/sdb
Run Code Online (Sandbox Code Playgroud)
创建一个新的挂载点并将其挂载在那里(/etc/passwd 中我的用户 ID 为 1000)
sudo mkdir /media/andrew/temp
sudo mount -o uid=1000 /dev/sdb1 /media/andrew/temp
Run Code Online (Sandbox Code Playgroud)
它仍然会抱怨它是只读的。我不知道为什么我必须在安装之前和之后更改此标志,但这是对我有用的唯一方法。再次将其设置为可写,并在同一位置重新安装
sudo hdparm -r0 /dev/sdb1
sudo mount -o remount,rw /dev/sdb1
Run Code Online (Sandbox Code Playgroud)
现在我可以以普通用户的身份写入磁盘。我对它非常小心,以防它实际上失败了,但是这些命令使我能够完成我正在做的事情。
kri*_*ous 18
到目前为止提供的这些答案都不正确。
要真正使其工作,您可以使用 USB quirks 设置覆盖宣布其为只读的 USB 磁盘的检测。这是它的工作原理。
1)插入USB设备并执行lsusb,例如:
$ lsusb
Bus 002 Device 012: ID 0781:5583 SanDisk Corp.
Run Code Online (Sandbox Code Playgroud)
2) 记下冒号之间的那两个代码(称为idVendor和idProduct)。拔下 USB 设备。
3)删除usb_storage内核模块(假设它被编译为一个模块)
$ sudo modprobe -r $(lsmod | sed -n 's:,: :g ; s,^usb_storage[ 0-9]*,,p') usb_storage
Run Code Online (Sandbox Code Playgroud)
4) 现在我们将使用 quirks 模式设置将模块放回原处,以覆盖设备只写标志的检测。
从来自 v4.19 的source/drivers/usb/storage/usb.c# L572 中,您可以看到我们正在寻找的 quirks 模式设置是w. 下面是我们将如何重新加载内核模块:
$ sudo modprobe usb_storage quirks=0781:5583:w
Run Code Online (Sandbox Code Playgroud)
将冒号之间的数字替换为您在上述步骤 (1) 中看到的数字。
5) 重新插入 USB 存储设备。我们现在可以使用 dmesg 确认这有效:
同样在发出 mount 命令后,您将看到:
/dev/sdb1 on /usb type ext4 (rw,relatime)
现在马上把你的东西从那个磁盘上拿下来,它失败了。