Dd

dd 需要將每個輸入塊放大/填充到兩倍大小

  • May 7, 2020

我發現了一些聲稱這一點的範例,但我無法設法讓 dd 將具有給定塊大小的文件轉換為該塊大小的兩倍。

dd if=disk256bytesectors.img of=disk512bytesectors.img cbs=256 ibs=512 obs=512 conv=sync

我的磁碟 img 大小為 10 兆字節,我期待一個 20 兆字節的新映像,但沒有。

所以我需要發生的是將每個 256 字節塊轉換為 512 字節塊,每個 512 字節塊的後半部分為空、零、空格或任何內容。

dd 手動狀態 conv=sync

在轉換和輸出之前用空字節填充任何比 ibs 短的輸入塊到該大小。

但是輸入塊永遠不會比它自己短?!?!那是什麼意思?

無論如何,我該怎麼做?

當您為命令指定時,您可能可以使用socatwhich 使用 Unix 域套接字。exec:這可以由數據報 ( type=2) 類型構成,以確保 dd 的輸入僅為 256 個字節。

例如,對於每個數據報的 2 個字節 ( -b2) 填充為 4 ( bs=4):

$ echo abcdefx | socat -u -b2 - exec:'dd bs=4 conv=sync',type=2 | od -c   
0000000   a   b  \0  \0   c   d  \0  \0   e   f  \0  \0   x  \n  \0  \0

請注意,上述對標準輸入的管道的使用socat僅用於此測試。通常,您應該直接在標準輸入上提供輸入文件,以便socat輕鬆讀取所需大小的整個“塊” -b(即<file socat -u ...)。

引用自:https://unix.stackexchange.com/questions/584928