zfs renombrar / mover el sistema de archivos raíz al hijo

9

Existe una pregunta similar, pero la solución (usar mv) es horrible porque en este caso funciona como "copiar, luego eliminar" en lugar de "mover" puro.

Entonces, creé un grupo:

zpool create tank /dev/loop0

y envié mis datos desde otro almacenamiento allí directamente para que mis datos ahora estén en /tank.

zfs list
NAME      USED  AVAIL  REFER  MOUNTPOINT
tank      591G  2.10T   591G  /tank

Ahora me he dado cuenta de que necesito que mis datos estén en un sistema de archivos hijo, no /tankdirectamente en el sistema de archivos.

Entonces, ¿cómo puedo mover o cambiar el nombre del sistema de archivos raíz existente para que se convierta en un elemento secundario dentro del grupo?

Cambiar el nombre simple no funcionará:

zfs rename tank tank/mydata
cannot rename to 'tank/mydata': datasets must be within same pool

(Por cierto, ¿por qué se queja de que los conjuntos de datos no están dentro del mismo grupo cuando, de hecho, solo tengo un grupo?)

Sé que hay soluciones que implican copiar todos los datos ( mvo enviar todo el conjunto de datos a otro dispositivo y viceversa), pero ¿no debería haber una forma elegante y sencilla?

Solo observando que no me importan las instantáneas en esta etapa (aún no hay ninguna que me importe).

Anton
fuente

Respuestas:

4

(vea las notas en los comentarios, esto funciona, pero nunca podrá eliminar la instantánea inicial, por lo que no es una buena solución)

Con ZFS esto es sorprendentemente sencillo: solo una instantánea, clonar y luego rm. No se requiere espacio adicional ni tiempo de copia.

zfs snapshot tank@mydata
zfs clone tank@mydata tank/newname
zfs set mountpoint=/beep/boop tank/newname
rm -rf /tank/*

Tenga cuidado al ejecutar rm -rf si no cambia el punto de montaje de si tiene otros sistemas de archivos en su zpool. No desea eliminar recursivamente el contenido del nuevo sistema de archivos (/ tank / newname) o cualquier otro sistema de archivos hijo (tank / *) accidentalmente. Una vez que haya confirmado que sus archivos no están en la raíz fs (/ tank /) y solo en su nuevo sistema de archivos, también puede eliminar esa instantánea inicial.

zfs delete tank@mydata
notpeter
fuente
Parece una respuesta plausible (no se me ocurre otra forma de obtener los datos en un nuevo conjunto de datos sin moverlo) pero desafortunadamente no puede eliminar esta instantánea original. Los clones tienen algunos efectos secundarios incómodos. No puede eliminar tank @ mydata ya que el nuevo conjunto de datos depende de ello. Puede promocionar el nuevo conjunto de datos, que moverá tank @ mydata a tank / newname @ mydata, pero ahora ha cambiado la dependencia y obtiene errores divertidos de "conjunto de datos ya existe" si intenta eliminar el nuevo conjunto de datos (al menos en FreeBSD, aunque supongo que esto es probablemente específico de ZFS en lugar de OS).
USD Matt
@USDMatt: Tienes toda la razón. Esto funciona perfectamente si está trabajando con subfileystems (tank / a -> tank / a @ snap -> tank / asnap-clone -> tank / renamed-asnap-clone) pero no si está trabajando en la raíz del zpool Se siente como un error, acéptelo como otra razón para nunca llenar el sistema de archivos raíz de su grupo).
notpeter
4

Dado el problema documentado por @USDMatt, ZFS enviar / recibir es probablemente la mejor manera de hacerlo.

zfs snapshot tank@snap
zfs send tank@snap | zfs receive tank/anotherfs
zfs set mountpoint=/beep/boop tank/anotherfs
rm -rf /tank/*
zfs destroy tank@snap

Tenga cuidado cuando ejecute rm -rf si no cambia el punto de montaje de si tiene otros sistemas de archivos en su tanque zpool. No desea eliminar recursivamente el contenido del nuevo sistema de archivos (/ tank / newname) o cualquier otro sistema de archivos hijo (/ tank / *) accidentalmente.

notpeter
fuente
0

No creo que haya una manera elegante y simple ... aunque podrías cambiar tu punto de montaje ...

mkdir /tank
zfs set mountpoint=/tank/mydata <possibly renamed tank set>

O tal vez cambie el nombre del tanque y luego móntelo donde lo necesite ...

O eso, o crear un sistema de archivos en el lugar correcto y enviar / recibir cp, mv o zfs ...

ewwhite
fuente