初步说明
只是要清楚:
- 如果您“想要从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 -