Я использую команду dd для создания загрузочного USB-файла из iso-файла:
sudo dd if=~/Desktop/ubuntu.iso of=/dev/sdx bs=1M
После нажатия клавиши enter он мгновенно завершает работу и дает мне:
915+0 records in 915+0 records out 959447040 bytes (959 MB) copied,
0.539375 s, 1.8 GB/s
работает в фоновом режиме, потому что я вижу, что флешка работает. В конце концов, это прекратит копирование, и я могу успешно удалить диск, но возникает вопрос , почему команда dd не ожидает завершения копирования. Почему это работает в фоновом режиме. И как я могу заставить его ждать?
Попробуйте:
sudo dd if=~/Desktop/ubuntu.iso of=/dev/sdx conv=fdatasync bs=1m
conv=fdatasync
говорит dd
использовать специальные опции, чтобы убедиться, что данные записываются на физическое устройство.
Несмотря на распространенное мнение, dd
- совершенно обычная команда, она не более низкого уровня, чем cat
или cp
. Ваша команда читает из дискового кэша и записывает в дисковые буферы, как любая другая команда.
Чтобы убедиться, что данные полностью записаны на физический носитель, вам нужно позвонить sync
. Команда sync
сбрасывает все выходные буферы на диск (и). Когда возвращается команда sync
, данные полностью записаны.
sudo dd if=~/Desktop/ubuntu.iso of=/dev/sdx bs=1M; sync
Большую часть времени вам не нужно звонить sync
, потому что размонтирование файловой системы делает ту же работу. При возврате команды umount
или при получении подтверждающего сообщения после нажатия кнопки «Извлечь» буферы были записаны на диск. Здесь вы напрямую записываете на диск, не проходя через смонтированную файловую систему, поэтому вам необходимо явно очистить буфер.
Обратите внимание, что вместо dd
вы можете использовать tee
. Это имеет два преимущества: меньше риска инвертировать источник и пункт назначения из-за опечатки, и это , вероятно, немного быстрее .
<~/Desktop/ubuntu.iso sudo tee /dev/sdx >/dev/null; sync