Do Wiki do Arch Linux:https://wiki.archlinux.org/index.php/USB_flash_installation_media
# dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync
[...] Fazernãofalta a sincronização ser concluída antes de puxar a unidade USB.
Eu gostaria de saber
- O que isso faz?
- Quais são as consequências se for deixado de fora?
Notas
dd
comando usado com opcional status=progress
:
tar -xzOf archlinux-2016-09-03-dual.iso | dd of=/dev/disk2 bs=4M status=progress && sync
Ou usando pv
para progresso
tar -xzOf archlinux-2016-09-03-dual.iso | pv | dd of=/dev/disk2 bs=4M && sync
Responder1
O dd
não ignora os caches de disco do kernel quando grava em um dispositivo, portanto, alguma parte dos dados pode ainda não ter sido gravada no USB
stick após dd
a conclusão. Se você desconectar o USB
stick naquele momento, o conteúdo do USB
stick ficará inconsistente. Assim, seu sistema pode até falhar ao inicializar a partir deste USB
stick.
Sync
libera todos os dados ainda em cache para o dispositivo.
Em vez de invocar sync
você poderia usar fdatasync
dd
a opção de conversão de:
fdatasync
gravar fisicamente os dados do arquivo de saída antes de terminar
No seu caso, o comando seria:
tar -xzOf archlinux-2016-09-03-dual.iso | \
dd of=/dev/disk2 bs=4M status=progress conv=fdatasync
As conv=fdatasync
marcas dd
efetivamente chamam fdatasync()
a chamada do sistema no final da transferência, pouco antes dd
das saídas (verifiquei isso com dd
as fontes do).
Isso confirma que dd
não ignoraria nem liberaria os caches, a menos que fosse explicitamente instruído a fazê-lo.
Responder2
Na página de manual do sync(1): "sync - Sincronizar gravações em cache para armazenamento persistente". Basicamente sync
garante que todos os seus dados sejam gravados no stick a partir do cache.