Como distinguir o pool do ZFS de montagens?

2

Eu gostaria de zerofill todo o espaço livre em partições dentro de uma máquina virtual FreeBSD.

A máquina virtual contém uma fatia de 512K% de freebsd-boot de inicialização (espero que eu tenha a terminologia aqui), seguida por uma fatia de 2.0G freebsd-swap e uma fatia de 254.0G freebsd-zfs .

# gpart show da0
=>       34  536870845  da0  GPT  (256G)
         34          6       - free -  (3.0K)
         40       1024    1  freebsd-boot  (512K)
       1064        984       - free -  (492K)
       2048    4194304    2  freebsd-swap  (2.0G)
    4196352  532672512    3  freebsd-zfs  (254G)
  536868864       2015       - free -  (1.0M)

É o layout criado pelo instalador do FreeBSD 10.2 por padrão ao escolher a opção "root no ZFS".

No passado, com o UFS, eu simplesmente usava mount -t ufs para listar todos os rótulos UFS e simplesmente criar um arquivo preenchido com zero nessas montagens até que não houvesse mais espaço.

No entanto, com o ZFS, não tenho mais certeza. Agora eu recebo:

# mount -t zfs
zroot/ROOT/default on / (zfs, local, noatime, nfsv4acls)
zroot/tmp on /tmp (zfs, local, noatime, nosuid, nfsv4acls)
zroot/usr/home on /usr/home (zfs, local, noatime, nfsv4acls)
zroot/usr/ports on /usr/ports (zfs, local, noatime, nosuid, nfsv4acls)
zroot/usr/src on /usr/src (zfs, local, noatime, nfsv4acls)
zroot/var/audit on /var/audit (zfs, local, noatime, noexec, nosuid, nfsv4acls)
zroot/var/crash on /var/crash (zfs, local, noatime, noexec, nosuid, nfsv4acls)
zroot/var/log on /var/log (zfs, local, noatime, noexec, nosuid, nfsv4acls)
zroot/var/mail on /var/mail (zfs, local, nfsv4acls)
zroot/var/tmp on /var/tmp (zfs, local, noatime, nosuid, nfsv4acls)
zroot on /zroot (zfs, local, noatime, nfsv4acls)

que não me dá uma pista além dos nomes, que, como eu entendo, são meramente uma convenção (estilo ruim para confiar em convenções). E repetir a operação de preenchimento zero em cada desses conjuntos de dados parece um pouco bobo.

Seria então suficiente encontrar todos os pools do ZFS ( zpool list -pH|cut -f 1 ) e procurar por aqueles na lista que o mount -t zfs me dá? Ou seja ignorando conjuntos de dados desse pool do ZFS.

Resumindo, seria suficiente para preencher o espaço livre nos pontos de montagem listados por (usando o Bash, mas provavelmente também funciona com o Zsh):

mount -t zfs|awk '$1 ~ /^'$(zpool list -pH|cut -f 1)'$/ {print $3}'

ou o fato de o ZFS ter esses conjuntos de dados mudar a parte de que preciso zerfill antes de compactar o disco da máquina virtual no lado do host?

Saída ao listar os pools do ZFS e as montagens:

# mount -t zfs
zroot/ROOT/default on / (zfs, local, noatime, nfsv4acls)
zroot/tmp on /tmp (zfs, local, noatime, nosuid, nfsv4acls)
zroot/usr/home on /usr/home (zfs, local, noatime, nfsv4acls)
zroot/usr/ports on /usr/ports (zfs, local, noatime, nosuid, nfsv4acls)
zroot/usr/src on /usr/src (zfs, local, noatime, nfsv4acls)
zroot/var/audit on /var/audit (zfs, local, noatime, noexec, nosuid, nfsv4acls)
zroot/var/crash on /var/crash (zfs, local, noatime, noexec, nosuid, nfsv4acls)
zroot/var/log on /var/log (zfs, local, noatime, noexec, nosuid, nfsv4acls)
zroot/var/mail on /var/mail (zfs, local, nfsv4acls)
zroot/var/tmp on /var/tmp (zfs, local, noatime, nosuid, nfsv4acls)
zroot on /zroot (zfs, local, noatime, nfsv4acls)
# zpool list -pH
zroot   270582939648    1668632576      268914307072    -       0%      0       1.00x   ONLINE  -
    
por 0xC0000022L 03.12.2015 / 18:35

2 respostas

0

zpool list fornecerá uma lista dos pools do ZFS e zfs list fornecerá uma lista de todos os conjuntos de dados do ZFS.

    
por 03.02.2017 / 00:01
0

Você está pensando muito complicado.

Você só precisa preencher zero cada pool, não cada sistema de arquivos! (O último não faz muito sentido no ZFS).

Então, basta iterar todos os pools (via zpool list ). Para cada pool, faça o seguinte:

  • Crie um novo sistema de arquivos ZFS com compactação desativada (!)
  • Crie um novo arquivo nesse sistema preenchido com zeros
  • Sincronizar
  • Destrua o sistema de arquivos ZFS

Observe que o algoritmo acima funciona corretamente, mesmo no caso especial em que você tem algum conjunto que não contenha nenhum sistema de arquivos. (nenhum sistema de arquivos ainda, ou nenhum sistema de arquivos mais)

    
por 04.12.2018 / 22:12

Tags