2014

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2013

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

más...

2011

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2010

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2009

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2008

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2007

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2006

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2005

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2004

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

2003

EneFebMarAbr
MayJunJulAgo
SepOctNovDic

Fotolog

A través del espejo
2010-10-12: A través del espejo
¡La radio habla en binario!
2010-10-10: ¡La radio habla en binario!
Gigaminx (regalo por mi cumple)
2010-09-16: Gigaminx (regalo por mi cumple)
Trini en bici
2010-09-05: Trini en bici
Valporquero
2010-08-28: Valporquero
Mi bici nueva
2010-08-22: Mi bici nueva
Boda de Mario y Ana
2010-08-13: Boda de Mario y Ana
De cañones en Guara
2010-08-07: De cañones en Guara
Trini y Mari en Marbella
2010-08-05: Trini y Mari en Marbella
Trini y Chelo en Tabarca
2010-08-03: Trini y Chelo en Tabarca
Valid XHTML 1.1
Acceder
Etiquetas: venti scripts cómo

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.

Etiquetas: Plan 9 venti

Para configurar un servidor venti, puedes leer las pátinas de manual, o seguir estas simples reglas. Hace falta, al menos, tres cosas:

  1. Un fichero de configuración, llamado venti.conf
  2. una partición de datos
  3. una sección de índice

El fichero de configuración es un fichero de texto que le indica al servidor dónde encontrar el resto de los ficheros, cuánta memoria usar, en qué puerto escuchar las peticiones de los clientes... Este fichero consiste en líneas con dos palabras: una palabra reservada, y un parámetro. El fichero de configuración más sencillo es:

index main
arenas /path/to/arenas
isect /path/to/index

El fichero puede tener más líneas:

  • Puede haber más de una partición de datos (más líneas arenas)
  • Puede haber más de una sección de índice (más líneas isect)
  • bloom /path/to/bloom

    Filtro de bloom, fichero opcional que se almacena en disco pero que también se mantiene completamente en la memoria. Indica de manera eficiente qué bloques no están aún almacenados en el índice.

  • mem tamaño

    Tamaño del caché de lumps, bloques de venti accedidos recientemente. Por defecto se le asigna 1MB

  • bcmem tamaño

    Tamaño del caché de bloques completos accedidos recientemente

  • icmem tamaño

    Tamaño del caché de índices

  • addr netaddr

    Dirección en la que escucha el servidor (por defecto, tcp!*!venti)

  • httpaddr netaddr

    Dirección en la que escucha el servicio HTTP para consultas

Todos los tamaños se especifican en bytes, y se puede usar el sufijo k, m o g para indicar kilobytes, megabytes o gigabytes.

Los ficheros pueden también expresarse como file:lo-hi para indicar un rango de bytes dentro del fichero. Tanto lo como hi pueden omitirse, indicando el principio y el final del fichero, respectivamente.

La partición de datos (/path/to/arenas) contiene, en orden secuencial, el contenido de cada bloque que se almacena en el servidor. Está dividido lógicamente en secciones llamadas arenas, cada una de las cuales tiene 500MB.

La sección de índice (/path/to/index) se usa para localizar un bloque en la partición de datos, dado su identificador. El tamaño que debe tener el índice es en torno al 5% de las arenas.

Para poder ejecutar el servidor, hay que formatear antes las arenas y la sección de índice; después, hay que formatear el índice principal:

venfi-fmtisect isect0. /path/to/index
venti-fmtarenas arenas0. /path/to/arenas
venti-fmtindex venti.conf

¡Y eso es todo! Ya se puede poner en marcha el servidor venti ejecutando venti.

Etiquetas: Debian Plan 9 venti

Para los que aún no conozcan venti, diré que es un sistema de almacenamiento en red, muy usado en Plan 9 from Bell Labs y, gracias a Russ Cox, parte de plan9port (Plan 9 from User Space), gracias a lo cual se puede usar en otros sistemas operativos.

Venti es un servidor de almacenamiento de bloques diseñado para el archivo de datos. En un servidor Venti, el SHA1 del contenido de cada bloque se usa como identificador de ese bloque para las operaciones de lectura y escritura. Este enfoque permite una política de solo lectura o creación de bloques, evitando la destrucción de datos (accidental o maliciosa). Además, los bloques duplicados se almacenan una sola vez, reduciendo el consumo de recursos y simplificando la implementación de los clientes.

Venti es el sistema que uso para hacer los back-ups de todas las máquinas Linux de mi trabajo; es fácil de usar, muy eficiente, y muy útil. El principal problema que tiene es que aún no hay paquetes Debian, y su instalación no es muy intuitiva; esa es la razón por las que lo he empaquetado para Debian, creando 2 paquetes:

  • venti-server: Incluye el servidor (venti) y algunas utilidades para crearlo y configurarlo.
  • venti-client: Varios clientes que se comunican con un servidor venti, como vbackup, vac y vnfs.

He empaquetado la versión 20100416-1, pero no está publicada en ningún sitio (contacta conmigo si te gustaría conseguirlo).