Ну, это действительно зависит от , насколько пул доступен только для чтения. И нет, это не шутка.
Во-первых, немного терминологии: в ZFS вы импортируете пул и при желании монтируете (любые) файловые системы в нем. Вы можете импортировать пул без монтирования каких-либо файловых систем, передав -N
в zpool import
, а затем смонтируйте любые нужные файловые системы, используя zfs mount
. (Это вполне допустимый сценарий, если, например, вы хотите получить доступ только к одной файловой системе из многих, или если вы хотите сделать что-то похожее на автономную очистку пула.)
ZFS не работает. большой поклонник доступа только для чтения.Например, если ZFS обнаруживает ошибку, которую можно исправить, я считаю, что она исправит ошибку и запишет восстановленные данные на диск , даже если вы импортировали пул как доступный только для чтения. Насколько я понимаю, в Parlace ZFS «только для чтения» применяется только к видимому пользователю состоянию пула и его наборов данных. Если, с другой стороны, вы сделаете двоичную копию диска в файл (или набор файлов), сделаете эти файлы действительно доступными только для чтения и попытаетесь импортировать пул оттуда, ZFS не сможет импортировать бассейн вообще, как ни старайся. Если вы сделаете файлы доступными для записи, все будет нормально. (На самом деле я пробовал это всего несколько недель назад, хотя и использовал zvol, и ZFS категорически отказалась импортировать пул. Когда я установил zvol на чтение / запись, а не только на чтение, пул импортировался нормально .) Другие файловые системы, такие как (в Linux) ext4 и, возможно, другие, несколько изящно справляются с этой ситуацией, но ZFS отказывается.
Если вам не повезло, и не имеет ОЗУ ECC , установленного в системе, в которую вы импортируете пул, то попытка ZFS исправить любые обнаруженные ошибки может на самом деле усугубить ситуацию. , хотя мнения расходятся относительно того, действительно ли это реальный риск на практике. Лично я придерживаюсь мнения, что любые данные, о которых я достаточно забочусь, чтобы защитить с помощью ZFS, моментальных снимков, избыточности на уровне хранилища и резервных копий и еще много чего , заслуживают защиты, предлагаемой ECC RAM, но на многих ПК нет ОЗУ ECC.
Таким образом, вы можете импортировать пул в режиме «только для чтения» с определенным альтернативным корнем, чтобы он не наступал на чьи-либо пальцы, но вы должны знать, что это не обязательно на самом деле только для чтения в криминалистическом смысле. (Однако это гарантирует, что вы случайно ничего не измените в пуле.) Чтобы выполнить импорт только для чтения, предполагая, что пул называется tank
, а узлы устройства - / доступны в / dev
, вы можете использовать такую команду:
# zpool import tank -d /dev -o readonly=on -R /mnt/someplace
Это будет искать в / dev
все, что содержит пул ZFS с именем tank
], импортируйте его, временно установив для свойства пула readonly
значение на
(что означает, что все записи, инициированные пользователем, будут отклонены) и временно установив его свойство 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
Это отключит все файловые системы и другие наборы данных в пуле, очистить все буферы (в той степени, в которой это необходимо в первую очередь), пометить пул как не импортированный на всех составляющих устройствах,и выполнять любые другие необходимые служебные задачи, чтобы гарантировать, что пул можно безопасно переместить в другую систему и импортировать туда позже.