初步说明
只是要清楚:
- 如果您“想要从2099200扇区开始编写此文件”,那么您应该使用
obs=512 seek=2099200
。扇区从0开始编号。“从扇区0开始”可以用seek=0
; “来自第1区” seek=1
等
- 本答案中的命令不包括在内
sudo
。这是为了便于阅读。sudo
如果需要,只需使用。
实际答案
我同意在像你一样写出数据后,在阅读时导航的最佳方法就是使用ibs=512
。随着count=1
你读512个字节,obs
不能影响这一点。从这512个中检索正好150个字节实际上非常简单:
dd if=/dev/sdb ibs=512 skip=2099199 | dd of=my.txt ibs=1 count=150
笔记:
起色
tar
创建具有两个512字节块的存档,填充二进制零作为文件结束标记。这意味着它以后能够检测归档结束的位置,它可以轻松地忽略任何尾随垃圾。另外它存储元数据(路径,权限等),不限于一个文件,可以存储目录......由于这一点有一些开销,仍然以下过程看起来很有希望:
档案my.txt
:
tar -cf my.txt.tar my.txt
将存档写入设备:
dd if=my.txt.tar of=/dev/sdb obs=512 seek=2099199
或者您可以在管道中执行这两个步骤,而无需创建my.txt.tar
:
tar -cf - my.txt | dd of=/dev/sdb obs=512 seek=2099199
(请注意,存档大于原始文件。唯一的文件结束标记将占用1 KiB。如果在所选扇区之后的某处有数据,那么您应该考虑这一点。创建my.txt.tar
并比较其大小和可用空间是你使用前的方法dd
。)
无论如何,要检索原始文件调用:
dd if=/dev/sdb ibs=512 skip=2099199 | tar -xf -
而已。您无需记住其大小或名称。并且你可以做任何tar
与管道传输到stdin的存档有关的事情; 例如,你可以列出内容:
dd if=/dev/sdb ibs=512 skip=2099199 | tar -tvf -