Cómo optimizar el tamaño de los paquetes de Restic para un repositorio NAS local

Eva Wong es la Redactora técnica y manitas residente en ZimaSpace. Una geek de toda la vida con pasión por los homelabs y el software de código abierto, se especializa en traducir conceptos técnicos complejos en guías accesibles y prácticas. Eva cree que el autoalojamiento debe ser divertido, no intimidante. A través de sus tutoriales, empodera a la comunidad para desmitificar las configuraciones de hardware, desde construir su primer NAS hasta dominar los contenedores Docker.

Para un repositorio NAS local, mantén el valor predeterminado de 16 MiB de restic, a menos que las mediciones indiquen que la sobrecarga de los archivos del repositorio o el comportamiento de búsqueda del HDD están limitando el rendimiento. Si el NAS almacena un repositorio de varios terabytes en discos giratorios, los paquetes de 32 MiB o 64 MiB son valores razonables para comparar antes de considerar tamaños mayores.

El tamaño del paquete no es lo mismo que el tamaño de los fragmentos de deduplicación de restic. Restic primero divide los datos de los archivos en blobs definidos por el contenido y después agrupa los blobs en archivos de paquetes. Cambiar el tamaño de paquete objetivo cambia la forma en que esos blobs se agrupan en el repositorio; no cambia el polinomio del fragmentador del repositorio ni los hashes de contenido.

Empieza con el valor predeterminado de 16 MiB

La guía de ajuste actual de restic indica que el tamaño de paquete objetivo predeterminado es de 16 MiB. También señala que los archivos de paquetes más grandes pueden reducir el número de archivos del repositorio y mejorar el rendimiento de las copias de seguridad en algunos repositorios almacenados en HDD locales.

restic version
restic -r /mnt/nas/restic-repo snapshots
restic -r /mnt/nas/restic-repo stats --mode raw-data

Anota la versión de restic, el tamaño del repositorio, el número de instantáneas, el tipo de almacenamiento y la duración actual de la copia de seguridad antes de realizar ajustes. Si el repositorio ya termina dentro del periodo disponible para la copia de seguridad, un tamaño de paquete mayor puede añadir complejidad sin producir una mejora útil.

Comprende qué cambia realmente el tamaño de los paquetes

El diseño del formato del repositorio de restic explica que el contenido de los archivos se divide en blobs definidos por el contenido y que esos blobs se agrupan en archivos de paquetes.

Archivos de origen
   |
fragmentación definida por el contenido
   |
blobs deduplicados
   |
agrupación de paquetes
   |
archivos de datos del repositorio

Un objetivo de paquete más grande generalmente implica menos archivos de repositorio y de mayor tamaño. Esto puede ayudar a que un disco giratorio dedique menos tiempo a los metadatos y a la sobrecarga de apertura de archivos. No mejora la deduplicación de contenido de archivos idénticos.

Comprueba si el NAS está realmente limitado por el tamaño de los paquetes

Antes de ajustar nada, observa el disco del repositorio durante una copia de seguridad incremental normal. Un repositorio en un HDD local que realice muchas búsquedas cortas y operaciones de metadatos mientras el rendimiento se mantiene bajo es mejor candidato que un repositorio en un SSD que ya escribe secuencialmente a alta velocidad.

iostat -xz 2

Busca una utilización sostenida del disco, tiempos de espera await elevados y un rendimiento bajo en comparación con una escritura secuencial grande. Comprueba también el uso de la CPU y la velocidad de lectura del origen. Si el cuello de botella está en la compresión, el cálculo de hashes, la E/S del origen o la red, aumentar el tamaño de los paquetes no lo solucionará.

Compara 16, 32 y 64 MiB con repositorios equivalentes

La comparación más limpia utiliza repositorios desechables creados para la prueba. Usa el mismo conjunto de datos de origen, volumen NAS, versión de restic y cantidad de conexiones al backend.

restic --pack-size 16 -r /mnt/nas/test-restic-16 init
restic --pack-size 16 -r /mnt/nas/test-restic-16 backup /srv/testdata

restic --pack-size 32 -r /mnt/nas/test-restic-32 init
restic --pack-size 32 -r /mnt/nas/test-restic-32 backup /srv/testdata

restic --pack-size 64 -r /mnt/nas/test-restic-64 init
restic --pack-size 64 -r /mnt/nas/test-restic-64 backup /srv/testdata

Mide el tiempo transcurrido, el rendimiento del disco del repositorio, el uso del espacio temporal y la cantidad resultante de archivos de datos. Repite las ejecuciones cuando sea posible para que los efectos de la caché de páginas no determinen el resultado.

Calcula el espacio temporal antes de aumentar el tamaño de los paquetes

Restic documenta aproximadamente este requisito de espacio temporal:

tamaño del paquete × (conexiones al backend + 1)

Con cinco conexiones al backend y un objetivo de 64 MiB, se necesitan como mínimo 384 MiB de espacio temporal. Actualmente, el backend local usa de forma predeterminada menos conexiones que la mayoría de los backends remotos, pero la misma regla sigue siendo aplicable.

df -h "${TMPDIR:-/tmp}"
export TMPDIR=/mnt/fast-temp/restic
mkdir -p "$TMPDIR"

Los paquetes temporales más grandes también pueden aumentar el uso de memoria y hacer que más escrituras temporales lleguen al almacenamiento SSD en lugar de permanecer en la caché.

Mantén la misma configuración de tamaño de paquetes en los comandos que escriben en el repositorio

Restic indica que la configuración del tamaño de los paquetes debe especificarse en cada comando que modifique el repositorio. Usa una variable de entorno para todo el trabajo:

export RESTIC_REPOSITORY=/mnt/nas/restic-repo
export RESTIC_PACK_SIZE=64
export RESTIC_PASSWORD_FILE=/root/.config/restic/password

restic backup /srv/data
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6
restic prune

Cambiar el tamaño de los paquetes no redefine la división en fragmentos para la deduplicación, pero puede dejar paquetes de tamaños diferentes. Mantener la coherencia facilita interpretar el mantenimiento futuro y las comparaciones de rendimiento.

No esperes que los paquetes existentes cambien de tamaño automáticamente

Una nueva configuración del tamaño de los paquetes afecta a los datos recién creados o reempaquetados. Los archivos de paquetes existentes no se vuelven a escribir simplemente porque RESTIC_PACK_SIZE cambios.

Si quieres intencionadamente que prune reempaquete los paquetes existentes más pequeños, las versiones actuales de restic proporcionan --repack-smaller-than. Consulta primero las opciones de reempaquetado de prune.

restic prune --dry-run --repack-smaller-than 32M

Empieza con una ejecución de prueba. No fuerces un reempaquetado completo solo para que todos los archivos de paquetes tengan un aspecto uniforme.

Valida la integridad después de ajustar la configuración

restic check
restic check --read-data-subset=5%

Elige un calendario de verificación adecuado al tamaño del repositorio. La guía de solución de problemas del repositorio de restic considera las comprobaciones de integridad la base para diagnosticar daños en el repositorio.

Para un diseño de copias de seguridad más completo, combina el repositorio local con otra copia independiente. La estrategia de copias de seguridad 3-2-1 de ZimaOS explica por qué la redundancia local y un destino independiente resuelven distintos modos de fallo.

Usa esta regla de decisión

  • Mantén 16 MiB si las copias de seguridad ya se completan dentro del intervalo previsto o el cuello de botella está en otra parte.
  • Prueba 32 MiB si un repositorio grande en HDD dedica mucho tiempo a los metadatos y a las operaciones con archivos pequeños.
  • Prueba 64 MiB si 32 MiB ofrece mejoras y el uso de espacio temporal sigue siendo adecuado.
  • Deja de aumentarlo cuando las mejoras se estanquen o aumente la E/S temporal.

El mejor tamaño de paquete es el valor más pequeño que reduce de forma medible la sobrecarga del repositorio sin crear un nuevo cuello de botella.

Preguntas frecuentes sobre el tamaño de los paquetes de restic

¿Un tamaño de paquete mayor mejora la deduplicación de restic?

No. La deduplicación se realiza en la capa de blobs o fragmentos, antes de agrupar los blobs en archivos de paquetes.

¿Cambiar el tamaño de los paquetes volverá a escribir mis archivos de paquetes antiguos?

No. Los paquetes existentes se conservan hasta que las operaciones normales de limpieza o reempaquetado los vuelvan a escribir.

¿Qué tamaño de paquete debería probar primero en un NAS con HDD local?

Usa 16 MiB como valor de referencia y, después, compara 32 MiB y 64 MiB con la misma carga de trabajo.

Soporte y Consejos

Más para leer

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.