Estoy tratando de hacer copias vacías de algunos archivos / directorios, pero de las diversas formas que conozco, todas parecen subóptimas.
Por ejemplo, btrfs puede, con el uso de cp --reflink=auto
generar rápidamente copias vacías de archivos.
Lo que he intentado:
- Enlaces simbólicos: No es bueno. Archivo renombrado, enlace roto.
- Enlaces duros: mejor, pero aún no es bueno. Los cambios en un archivo cambiarán el otro, y no necesariamente quiero que se cambie el otro archivo.
- Cree una instantánea del conjunto de datos, luego clone la instantánea: Esto puede funcionar, pero no bien. A menudo no busco una copia de todo el conjunto de datos, o que las copias actúen como otro conjunto de datos. Luego están las relaciones padre / hijo entre el clon / instantánea / original, que, según tengo entendido, son difíciles, si no imposibles de romper.
- Con el uso
zfs send/receive
y la deducción habilitada, replicar el conjunto de datos en un nuevo conjunto de datos: esto evita las relaciones padre / hijo de usar un clon, pero aún crea innecesariamente otro conjunto de datos, y aún sufre de la lentitud involucrada en los archivos que deben leerse al 100% y los bloques referenciados nuevamente en lugar de escritos. - Copie los archivos y deje que Dedp haga su trabajo: esto funciona, pero es lento porque los archivos deben leerse al 100% y luego los bloques deben hacer referencia nuevamente en lugar de escribir.
La lentitud del envío / recepción de zfs y la copia física o sincronización se exacerba aún más porque la mayoría de las cosas se almacenan comprimidas, y deben descomprimirse durante la lectura, luego comprimirse antes de que dedup se active para hacer referencia a bloques duplicados.
En toda mi investigación, no he podido encontrar nada remotamente parecido a la simplicidad de --reflink en btrfs.
Entonces, ¿hay alguna manera de crear copias de vaca en ZFS? ¿O es "físicamente" copiar y dejar que Dedp haga su trabajo la única opción real?
cp --reflink=auto
.La opción 5 es la mejor.
Con respecto a los conjuntos de datos padre / hijo en la opción 3, puede promocionar un clon y ya no será un hijo del conjunto de datos clonado. Todavía no usará bloques adicionales.Editar: señaló que esto solo invierte la relación padre / hijo, no la destruye.Con respecto a las cosas que se comprimen / cifran y que ralentizan la copia, eso es completamente falso. Su procesador es mucho más rápido que su dispositivo de bloqueo (incluso si usa SSD). Solo para algunos números de ejemplo, digamos que toma 10 segundos leer un bloque, pero solo toma un segundo descomprimirlo y 2 segundos descifrarlo. El bloque 1 se lee en 10 segundos y se envía a la CPU. La CPU comienza a descomprimir y descifrar mientras el disco comienza a leer el bloque 2. La CPU finalizará su tarea en 3 segundos y luego pasará los siguientes 7 segundos esperando en el disco. Mientras tanto, el disco ha pasado exactamente la misma cantidad de tiempo leyendo esos dos bloques (20 segundos) independientemente de si los bloques están comprimidos o no.
Del mismo modo, mientras se escribe, solo se retrasa el primer bloque. La CPU comprime / cifra el bloque 1 y lo envía al disco. Mientras el disco escribe el bloque 1, la CPU comenzará a comprimir / cifrar los bloques posteriores. La CPU masticará bloques mucho más rápido de lo que el disco puede escribirlos, por lo que no es un problema. (Sí, es más complejo que esto, pero esta es la esencia).
Perdón por la explicación demasiado larga de un punto menor en su pregunta, pero quería aclarar esa idea errónea.
fuente