我有一个 500GB USB 硬盘。
我一直在摆弄dd
cmd - 擦除MBR数据,复制我的Windows内部HD,删除分区等。
fdisk -l
回报
Disk /dev/sdc: 10MiB, 10485760 bytes, 20480 sectors
Units: sectors of 1 * 512 bytes = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk Identifier: 8xb77d52b7
Device Boot Start End Blocks Id System
...
/dev/sdc1 * 2048 718847 358400 7 HPFS/NTFS/exFAT
/dev/sdc2 718848 81922047 40601600 7 HPFS/NTFS/exFAT
lsblk
回报
NAME MAJ:MIN RM SIZE RO TYPE
sda 0:0 0 465.9G 0 disk
>^sda1 0:1 0 350M 0 part
>^sda2 0:2 0 38.7G 0 part
sdc 8:32 0 465.8G 0 disk
loop0 7:0 0 275.1M 0 loop /livemnt/squashfs
lsblk
显示 465.8G 同时fdisk -l
显示 10MiB
由于 HD 是这样,我不能用它做太多事情...即使是诸如此类的命令也只允许从源到目标dd if=/dev/sda of=/dev/sdc bs=4096
最多 10MB 的数据...if=
of=
cat /dev/sda > /dev/sdc
回报
cat: write error: no space left on device
我已经用parted、fdisk /dev/sdc、gdisk等工具处理这个问题4个小时了,这真的那么难吗?
一定有办法让 HD 恢复到 500GB 状态......
为了确认/dev/sdc是外部硬盘,我断开/重新连接 USB HD 并运行以下命令
dmesg | tail
回报
[sdc] Attached SCSI disk
答案1
MBR(又名“磁盘标签类型:dos”)不应直接提及磁盘大小(也不应直接提及旧柱面/扇区/磁头的数量)。
https://en.wikipedia.org/wiki/Master_boot_record#Sector_layout
内核也不应该根据该设备上损坏的 MBR 来限制对该块设备的写入。所以要么是内核,要么是硬件混淆了。令人担忧的是:)。
猜测是no space left on device
内核直接生成的。如果设备向内核返回错误并抱怨访问超出了末尾(发生这种情况是因为内核认为它没有超出末尾),我怀疑内核会返回一个通用 IO 错误。如果内核日志 ( dmesg
)中未显示此特定设备错误,我会感到惊讶。
奇怪的是,虽然lsblk
AFAICT 和fdisk
AFAICT 使用略有不同的方法,但 AFAICT 都读取缓存在内核中的值。如果它们始终获得不同的值,这听起来也像是内核有问题。fdisk -l
在读取值之前可能会请求重新扫描。然而,听起来你是在追赶lsblk
,fdisk -l
所以这种差异应该不重要。
我会保留一个轻微对这个系统的怀疑。 (“我是否维护任何有价值数据的独立备份,这将是一个很好的做法吗?”可疑)。