Parfois, lorsque j'écris des images sur un lecteur flash, cela se produit:
$ 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
Fondamentalement, Linux met tout en cache, n'écrit rien et se dd
ferme. Après avoir tapé sync
, il commence à écrire les données (la LED du lecteur flash commence à clignoter).
Pourquoi cela arrive-t-il?
linux
command-line
dd
jgillich
la source
la source
/dev/sdc
votre système est un périphérique réel et que vous n'écrivez pas dans un fichier/dev/sdc
? Faites unls --color /dev
-/dev/sdc
devrait être jaune s'il s'agit d'un appareil.Réponses:
Utilisez-le à la place:
Cela appelle le
fsync()
après chaquewrite()
appel système. Cela oblige àdd
ne rien mettre en cache. Voir cette partie de la page de manuel de fsync (man 2 fsync
):Il s'agit du comportement par défaut des noyaux. Les noyaux Linux gèrent les caches d'écriture et de lecture comme ceci: Lorsque l'
write()
appel système est émis, les données sont rapidement écrites dans le cache et un état d'écriture terminée est envoyé au processus. Lorsque le tampon est nécessaire ou lorsqu'il y a du temps libre sur le bus, les données sont écrites du cache sur le disque dur.la source
conv=fsync
c'est la valeur par défaut lors de l'écriture pour bloquer les appareils de telle sorte qu'ildd
ne cache rien? Vous cherchez une bonne réponse à cela: unix.stackexchange.com/questions/312687/…Cela se produit car Linux et la plupart des autres systèmes d'exploitation mettent en cache les lectures et les écritures. Dans la plupart des cas, cela rend votre système d'exploitation plus réactif.
Si vous voulez vous assurer que les données mises en cache ont été écrites, vous devez utiliser
sync
, comme vous le savez. Linux expose également un nombre important de paramètres que vous pouvez également régler. Cet article donne un bon aperçu de certains paramètres. Vous pouvez définir vm.dirty_background_bytes sur 0, par exemple, pour vous assurer que le noyau démarre immédiatement les threads du nettoyeur.la source
Remarque:
unmount
(ou éjecter) appelle automatiquementsync
ce qui "cache" cela dans l'utilisation normale du système de fichiers.la source