Bem, isso realmente depende de quão somente leitura você deseja que a piscina seja. E não, isso não é uma piada.
Primeiro, um pouco de terminologia: no ZFS, você importa um pool e, opcionalmente, monta os (quaisquer) sistemas de arquivos nele. Você pode importar uma piscina sem montar qualquer sistema de arquivo, passando -N
para zpool import
e, posteriormente, montar quaisquer sistemas de arquivos desejados usando zfs mount
. (Esse é um cenário perfeitamente válido se, por exemplo, você desejar acessar apenas um único sistema de arquivos dentre muitos, ou se desejar fazer algo semelhante a uma limpeza off-line do pool.)
O ZFS não é um grande fã de acesso verdadeiramente somente leitura. Por exemplo, se o ZFS detectar um erro capaz de reparar, acredito que ele consertará o erro e gravará os dados reparados no disco, mesmo se você importou o pool como somente leitura. Meu entendimento é que, no ZFS parlace, "somente leitura" se aplica apenas ao estado visível do usuário do pool e seus conjuntos de dados. Se, por outro lado, você fizer uma cópia binária do disco em um arquivo (ou conjunto de arquivos), tornar esses arquivos realmente somente leitura e tentar importar o pool de lá, o ZFS não poderá importar o arquivo piscina, não importa o quanto você tente. Se você tornar os arquivos graváveis, ele funcionará bem. (Na verdade, eu tentei isso apenas algumas semanas atrás, embora usando um zvol, e o ZFS recusou veementementepara importar o pool. Quando defino o zvol para leitura / gravação, em vez de somente leitura, o pool é importado.
Se você não tiver sorte e não tiver RAM de ECC instalada no sistema em que está importando o pool, a tentativa do ZFS de corrigir os erros encontrados pode realmente piorar as coisas , embora as opiniões sejam diferentes sobre se esse é realmente um risco real. na prática. Pessoalmente, sou da opinião de que quaisquer dados que importam o suficiente sobre proteger com ZFS e instantâneos e redundância de nível de armazenamento e backups e outros enfeites merece a proteção oferecida pela ECC RAM também, mas muitos PCs não têm ECC RAM.
Portanto, você pode importar o pool no modo somente leitura, com uma raiz alternativa específica para impedir que ele pise nos dedos de qualquer outra pessoa, mas você precisa estar ciente de que não é necessariamente verdadeiramente somente leitura no sentido forense. (No entanto, garantirá que você não altere acidentalmente nada no pool.) Para fazer uma importação somente leitura, assumindo que o pool seja nomeado tank
e que o (s) nó (s) do dispositivo esteja / esteja disponível /dev
, você deve use um comando como:
# zpool import tank -d /dev -o readonly=on -R /mnt/someplace
Isso procurará /dev
qualquer coisa que contenha um pool ZFS com o nome tank
, importe-o, configure temporariamente a propriedade pool readonly
para on
(o que significa que todas as gravações iniciadas pelo usuário serão rejeitadas) e temporariamente configure sua altroot
propriedade para /mnt/someplace
. (Esses valores de propriedade são "temporários" no sentido de que não são persistidos no (s) disco (s) como valores de propriedade atuais, portanto, se você exportar e reimportar o pool sem eles, os valores voltarão ao normal. possivelmente, seja gravado no histórico do pool, que, depois que o pool for importado, você poderá ver comzpool history tank
se você preferir.) Depois que o pool for importado, você verá seus arquivos em / mnt / someplace e terá acesso normal somente leitura a eles, incluindo todos os snapshots que já foram feitos nos conjuntos de dados no pool.
Dado o seu exemplo, suspeito que você usaria algo como:
# zpool import zroot02 -d /dev -o readonly=on -R /mnt/my-fun-mountpoint
Quando terminar, lembre-se de exportar corretamente o pool:
# zpool export tank
ou talvez
# zpool export zroot02
Isso desmontará todos os sistemas de arquivos e outros conjuntos de dados do pool, liberará todos os buffers (na medida em que for necessário liberar o fluxo), marcará o pool como não importado em todos os dispositivos constituintes e executará outras tarefas de limpeza necessárias para garantir que o pool possa ser movido com segurança para um sistema diferente e importado para ele posteriormente.