Cómo realizar una copia de seguridad con instantáneas de Btrfs
BTRFS es un sistema de archivos moderno y de código abierto implementado con funciones avanzadas. Funciona con el mecanismo de copia en escritura (CoW).
Está incluido en el kernel de Linux de la línea principal. Las características notables de Btrfs son datos y metadatos de copia en escritura, instantáneas, soporte RAID incorporado, cambio de tamaño y desfragmentación en línea, compresión transparente, almacenamiento eficiente para archivos pequeños, etc.
Instantánea es una copia de tiempo determinado de Btrfs subvolumen. Las instantáneas se pueden escribir de forma predeterminada. Btrfs permite crear instantáneas legibles que son útiles para realizar copias de seguridad.
En este tutorial, aprendemos cómo crear instantáneas Btrfs, copias de seguridad incrementales y restaurarlas.
Información del sistema
Estoy usando Fedora y ahora Fedora 33 tiene Btrfs por defecto. Mi sistema tiene un disco de arranque de 20GB y un disco adicional de 10GB con sistema de archivos Btrfs.
Aquí sda es el disco de arranque, mientras que sdb es el disco adicional que usaremos para la instantánea de btrfs.
Listado de la información del disco:
$ ls -l /dev | grep sd brw-rw----. 1 root disk 8, 0 Nov 21 08:42 sda brw-rw----. 1 root disk 8, 1 Nov 21 08:42 sda1 brw-rw----. 1 root disk 8, 2 Nov 21 08:42 sda2 brw-rw----. 1 root disk 8, 16 Nov 21 08:57 sdb brw-rw----. 1 root disk 8, 17 Nov 21 08:57 sdb1
Para explicar, he creado LVM y lo he montado en / mnt / linoxide_btrfs1 con el sistema de archivos btrfs.
Listado de PV, VG y LV creado:
$ pvs && vgs && lvs PV VG Fmt Attr PSize PFree /dev/sdb1 linoxide_vg lvm2 a-- <10.00g <5.00g VG #PV #LV #SN Attr VSize VFree linoxide_vg 1 1 0 wz--n- <10.00g <5.00g LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert linoxide_lv1 linoxide_vg -wi-a----- 5.00g
La salida de la información de montaje:
$ df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 286M 0 286M 0% /dev tmpfs 294M 0 294M 0% /dev/shm tmpfs 294M 4.5M 289M 2% /run tmpfs 294M 0 294M 0% /sys/fs/cgroup /dev/sda2 20G 2.3G 18G 12% / /dev/sda1 200M 12M 189M 6% /boot/efi tmpfs 59M 0 59M 0% /run/user/1000 tmpfs 59M 0 59M 0% /run/user/0 /dev/mapper/linoxide_vg-linoxide_lv1 5.0G 17M 4.5G 1% /mnt/linoxide_btrfs1
Instantánea de Btrfs
Para crear una instantánea btrfs, primero cree una subvolumen.
Paso 1. Cree un subvolumen
Para crear un subvolumen llamado ‘/ mnt / linoxide_btrfs1 / subvol1’, ejecute:
$ sudo btrfs subvolume create /mnt/linoxide_btrfs1/subvol1
Paso 2. Copie los archivos al subvolumen
Copiemos algunos archivos de datos en subvolúmenes. El siguiente comando copia algunos archivos de / etc / a subvol1.
$ cd /mnt/linoxide_btrfs1/subvol1 $ cp /etc/[abc]* . $ ls -l -rw-r--r--. 1 root root 16 Nov 21 09:25 adjtime -rw-r--r--. 1 root root 1529 Nov 21 09:25 aliases -rw-r--r--. 1 root root 12288 Nov 21 09:25 aliases.db -rw-------. 1 root root 541 Nov 21 09:25 anacrontab -rw-r--r--. 1 root root 55 Nov 21 09:25 asound.conf -rw-r--r--. 1 root root 2853 Nov 21 09:25 bashrc -rw-r--r--. 1 root root 112 Nov 21 09:25 boto.cfg -rw-r--r--. 1 root root 37 Nov 21 09:25 centos-release -rw-r--r--. 1 root root 51 Nov 21 09:25 centos-release-upstream -rw-r--r--. 1 root root 1053 Nov 21 09:25 chrony.conf
Paso 3. Crea una instantánea
Creemos una instantánea del subvolumen1 (/ mnt / linoxide_btrfs1 / subvol1).
Nota la -r
marca para solo lectura. Asegúrese de crear una instantánea como de solo lectura si desea usar los comandos de envío / recepción (explicados en la siguiente sección).
Para crear una instantánea de solo lectura de ‘/ mnt / linoxide_btrfs1 / subvol1’ en ‘/mnt/linoxide_btrfs1/.snapshots/subvol1-day1’, ejecute:
$ sudo btrfs subvolume snapshot -r /mnt/linoxide_btrfs1/subvol1 /mnt/linoxide_btrfs1/.snapshots/subvol1-day1
Verifique el contenido de la instantánea:
$ cd .snapshots/ $ ls -l drwxr-xr-x. 1 root root 446 Nov 21 09:25 subvol1-day1 $ cd subvol1-day1/ $ ls -l -rw-r--r--. 1 root root 16 Nov 21 09:25 adjtime -rw-r--r--. 1 root root 1529 Nov 21 09:25 aliases -rw-r--r--. 1 root root 12288 Nov 21 09:25 aliases.db -rw-------. 1 root root 541 Nov 21 09:25 anacrontab -rw-r--r--. 1 root root 55 Nov 21 09:25 asound.conf -rw-r--r--. 1 root root 2853 Nov 21 09:25 bashrc -rw-r--r--. 1 root root 112 Nov 21 09:25 boto.cfg -rw-r--r--. 1 root root 37 Nov 21 09:25 centos-release -rw-r--r--. 1 root root 51 Nov 21 09:25 centos-release-upstream -rw-r--r--. 1 root root 1053 Nov 21 09:25 chrony.conf
Instantánea de Btrfs usando enviar
Hemos tomado una instantánea en el mismo disco que el subvolumen, lo que no es bueno para la estrategia de copia de seguridad. En caso de un desastre como la corrupción del disco, perderá la opción de recuperación.
BTRFS tiene una solución para eso. Podemos enviar instantáneas a un sistema remoto o disco duro externo usando el comando btrfs send y btrfs receive. Están basados en SSH. El sistema remoto también debe formatearse como BTRFS.
Déjame explicarte con un ejemplo.
Cree un nuevo disco con el sistema de archivos btrfs montado en / mnt / linoxide_btrfs2.
$ df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 286M 0 286M 0% /dev tmpfs 294M 0 294M 0% /dev/shm tmpfs 294M 4.5M 289M 2% /run tmpfs 294M 0 294M 0% /sys/fs/cgroup /dev/sda2 20G 2.3G 18G 12% / /dev/sda1 200M 12M 189M 6% /boot/efi tmpfs 59M 0 59M 0% /run/user/1000 tmpfs 59M 0 59M 0% /run/user/0 /dev/mapper/linoxide_vg-linoxide_lv1 5.0G 17M 4.5G 1% /mnt/linoxide_btrfs1 /dev/mapper/linoxide_vg2-linoxide_lv2 5.0G 17M 4.5G 1% /mnt/linoxide_btrfs2
En este ejemplo, el volumen de Btrfs de destino es el segundo disco btrfs montado como / mnt / linoxide_btrfs2.
El siguiente comando para enviar una instantánea a un destino remoto:
$ sudo sudo btrfs send /mnt/linoxide_btrfs1/.snapshots/subvol1-day1 | sudo btrfs receive /mnt/linoxide_btrfs2 At subvol /mnt/linoxide_btrfs1/.snapshots/subvol1-day1 At subvol subvol1-day1
Verifique los archivos de datos:
$ cd /mnt/linoxide_btrfs2/ $ ls -l drwxr-xr-x. 1 root root 446 Nov 21 09:25 subvol1-day1 $ cd subvol1-day1/ $ ls -l -rw-r--r--. 1 root root 16 Nov 21 09:25 adjtime -rw-r--r--. 1 root root 1529 Nov 21 09:25 aliases -rw-r--r--. 1 root root 12288 Nov 21 09:25 aliases.db -rw-------. 1 root root 541 Nov 21 09:25 anacrontab -rw-r--r--. 1 root root 55 Nov 21 09:25 asound.conf -rw-r--r--. 1 root root 2853 Nov 21 09:25 bashrc -rw-r--r--. 1 root root 112 Nov 21 09:25 boto.cfg -rw-r--r--. 1 root root 37 Nov 21 09:25 centos-release -rw-r--r--. 1 root root 51 Nov 21 09:25 centos-release-upstream -rw-r--r--. 1 root root 1053 Nov 21 09:25 chrony.conf
Ahora tienes un copia de seguridad completa que también se puede utilizar como DR.
Respaldo incremental
Snapshot también puede enviar copias de seguridad de forma incremental. Cuando se cambia el nombre de algún directorio, Rsync elimina el directorio y transfiere todos los datos nuevamente, mientras que los BTRF solo transfieren algunos bytes de metadatos.
Tomemos otra instantánea.
$ sudo btrfs subvolume snapshot -r /mnt/linoxide_btrfs1/subvol1 /mnt/linoxide_btrfs1/.snapshots/subvol1-day2
Usando -p
flag, debe especificar la instantánea base y esta instantánea debe existir en el origen y el destino. El siguiente comando enviará la diferencia entre dos instantáneas base al destino.
$ sudo btrfs send -p /mnt/linoxide_btrfs1/.snapshots/subvol1-day1 /mnt/linoxide_btrfs1/.snapshots/subvol1-day2 | sudo btrfs receive /mnt/linoxide_btrfs2
Cómo restaurar la instantánea Btrfs
En esta sección, explicaré cómo restaurar datos de una instantánea tomada anteriormente. Tomemos el escenario donde el archivo se elimina por error. Puede recuperar la última instantánea o incluso recuperar una versión anterior del archivo a partir de instantáneas anteriores.
Simplemente puede usar el comando cp para restaurar el archivo eliminado:
$ sudo cp /mnt/linoxide_btrfs1/.snapshots/subvol1-day1/chrony.conf /mnt/linoxide_btrfs1/subvol1
Supongamos que eliminó todo el subvolumen, incluso en ese caso, con el uso del comando cp, puede restaurar todo el contenido de la instantánea:
$ sudo cp -r /mnt/linoxide_btrfs1/.snapshots/subvol1-day1 /mnt/linoxide_btrfs1/subvol1
O puede restaurar el subvolumen usando el comando btrfs snapshot:
$ sudo btrfs subvolume snapshot /mnt/linoxide_btrfs1/.snapshots/subvol1-day1 /mnt/linoxide_btrfs1/subvol1
Limpieza de instantáneas
Cuando realiza una copia de seguridad incremental periódica con una instantánea de btrfs, puede tener muchos de ellos acumulados. Esto puede crear confusión y ocupar mucho espacio en el disco. También puede purgar las instantáneas antiguas no deseadas mediante la eliminación de instantáneas. Mientras realiza la purga, tenga en cuenta que para realizar un envío incremental, necesita la última instantánea.
$ sudo btrfs subvolume delete /mnt/linoxide_btrfs1/.snapshots/subvol1-day1
Conclusión
Btrfs ha madurado a un ritmo rápido. Hoy en día, tiene una amplia gama de capacidades como compresión, instantáneas, integridad de datos y rendimiento que lo convierten en un sistema de archivos listo para producción. Espero que este artículo sea útil para usar instantáneas de BTRFS. Déjame saber tus opiniones en la sección de comentarios.