Pra*_*tic 3 filesystems dd filesystem-corruption
(我所说的错误是指“会破坏事物”。)
假设我们要使用dd. 我们选择了一组有效的if、of、 以及可能的seek和skip。我们仔细确保该命令不会写入超出我们预期的输出区域。
现在我们如何通过选择bs和的错误组合来巧妙地破坏事物count?我们怎么知道?
我问的原因是似乎出现了神奇的首选值。例如,在这个关于生成随机 1G 文件的问题中,前两个答案使用if=/dev/urandom、of=sample.txt、bs=64M和count=16。
当然,这些并不是唯一有效的设置,但两个答案都使用了这些设置,表明这个选择特别好且合理。特别是在没有文件系统甚至物理磁盘的情况下,我不清楚设置的选择是否可能是错误的——不仅效率低下,而且是错误的。我的猜测是,dd必须一次写入整数个块,以便bs内存使用量增加,而这些值只会影响性能。
该示例只是一个示例,而不是我特别关心的内容,因此请继续解决正在复制的内容具有文件系统的情况。
使用 dd 对我来说始终是一个令人恐惧的信念飞跃。
dd很可怕!你并不孤单。来自Linux 的提示:
“dd”命令是原始 Unix 实用程序之一,应该在每个人的工具箱中...有些人认为 dd 意味着“销毁磁盘”或“删除数据”,因为如果误用,分区或输出文件可能会被丢弃非常快。由于 dd 是用于写入磁盘头、引导记录和类似系统数据区域的工具,因此滥用 dd 可能会损坏许多硬盘和文件系统。
但不用担心。一旦你了解了它的复杂性,你就会dd以牛仔竞技表演中平静优雅的方式来调用。
count什么bs?我们先来处理第一个问题。
现在我们如何通过选择
bs和的错误组合来巧妙地破坏事物count?我们怎么知道?
如果您用“中断”来表示“意外后果”,那么理论上只需指定它们即可。我这么说是什么意思?好吧,假设您想复制image.img到位于 的 SD 卡上/dev/sdc。因此,您可以匹配示例中的参数:
# dd if=/home/someone/image.img of=/dev/sdc bs=64M count=16
Run Code Online (Sandbox Code Playgroud)
重用这些设置应该没问题吧?让我们等待dd结束吧……现在,它说什么?
16+0 records in
16+0 records out
1073741824 bytes (1.1 GB) copied, 34.1303 s, 31.5 MB/s
Run Code Online (Sandbox Code Playgroud)
仅复制了 1.1 GB!但image.img就是2GB左右,我想把整个东西复制过来!通过告诉dd复制 16 批 64M(顺便说一下,其中 M=1024*1024),您已经指定了大小。您可以通过状态输出知道。如果要复制整个文件,请使用bs和匹配大小count;或者完全省略这些:
# dd if=/home/someone/image.img of=/dev/sdc
4364864+0 records in
4364864+0 records out
2234810368 bytes (2.2 GB) copied, 45.9502 s, 48.6 MB/s
Run Code Online (Sandbox Code Playgroud)
如果我们非常顽皮并告诉我们dd复制比可用数据更多的数据,会发生什么?
# dd if=/home/someone/image.img of=/dev/sdc bs=1M count=4096
2131+1 records in
2131+1 records out
2234810368 bytes (2.2 GB) copied, 77.9768 s, 28.7 MB/s
Run Code Online (Sandbox Code Playgroud)
啊,dd只复制收到的字节数。这很方便。
dd说到状态输出,dd(GNU 变体)尊重并响应 INFO 信号SIGUSR1:
# echo "In another terminal or TTY"
# pkill -USR1 -n -x dd
# echo "Printed to stdout on the terminal/tty running dd:"
534+0 records in
534+0 records out
559939584 bytes (560 MB) copied, 1.68414 s, 332 MB/s
Run Code Online (Sandbox Code Playgroud)
方便监视缓慢的传输或您希望因某种原因挂起的传输。与 搭配得很好watch,但一定要给出watch相当长的间隔时间。
dd还有其他我应该了解的选择吗?dd确实有其他选项,但在大多数情况下,如果您需要使用它们,您就会知道它们的作用。不过,一些例子可能会给您一个想法:
conv=CONVS:根据一个或多个转换选项转换输入seek=Nand skip=N: 在 [output|input] 开始处跳过 N 个 [obs|ibs] 大小的块status=X:(抑制输出)noxfer或者nonedd现在感觉好多了!伟大的!您很快就会通过互联网发送可启动映像,并使用dd和 的组合将其直接写入 microSD 卡ssh。
dd缩写词实际上代表什么?最后一个问题问得好。对于这个问题和任何其他类似的问题,我将向您推荐dd.
如果有任何事情比应有的不透明,我们鼓励您要求澄清!
| 归档时间: |
|
| 查看次数: |
3814 次 |
| 最近记录: |