¿Por qué es tan importante la sincronización al hacer una memoria USB de arranque de Linux?

15

Desde el 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

[...] No se pierda la sincronización para completar antes de extraer la unidad USB.

Me gustaría saber

  • ¿Qué hace?
  • ¿Qué consecuencias hay si se dejan fuera?

Notas

ddcomando utilizado con opcional status=progress:

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

O usando pvpara el progreso

tar -xzOf archlinux-2016-09-03-dual.iso | pv | dd of=/dev/disk2 bs=4M && sync
Jonathan Komar
fuente

Respuestas:

19

El ddno lo hace de bypass las cachés de disco del núcleo cuando se escribe a un dispositivo, por lo que una parte de los datos no puede ser escrito todavía el USBpalo tras ddsu finalización. Si desconecta su USBdispositivo en ese momento, el contenido del USBdispositivo sería inconsistente. Por lo tanto, su sistema incluso podría fallar al iniciar desde este USBdispositivo.

Sync vacía los datos aún en caché al dispositivo.

En lugar de invocar sync, puede usar fdatasync ddla opción de conversión:

fdatasync

escribir físicamente los datos del archivo de salida antes de terminar

En su caso, el comando sería:

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

Las conv=fdatasyncmarcas ddrecurrente se limita fdatasync()llamada al sistema al final de la transferencia justo antes de ddlas salidas (he comprobado esto con ddfuentes de 's).

Esto confirma que ddno omitirá ni vaciará los cachés a menos que se indique explícitamente que lo haga.

Sarga
fuente
Gracias por su contribución, aunque no estoy seguro de que esta afirmación es correcta El ddno lo hace de bypass las cachés de disco del núcleo cuando se escribe en un dispositivo . Al escribir en un archivo (sobre la capa del sistema de archivos del núcleo), las cosas se almacenan en caché. Sin embargo, me preocupa escribir en dispositivos. Proporcione una fuente para esa declaración si puede, porque esa es la clave de esta pregunta. Si es verdadero, proporcionaría una razón válida para ejecutarse syncdespués de una operación de dddispositivo a dispositivo .
Jonathan Komar
Sí, está en caché. El almacenamiento en caché ocurre dentro de la infraestructura del dispositivo de bloque del núcleo. Las operaciones de archivo en sí no se almacenan en caché. la interfaz del dispositivo de bloque subyacente cobra. fuente: lxr.free-electrons.com/source/block/blk-flush.c
Serge
@ macmadness86 ver la respuesta actualizada
Serge
77
Prefiero usarlo oflag=sync, por lo que el progreso genera la velocidad de transferencia real y no la almacenada en caché (por lo tanto, un 10 MB / s estable en lugar de un segundo 100 MB / sy luego 10 segundos de bloqueo).
Bart Polot
Escribir en un dispositivo de bloque evita VFS por completo. En otras palabras: la escritura en un archivo puede ser almacenada en caché por el núcleo (y generalmente lo es), pero la escritura en un dispositivo nunca está almacenada en caché por el núcleo (y no puede).
Eric
0

Desde la página del manual sync (1): "sync - Sincronizar escrituras en caché con almacenamiento persistente". Básicamente syncse asegura de que todos sus datos se escriban en el dispositivo desde el caché.

schaiba
fuente
No veo en qué parte de tu pregunta aparece la parte sobre la luz encendida.
schaiba