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

Lor*_*rat 19 linux sd-card partitioning ubuntu windows-10

我无法从金士顿 32 GB 微型 SD 卡中删除只读属性。我想把整张卡擦干净。

我得到了一个 Raspberry Pi 3 和一个 32 GB 的微型 SD 卡和一个 Echo 来玩。当我拿到 Micro SD 卡时,它是全新的。我下载了一个新的 Ubuntu 16.04 映像,并在 Windows 10 上使用 Etcher 格式化了卡。完成后,我插入了所有让 Raspberry 工作的东西,但发现没有任何反应。我开始有一点慌了,心里想:“干得好Scrat,你绝对白痴你为什么不能只是等待一点点,google了该死的教程。”

我在 google 上搜索了可能出错的地方以及我应该做的事情,但不得不发现您不能随意放置任何 Ubuntu 映像。它必须是创建者提供的图像之一(在我的情况下是 Ubuntu Mate 或 Raspbian)。

尝试修复 Windows

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

我在互联网上发现的第一件事是关于卡上的开关/锁,但我的卡根本没有任何锁。卡片本身和我用来阅读的 Robson 迷你读卡器都不是。

后来我试着记住如何编辑磁盘。
请注意,当时我仍在使用 Windows 10,因为我必须从外部驱动器复制旧的 VM-Ware 和系统映像,而我不知道那在哪里。

我打开一个命令行,运行 diskpart,并通过以下方式列出我的所有磁盘

list disk
Run Code Online (Sandbox Code Playgroud)

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

Datenträger ### 状态 Größe Frei Dyn GPT  
--------------- ------------- ------- ------- --- ---   
数据采集​​器 0 在线 119 GB 0 B *  
数据采集​​器 1 在线 931 GB 0 B *  
Datenträger 2 在线 29 GB 29 GB

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

select disk 2
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好。然后我想通过执行以下操作来删除只读属性:

attributes disk clear readonly
Run Code Online (Sandbox Code Playgroud)

这也成功执行。

但是当我尝试这样做时:

clean
Run Code Online (Sandbox Code Playgroud)

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

在这一点上,我的恐慌开始越来越大。但我尽量保持冷静,因为我的袖子里还有一些小把戏。

我尝试使用以下程序:EaseUS Partition Master、Etcher(再次)和 SD Card Formatter 由于卡被保护(只读、写保护)而全部失败。

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

Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorageDevicePolicies
Run Code Online (Sandbox Code Playgroud)

并创建一个新关键字 (DWORD WriteProtect) 并将其设置为 0,这意味着非只读。

尝试使用 Linux 修复

这也不起作用,我开始对 Windows 失去信心,所以我停下来搜索我的外部驱动器并安装 VM-Ware 并运行我在学校使用的 Ubuntu 16.04 虚拟机。

启动 VM 我已经注意到 Ubuntu 比 Windows 能够帮助我更多(或者至少我是这么认为的,因为我的 Linux 技能在这方面是有限的)。我看到的第一件事是桌面上的一个链接图标,它指向名为“Ubuntu 16.04.2 LTS amd64”的卡,其中包含 Ubuntu 需要在此处的图像中看到的各种内容。

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

lsblk
Run Code Online (Sandbox Code Playgroud)

其中确认卡是可见的(sdb):

名称 MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
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
Run Code Online (Sandbox Code Playgroud)

哪个更精确一点:

磁盘 /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 卡,以防旧卡没有希望。但我还没有放弃。

(抱歉,有些东西是用德语写的,但我认为这些东西大部分都是不言自明的。)

App*_*ity 8

嗯,你的帖子肯定很有趣。感谢那。

我知道这不是你要找的答案。但是,看起来 SD 卡确实处于只读模式。你已经做了你能做的一切。真的没有那么难。

它就像卡上有写保护开关一样。听起来你确认没有,但也许只是再检查一次?想到的想法可能是您在 mini-sd 到 sd 适配器中使用了 mini-SD 卡。也许您查看的是适配器,而不是 mini-sd 卡本身?我不知道,只是把它扔在那里。如果有适配器,可能是适配器本身坏了?我不记得你是否提到过是否尝试过不同的读卡器。也许读者变坏了?

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

看起来您在正确的轨道上,只需更换它。也许您可以在保修期内更换坏的,因为它是新的。让我们知道你想出了什么。

  • 我认为这是一个很好的回应,但这并不是真正的答案,而是评论和希望。:) (2认同)
  • 嗯,这对你来说是值得称赞的。但是,您对软件所做的任何事情都不会破坏硬件。有时事情只会变得糟糕。 (2认同)

tes*_*eax 6

当我使用 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在您的 sdcard 上创建一个新的 MSDOS 分区表,然后使用该n命令添加一个新分区并使用w将更改写入您的 sdcard 并退出 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


小智 5

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