Аналогичный вопрос существуют но решение (используя 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 ...