J'essaie de déterminer si oui ou non, ou plutôt dans quelle mesure, xattrs sont pris en charge dans FreeBSD en utilisant ZFS. J'ai lu des informations contradictoires.
zfs get xattr
le liste commeon (default)
pour/
,/usr
et/var
, mais commeoff (temporary)
pour tous les autres ensembles de données, y compris les enfants de ceux mentionnés ci-dessus.- Exécuter
zfs set xattr=on zroot/usr/home
Je reçois le messageproperty 'xattr' not supported on FreeBSD: permission denied
. - Ceci est en accord avec le
zfs
page de manuel :Le
xattr
La propriété n'est actuellement pas prise en charge sur FreeBSD. setextattr
,getextattr
etlsextattr
semblent fonctionner assez bien.- J'ai également réussi à enregistrer et à restaurer un nœud de fichier de périphérique à l'aide de
rsync --fake-super
, et pourrait voir ses données en utilisantlsextattr
etgetextattr
. - Wikipedia a des discussions sur la page de discussion xattr. Apparemment, il y a eu une fois une affirmation selon laquelle ZFS prend en charge xattr depuis FreeBSD 8, mais cela a été supprimé plus tard, en référence à la page de manuel (voir 3.).
Actuellement, j'ai l'impression que les attributs étendus sur zfs fonctionnent en pratique, mais que le xattr
propriété qui contrôlerait leur utilisation ne fonctionne pas comme elle le ferait dans d'autres distributions zfs. Mais j'aimerais entendre cela confirmé (ou corrigé) avant de confier de grandes quantités de données de sauvegarde à un rsync --fake-super
fonctionnant sur une telle machine. Je préfère ne pas perdre toutes mes métadonnées à cause de problèmes xattr connus.
Si c'est important, c'est un très nouvelle installation de FreeBSD 10.2 que je viens de configurer, avec ZFS configuré par le programme d'installation.
Réponse acceptée :
Comme vous l'avez constaté, xattrs fonctionnera, mais il y a des aspérités.
Parfois, vous devez aborder le code open source comme un anthropologue. Si cela n'est pas utile en soi, cela provoquera peut-être de meilleures contributions (ou éventuellement des corrections de code !)
J'ai trouvé ceci dans le code source :
https://github.com/freebsd/freebsd/blob/c829c2411ae5da594814773175c728ea816d9a12/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c#L514
/*
* 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);
et ceci https://github.com/freebsd/freebsd/blob/386ddae58459341ec567604707805814a2128a57/sys/cddl/contrib/opensolaris/common/zfs/zfs_prop.c#L302
et pourtant cela vous donne une pause :https://github.com/freebsd/freebsd/blob/e95b1e137c604a612291fd223fce89c2095cddf2/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c#L1638
Connexe :Impossible d'écrire dans un fichier sur FreeBSD - système de fichiers en lecture seule ?Donc, ce que je pense qu'il se passe réellement, c'est que xattrs fonctionne mais la fonctionnalité pour les désactiver (ou les activer) par les propriétés du jeu de données ZFS est cassée, donc le message "non pris en charge" signifie "vous êtes seul".
Il y a du code là-dedans qui définit MNTOPT_XATTR mais je ne l'ai pas tracé. essayer de le changer à l'aide de zfs set vous donne le message non pris en charge. Je suppose que cela explique l'étrangeté de la propriété zfs xattr avec /, /usr, /var et le paramètre/comportement conflictuel de /home.
Cela éclaire un peu les choses. https://www.lesbonscomptes.com/pages/extattrs.html