xxd 具有跳过进入文件的路径 ( -s
) 并转储有限长度 ( -l
) 的选项。如果您使用其普通的十六进制 ( -p
) 选项,您也许可以使用 grep 来查找任何异常:
$ xxd -s 8192 -l 256 -p /dev/disk3s2 | grep [^0]
000000010000000000000000000000000000000000000000000000000000
000000000000000000000000300000000000000800000000000000000000
dbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdb
dbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdb
dbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdb
od
具有相似的跳过 ( -j
) 和限制长度 ( -N
)。同样,dd
hasskip=
和count=
(尽管这些是以块而不是字节为单位计算的;您可以使用 更改块大小bs=
)。
编辑:由于xxd -p
给出了奇怪的结果(不停止在设备的末端),我建议运行一些测试来弄清楚发生了什么。首先,备份计算机上的任何重要内容,因为如果设备访问级别出现异常情况,则其中一些测试可能会覆盖意外的内容,甚至可能覆盖另一个磁盘上的内容。
接下来,尝试使用不同的工具将数据转储到设备的末尾,看看它们是否都以相同的方式运行:
xxd -s 65451982336 /dev/sdb | more # This *should* dump 512 bytes (32 lines) then stop, but apparently keeps going
od -xv -j 65451982336 /dev/sdb | more # This also *should* dump 512 bytes then stop
dd if=/dev/sdb skip=127835903 | xxd | more # This again should do the same thing (note that the skip value is in 512-byte blocks)
其他工具是否读取 fdisk 报告为磁盘末尾的内容?如果所有三个都读取了更多数据,我将使用“fdisk 错误/误导”的答案。您可以通过在“结束”之后写入一些非零数据并查看结果来进一步测试:
dd if=/dev/random of=/dev/sdb seek=127835903 count=2
...然后重复各种转储命令。如果它们显示两个随机数据块(=64 行)后跟零,我很确定该设备比您想象的要大。