Cómo clonar el sistema de archivos btrfs en diferentes medios para preservar los datos compartidos de las instantáneas

9

He decidido probar las capacidades de incursión de btrfs. Configuré un btrfs con

sudo mkfs.btrfs -m raid10 -d raid10 /dev/sda9 /dev/sdb9 /dev/sdc9 /dev/sdd9

Ahora quiero clonar mi partición btrfs existente (que se encuentra encima de linux-raid). no puedo usar una simple cp -a, porque hay más de 40 copias de seguridad basadas en instantáneas (que deseo conservar), y simplemente llenaría todo el almacenamiento que puedo ahorrar varias veces.

Hasta ahora puedo ver dos opciones:

partclone.btrfs -s /path/to/original/fs -o /dev/sda9 -b

y supongo que también necesitaría btrfs balance start /dev/sda9

y

hacer: copie cada vez más con cp -atodo lo que cabe en el almacenamiento, y luego úselo beduppara desduplicar archivos y hacer un bucle.

¿Cuál es el método preferido (es decir, la mejor práctica)? Preferiría mucho el primero; Debería llevar mucho menos tiempo. O tal vez hay algún "mal" que acecha en cualquiera de estos procedimientos (además del hecho de que btrfs es experimental, por supuesto)


La primera pregunta es simplemente fuera de cuestión; Por maravillosa que sea la herramienta partclone.btrfs, obviamente no es compatible con sistemas de archivos de dispositivos múltiples. :-(

Adam Ryczkowski
fuente

Respuestas:

7

Hice una pregunta similar hace 2 años.

Sin embargo, en mi caso, solo estaba planeando copiar un solo dispositivo en raid0.

Finalmente encontré una solución . En el momento no podía convertir de raid0 a raid10, pero parece que desde el kernel 3.3, ahora puede hacerlo. Entonces, esa solución puede funcionar para usted al final.

Un problema con ese enfoque es que copia el fsuid. Lo que significa que no puede montar tanto el FS como su copia en la misma máquina. En ese momento, no había ninguna herramienta para cambiar el fsuidFS, pero podría haber cambiado ahora.

La idea es agregar una capa de copia en escritura en la parte superior del dispositivo original para que se pueda escribir, pero cualquier modificación se realiza en otro lugar que puede descartar más adelante. Eso significa que necesita espacio de almacenamiento adicional (por ejemplo, en una unidad externa).

Luego monte ese COW'd FS en lugar del original, agregue los dispositivos para la copia FS y retire el dispositivo del COW.

Para copiar en escritura, puede usar el mapeador de dispositivos.

Para la copia desechable en el área de escritura, aquí uso un dispositivo de bucle.

Digamos que quieres clonar /dev/sdaen /dev/sd[bcde]:

Crea la tienda de vuelta COW:

truncate -s 100G /media/STORE/snap-store
losetup /dev/loop0 /media/STORE/snap-store

Ahora desmonte el FS de origen si está montado y modprobe -r btrfspara asegurarse de que no va a interferir y hacer que olvide el escaneo de su dispositivo.

Luego haga el dispositivo COW'd:

echo "echo 0 $(blockdev --getsize /dev/sda) snapshot /dev/sda /dev/loop0 N 8 | dmsetup create cowed

Ahora /dev/mapper/cowedes como, /dev/sdaexcepto que cualquier cosa escrita en él terminará /dev/loop0y /dev/sdaquedará intacta.

Ahora puedes montarlo:

mount /dev/mapper/cowed /mnt

Agregue los otros dispositivos:

btrfs dev add /dev/sd[bcde] /mnt

Y quite el viejo:

btrfs dev del /dev/mapper/cowed /mnt

Cuando termine, es posible que desee apagar y desconectar o hacer /dev/sdasolo lectura porque, dado que tiene el mismo líquido que los otros, btrfsaún podría estropearlo.

Ahora, si entiendo correctamente, suponiendo que tenga un btrfs-prog reciente, debería poder hacer:

btrfs balance start -d convert=raid10 /mnt

Para convertir a raid10. En teoría, eso debería garantizar que cada fragmento de datos se copie en al menos 2 discos.

Recomiendo encarecidamente que primero realice pruebas en un btrfs ficticio en dispositivos de bucle, ya que todo eso proviene de la memoria y podría haberme equivocado (consulte, por ejemplo, mi respuesta inicial antes de mi edición).

Tenga en cuenta que desde el kernel 3.6, btrfs implementa enviar / recibir un poco como en zfs. Esa podría ser una opción para ti.

Stéphane Chazelas
fuente
Gran respuesta, gracias. Lo probaré Ahora estoy experimentando con el envío / recepción.
Adam Ryczkowski
@ Stéphane Chazelas Los enlaces humanos están muertos (probablemente para siempre). ¿Podrías ajustar tu respuesta?
Jonas Stein
4

La idea de Stephane se puede hacer a través de las herramientas incorporadas de btrfs (por eso es genial): haga que el viejo btrfs sea un dispositivo semilla a través de btrfstune -S 1 /dev/device, agregue dispositivos, elimine el dispositivo semilla, haga btrfs balance start. Un dispositivo semilla es un dispositivo de solo lectura que puede ser parte de un sistema de archivos de lectura y escritura.

ignis
fuente
1

Intenté seguir la sugerencia de @ ignis de usar la siembra pero tuve problemas con ella; el sistema arrojó un error al intentar eliminar el dispositivo semilla y no pude superarlo. Luego descubrí que existe (ahora - btrfs-progs v3.19-64-g19a806f, tal vez no antes) el comando:

  btrfs replace start [-Bfr] <srcdev>|<devid> <targetdev> <path>

lo que hizo que clonar mi sistema de archivos btrfs existente (que estaba en un volumen lógico LVM) en una nueva partición fuera de lugar. Tenga en cuenta que a mayo de 2015 no funciona para los perfiles RAID5 / 6; consulte la página de manual para obtener información completa.

gogoud
fuente
1
¡Nunca lo use con btrfs replace startfines de copia de seguridad! ¡Daña el árbol de su dispositivo y hace que la unidad no se pueda montar! Me fue imposible recuperarme de los errores, así que restauré una copia de imagen de otro dispositivo de bloque con dd -tool. Solo se usa btrfs replacepara la migración de la unidad final.
Karmus
0

Opción 1: copia de datos y luego cambiar UUID

Asegúrese de que la partición de origen esté desmontada y no se monte automáticamente.

Usar ya sea dd(lento, tonto) opartclone.btrfs -b -s /dev/src -o /dev/target

Se usa btrfstune -upara cambiar el UUID después de la copia y antes del montaje.

Avisador de pérdida de datos : Do NO trate de (auto) montar ya sea original o la copia hasta que el UUID ha cambiado


Opcion 2 - btrfs-clone

No lo he intentado personalmente btrfs-clone, pero pretende clonar un sistema de archivos BTRFS existente en uno nuevo, clonando cada subvolumen en orden.

Tom Hale
fuente