Когда вы записываете файл на блочное устройство, используйте dd
с oflag=direct
. При этом используются записи O _DIRECT, что позволяет избежать использования ОЗУ в качестве кэша обратной записи. Обратите внимание, что для получения хорошей производительности oflag=direct
обычно требуется большой размер блока.
Это позволит избежать невероятно быстрого прогресса, если только у вас нет странного устройства, которое само имеет очень большой кэш ОЗУ .
Многие устройства имеют небольшой объем кэш-памяти. В этом случае oflag=direct
покажет реалистичную скорость прогресса. Это более осмысленно, но не говорит вам всего, что вы хотите знать :-). Это не гарантирует, что последние записи будут завершены, когда dd
скажет, что они завершены. Вы можете убедиться, что все записи завершены -, а также проверить наличие ошибок записи -с помощью опции conv=fsync
. Это вызывает fsync ()в конце, чтобы убедиться, что кеш очищен. Вот пример:
dd if=my.iso of=/dev/sdc oflag=direct bs=4M status=progress conv=fsync
Некоторые люди после этого запускают команду sync
и по понятным причинам не удосуживаются запомнить conv=fsync
. Это не так хорошо. sync
не будет сообщать о сбое одной из операций записи.
Если у устройства очень большой кэш ОЗУ, вам придется использовать oflag=direct,sync
. Но обычно я думаю о oflag=sync
как о потенциальном барьере для производительности. Возможно, вы захотите еще больше увеличить размер блока, чтобы уменьшить частоту очистки кеша. При очень синхронном вводе-выводе и одновременном чтении нескольких аппаратных блоков вы можете захотеть использовать двойную буферизацию -для поддержания хорошей производительности, т.е.используя вторую команду dd
, как показано в ссылке ниже.
Иногда вы также можете захотеть передать образ диска из другой программы, например gunzip
. В этом случае хорошая производительность также зависит от iflag=fullblock
и передачи через другую команду dd
. В ответе есть полный пример :. Почему конвейер gunzip в dd замедляется в конце?
Я думаю, что systemctl mask tmp.mount
должен помочь вам :это отключит устройство, создав символическую ссылку на /dev/null
в /etc
, что предотвратит его повторное -включение при обновлении. Это также предотвратит запуск агрегата вручную :
# systemctl mask tmp.mount
Created symlink /etc/systemd/system/tmp.mount → /dev/null.