Ubuntu 镜像后无法删除 Micro SD 卡的只读属性

Ubuntu 镜像后无法删除 Micro SD 卡的只读属性

我无法删除金士顿 32 GB Micro SD 卡的只读属性。我想清除整张卡。

他们给了我一台 Raspberry Pi 3、一张 32 GB 的 Micro SD 卡和一个 Echo 来玩。我拿到 Micro SD 卡时,它是全新的。我下载了一个全新的 Ubuntu 16.04 映像,并使用 Windows 10 上的 Etcher 格式化了卡。完成后,我插入了所有东西让 Raspberry 工作,却发现什么也没发生。我开始有点恐慌,心里想:“干得好,Scrat,你这个十足的白痴。你为什么不稍等片刻,然后去谷歌搜索一下教程呢?”

我谷歌了一下可能出了什么问题以及我应该做什么,结果发现不能随便将任何 Ubuntu 图像放在上面。它必须是创建者提供的图像之一(在我的情况下是 Ubuntu Mate 或 Raspbian)。

尝试使用 Windows 进行修复

当我尝试通过右键单击并通过 Windows 资源管理器重新格式化时,我遇到的第一件事是该卡处于只读模式。尝试在 Windows 资源管理器中访问它只显示了 EFI 目录,对此我并不感到惊讶。

我在网上找到的第一件事是有关卡上的开关/锁,但我的卡根本没有锁。卡本身没有锁,我用来读卡的 Robson Mini 读卡器也没有锁。

之后我试图回忆如何编辑磁盘。
请注意,我当时仍在使用 Windows 10,因为我必须从外部驱动器复制旧的 VM-Ware 和系统映像,但我不知道它们在哪里。

我打开命令行,运行 diskpart,然后通过以下方式列出所有磁盘

list disk

输出我的 931 GB HDD、119 GB SSD(安装了 Windows)和 29 GB Micro SD 卡:

数据夹 ### 状态 最大自由动态 GPT  
--------------- ------------- ------- ------- --- ---   
数据存储 0 在线 119 GB 0 B *  
数据夹 1 在线 931 GB 0 B *  
Datenträger 2 Online 29 GB 29 GB

根据我得到的信息,我知道 Datenträger 2 又名 Disk 2 是我想要编辑的卡,方法是:

select disk 2

到目前为止一切顺利。然后我想通过执行以下操作来删除只读属性:

attributes disk clear readonly

并且也成功执行了。

但当我尝试这样做时:

clean

我收到一条“硬件错误消息”(德语,这就是我不在此处复制它的原因,但它实际上只说了“硬件错误”)。尝试创建主分区或执行其他操作时也会出现该错误。

这时,我心里的恐慌开始越来越强烈。但我尽量保持冷静,因为我还有一些小妙招。

我尝试使用这些程序:EaseUS Partition Master、Etcher(再次)和 SD Card Formatter,但由于卡受到保护(只读、写保护),所有程序都失败了。

我还尝试使用注册表编辑来创建密钥(目前尚不存在)以更改 Windows 对存储设备的行为:

Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorageDevicePolicies

并创建一个新的关键字(DWORD WriteProtect)并将其设置为0,表示非只读。

尝试使用 Linux 进行修复

那也不起作用,我开始对 Windows 感到厌烦,所以我开始搜索我的外部驱动器并安装了 VM-Ware 并运行我在学校使用的 Ubuntu 16.04 虚拟机。

启动虚拟机后,我已经注意到 Ubuntu 比 Windows 更能帮我(至少我是这样认为的,因为我的 Linux 技能在这方面有限)。我看到的第一件事是桌面上一个链接到名为“Ubuntu 16.04.2 LTS amd64”的卡的图标,其中包含 Ubuntu 运行所需的各种内容如图所示

但这对我没有帮助。所以我继续启动终端并写道:

lsblk

确认该卡可见(sdb):

名称 MAJ:MIN RM 大小 RO 类型 安装点
sda 8:0 0 30G 0 磁盘
└─sda1 8:1 0 30G 0部分/
sdb 8:16 1 29,2G 1 个磁盘
─sdb1 8:17 1 1,5G 1 部分 /media/pose/Ubuntu 16.04.2 LTS amd64
└─sdb2 8:18 1 2,4M 1部分
sr0 11:0 1 1024M 0 rom  

但是 lsblk 不太精确,所以我还使用了我们在学校学到的命令:

fdisk -l

更精确一点的说法是:

磁盘 /dev/sda:30 GiB,32212254720 字节,62914560 个扇区
单位:扇区 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xa14a8cb2

设备启动开始结束扇区大小ID类型
/dev/sda1 2048 62914559 62912512 30G 83 Linux


磁盘 /dev/sdb:29,2 GiB,31306285056 字节,61145088 个扇区
单位:扇区 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x15e2543d

设备启动开始结束扇区大小ID类型
/dev/sdb1 * 0 3035519 3035520 1,5G 0 空
/dev/sdb2 14432 19295 4864 2,4M ef EFI (FAT-12/16/32)

我欣喜若狂,因为我觉得我终于破解了达芬奇密码之类的,所以我跑了

分区

立即打开并显示一条错误消息:

驱动程序描述符显示物理块大小为 2048 字节,但 Linux 显示为 512 字节。

我忽略了它,因为我认为这没什么大不了的,但是在忽略前一个之后,下一个错误消息弹出:

/dev/sdb 上的分区 1 已写入,但我们无法通知内核此更改,可能是因为该分区正在使用中。因此,旧分区将继续使用。您应该立即重新启动,然后再进行进一步的更改。

于是我按照消息提示操作,然后重启。但这也没用,因为同样的两个错误又出现了。这次我忽略了这两个错误,打开了我在学校时熟悉的 gparted 窗口。

一旦我更改为 /dev/sdb,它很快就会变得混乱。正如你所看到的这里,事情变得很奇怪,因为现在 sdb 不知何故被认为是我的 SSD 而不是卡,但卡上的映像仍然被挂载。此时,我太焦虑了,不敢继续做任何事情,担心会不小心弄坏我的笔记本电脑。

顺便说一句,我也尝试授予自己访问磁盘的权限并尝试使用该dd命令,但出现相同的错误消息(访问被拒绝、只读或其他信息,我不太确定,但大致是这个方向的)。

我已经从亚马逊订购了另一张 32 GB 的 Micro SD 卡,以防旧卡不再有希望。但我还没有放弃。

(抱歉,有些内容是德语,但我认为那些内容大部分都是不言自明的。)

答案1

嗯,你的帖子确实很有趣。谢谢你。

我知道这不是你想要的答案。但是,SD 卡确实看起来卡在只读模式。你已经尽了一切努力。这真的没那么难。

它的行为就像卡上有写保护开关一样。听起来你确认它没有,但也许再检查一次?我想到的是,也许你在迷你 SD 到 SD 适配器中使用迷你 SD 卡。也许你查看了适配器,但没有查看迷你 SD 卡本身?我不知道,只是随便说说。如果有适配器,也许适配器本身坏了?我不记得你是否提到过你是否尝试过不同的读卡器。也许是读卡器坏了?

除此之外,像这样在只读模式下“失败”的情况相当常见。所以我的直觉告诉我卡坏了。

看起来你的方法是正确的,只需更换它即可。也许你可以在保修期内更换坏的,因为它是新的。让我们知道你的想法。

答案2

当我使用 iso 映像时,总是会发生此类只读问题。

我如何解决此类问题:

请注意,这<yoursdcard>是一个设备,而不是一个分区,例如sdc

  1. 启动某种 Linux
  2. 打开终端
  3. 找出你的 SD 卡是什么设备,并使用sudo fdisk /dev/<yoursdcard> -l或获取设备名称来验证它,你也可以使用sudo parted /dev/<yoursdcard> -l

警告:以下命令将破坏所有数据,/dev/<yoursdcard>因此请确保这<yoursdcard>是正确的设备!!!

  1. 执行sudo dd if=/dev/zero of=/dev/<yoursdcard> bs=1000000 count=50
  2. 执行sudo fdisk /dev/<yoursdcard>
  3. 现在使用命令o在你的 SD 卡上创建一个新的 MSDOS 分区表,然后使用命令n添加一个新分区,并将w更改写入你的 SD 卡并退出 fdisk
  4. 现在使用sudo mkfs -t <filesystem you want> /dev/<yoursdcard>1格式化分区
  5. 现在你的 SD 卡应该可以正常工作了

如果这不起作用:

  1. 打开终端
  2. 找出设备<yoursdcard>是什么
  3. 执行sudo su
  4. 执行echo "0" > /sys/block/<yoursdcard>/ro

答案3

请记住,卡可能只是坏了。它们板上有一些闪存和控制器。如果卡认为有问题,它将完全脱机或变为只读,如果它没有足够的可用闪存单元可供写入。有时控制器会保存闪存芯片的会计信息,这些信息可能会损坏,导致它以安全模式启动并且不允许任何操作。要解决这类问题,您需要一个“真正的” SD 卡读卡器,而不是仅用于大容量存储的读卡器。“真正的” SD 接口可以访问控制器,并可能为您提供所需的信息。

答案4

嗯。我应该链接这个帖子,因为我从这里开始,但不知怎么的却在另一篇帖子上结束了。

在此处输入链接描述

首先确保它不是读卡器!

此问题很容易由损坏的文件系统引起。此问题可能由多种因素引起。如果您在 Linux 上格式化它而不卸载它,或者如果您重新分区它,它会被挂载,或者如果分区损坏,则可能会发生这种情况。最好的办法是使用 Linux 命令fsck /dev/sdb1或您的驱动器名称/dev/sdd1。它可能会将其视为/dev/sdb1microSD 上的文件系统已损坏。这个错误很容易犯,因为看看这个……

root@w3tech-Satellite-C655:/home/w3tech# umount /dev/sdc*
umount: /dev/sdc: not mounted.
umount: /dev/sdc2: not mounted.
root@w3tech-Satellite-C655:/home/w3tech# umount /dev/sdc*
umount: /dev/sdc: not mounted.
umount: /dev/sdc1: not mounted.
umount: /dev/sdc2: not mounted.
root@w3tech-Satellite-C655:/home/w3tech#

我必须卸载驱动器两次才能卸载两个分区......是的,那是一个应该是/dev/sdd/dev/sde或之后的 microSD。

但是,fsck如果 Linux 内核认为该分区是只读的,那么仅仅运行它可能无法删除脏位。在此之前,Linux 内核仍将使用旧分区,这意味着您会得到只读错误,因为用户无法获得旧分区的权限。有时启动驱动器将允许内核切换到新分区,例如如果您使用程序创建新的分区表。

相关内容