我无法删除金士顿 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
- 启动某种 Linux
- 打开终端
- 找出你的 SD 卡是什么设备,并使用
sudo fdisk /dev/<yoursdcard> -l
或获取设备名称来验证它,你也可以使用sudo parted /dev/<yoursdcard> -l
警告:以下命令将破坏所有数据,/dev/<yoursdcard>
因此请确保这<yoursdcard>
是正确的设备!!!
- 执行
sudo dd if=/dev/zero of=/dev/<yoursdcard> bs=1000000 count=50
- 执行
sudo fdisk /dev/<yoursdcard>
- 现在使用命令
o
在你的 SD 卡上创建一个新的 MSDOS 分区表,然后使用命令n
添加一个新分区,并将w
更改写入你的 SD 卡并退出 fdisk - 现在使用
sudo mkfs -t <filesystem you want> /dev/<yoursdcard>1
格式化分区 - 现在你的 SD 卡应该可以正常工作了
如果这不起作用:
- 打开终端
- 找出设备
<yoursdcard>
是什么 - 执行
sudo su
- 执行
echo "0" > /sys/block/<yoursdcard>/ro
答案3
请记住,卡可能只是坏了。它们板上有一些闪存和控制器。如果卡认为有问题,它将完全脱机或变为只读,如果它没有足够的可用闪存单元可供写入。有时控制器会保存闪存芯片的会计信息,这些信息可能会损坏,导致它以安全模式启动并且不允许任何操作。要解决这类问题,您需要一个“真正的” SD 卡读卡器,而不是仅用于大容量存储的读卡器。“真正的” SD 接口可以访问控制器,并可能为您提供所需的信息。
答案4
嗯。我应该链接这个帖子,因为我从这里开始,但不知怎么的却在另一篇帖子上结束了。
首先确保它不是读卡器!
此问题很容易由损坏的文件系统引起。此问题可能由多种因素引起。如果您在 Linux 上格式化它而不卸载它,或者如果您重新分区它,它会被挂载,或者如果分区损坏,则可能会发生这种情况。最好的办法是使用 Linux 命令fsck /dev/sdb1
或您的驱动器名称/dev/sdd1
。它可能会将其视为/dev/sdb1
microSD 上的文件系统已损坏。这个错误很容易犯,因为看看这个……
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 内核仍将使用旧分区,这意味着您会得到只读错误,因为用户无法获得旧分区的权限。有时启动驱动器将允许内核切换到新分区,例如如果您使用程序创建新的分区表。