A veces, cuando escribo imágenes en una unidad flash, esto sucede:
$ sudo dd if=install57.fs of=/dev/sdc
573440+0 records in
573440+0 records out
293601280 bytes (294 MB) copied, 0.549231 s, 535 MB/s
Básicamente, Linux almacena en caché todo, no escribe nada y ddsale. Después de escribir sync, comienza a escribir los datos (el LED de la unidad flash comienza a parpadear).
¿Por qué pasó esto?
linux
command-line
dd
jgillich
fuente
fuente

/dev/sdces un dispositivo real en su sistema y no está escribiendo en un archivo/dev/sdc? Haga unls --color /dev-/dev/sdcdebería ser amarillo si es un dispositivo.Respuestas:
Use esto en su lugar:
Esto llama
fsync()después de cadawrite()llamada al sistema. Esto obliga addno guardar nada en la memoria caché. Consulte esta parte de la página de manual de fsync (man 2 fsync):Este es el comportamiento predeterminado de los núcleos. Los núcleos de Linux administran las memorias caché de escritura y lectura de esta manera: cuando
write()se emite la llamada al sistema, los datos se escriben rápidamente en la memoria caché y se envía un estado de escritura completa al proceso. Cuando se necesita el búfer o cuando hay tiempo libre en el bus, los datos se escriben desde el caché al disco duro.fuente
conv=fsynces predeterminado cuando escribes para bloquear dispositivos de modo queddno guarde en caché nada? Buscando una buena respuesta a esto: unix.stackexchange.com/questions/312687/…Esto sucede porque Linux, y la mayoría de los otros sistemas operativos, almacenan en caché tanto las lecturas como las escrituras. En la mayoría de los casos, esto hace que su sistema operativo sea más receptivo.
Si desea asegurarse de que se hayan escrito los datos almacenados en caché, debe usarlos
sync, como ya sabe. Linux expone una cantidad significativa de configuraciones que también puede ajustar. Este artículo ofrece una buena descripción general de algunas configuraciones. Puede establecer vm.dirty_background_bytes en 0, por ejemplo, para asegurarse de que el kernel inicie los hilos de descarga inmediatamente.fuente
Nota:
unmount(o expulsar) llama automáticamente losyncque "oculta" esto en el uso normal del sistema de archivos.fuente