dd bs=1
очень неэффективен, так как выполняет один read()
и один write()
системный вызов на байт. В любом случае не имеет особого смысла использовать dd
на блочном устройстве (, если только вы не хотите использовать специальные флаги, такие как conv=noerror,sync...
, для обработки ошибок или смещений )
Здесь можно сделать:
offset=$(($(cat /sys/class/block/sda3/start) * 512)) &&
pv -trabSs "$offset" < myfile > /dev/sda
(или используйте head -c "$offset"
, если вам не нужна информация о ходе выполнения ).
pv
и head
выберут подходящий размер буфера для оптимизации производительности.
(обратите внимание, что, поскольку вы записываете данные в начало диска, вы фактически перезаписываете таблицу разделов! ).
Другой альтернативой может быть создание нового блочного устройства, отображающего только те разделы /dev/sda
, которые вы хотите перезаписать
Нравится:
echo "0 $(cat /sys/class/block/sda3/start) linear /dev/sda 0" |
dmsetup create writable_sda &&
cp myfile /dev/mapper/writable_sda
Невозможно выполнить что-либо на уровне ОС, пока машина находится в спящем режиме, это, в первую очередь, противоречит цели ее спящего режима.