Назад | Перейти на главную страницу

zfs переименовать / переместить корневую файловую систему в дочернюю

Аналогичный вопрос существуют но решение (используя mv) ужасно, потому что в этом случае он работает как «копирование, затем удаление», а не как чистый «ход».

Итак, я создал пул:

zpool create tank /dev/loop0

и синхронизировал мои данные из другого хранилища напрямую, так что теперь мои данные находятся в /tank.

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

Теперь я понял, что мне нужно, чтобы мои данные находились в дочерней файловой системе, а не в /tank файловая система напрямую.

Итак, как мне переместить или переименовать существующую корневую файловую систему, чтобы она стала дочерней в пуле?

Простое переименование не работает:

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

(Кстати, почему он жалуется, что наборы данных не находятся в одном пуле, если на самом деле у меня только один пул?)

Я знаю, что есть решения, которые предполагают копирование всех данных (mvили отправка всего набора данных на другое устройство и обратно), но разве не должно быть простого элегантного способа?

Замечу лишь, что на данном этапе я не забочусь о снимках (их еще нет).

Учитывая проблему, задокументированную @USDMatt, отправка / получение ZFS, вероятно, лучший способ.

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

Будьте осторожны при запуске rm -rf, если вы не измените точку монтирования, если у вас есть другие файловые системы в zpool вашего танка. Вы не хотите, чтобы случайно рекурсивно удалял содержимое новой файловой системы (/ tank / newname) или любых других дочерних файловых систем (/ tank / *).

(см. примечания в комментариях, это работает, но вы никогда не сможете удалить исходный снимок, поэтому это не лучшее решение)

С ZFS это на удивление просто: просто снимок, клонирование, а затем rm. Не требуется дополнительного места или времени для копирования.

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

Будьте осторожны при запуске rm -rf, если вы не измените точку монтирования, если в вашем zpool есть другие файловые системы. Вы не хотите, чтобы случайно рекурсивно удалять содержимое новой файловой системы (/ tank / newname) или любых других дочерних файловых систем (tank / *). Убедившись, что ваши файлы находятся не в корневой файловой системе (/ tank /), а только в вашей новой файловой системе, вы также можете удалить этот первоначальный снимок.

zfs delete tank@mydata

Я не думаю, что есть простой элегантный способ ... хотя вы можете просто изменить точку монтирования ...

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

Или, может быть, переименуйте резервуар и затем установите его там, где вам это нужно ...

Либо так, либо создайте файловую систему в нужном месте и отправьте / получите cp, mv или zfs ...