¿Cómo puedo examinar pasivamente el contenido de una secuencia de envío ZFS?

¿Cómo puedo examinar pasivamente el contenido de una secuencia de envío ZFS?

Tengo algunas "transmisiones de envío" ZFS almacenadas (es decir, se crearon redirigiendo la salida zfs senda un archivo). Me gustaría examinar el contenido de estas secuencias sin recibirlas ni escribirlas en un sistema de archivos; por ejemplo, me gustaría ver una lista de nombres de archivos dentro de la secuencia. ¿Hay alguna manera de hacer esto?

He leído y buscado un poco, pero no he encontrado nada que se parezca a lo que estoy hablando. Estoy usando ambosFreeBSDy elZFS en Linuximplementaciones de ZFS.

Respuesta1

Puede obtener información conectándola a zstreamdump -d, pero eso no proporcionará ninguna información sobre los nombres de los archivos directamente porque no hay archivos en la secuencia. El arroyo es una gran diferencia entre dos árboles descritos en bloques. Sin embargo, el código es público, por lo que si logra agregar detección y análisis de estructuras ZFS, podrá obtener más provecho de él.

Estructura interna ZFSesun árbol internamente y todas las operaciones se realizan sobre ese árbol. Los archivos, directorios, nombres de archivos, atributos y todo lo demás son solo datos en ese árbol. Las instantáneas, los volúmenes y los FS son las raíces del árbol, y cuando tomas otra instantánea, simplemente estás almacenando la raíz actual en algún lugar. Los sistemas en vivo generan nuevas raíces para cada transacción alejándose constantemente de las raíces más antiguas, mientras mantienen intactas muchas "hojas" de datos del árbol anterior. La secuencia representa una lista de operaciones que deben realizarse en el árbol A para convertirse en B.

Solo intento decir que es posible que no veas los datos que buscas en la transmisión porque no es necesario que estén allí. Cuando se suelta el archivo, los bloques correspondientes simplemente se liberan, por lo que no se puede saber cuál era el nombre del archivo o su contenido. Cuando se cambia el archivo, la identificación del objeto hace referencia a él, por lo que no obtendrá nada de la secuencia incluso si el archivo se reescribió desde cero pero la entrada del directorio no se actualizó.

Tendrás suerte si la transmisión no es una transmisión diferencial o si tienes algunos datos sobre su estado anterior. Pero eso se debe simplemente a que una secuencia completa transforma la raíz vacía en el árbol de destino, por lo que contiene todos los datos necesarios. Por lo tanto, puede agregar el código de análisis de bloques para zstreamdumpdetectar y procesar datos internos de ZFS.

Respuesta2

Respuesta corta:

No creo que haya ninguna forma de catalogar de manera útil el contenido de una secuencia de envío que sea más liviana que canalizarla a zfs recibir para recrearla como un conjunto de datos.

Respuesta mucho más larga:

Una secuencia de envío es una colección de datos a nivel de bloque de almacenamiento,nouna colección de datos a nivel de sistema de archivos. Una secuencia de envío no conoce ni se preocupa por archivos individuales; está diseñado para replicar lo que son esencialmente dispositivos de bloques sin formato. Mientras que un usuario puede usarlo exclusivamente zfs sendpara replicar conjuntos de datos ZFS con archivos almacenados directamente en ellos, otro puede usarlo para replicar ZVOL formateados con ext4, ntfs o incluso un sistema cifrado como LUKS; en estos casos, ZFS no tiene absolutamente ningún conocimiento de cuál es el contenidos del volumen, simplemente almacena los bloques sin procesar para ellos.

zfs sendfunciona exactamente igual ya sea que esté replicando un conjunto de datos o un zvol sin procesar, porque simplemente no le importa nada por debajo del nivel de almacenamiento del bloque sin procesar. No conoce nombres de archivos, tamaños de archivos, rutas ni nada más; sabe qué bloques pertenecen a una instantánea determinada de un zvol o instantánea, pero sí.nosaber cómo se relacionan cada uno de esos bloques entre sí.

Por lo tanto, no existe una forma sencilla de catalogar el contenido del archivo de unzfs send secuencia, porque noesNo hay catálogo interno de los archivos en uno. Incluso si sabe de manera concluyente que esta secuencia en particular es una replicación completa (no incremental) de un conjunto de datos ZFS no cifrado, tendría que analizar cada bloque línea por línea para intentar descubrir qué bloques contienen nombres de archivos.

Esencialmente, para extraer los nombres de archivos de una secuencia de envío, estaría haciendo el mismo trabajo que zfs receiveal aplicar esa secuencia a un conjunto de datos en primer lugar.

información relacionada