
Я перехожу со старой установки Ubuntu на новую. Во время перехода я хочу иметь возможность использовать один и тот же пул из старой и новой ОС.
Новая ОС будет на другом диске. Я выбираю ОС во время загрузки. Только одна ОС будет использовать пул в любой конкретный момент времени.
Это вообще возможно? Рискую ли я повреждением данных или потерей всего пула?
решение1
Пока пул экспортируется во время выключения и используется только одной системой за раз,то, что вы обсуждаете, не должно вызывать проблем.
ZFS действительно, действительно,Действительноне любит, когда один и тот же пул используется несколькими системами одновременно, даже в режиме только для чтения ( -o readonly=on
предоставленном zpool import
), но это, похоже, не относится к вашей ситуации.
Чтобы сохранить совместимость между двумя версиями, вам следует убедиться,нетдля запуска zpool upgrade
или zfs upgrade
особенно из новой установки. Любой из них может привести к потере доступа к пулу или файловой системе при запуске старой установки, но ни один из них не должен приводить к потере пула или файловой системы при запуске системы, поддерживающей обновленную версию ZFS на диске.
После завершения обновления, если вы захотите, вы сможете обновить пул до новейшего формата на диске и функций с помощью zpool upgrade
и/или zfs upgrade
по мере необходимости.
решение2
Если предположить, что вы говорите об использовании пула в качестве хранилища данных, а не о запуске в нем системного корня, то все будет в порядке.
В настоящее время у меня установлено две системы, одна на разделе EXT4, а другая в наборе данных zfs, который имеет sudo zfs set mountpoint=/ tank/my/dataset
.
Доступ к этому пулу из системы EXT4 — это проблема, потому что zfs mount -a
не получится смонтировать root. Поэтому вместо этого вот три способа.
В обоих случаях вам потребуется импортировать пул без его автоматического монтирования.
sudo zpool import tank -N
А) Изменение собственности
sudo mkdir /mnt/mydataset
sudo zfs set mountpoint=/mnt/mydataset tank/my/dataset
sudo zfs mount tank/my/dataset
# [do stuff in /mnt/mydataset]
# ...
sudo zfs unmount tank/my/dataset
# restore mountpoint so that the other system is able to boot from it
sudo zfs set mountpoint=/ tank/my/dataset
Б) Избегатьzfs mount
Если вам надоедает устанавливать точку монтирования туда-сюда, я обнаружил, что следующее тоже работает. Нет никаких гарантий, насколько это хакерски.
sudo mkdir /mnt/mydataset
sudo mount -t zfs -o zfsutil tank/my/dataset /mnt/mydataset
# [do stuff in /mnt/mydataset]
# ...
sudo umount /mnt/mydataset
Обратите внимание, что у меня возникли некоторые проблемы, когда я использовал этот вариант B) для chroot /mnt/mydataset
и затем использовал команды zfs другой системы. Я не знаю, связаны ли эти проблемы. Пока вы не сделаете что-то похожее, у вас все должно быть в порядке.
C) альтернативный корень
Вы можете указать altroot
свойство в пуле.
альтрут
Альтернативный корневой каталог. Если задано, этот каталог добавляется к любым точкам монтирования в пуле. Это может использоваться при проверке неизвестного пула, где точкам монтирования нельзя доверять, или в альтернативной среде загрузки, где типичные пути недействительны. не является
altroot
постоянным свойством. Оно действительно только во время работы системы. Настройка altroot по умолчанию на использование,cachefile = none
хотя это можно переопределить с помощью явной настройки.