Из Arch Linux Wiki:https://wiki.archlinux.org/index.php/USB_flash_installation_media
# dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync
[...] Делатьнетне дайте завершить синхронизацию перед извлечением USB-накопителя.
я бы хотел знать
- Что оно делает?
- Каковы будут последствия, если их не учитывать?
Примечания
dd
команда используется с необязательным параметром status=progress
:
tar -xzOf archlinux-2016-09-03-dual.iso | dd of=/dev/disk2 bs=4M status=progress && sync
Или использование pv
для прогресса
tar -xzOf archlinux-2016-09-03-dual.iso | pv | dd of=/dev/disk2 bs=4M && sync
решение1
Не обходит dd
кэши ядра диска при записи на устройство, поэтому часть данных может быть еще не записана на флешку USB
по dd
завершении. Если вы отключите USB
флешку в этот момент, содержимое на USB
флешке будет несогласованным. Таким образом, ваша система может даже не загрузиться с этой USB
флешки.
Sync
сбрасывает все данные, оставшиеся в кэше, на устройство.
Вместо вызова sync
можно использовать fdatasync
dd
опцию преобразования:
fdatasync
физически записать данные выходного файла перед завершением
В вашем случае команда будет такой:
tar -xzOf archlinux-2016-09-03-dual.iso | \
dd of=/dev/disk2 bs=4M status=progress conv=fdatasync
Фактически это conv=fdatasync
вызывает системный вызов в конце передачи непосредственно перед выходом (я проверил это по источникам).dd
fdatasync()
dd
dd
Это подтверждает, что dd
не будет обходить или очищать кэши, если на это не будет дано явных указаний.
решение2
Из страницы руководства sync(1): "sync - Синхронизация кэшированных записей с постоянным хранилищем". По сути, sync
гарантирует, что все ваши данные будут записаны на флешку из кэша.