Почему опция sync используется с командой `dd`?

Установка шрифтов с сторонних сайтов почти слишком проста. Загрузите и сохраните файл где-нибудь на вашем компьютере:

Затем дважды щелкните шрифт, чтобы загрузить интерфейс шрифта:

Font File [ ! d4]

Выберите кнопку «Установить шрифт», расположенную в правом нижнем углу экрана.

1
задан 7 December 2015 в 04:41

3 ответа

По умолчанию dd будет считывать данные по одному блоку за раз, возможно, считывая более короткий блок, чем указанный пользователем, либо в конце файла, либо из-за поведения исходного устройства; это называется частичной записью. Затем он выпишет блок, размер которого совпадает с объемом, который он читает.

Dd будет повторять это до тех пор, пока не будет достигнут указанный счет, или он не увидит eof на входе или ошибку на входе или выходе. Когда он заканчивается, dd сообщает количество полных и частичных записей, которые он читал и писал.

Это поведение подходит для копирования обычного файла в файловой системе или по сетевому соединению TCP, поскольку это считается потоком байт. Но для других объектов файловой системы, таких как необработанные DVD-диски и магнитная лента, требуются размеры записи, которые находятся в определенных диапазонах и являются круглыми кратными некоторой суммы (например, 512 или 2048 байтов). Например, если у вас есть образ диска, состоящий из 255 треков из 63 512-байтовых секторов, и вы хотите записать на ленту с размером блока 1024 байта, вам нужно будет сделать что-то вроде

dd if=disk.img of=/dev/rmt0 bs=1k conv=sync

, чтобы убедиться, что dd не пытается записать 512-байтовый блок в конце. Более короткий блок в конце будет дополнен нулями или пробелами. Заполнение с нулями - безопасный, общий выбор. Опция dd для заполнения пробелами полезна в другой ситуации - преобразование файла с линиями переменной длины в один с линиями фиксированной длины.

3
ответ дан 23 May 2018 в 15:14

Я обнаружил, что система linux, а не dd, кэширует буферы. Поэтому, когда команда dd завершена, я запускаю синхронизацию как

sudo dd if=my.downloaded.iso of=/dev/sd(?) bs=1M && sync

Я не использовал никакой внутренней опции dd, чтобы вызвать сброс буфера. Обычно, когда я создаю версию дистрибутива USB, я единственный на компьютере, поэтому у меня нет сомнений в том, что моя опубликованная команда причиняет вред. Поскольку я запускаю синхронизацию как & amp; & amp ;, синхронизация выполняется с правами sudo, и я уверен, что созданный мной USB завершен.

0
ответ дан 23 May 2018 в 15:14

Вы можете использовать опцию sync для вывода, которая включена в dd comand, символом oflag:

xzcat ~/ubuntu.img.xz | sudo dd of=/dev/sdX bs=32M oflag=sync
0
ответ дан 23 May 2018 в 15:14

Другие вопросы по тегам:

Похожие вопросы: