Как разархивировать и скопировать образ диска на SD-карту одной командой?

15

Я нахожусь под следующими ограничениями:

  • У меня есть 1,0 ГБ .zipфайл на моем компьютере, который содержит один файл, образ диска raspbian. В несжатом виде этот файл имеет размер 3,2 ГБ и имеет имя 2015-11-21-raspbian-jessie.img.
  • После загрузки zip-файла на моем компьютере осталось менее 1,0 ГБ свободного места, и на диске недостаточно места для извлечения изображения.
  • Этот файл должен быть распакован и записан на SD-карту, используя старый файл dd.

Можно ли мне записать образ на SD-карту при этих ограничениях?

Я знаю, что можно передавать данные по tarканалу, а затем передавать эти данные в другое место, однако будет ли это работать для zipформата файла, или необходимо распаковать весь архив, прежде чем какие-либо файлы станут доступны?

IQAndreas
источник
Я понимаю, что могу просто извлечь zip-файл на внешнюю флешку, но это веселее. Я хочу осуществить это для испытания (и опыта обучения) этого!
IQAndreas
3
Если ваша SD-карта является устройством /dev/sdh, запустите unzip -p file.zip >/dev/sdh. (Я знаю, что использование ddявляется традиционным, но это не обязательно.)
John1024
Да. Будет ли это работать без dd? Я полагал, что параметр размера блока будет необходим.
CRThaze
2
Да, это работает без dd. В прошлом размер блока был очень важен при записи на ленты. Для дисков это не имеет значения.
John1024
1
@TheCzar Помимо лент, параметр размера блока ddможет только потерять данные или замедлить работу (или, в редких случаях, немного ускорить процесс, если он будет достаточно большим). Забудьте dd, это очень редко полезно.
Жиль "ТАК - перестань быть злым"

Ответы:

24

Используйте unzip -p:

unzip -p 2015-11-21-raspbian-jessie.zip 2015-11-21-raspbian-jessie.img | dd of=/dev/sdb bs=1M
yaegashi
источник
Код работает, и ни у меня нет места на жестком диске, ни у меня не хватает оперативной памяти. Пока все хорошо.
IQAndreas
5
Или просто unzip -p … >/dev/sdb.
Жиль "ТАК - перестань быть злым"
1
@ Жиль, кроме недостатков, ddиногда полезен sudo:unzip -p ... | sudo dd of=/dev/sdb bs=1M
yaegashi
5
@yaegashi unzip -p … | sudo 'cat >/dev/sdb'Но я предпочитаю, sudo chown $USER /dev/sdbчто дает мне дополнительную возможность проверить, что я пишу на нужное устройство.
Жиль "ТАК - перестать быть злым"
Работало красиво! Не возражаете, если я отредактирую точное имя файла, если кто-то захочет скопировать и вставить команду?
IQAndreas
0

После небольшой борьбы с прежним решением:

 unzip -p ~/Downloads/2020-02-05-raspbian-buster-lite.zip | sudo dd of=/dev/disk2 bs=1m

или, если вы хотите увидеть прогресс и вы установили pv:

 unzip -p ~/Downloads/2020-02-05-raspbian-buster-lite.zip | pv | sudo dd of=/dev/disk2 bs=1m
Эфрат Левитан
источник