¿Cómo tomar una instantánea de un directorio en Linux tal como estaba en un punto particular en el tiempo?


3

Tengo un directorio que contiene muchos archivos de registro de resultados (tamaño de directorio ~ 4 GB) y un conjunto de procesos en ejecución que siguen escribiendo en estos archivos.

Para poder analizar correctamente los resultados en otro momento, quiero copiar todo el directorio a un destino de archivo, y no puedo detener los procesos.

Quiero una copia del directorio tal como estaba en un momento determinado. Como el directorio de tamaño es enorme (lo que significa que se tarda unos 40 segundos en copiar) y algunos de los archivos se están escribiendo, una normal cp -rNO me da una instantánea en un momento determinado, sino una instantánea de los archivos distribuidos en algunos 40 segundos Esto no es suficientemente bueno.

¿Hay alguna forma de obtener un bloqueo exclusivo en el directorio y todos sus componentes durante la copia?


Respuestas:


2

LVM (Logical Volume Manager) admite instantáneas. Dado que toda la distribución de Linux tiene LVM incorporado, es la más fácil para usted. El único inconveniente es que necesita recrear su sistema de archivos.

Aquí hay un buen tutorial http://rhcelinuxguide.wordpress.com/2006/06/03/what-is-a-logical-volume-manager-lvm-snapshot-and-how-do-i-use-it/


Migrar solo el directorio que contiene los archivos de registro a un volumen LVM sería menos trabajo que reconstruir todo el sistema de archivos.
intuido

El enlace está roto.
Misaz

1

Si cp está tardando demasiado en proporcionar los resultados que necesita, lo más probable es que no esté satisfecho con otras opciones. La copia de Unix es tan básica como lo es para la sobrecarga de E / S.

Sin embargo, si retrasó la compra de procesos de E / S aprovechando otro proceso de administración entre el disco y los archivos a medida que cambiaban, la sobrecarga puede no importar. Lo que quiero decir es que podría ejecutar el proceso en una máquina virtual (si esto es posible), probar instantáneas con rsync o incluso subversión.

Lo único que se me ocurre es quizás canalizar la salida del registro a un enlace simbólico y actualizar los enlaces a una ubicación secundaria con un archivo por lotes.

Por ejemplo:

file.log -> /mnt/disk1/logarea/file.log

file.log -> /mnt/disk/logarea2/file.log

Para que pueda actualizar el enlace simbólico al instante, y las tuberías de salida a la nueva ubicación.

Incluso podría escribir un archivo por lotes para actualizar el enlace, contar hasta 45 segundos y luego volver a cambiarlo, aislando así los datos que necesita.

Solo pensamientos, buena suerte.


0

Una forma diferente de hacerlo sería usar Logrotate para archivar los registros cada semana / día / hora, luego esencialmente tiene instantáneas en ese intervalo.


0

Algunos sistemas de archivos proporcionan instalaciones de instantáneas. La creación de un sistema de archivos (en un área no utilizada de la unidad, o en un archivo de datos dedicado [loopback]) utilizando uno de estos sistemas de archivos y luego el montaje donde se escriben sus registros le permitirá capturar instantáneamente el sistema de archivos de registros.

Sistemas de archivos conocidos por admitir instantáneas:

  • ZFS (basado en fusibles)
  • FFS de FreeBSD
  • LFS (sistema de archivos estructurado de registro)
  • XFS

Probablemente hay más, pero esos son los que puedo pensar fuera de mi cabeza.

Las instantáneas no copian los datos, sino que congelan los datos en un momento determinado en el tiempo y crean un sistema de archivos virtual que contiene esos datos que se pueden montar y usar como cualquier otro sistema de archivos (aunque sea de solo lectura). El sistema de archivos original continúa funcionando como si nada hubiera pasado.


0

Francamente, para lo que estás pidiendo, lo único que me ha funcionado es ZFS-FUSE. También hay un ZFS nativo para Linux, pero aún no es realmente utilizable.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.