重新安装后对 SD 卡的更改被撤消(例如,已删除的文件重新出现)

重新安装后对 SD 卡的更改被撤消(例如,已删除的文件重新出现)

由于我的 SD 卡上的文件系统损坏(可能是由于电源不足),我想创建一个新的文件系统。(e2fsck失败,记录如下。)

但是,SD 卡上任何与文件相关的更改都被神奇地撤消了!

  • 第一个例子:当我挂载 SD 卡时,删除一些文件,这些文件就消失了。当我卸载并重新挂载它时,文件又出现了!同样,当我修改文件的内容时,重新挂载后原来的内容又恢复了。
  • 第二个例子:当我用 创建新的分区表时fdisk,旧分区表立即恢复原位。(下面的日志。)
  • 第三个例子:尽管我运行dd if=/dev/zero of=/dev/mmcblk0 bs=1Mfdisk说得有道理Disk /dev/mmcblk0 doesn't contain a valid partition tabledd完成后,旧的分区表又回来了。

我没有用小开关物理锁定 SD 卡。我没有收到任何只读错误。事实上,我根本没有收到任何错误!dmesg除了我正在安装一个有错误的文件系统外,没有报告任何内容。

运行 Xubuntu live cd (12.10) 时也会出现此问题。不幸的是,我目前无法访问其他计算机和/或 SD 卡读卡器。

这是我的电脑、SD 卡的问题,还是我总是遗漏了某些东西?有什么建议我可以尝试吗?


e2fsck失败:

$ sudo e2fsck /dev/mmcblk0p2 
e2fsck 1.42.5 (29-Jul-2012)
/dev/mmcblk0p2: recovering journal
Superblock needs_recovery flag is clear, but journal has data.
Run journal anyway<y>? yes
e2fsck: unable to set superblock flags on /dev/mmcblk0p2


/dev/mmcblk0p2: ********** WARNING: Filesystem still has errors **********

以下日志显示fdisk没有任何效果:

$ sudo fdisk /dev/mmcblk0

Command (m for help): p

Disk /dev/mmcblk0: 31.5 GB, 31460425728 bytes
4 heads, 16 sectors/track, 960096 cylinders, total 61446144 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00017b69

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192      122879       57344    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          122880    61446143    30661632   83  Linux

Command (m for help): d
Partition number (1-4): 1

Command (m for help): d
Selected partition 2

Command (m for help): p

Disk /dev/mmcblk0: 31.5 GB, 31460425728 bytes
4 heads, 16 sectors/track, 960096 cylinders, total 61446144 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00017b69

        Device Boot      Start         End      Blocks   Id  System

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.



$ sudo fdisk -l /dev/mmcblk0

Disk /dev/mmcblk0: 31.5 GB, 31460425728 bytes
4 heads, 16 sectors/track, 960096 cylinders, total 61446144 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00017b69

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192      122879       57344    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          122880    61446143    30661632   83  Linux

答案1

此时,我建议在 SD 卡上运行坏块以查看它能找到什么。

听起来像是卡的写入逻辑损坏了,您在挂载点上看到的只是数据的缓存版本。它应该通过同步和卸载期间写回。看到您根本没有提到 SD 卡挂起,这表明损坏严重到足以创建误报写回响应或者更简单地说当磁盘显示写入已完成时,它其实在欺骗你

您可以尝试在卡从系统中移除时切换写保护开关。例如

  1. 切换写保护
  2. 插入
  3. 做一些琐碎的事情
  4. 卸载/弹出
  5. 反向写保护
  6. 冲洗/重复

为了刺激可能缓存“卡在 1”值的电路。除此之外,粉碎它,这样其他人就不会再遭受任何痛苦,然后扔掉它。

答案2

您的卡似乎已通过 MMC 写保护标志锁定。如果您有一台配有 SD/MMC 读卡器的 Linux 计算机,请尝试运行

sudo sdtool /dev/mmcblk0 unlock

/dev/sdX请注意,要实现此功能,您需要一个 MCC 设备(而不是像 USB 大容量存储设备)。

sdtool可以被找寻到这里。有一个 Raspberry Pi 构建,否则您必须从源代码构建。似乎可以使用hdparm,但我个人还没有尝试过。

请注意,有缺陷的卡会以类似的方式在内部自我锁定,以防止进一步的数据损坏,并会忽略解锁命令。

相关内容