由于我的 SD 卡上的文件系统损坏(可能是由于电源不足),我想创建一个新的文件系统。(e2fsck
失败,记录如下。)
但是,SD 卡上任何与文件相关的更改都被神奇地撤消了!
- 第一个例子:当我挂载 SD 卡时,删除一些文件,这些文件就消失了。当我卸载并重新挂载它时,文件又出现了!同样,当我修改文件的内容时,重新挂载后原来的内容又恢复了。
- 第二个例子:当我用 创建新的分区表时
fdisk
,旧分区表立即恢复原位。(下面的日志。) - 第三个例子:尽管我运行
dd if=/dev/zero of=/dev/mmcblk0 bs=1M
,fdisk
说得有道理Disk /dev/mmcblk0 doesn't contain a valid partition table
。dd
完成后,旧的分区表又回来了。
我没有用小开关物理锁定 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”值的电路。除此之外,粉碎它,这样其他人就不会再遭受任何痛苦,然后扔掉它。