为什么我的闪存驱动器变成“只读”并且(如何)修复它?

Bob*_*Bob 53 windows-7 filesystem-corruption usb-flash-drive

我有一个全新的闪存驱动器(一周前),它已被 Windows、Kubuntu 和可引导分区程序标记为只读。为什么会这样?可以修复吗?如果是,我该如何解决这个问题?


问题

首先,这个驱动器是新的。它肯定没有被使用到足以因正常磨损而死亡,尽管我不会低估有缺陷的组件。

驱动器本身以某种方式锁定在只读状态。Windows 磁盘管理:

磁盘管理屏幕截图

磁盘部分:

Generic Flash Disk USB Device
Disk ID: 33FA33FA
Type   : USB
Status : Online
Path   : 0
Target : 0
LUN ID : 0
Location Path : UNAVAILABLE
Current Read-only State : Yes
Read-only  : No
Boot Disk  : No
Pagefile Disk  : No
Hibernation File Disk  : No
Crashdump Disk  : No
Clustered Disk  : No
Run Code Online (Sandbox Code Playgroud)

真正让我困惑的是Current Read-only State : YesRead-only : No

尝试的解决方案

到目前为止,我已经尝试过:

  • 在 Windows 中对其进行格式化(在磁盘管理中,右键单击时格式选项会变灰)。

  • 磁盘部分清洁 ( CLEAN - Clear the configuration information, or all information, off the disk.):

    DISKPART> clean
    
    DiskPart has encountered an error: The media is write protected.
    See the System Event Log for more information.
    
    Run Code Online (Sandbox Code Playgroud)

    事件日志中没有任何内容。

  • Windows 命令行格式

    >format G:
    Insert new disk for drive G:
    and press ENTER when ready...
    The type of the file system is FAT32.
    Verifying 7740M
    Cannot format.  This volume is write protected.
    
    Run Code Online (Sandbox Code Playgroud)
  • Windows chkdsk:详见下文

  • Kubuntu fsck(通过 VirtualBox USB 直通):详见下文

  • Acronis True Image 格式化、转换为 GPT、销毁和重建 MBR,基本上任何事情:失败(无法写入 MBR)

细节(和一个好故事)

背景

这是一个全新的通用 8GB 闪存驱动器,我想用它来创建多引导闪存驱动器。它被格式化为 FAT32,虽然奇怪的是比我遇到的大多数 8 GB 闪存驱动器大一点。大约 127MB 被 Windows 列为“已使用”。我从来没有发现原因。最终可用空间大约是我通常期望的 8GB 驱动器(大约 7.4 GIBIbytes)。

我已经抛出了相当多的 Linux 发行版,以及一份 Hiren 的副本。他们都会完美启动。他们穿上了YUMI

当我尝试打开 Knoppix DVD 时,YUMI 在其引导命令中添加了一个奇怪的视频选项,这导致 Knoppix 在 X 上以黑屏引导。s tty1 到 6 仍然作为纯文本界面工作。

几天后,我花了一些时间取消了那个奇怪的视频选项,使引导命令与 Knoppix 附带的命令相匹配。在尝试引导时,Knoppix 报告了某种形式的 LZMA 损坏。

导致当前问题

我在想 Knoppix 文件可能以某种方式损坏了,所以我尝试重新加载它。驱动器快满了(45MB 可用),所以我删除了一个也无法启动的通用 ISO。那很顺利。然后我通过 YUMI 来“卸载”Knoppix,即删除文件并从菜单中删除。首先是文件,然后成功清除了菜单。但是,可用空间停留在大约 700MB,与删除 Knoppix 之前相同。在旧的 Knoppix 文件夹中,有一个KNOPPIX无法删除的名为 0 字节的文件。

我尝试重新插入驱动器以删除此文件 - 没有安全删除,如果这有所作为(嘿,一切都是第一次)。运行标准 Windowschkdsk扫描,未发现/r/f报告错误。运行/r只是让它卡住了。

我决定fsck试一试,所以我加载了我的 Kubuntu VM 并使用 VirtualBox 的 USB 2.0 passthrough 将驱动器连接到它。我umount编辑了它 ( /dev/sda1) 并运行了 fsck。There are differences between boot sector and its backup.我选择了No action。它告诉我 FAT 不同,并要求我选择第一个或第二个 FAT。无论我选择了哪个,我都会收到通知Free cluster summary wrong。如果我选择Correct,它会给出不正确的文件名列表。为了尝试修复某些东西,至少,我使用-p选项运行它。在修复文件中途,虚拟机冻结了 - 我在大约十分钟后结束了它的过程。

原因?

我的下一个尝试是再次使用 YUMI 来重建整个驱动器。我使用 YUMI 的内置重新格式化(到 FAT32)选项并安装了 Kubuntu ISO (700MB)。格式是成功的,然而,Kubuntu 的提取和副本(YUMI 使用 7zip 二进制文件)在大约 60% 完成时冻结。等了大约 15 分钟后(比上次 3.5GB Knoppix ISO 占用的时间长),我把驱动器拔了出来。此时驱动器已经格式化,SYSLINUX 已经安装,等待解压 ISO 和修改启动菜单。

重新插入它,它正常出现 - 但是,任何写入操作都会失败。磁盘管理报告它为只读。重新连接时,它会正常出现,但写入操作会导致它再次变为只读。经过几次尝试,它开始在插入时变为只读。

尝试修复

这是我通过上面列出的尝试尝试重新格式化的时候,以防格式错误。然而,即使在可引导磁盘上也无法这样做,这表明出现了更严重的问题。chkdsk现在报告没有错误,fsck仍然报告MBR不一致,但现在总是在告诉我FAT不同后自动选择第一个FAT。之后它仍然这样做Free cluster summary wrong。我不能再运行了-p,因为它现在被标记为只读。在第一次尝试时,它还设法以某种方式损坏了我的 VM 的磁盘(是的,我确定我选择了 sda,它映射到 7.4GB 驱动器 - 我进行了三次检查)。感谢上帝提供快照?


我只是没有想法。在我没有经验的头脑看来,驱动器固件中的某些东西以某种方式将其设置为“永久”只读 - 有没有办法重置它?考虑到我已经重新格式化了两次,我并不特别关心保留数据。

此外,让我留在 Windows 中的修复更好;它降低了我不小心损坏主硬盘的风险。


更新 1:

出于好奇,我拆开了驱动器。

电路板照片

如您所见,没有明显的写保护开关。另一边有一个 IC,上面有 ALCOR 品牌,标有 AU6989HL,如果这很重要的话。如果似乎没有办法解决这个问题,我可能会拉出(粘住)卡并将其放入读卡器中,以检查是卡还是控制器坏了。


更新 2:

我已经拔掉了卡,Windows 现在检测到该驱动器是读卡器。卡上的触点好像没用过,卡本身有几排孔。将它放入读卡器只能检测到大约 30MB 的总容量,RAW。可能是原始驱动器错误地将卡报告为有故障(就像打开了真正的 SD 卡的写保护)或某处接触不良。

如果不出意外,我现在有一个备用的 8GB Micro SD 卡……一旦我弄清楚如何将其格式化为 8GB。这似乎是不可能的(Windows、Partedmagic dd、DBAN...不,仍然是 30MB)。呃,好吧。


更新 3

我还有一些。今天第二个同样失败(只读)。在其余的中,有两个被检测为空读卡器/未格式化的驱动器,这取决于震动(接触不良?)。一个被检测为 1/3 满,并且有一个奇怪的卷名。

H2testw 结果(在我拥有的最后一个完全可用的结果上!):

Warning: Only 7762 of 7812 MByte tested.
The media is likely to be defective.
7.5 GByte OK (15896472 sectors)
52 KByte DATA LOST (104 sectors)
Details:0 KByte overwritten (0 sectors)
0 KByte slightly changed (< 8 bit/sector, 0 sectors)
52 KByte corrupted (104 sectors)
0 KByte aliased memory (0 sectors)
First error at offset: 0x0000000186003000
Expected: 0x0000000186003000
Found: 0x00200800c40c3061
H2testw version 1.3
Writing speed: 3.95 MByte/s
Reading speed: 14.0 MByte/s
H2testw v1.4
Run Code Online (Sandbox Code Playgroud)

虽然这有点令人担忧,但显然这些驱动器确实具有接近 8GB 的​​容量,这一点已通过通常成功用于检测假闪存驱动器的工具验证。使用 Micro SD 卡而不是标记的闪存模块几乎不可能重新刷新驱动器,因为 Alcor 的驱动器刷新工具将内存模型作为参数。我想我会把所有的东西都扔掉。

小智 22

您可以尝试使用芯片制造商 Alcor 的工具。你可以通过谷歌找到它,名字是“ AlcorMP_5T2F_6T2F_2011-11-10.02”。

在那里,您首先打开 LoadDriver.exe 并输入您的 VID 和 PID(您可以使用 ChipGenius 或使用 Linux 并输入“lsusb -v”来找出这些值),然后单击安装。对于我的棍子,值是058F, 6387

然后运行 ​​AlcorMP.exe,您的设备应在其中列出。单击它左侧的按钮,然后开始在您的棒上进行低级格式化和坏块扫描。

  • 我很佩服。这是我在更新 3 中提到的工具的更新版本(大约更新了 4 年);它做到了!对其他人的警告:这将擦除驱动器,因此在运行它之前尝试复制所有可以复制的内容(毕竟它是固件闪存!)。VID 和 PID 可以通过 `Device Manager` =&gt; `Universal Serial Bus Controllers` =&gt; `USB Mass Storage Device`(可能是不同的名称)=&gt; `Properties` =&gt; `Details` =&gt; ` 在 Windows 上找到硬件 ID`。哦,谢谢! (4认同)
  • 谷歌对该 exe 的结果非常粗略。有可靠的来源吗?该公司是 http://www.alcormicro.com/? (3认同)

Phi*_*ent 11

我个人认为卡和它的哑弹接触不良。立即备份所有内容。

我会使用 linux 的 dd 实用程序来重置设备。只读状态可能在设备的引导扇区中,而 fsck 和 chkdsk 是文件系统级别的检查,所以不会做太多。

启动到您的 ubuntu ISO 并尝试:

dd if=/dev/zero of=/dev/sdx bs=1M
Run Code Online (Sandbox Code Playgroud)

将 /dev/sdx 替换为与您的 USB 驱动器对应的设备

/dev/sdx1 是分区,而 /dev/sdx 是整个驱动器。您需要确保已卸载分区才能实现这一点。如果由于只读驱动器而无法添加驱动器,我会将其归结为硬件故障,您可能会在 dmesg 中看到。