Com o ZFS no Linux, como listar propriedades específicas do dispositivo (vdev)?

9

Estou usando o ZFS há algum tempo, sem problemas. Ainda estou empolgado com isso e confio muito nele. Mas, de tempos em tempos, novas perguntas vêm à minha mente (em especial depois de ler alguma documentação, o que às vezes aumenta o número de perguntas em vez de reduzi-la).

Nesse caso, adicionei um novo vdev (um espelho) a um pool raiz e, portanto, li o manual do zpool ( man zpool). No final da seção zpool add, afirma:

-o propriedade = valor

Define as propriedades do pool especificadas. Consulte a seção "Propriedades" para obter uma lista de propriedades válidas que podem ser definidas. A única propriedade suportada no momento é ashift. Observe que algumas propriedades (entre elas o ashift) não são herdadas de um vdev anterior. Eles são específicos do vdev, não do pool.

Isso significa que a ashiftpropriedade não é específica do pool, mas específica do vdev. Mas não consegui encontrar nenhum comando ou opção que me permitisse visualizar essa propriedade (ou qualquer outra propriedade específica do vdev) por vdev.

Em outras palavras, por exemplo, se eu tenho um pool que contém um vdev com ashift=12e um vdev com ashift=10, como posso verificar isso?

O que eu já tentei:

root@cerberus:~# zpool list -v -o ashift rpool
ASHIFT
12
  mirror   928G   583G   345G         -    27%    62%
    ata-ST31000524NS_9WK21HDM      -      -      -         -      -      -
    ata-ST31000524NS_9WK21L15      -      -      -         -      -      -
  mirror   928G  74.4M   928G         -     0%     0%
    ata-ST31000524NS_9WK21FXE      -      -      -         -      -      -
    ata-ST31000524NS_9WK21KC1      -      -      -         -      -      -

root@cerberus:~# zpool get all rpool
NAME   PROPERTY                    VALUE                       SOURCE
rpool  size                        1.81T                       -
rpool  capacity                    31%                         -
rpool  altroot                     -                           default
rpool  health                      ONLINE                      -
rpool  guid                        3899811533678330272         default
rpool  version                     -                           default
rpool  bootfs                      rpool/stretch               local
rpool  delegation                  on                          default
rpool  autoreplace                 off                         default
rpool  cachefile                   -                           default
rpool  failmode                    wait                        default
rpool  listsnapshots               off                         default
rpool  autoexpand                  off                         default
rpool  dedupditto                  0                           default
rpool  dedupratio                  1.00x                       -
rpool  free                        1.24T                       -
rpool  allocated                   583G                        -
rpool  readonly                    off                         -
rpool  ashift                      12                          local
rpool  comment                     -                           default
rpool  expandsize                  -                           -
rpool  freeing                     0                           default
rpool  fragmentation               13%                         -
rpool  leaked                      0                           default
rpool  feature@async_destroy       enabled                     local
rpool  feature@empty_bpobj         active                      local
rpool  feature@lz4_compress        active                      local
rpool  feature@spacemap_histogram  active                      local
rpool  feature@enabled_txg         active                      local
rpool  feature@hole_birth          active                      local
rpool  feature@extensible_dataset  enabled                     local
rpool  feature@embedded_data       active                      local
rpool  feature@bookmarks           enabled                     local
rpool  feature@filesystem_limits   enabled                     local
rpool  feature@large_blocks        enabled                     local

Portanto, zpool listnem zpool getmostra nenhuma propriedade de uma maneira específica do vdev.

Alguma ideia?

Binarus
fonte

Respostas:

9

Para visualizar o valor atual de uma configuração específica como ashift, você precisará usar o zdbcomando em vez do zpoolcomando.

A execução zdbpor conta própria, sem argumentos, dará a você uma visão de qualquer um poolsencontrado no sistema, e seus vdevsdiscos e vdevs.

root@pve1:/home/tim# zdb
pm1:
    version: 5000
    name: 'pm1'
    state: 0
    txg: 801772
    pool_guid: 13783858310243843123
    errata: 0
    hostid: 2831164162
    hostname: 'pve1'
    vdev_children: 1
    vdev_tree:
        type: 'root'
        id: 0
        guid: 13783858310243843123
        children[0]:
            type: 'raidz'
            id: 0
            guid: 13677153442601001142
            nparity: 2
            metaslab_array: 34
            metaslab_shift: 33
            ashift: 9
            asize: 1600296845312
            is_log: 0
            create_txg: 4
            children[0]:
                type: 'disk'
                id: 0
                guid: 4356695485691064080
                path: '/dev/disk/by-id/ata-DENRSTE251M45-0400.C_A181B011241000542-part1'
                whole_disk: 1
                not_present: 1
                DTL: 64
                create_txg: 4
            children[1]:
                type: 'disk'
                id: 1
                guid: 14648277375932894482
                path: '/dev/disk/by-id/ata-DENRSTE251M45-0400.C_A181B011241000521-part1'
                whole_disk: 1
                DTL: 82
                create_txg: 4
            children[2]:
                type: 'disk'
                id: 2
                guid: 11362800770521042303
                path: '/dev/disk/by-id/ata-DENRSTE251M45-0400.C_A181B011241000080-part1'
                whole_disk: 1
                DTL: 59
                create_txg: 4
            children[3]:
                type: 'disk'
                id: 3
                guid: 10494331395233532833
                path: '/dev/disk/by-id/ata-DENRSTE251M45-0400.C_A181B011241000517-part1'
                whole_disk: 1
                DTL: 58
                create_txg: 4
    features_for_read:
        com.delphix:hole_birth
        com.delphix:embedded_data

ou, apenas ashiftcom algum contexto:

root@pve1:/home/tim#  sudo zdb | egrep 'ashift|vdev|type' | grep -v disk
    vdev_children: 1
    vdev_tree:
        type: 'root'
            type: 'raidz'
            ashift: 9

Aqui está um post antigo sobrezdb o assunto que ainda é muito informativo sobre as origens, a intenção e as informações que saem zdb. Um rápido google também revela muitas postagens que podem ser mais especificamente relevantes para o ZFS no Linux.

Tim Kennedy
fonte
1
Agora que é o que eu estou chamando uma resposta. zdbnão parece ser mencionado em uma das páginas da Sun, que geralmente aparecem se você procurar "ZFS <something>" no Google. Antes de mudar para o ZFS, dediquei muito tempo a pesquisar se é a coisa certa para mim e como eu poderia instalar e configurá-lo, mas nunca me deparei com isso zdb; além disso, man zpoolnem man zfstem nenhuma dica, incluindo a seção "VER TAMBÉM". Muito obrigado!
Binarus 28/03
1
Essa é uma observação interessante. Eu trabalhei na Sun quando o ZFS foi lançado, e mais tarde para outras empresas que trabalharam muito com o ZFS, isso me zdbparece natural. Eu não percebi que era magia negra neste momento. :) O Open-ZFS é um consórcio do IllumOS / OmniOS / OpenSolaris / FreeBSD / Linux / outros desenvolvedores que estão tentando garantir que todo o mundo não-Oracle ZFS permaneça alinhado. O Wiki deles é muito bom e possui muitas informações, incluindo algumas referências a zdb: Veja: open-zfs.org/w/…
Tim Kennedy
1
O ZFS no Linux possui páginas de manual do ZFS, que são bastante boas. Tanto quanto pude ver, eles são os mesmos que os Solaris, menos as especialidades Solaris. E adivinhe: Nos meus sistemas Linux, man zdbfaz o que você esperaria :-) Portanto, está documentado de alguma forma, mas, como é mencionado em quase nenhum lugar, ninguém chega à ideia de digitar man zdb. Da postagem do blog que você vinculou: "[...] mas, de certa forma, penso intencionalmente, não documentado. Apenas duas outras pessoas que conheço tiveram a coragem de falar sobre isso publicamente [...]" :-)
Binarus