Я собирался сделать образ своего старого USB-накопителя. У меня были веские основания ожидать, что на устройстве есть некоторые блоки, заполненные нулями, поэтому для экономии места я использовал conv=sparse
опцию:
dd if=/dev/sdb of=myusb.img conv=sparse bs=32M
Однако это меня не спасло:
$ ls -hls myusb.img
250M -rw-r--r-- 1 root root 250M Oct 18 21:31 myusb.img
Я уверен, что на устройстве есть блоки, заполненные нулями.Почему не сэкономили dd conv=sparse
место?
Примечание: я уже знаю ответ (я думаю). Я публикую его ниже. Вопрос для будущего использования.
решение1
Если вы абсолютно уверены, что были блоки, заполненные нулями, то причиной того, что вы не сохранили место, был большой буфер, который вы использовали. Из man dd
:
sparse
попробуйте искать, а не записывать выходные данные для входных блоков NUL
Вы использовали bs=32M
, поэтому вам нужен был целый блок нулей размером 32 МБ с правым смещением, чтобы conv=sparse
опция выполнила свою работу хотя бы один раз.
Параметр bs
устанавливает ibs
(размер входного блока) и obs
(размер выходного блока). В то время как в руководстве упоминаетсявходные блоки, на самом деле это то, obs
что имеет значение.
Вот результаты некоторых тестов. (Поскольку я ОП, я проводил тесты с тем же самым устройством.) Каждый файл назван по <obs_used>.img
шаблону. Обратите внимание на первый столбец:
$ ls -hlst *.img
250M -rw-r--r-- 1 root root 250M Oct 18 22:02 4M.img
250M -rw-r--r-- 1 root root 250M Oct 18 22:02 2M.img
249M -rw-r--r-- 1 root root 250M Oct 18 22:02 1M.img
248M -rw-r--r-- 1 root root 250M Oct 18 22:01 512K.img
248M -rw-r--r-- 1 root root 250M Oct 18 22:01 256K.img
247M -rw-r--r-- 1 root root 250M Oct 18 22:00 128K.img
247M -rw-r--r-- 1 root root 250M Oct 18 21:57 64K.img
247M -rw-r--r-- 1 root root 250M Oct 18 21:56 32K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:55 16K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:54 8K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:53 4K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:52 2K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:51 1K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:44 512.img
Вывод: не стоит использовать large obs
with conv=sparse
option. Обычный размер сектора составляет 512 байт, так что bs=512
кажется правильным. Ваша команда должна была быть:
dd if=/dev/sdb of=myusb.img conv=sparse bs=512