Ну, это действительно зависит от того, насколько пул будет доступен только для чтения. И нет, это не шутка.
Сначала немного терминологии: в ZFS вы импортируете пул и дополнительно монтируете (любые) файловые системы внутри него. Вы можете импортировать пул без монтажа любых файловых систем, передавая -N
к zpool import
и затем позже монтировать требуемые файловые системы с помощью zfs mount
. (Это вполне допустимый сценарий, если, например, вы хотите получить доступ только к одной файловой системе из множества, или если вы хотите сделать что-то, похожее на автономную очистку пула.)
ZFS не большой поклонник действительно доступ только для чтения. Например, если ZFS обнаружит ошибку, которую она может исправить, я считаю, что она исправит ошибку и запишет восстановленные данные на диск, даже если вы импортировали пул только для чтения. Насколько я понимаю, в ZFS parlace «только для чтения» применяется только к видимому пользователю состоянию пула и его наборов данных. Если, с другой стороны, вы делаете двоичную копию диска в файл (или набор файлов), делаете эти файлы действительно доступными только для чтения и пытаетесь импортировать пул оттуда, ZFS не сможет импортировать бассейн вообще, как ни старайся. Если вы сделаете файлы доступными для записи, все будет работать нормально. (Я действительно попробовал это всего несколько недель назад, хотя и использовал zvol, и ZFS категорически отказаласьимпортировать пул. Когда я установил zvol для чтения / записи вместо «только для чтения», пул импортировался нормально.) Другие файловые системы, такие как (в Linux) ext4 и, возможно, другие, справляются с этой ситуацией несколько изящно, но ZFS сопротивляется.
Если вам не повезло, и в системе, в которую вы импортируете пул, не установлена оперативная память ECC , то попытка ZFS исправить любые ошибки, с которыми она сталкивается, может даже ухудшить ситуацию , хотя мнения о том, является ли это реальным риском, расходятся. на практике. Лично я придерживаюсь мнения , что любые данные , которые я не безразлична для защиты с ZFS и снимков и избыточности хранения данных уровня и резервного копирования и этажерки заслуживает защиты , предлагаемых ECC RAM также, но многие компьютеры не имеют ECC RAM.
Таким образом, вы можете импортировать пул в режиме только для чтения с определенным альтернативным корнем, чтобы он не наступал ни на что другое, но вы должны знать, что он не обязательно действительно только для чтения в криминалистическом смысле. (Тем не менее, это гарантирует, что вы ничего не измените в пуле случайно.) Чтобы выполнить импорт только для чтения, предполагая, что пул назван tank
и что в нем доступны / доступны узлы устройства /dev
, вы бы используйте команду как:
# zpool import tank -d /dev -o readonly=on -R /mnt/someplace
Это будет выглядеть в /dev
для чего - нибудь , держащего ZFS пула с именем tank
, импортировать его, временно установив свойство пула readonly
в on
(что означает , что все инициированный пользователь запись будет отклонена) и временно установив его altroot
свойство /mnt/someplace
. (Эти значения свойств являются «временными» в том смысле, что они не сохраняются на диске (дисках) в качестве текущих значений свойств, поэтому, если вы экспортируете и повторно импортируете пул без них, значения вернутся к нормальному состоянию. Они могут возможно, будет записан в историю пула, который после импорта пула можно посмотреть с помощьюzpool history tank
если вы так склонны.) После импорта пула вы увидите ваши файлы в / mnt / someplace и получите обычный доступ только для чтения к ним, включая любые снимки, которые уже сделаны в наборах данных в пуле.
Учитывая ваш пример, я подозреваю, что вы будете использовать что-то вроде:
# zpool import zroot02 -d /dev -o readonly=on -R /mnt/my-fun-mountpoint
Когда вы закончите, не забудьте экспортировать пул:
# zpool export tank
или возможно
# zpool export zroot02
Это приведет к размонтированию всех файловых систем и других наборов данных в пуле, очистке всех буферов (в той степени, в которой требуется очистка в первую очередь), маркировке пула как не импортированного на все составляющие устройства и выполнению любых других необходимых служебных задач для обеспечения что пул можно безопасно переместить в другую систему и импортировать туда позже.