2010-03-05 21 views
13

estoy escribiendo un script de copia de seguridad, queCómo vaciar la memoria caché del disco duro y del disco flash (o sistema de archivos) desde la línea de comandos?

  1. copia los datos en el disco de copia de seguridad.
  2. Vacia el disco de copia de seguridad.
  3. Realiza una comprobación de integridad hash.

Antes solía hacer sleep(60) por esperar un minuto para que los datos sean descargados automáticamente por el kernel. Lo cual supongo que es demasiado, así que ahora estoy intentando sudo hdparm -F --verbose /dev/disk pero informa el error - HDIO_DRIVE_CMD(flushcache) failed: Invalid exchange varias veces.

me pregunto ¿hay alguna manera estándar para vaciar la caché en el disco duro. Creo que existe porque usb-creator-gtk lo hace, umount lo hace.

estoy usando Ubuntu 9.10 x64

PS: Estoy tratando de evitar "sincronización" debido a esta página dice que es no seguro. http://ubuntuforums.org/showthread.php?t=589975

+2

Para que quede claro, es el 'echo 3>/proc/sys/vm/comando drop_caches' que pensaba que no era seguro. Él estaba equivocado de todos modos. – Gabe

Respuesta

26

¿Es suficiente sync?

Editar: con respecto a su edición - ¿Está tratando de evitar la sincronización porque algún tipo en Internet pone un aviso de CYA en su publicación? Tal vez hay algo mal con la sincronización de la que no estoy al tanto, pero que podría valer la pena una segunda publicación en sí misma.

Sin embargo, a partir de las páginas Linux Info:

sincronización escribe los datos almacenados temporalmente en la memoria a disco. Esto puede incluyen (pero no se limita a) superbloques modificados, modificados ínodos, y el retraso de lectura y escritura. Esto debe ser implementado por el kernel; El programa de sincronización no hace más que ejercitar la llamada al sistema 'sincronizar'.

+1

Creo que tiene que ejecutar "sync", no "man 1 sync". :-) – bmargulies

+0

Sí, eso está más claro. Cambiado – Duck

+1

En OSX fsync no es suficiente. Necesita usar fcntl con F_FULLFSYNC. Algunas personas me han dicho que fsync tampoco es suficiente en Linux, pero no estoy seguro. Linux no tiene F_FULLFSYNC. –

2

Desea la llamada a la función fsync (hombre sección 2), pero si lo hace en una secuencia de comandos, probablemente desee utilizar el comando de sincronización (sección 8, que simplemente llama a sync().

+7

En realidad, la línea de comandos "sincronización" (sección 8) llama a la función del sistema "sync()" (sección2), no la función del sistema "fsync (int fd)" (sección 2). En un caso, todos los archivos están sincronizados, en el otro solo se sincroniza un archivo particular que aún está abierto. –

+1

Estás en lo cierto, Mark. Oops! – George

+0

¿cuál es el que sincroniza todos los archivos y cuál es el que solo sincroniza? Si fsync menciona que es el que sincroniza todas las escrituras pendientes, ¿cómo accedemos a él? ¿Hay un comando para fsync? – Neal

Cuestiones relacionadas