Por que a sincronização é tão importante ao criar um pendrive linux usb stick?

7

No Arch Linux Wiki: link

# dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress && sync

[...] Do not miss sync to complete before pulling the USB drive.

Eu gostaria de saber

  • O que isso faz?
  • Que conseqüências há se deixado de fora?

Notas

Comando

dd 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
    
por Jonathan Komar 27.09.2016 / 15:10

2 respostas

10

O dd não ignora os caches de disco do kernel ao gravar em um dispositivo, portanto, parte dos dados pode não estar gravada ainda no USB stick após a conclusão de dd . Se você desconectar seu USB stick naquele momento, o conteúdo no USB stick seria inconsistente. Assim, seu sistema pode até falhar ao inicializar a partir deste USB stick.

Sync libera qualquer dado ainda em cache para o dispositivo.

Em vez de invocar sync , você pode usar a opção de conversão fdatasync dd :

fdatasync

physically write output file data before finishing

No seu caso, o comando seria:

tar -xzOf archlinux-2016-09-03-dual.iso | \
dd of=/dev/disk2 bs=4M status=progress conv=fdatasync

O conv=fdatasync faz com que dd chame efetivamente a chamada de sistema fdatasync() no final da transferência antes de dd sair (verifiquei isso com as fontes de dd ).

Isso confirma que dd não ignora nem libera os caches, a menos que seja explicitamente instruído a fazê-lo.

    
por 27.09.2016 / 19:57
0

Na página de manual sync (1): "sync - Sincronize as gravações em cache no armazenamento persistente". Basicamente sync certifica-se de que todos os seus dados são gravados no stick a partir do cache.

    
por 27.09.2016 / 15:20