¿Cómo cambiar el nombre de un subvolumen BTRFS?

24

Tengo un sistema de archivos BTRFS con un conjunto de subvolúmenes. Hasta aquí todo bien. Necesito cambiar el nombre de un subvolumen, desafortunadamente el btrfsprograma no me permite cambiar el nombre de un subvolumen. La búsqueda con Google arrojó algunos resultados, uno dijo que solo podía mv, el otro dijo que solo podía snapshotcon un nuevo nombre y eliminar el subvolumen anterior. Antes de bloquear mi partición y tener que volver a cargarla desde la copia de seguridad (es bastante grande), mi pregunta es:

  • ¿Cuál es la mejor manera actualmente de cambiar el nombre de un subvolumen?
  • ¿Está bien simplemente mvo invalidará algunas estructuras internas?
  • ¿Hacer una nueva instantánea y eliminar el antiguo subvolumen es el camino a seguir, o esto tiene algunos inconvenientes?

Sé que todo sigue siendo experimental, pero para mis propósitos ha funcionado bastante bien (hasta ahora, y tengo copias de seguridad incrementales para cada día).

hochl
fuente
1
Me alegra saber que btrfs está funcionando bien para usted. También me está funcionando bien hasta ahora. No hay problemas.
MountainX para Monica Cellio

Respuestas:

16

Solo mveso Esa es la forma recomendada en la documentación de la comunidad Ubuntu .

Y para aclarar aún más por qué esa es la forma correcta de hacerlo, aquí hay una cita de la guía btrfs sysadmin:

Instantáneas

Una instantánea es simplemente un subvolumen que comparte sus datos (y metadatos) con algún otro subvolumen, utilizando las capacidades COW de btrfs. Una vez que se realiza una instantánea [grabable], no hay diferencia de estado entre el subvolumen original y el nuevo subvolumen de instantánea. Para volver a una instantánea, desmonte el subvolumen original modificado y monte la instantánea en su lugar. En este punto, el subvolumen original se puede eliminar si lo desea. Como una instantánea es un subvolumen, también son posibles las instantáneas de las instantáneas.

MountainX para Monica Cellio
fuente
8

Hay algunas cosas importantes a tener en cuenta. Los nombres:

btrfs Subvolume: insidesistema de archivos de contenedor de datos independiente . Se representa como directorio del FS existente. Si crea un nuevo subvolumen, estará vacío, listo para usar el bloque de datos lógico dentro del sistema de archivos. Muy conveniente de usar donde los datos deben estar separados lógicamente, por ejemplo, diferentes máquinas virtuales o diferentes clientes en diferentes subvolúmenes. Esto permite la very fasteliminación de todos los bloques de datos lógicos con solo el comando de eliminación de subvolumen.

Instantánea de btrfs: una copia del existingsubvolumen con todos sus datos en el momento en que se realizó la instantánea. Se puede utilizar como copia de seguridad operativa para revertir la configuración o los cambios, por ejemplo, hacer una instantánea de subvolumen, hacer cambios (VM o datos), probar si todo está bien, después de un período de gracia eliminar la instantánea. Es importante tener en cuenta: las instantáneas se pueden leer solo ( -rcambiar) y, por lo tanto, se pueden usar como bloques incrementales de cambios FS y, posiblemente, se pueden transferir a otro BTRFS.

Limitaciones actuales (2016-12-30) BTRFS:

Copiar o mover datos entre subvolúmenes, por ejemplo, mv dir1/dataset1 dir_subvolume1/produce todos los io reales para copiar datos a otro subvolumen y, en caso de movimiento, eliminar del original. Y una copia muy eficiente de toneladas de datos simplemente haciendo referencias y, por lo tanto, utilizando la función COW de BTRFS:

cp -a --reflink=always dir1/dataset1 dir_subvolume1/

y si es necesario:

rm -rf dir1/dataset1

Solo la instantánea de subvolumen de lectura se puede renombrar (mover con mv) en el nivel de directorio existente, pero no se puede renombrar / mover a un nivel de subdirectorio diferente. por ejemplo, mv /btrfs/subvol_snap1 /btrfs/.snaphotsno es posible, no produce explicado mucho error: mv: cannot move 'subvol_snap1' to '.snapshots/subvol_snap1': Read-only file system. Para poder mover una instantánea de este tipo, debe crear una nueva instantánea de solo lectura de la instantánea existente de solo lectura a la nueva ubicación preferida, y luego eliminar la anterior:

btrfs sub snap -r /btrfs/subvol_snap1 /btrfs/.snaphots/subvol_snap1
btrfs sub del /btrfs/subvol_snap1

Solo para una vida más fácil:

btrfs sub list /btrfs

Espero que esto ahorre toneladas de tiempo a todos los nuevos fanáticos de btrfs :)

Arunas Bartisius
fuente
4

Si desea cambiar el nombre del volumen raíz a un subvolumen anidado, deberá tomar una instantánea y luego hacer una find $ROOT_VOL -xdev -deletepara eliminar el contenido anterior del volumen raíz. La manipulación inversa (renombrar un subvolumen al volumen raíz) no parece posible.

Tobu
fuente