不久前,我使用类似这样的代码在 USB 驱动器上写入了一个图像:
dd bs=4M if=/path/to/image.iso of=/dev/sdb && sync
那里一定出了什么大问题,因为在使用驱动器一两次后,Ubuntu 不再自动挂载它。因此,我决定先覆盖分区表,因为映像分区表不是标准表。所以我做了:
dd count=1 bs=512 if=/dev/zero of=/dev/sdb && sync
之后,Ubuntu 突然再次挂载了驱动器,我实际上可以访问映像。这很有趣,因为我基本上删除了分区表。因此,我尝试了:
cfdisk /dev/sdb
然而,cfdisk
喊了一声FATAL ERROR: cannot open disk drive
。因此,我尝试了 gparted 并创建了一个新的分区表。现在,驱动器已自动安装,但我对整个过程感到怀疑,所以我尝试了一下,fsck.msdos
这是我收到的非常令人不安的消息:
prompt@prompt:~$fsck.msdos /dev/sdb
dosfck 3.0.12, 29 Oct 2011, FAT32, LFN,
Currently, only 1 or 2 FATs are supported, not 251.
但是,如果我用以下方法检查分区表,fdisk
则不会收到任何错误消息,什么都没有,只有一个带有一个分区的干净表:
Disk /dev/sdb: 4004 MB, 4004511744 bytes
218 heads, 51 sectors/track, 703 cylinders, total 7821312 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: 0x00095e47
Device Boot Start End Blocks Id System
/dev/sdb1 2048 7821311 3909632 b W95 FAT32
所以,我现在看到的唯一选择是将第一个扇区清零,这就是这一切的开始。我将尝试将整个设备清零并报告结果。不过,请随时给我其他建议。
答案1
擦除第一个 mibibyte
通常来说擦除(用零覆盖)第一个 mibibyte删除可能使使用或创建分区表和文件系统的程序感到困惑的数据。
你可以用dd
与前 512 个字节类似的方法执行此操作。但dd
这样做有风险,因此我建议mkusb
,即“用安全带缠绕dd
”。还有其他工具比更安全dd
,例如磁盘别名gnome-disks
。
将整个驱动器清零应该可行,但这样做很慢,并且会导致内存单元不必要的磨损。我只在驱动器变慢时使用它(以便使其再次快速运行并将裕度恢复到“僵局”状态)。请参阅此链接:Pendrive 寿命
克隆
如果使用或其他克隆工具正确完成dd
,克隆过程非常可靠。mkusb
因此,我认为您的问题取决于分区表和/或文件系统,它们来自映像文件(image.iso
),或者是由于错误或不完全的关机导致文件系统损坏。
当 USB 驱动器上的某个分区仍处于挂载状态时,您不得将其拔出。让系统刷新缓冲区、完成将数据从 RAM 写入分区的文件系统非常重要。
答案2
我使用 Kde-parted 修复了同样的错误。
我遇到了这个错误,也没有fsck.vfat
修复dosfsck
它
因此我创建了一个新的 FAT,在卸载之前,标记了分区、顶部、设备、创建新的 FAT,或者ctrl—— shift。N
然后格式化,创建一个新的分区,一切又正常工作。