Actualmente estoy tomando instantáneas de mi NAS basado en ZFS todas las noches y semanalmente, un proceso que me ha salvado el culo varias veces. Sin embargo, aunque la creación de la instantánea es automática (desde cron), la eliminación de instantáneas antiguas sigue siendo una tarea manual. Obviamente, existe el riesgo de que si me atropella un autobús o no se realiza la tarea manual, el NAS se quedará sin espacio en disco.
¿Alguien tiene buenas formas / scripts que usan para administrar la cantidad de instantáneas almacenadas en sus sistemas ZFS? Idealmente, me gustaría un script que repita todas las instantáneas para un sistema de archivos ZFS determinado y elimine todas las últimas instantáneas n para ese sistema de archivos.
Por ejemplo, tengo dos sistemas de archivos, uno llamado tank
y otro llamado sastank
. Las instantáneas se nombran con la fecha en que se crearon: sastank@AutoD-2011-12-13
por lo tanto, un sort
comando simple debe enumerarlas en orden. Estoy buscando mantener las últimas 2 semanas de instantáneas diarias tank
, pero solo los últimos dos días de instantáneas sastank
.
sort -r
antes delsed
comando.sed
parece salir al final de la lista más allá de las primeras 15 líneas, que en el orden predeterminado es la más reciente. Voltear la lista significa que obtengo las instantáneas más antiguas en la parte inferior.Caso más general de obtener la instantánea más reciente basada en la fecha de creación, no por nombre.
zfs list -H -t snapshot -o name -S creation | head -1
Alcanzado a un nombre de sistema de archivos específico
TestOne
zfs list -H -t snapshot -o name -S creation -d1 TestOne | head -1
-H
: Sin encabezado, por lo que la primera línea es un nombre de instantánea-t snapshot
: Lista de instantáneas (la lista puede enumerar otras cosas como grupos y volúmenes)-o name
: Muestra la propiedad del nombre de la instantánea.-S creation
: CapitalS
denota orden descendente , basado en el tiempo de creación. Esto coloca la instantánea más reciente como la primera línea.-d1 TestOne
: Dice incluir niños, lo que parece confuso pero es porque, en lo que respecta a este comando, las instantáneas de TestOne son niños. Esto NO listará instantáneas de volúmenes dentro de TestOne comoTestOne/SubVol@someSnapshot
.| head -1
: Canalice a la cabeza y solo regrese la primera línea.fuente
-d1
. Esa fue la clave de la pregunta "¿Cómo obtengo todas las instantáneas para un conjunto de datos dado?"Esto no responde totalmente a la pregunta en sí, pero no olvide que puede eliminar rangos de instantáneas.
Destruiría todas las instantáneas desde "20160918" hasta "20161107" inclusive. Cualquiera de los dos extremos puede dejarse en blanco para significar "más antiguo" o "más nuevo". Entonces podrías cocinar algo que descubra la "n" y luego destruir "...% n" ...
Lamento resucitar una vieja pregunta.
fuente
growse's no funcionó en OpenIndiana para mí. No entendió -0 para xargs.
Si usa sort, tenga en cuenta que ordena alfabéticamente lo que puede no ser deseado, ya que probablemente desee encontrar el más reciente.
Aquí hay un código que eliminará todas las instantáneas excepto las últimas.
Elimina el 'eco' para ir a vivir.
Fuentes: http://sed.sourceforge.net/sed1line.txt
fuente
Puede que haya resuelto esto con un poco de bash-fu.
Guau. Se siente tan mal.
fuente
La ruta para head es necesaria en Solaris, pero debería funcionar sin la ruta en otras distribuciones.
fuente