我有一个 USB,用于处理大约 5 Mb 的 ISO,其中包含一个带有自己的 grub 的小型操作系统。如果我连接设备并检查它sudo fdisk -l我得到:
...
Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 1 9551 9551 4.7M cd unknown
如果我用 dd 复制 ISOsudo dd if=my_os.iso of=/dev/sdb
14852+0 records in
14852+0 records out
7604224 bytes (7.6 MB) copied, 0.538487 s, 14.1 MB/s
运行完美。从其他 PC 的 BIOS 启动。
问题是,有时我忘记在更新 BIOS 后连接 USB,因此我执行没有连接 USB 的 ff,输出是:
14852+0 records in
14852+0 records out
7604224 bytes (7.6 MB) copied, 0.00987684 s, 770 MB/s
现在,/dev/sdb 寄存器已损坏,复制速度(770 MB/s)毫无意义,并且直到重新启动才能再次使用 dd。
我尝试使用 ddrescue 修复它,但没有效果
sudo ddrescue /dev/zero /dev/sdb conv=noerror,sync
我的问题是,究竟发生了什么,如果可能的话,如何修复 /dev/sdb 以避免重新启动并且 dd 再次开始工作?
谢谢。
答案1
设备节点/dev/sd*
仅显示在 /dev 中设备连接后,之前没有。(而且,它们不被称为“寄存器”。)因此,当你运行dd of=/dev/sdb
它时,它实际上并没有触及任何设备——相反,由于输出文件不存在,dd
创建以此名称命名的一个新文件。
$ sudo dd if=archlinux-2016.04.01-dual.iso of=/dev/sdc 1482752+0 条记录 1482752+0 条记录 已复制 759169024 字节(759 MB,724 MiB),耗时 0.941926 秒,806 MB/s $ ls -l /dev/sd* brw-rw---- 1 根磁盘 8,0 6月 15 08:54 /dev/sda brw-rw---- 1 根磁盘 8,16 年 6 月 15 日 14:14 /dev/sdb -rw-r--r-- 1 root root 724M 6月15日 15:06 /dev/sdc
因此实际上没有任何东西可能被“损坏”,也没有任何东西需要“修复”或 ddrescue。您只是有一个名为 的巨大文件/dev/sdb
,并且由于它存在,内核无法在那里创建真正的设备节点。
(写入速度非常合理 -/dev
存储在 RAM 中,因此您只需将图像从缓存的 RAM 复制回到 /dev 所在的 RAM。)
删除/dev/sdb
并重新连接该设备,真实的设备节点应该会重新出现。