Estado do suporte ao xattr do ZFS no FreeBSD

15

Estou tentando descobrir se, ou não, em que extensão, xattrs são suportados no FreeBSD usando o ZFS. Eu li algumas informações conflitantes.

  1. zfs get xattr lista-o como on (default) para / , /usr e /var , mas como off (temporary) para todos os outros conjuntos de dados, incluindo os filhos dos acima mencionados.
  2. executando zfs set xattr=on zroot/usr/home recebo a mensagem

    property 'xattr' not supported on FreeBSD: permission denied.

  3. Isso concorda com a página zfs man :

    The xattr property is currently not supported on FreeBSD.

  4. setextattr , getextattr e lsextattr parecem funcionar bem o suficiente.
  5. Também consegui salvar e restaurar um nó de arquivo de dispositivo usando rsync --fake-super e pude ver seus dados usando lsextattr e getextattr .
  6. A Wikipédia tem alguma discussão na página de discussão xattr . Aparentemente, houve uma afirmação de que o ZFS suporta xattr desde o FreeBSD 8, mas que foi removido mais tarde, com referência à página do manual (veja 3.).

Atualmente, tenho a impressão de que os atributos estendidos no zfs funcionam na prática, mas a propriedade xattr que controlaria seu uso não funciona como em outras distribuições do zfs. Mas eu gostaria de ouvir isso confirmado (ou corrigido) antes de confiar em grandes quantidades de dados de backup para um rsync --fake-super em execução em tal máquina. Prefiro não perder todos os meus metadados devido a problemas conhecidos de xattr.

Se for importante, esta é uma instalação muito fresca do FreeBSD 10.2 que acabei de configurar, com o ZFS configurado pelo instalador.

    
por MvG 02.03.2016 / 00:08

1 resposta

5

Como você descobriu, o xattrs funcionará, mas existem arestas ásperas.

Às vezes, você precisa abordar o código-fonte aberto como um antropólogo. Se isso não for útil por si só, talvez isso provoque algumas contribuições melhores (ou, eventualmente, correções de código!)

Eu encontrei isso no código-fonte:

link

/*
 * Register property callbacks.
 *
 * It would probably be fine to just check for i/o error from
 * the first prop_register(), but I guess I like to go
 * overboard...
 */
error = dsl_prop_register(ds,
    zfs_prop_to_name(ZFS_PROP_ATIME), atime_changed_cb, zfsvfs);
error = error ? error : dsl_prop_register(ds,
    zfs_prop_to_name(ZFS_PROP_XATTR), xattr_changed_cb, zfsvfs);
error = error ? error : dsl_prop_register(ds,
    zfs_prop_to_name(ZFS_PROP_RECORDSIZE), blksz_changed_cb, zfsvfs);

e isso link

e ainda assim você pausa: link

Então, o que acho que está realmente acontecendo é que xattrs funcionam , mas a funcionalidade de desativá-las (ou ativadas) pelas propriedades do conjunto de dados do ZFS é interrompida, então a mensagem "não suportada" significa "você" por conta própria. "

Existe algum código lá que define o MNTOPT_XATTR, mas eu não o tracei. tentar alterá-lo usando o zfs set faz com que você receba a mensagem sem suporte. Meu palpite é que explica a estranheza da propriedade zat xattr com /, / usr, / var e a configuração / comportamento conflitante de / home.

Isso lança alguma luz sobre as coisas. link

    
por 12.03.2017 / 00:34