Digamos que tienes un servidor
venti y quieres
hacer un mirror (espejo) de su contenido, copiando sus datos a otro
servidor, ¿cómo podría hacerse?
Primero, hace falta tener otro servidor venti configurado. Echa un
vistazo a la página de manual venti(8) para saber cómo hacerlo, o
mira mi entrada acerca de cómo configurar un
servidor venti. Ten en cuenta que, si los dos servidores se van a
ejecutár simultáneamente en la misma máquina, deben escuchar en
puertos TCP diferentes.
Hay varias maneras de copiar el contenido de un servidor venti en
otro:
- venti-copy
Con venti-copy se puede copiar un árbol completo de
bloques de un servidor a otro. Ambos servidores deben estar en
ejecución para poder copiar los bloques.
Si tienes los scores de todos los árboles a copiar en el
fichero scores.txt, puedes usar la siguiente orden para
copiarlos:
cat scores.txt | while read score ; do venti-copy $venti1 $venti2 $a ; done
Ventajas: no necesitas parar ninguno de los servidores; las
particiones arena de cada servidor pueden tener distinta geometría.
Desventajas: es muy lento, y necesitas saber a priori la lista
de los scores de los VtRoot que quieres copiar.
- venti-mirrorarenas
Esta orden se puede usar para copiar cada arena de una partición
a otra. Los servidores venti deben estar parados.
Ventajas: es muy rápido, y se hacen comprobaciones para
asegurarse de que las geometrías son idénticas.
Desventajas: solo funciona si el origen y el destino
tienen exactamente el mismo número de arenas del mismo
tamaño; después de terminar la copia, debes
usar venti-buildarenas en el servidor destino.
- venti-rdarena y venti-wrarena
venti-rdarena lee una arena de un servidor venti y la
escribe por la salida estándar; venti-wrarena escribe
una arena de un fichero a un servidor venti.
arena from a file to a venti server.
Para poder copiar un servidor venti, es necesario leer todas las
arenas con venti-rdarena, una a una, para luego
escribirlas en otro servidor con venti-wrarena. Ambos
servidores deben estar parados para esto.
Ventajas: funciona incluso si el origen y el destino tienen
distinto número de arenas; es más rápido que venti-copy.
Desventajas: solo funciona si el origen y el destino tienen
arenas del mismo tamaño; es muy lento si los servidores venti
tienen muchas arenas (cada invocación de estos programas leen
todo el mapa de arenas); después de terminar la copia, debes
usar venti-buildindex en el servidor destino.
- Copiar todas las arenas a mano
Si puedes averiguar la posición de cada arena dentro de la
partición, y su tamaño, puedes copiar las arenas simplemente
con dd. Ambos servidores deben estar parados para
esto.
Por ejemplo, si has formateado las particiones arena con el
tamaño de arena y tamaño de bloque por defecto, las arenas
tendrán 512MB (536870912 bytes), y estarán situadas en la
posición 794624 + 536870912*n. Por lo tanto, podría ejecutar el
siguiente bucle para copiar de la arena $start a la $end, del
fichero $orig al $dest:
for i in $( seq $start $end )
do
echo "Copying arena $i from $start to $end..."
skip=$(( 97 + $i * 65536 ))
dd if="$orig" bs=8192 skip=$skip count=65536 seek=$skip of="$dest"
done
Ventajas: es muy rápido.
Desventajas: solo funciona si el origen y el destino tienen
arenas del mismo tamaño; debes asegurarte de que las arenas
están situadas exactamente donde las estás leyendo y
escribiendo; después de terminada la copia, debes
usar venti-buildindex en el servidor destino.