Как записать образ диска image.gz на флешку в Linux

При распаковке файла образа диска gz и попыткой направить поток с помощью dd в блочное устройство (например, флешка/SD-карта) могут возникнуть проблемы со скоростью записи. Рассмотрим как правильно выполнить запись образа на накопитель.В примере мы будем записывать «сырой» образ (RAW) на SD-карту. В системе это /dev/mmcblk0, а файл наш будет называться raw-disk.image.gz

Вот как мы сделаем запись:

# gunzip -c raw-disk.image.gz | dd iflag=fullblock bs=4M | sudo dd iflag=fullblock oflag=direct conv=fsync status=progress bs=4M of=/dev/mmcblk0

Разберем параметры, каоторые мы применили.

oflag=direct и iflag=fullblock — нужны, чтобы не нагружать кэш ядра, обходим его просто.
iflag=fullblock — требуется, чтобы писать целым блоком.
conv=fsync — необходимо, чтобы использовать кэш записи самого устройства.
Добавлен дополнительный dd после gunzip, чтобы буферизировать распакованный вывод параллельно с записью на диск. Это немного усложняет процесс записи (с oflag=direct или oflag=sync), за то увеличивает производительность. Обычный ввод-вывод (не прямой, не синхронизированный) не нуждается в этом, так как он уже буферизован кэшем ядра. Вам может не понадобиться дополнительный буфер, если вы пишете на жесткий диск с 4М кэшем (writeback cache), но в SD-карте такого нет.

В качестве альтернативы вы можете использовать oflag=direct,sync (и не использовать conv=fsync). Это может быть полезно для получения информации о ходе выполнения, если у вас есть устройство с сотнями мегабайт кэша. Но обычно лучше использовать oflag=sync.


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.


Unlix © Все права защищены 2020

Копирование материалов с сайта Unlix.ru без указания полной ссылки на источник ЗАПРЕЩЕНО!