Bem, isso realmente depende de como somente leitura você quer que o pool esteja. 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 dentro dele. Você pode importar um pool sem montar nenhum sistema de arquivos passando -N
a zpool import
e, depois, montando os sistemas de arquivos desejados usando zfs mount
. (Este é um cenário perfeitamente válido se, por exemplo, você quiser acessar apenas um único sistema de arquivos de muitos, ou se você quiser fazer algo parecido com um scrub off-line do pool.)
O ZFS não é um grande fã de acesso verdadeiramente somente leitura. Por exemplo, se o ZFS detectar um erro que consiga reparar, acredito que ele consertará o erro e gravará os dados reparados no disco mesmo que você tenha importado o pool como somente leitura. Meu entendimento é que, no parlace do ZFS, "somente leitura" se aplica somente ao estado visível ao usuário do conjunto 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 de leitura e tentar importar o conjunto a partir dele, o ZFS não poderá importar o arquivo. piscina em tudo, não importa o quanto você tente. Se você fizer os arquivos graváveis, funcionará bem. (Eu realmente tentei isso há algumas semanas atrás, embora usando um zvol, e o ZFS veementemente recusou para importar o pool. Quando eu defini o zvol para ler / escrever em vez de somente leitura, o pool importou bem.) Outros sistemas de arquivos como (no Linux) ext4 e provavelmente outros lidam com essa situação de forma graciosa, mas o ZFS hesita.
Se você tiver azar e não tiver RAM ECC instalado no sistema onde você está importando o pool, então a tentativa do ZFS de corrigir qualquer erro encontrado pode, na verdade, piorar as coisas , embora opiniões diferem sobre se isto é realmente um risco real na prática. Pessoalmente, sou da opinião de que quaisquer dados que eu me importo o suficiente para proteger com ZFS e snapshots e redundância em nível de armazenamento e backups e outros merecem a proteção oferecida pela RAM ECC também, mas muitos PCs não possuem memória RAM ECC.
Assim, você pode importar o pool no modo somente leitura, com uma raiz alternativa específica para evitar que ele pisoteie os dedos de qualquer outra pessoa, mas você precisa estar ciente de que não é necessariamente verdadeiro somente leitura em um sentido forense. (Isso, no entanto, garantirá que você não altere nada acidentalmente no pool.) Para fazer uma importação somente leitura, supondo que o pool seja denominado tank
e que o (s) nó (s) do dispositivo esteja (ão) disponível (s) /dev
, você usaria um comando como:
# zpool import tank -d /dev -o readonly=on -R /mnt/someplace
Isso procurará em /dev
por qualquer item que contenha um pool do ZFS com o nome tank
, importe-o temporariamente e defina a propriedade readonly
to on
(o que significa que todas as gravações iniciadas pelo usuário serão rejeitadas ) e definindo temporariamente sua propriedade altroot
como /mnt/someplace
. (Esses valores de propriedade são "temporários" no sentido de que eles não são mantidos 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, uma vez que o pool é importado, você pode olhar com zpool history tank
se você estiver inclinado.) Uma vez que o pool é importado, você verá seus arquivos em / mnt / someplace e terá acesso somente leitura a eles, incluindo quaisquer snapshots já 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 o pool de maneira limpa:
# zpool export tank
ou talvez
# zpool export zroot02
Isso desmontará todos os sistemas de arquivos e outros conjuntos de dados dentro do pool, liberará todos os buffers (na medida em que qualquer necessidade for liberada em primeiro lugar), marcará o pool como não importado em todos os dispositivos constituintes e executar quaisquer outras tarefas de manutenção necessárias para garantir que o pool possa ser movido com segurança para um sistema diferente e importado para lá posteriormente.