Sto cercando di capire se, o meglio fino a che punto, xattr sono supportati in FreeBSD usando ZFS. Ho letto alcune informazioni contrastanti.
zfs get xattr
lo elenca comeon (default)
per/
,/usr
e/var
, ma comeoff (temporary)
per tutti gli altri set di dati, compresi i figli di quelli sopra menzionati.- Eseguire
zfs set xattr=on zroot/usr/home
Ricevo il messaggioproperty 'xattr' not supported on FreeBSD: permission denied
. - Questo è d'accordo con
zfs
pagina man:Il
xattr
la proprietà non è attualmente supportata su FreeBSD. setextattr
,getextattr
elsextattr
sembrano funzionare abbastanza bene.- Sono anche riuscito a salvare e ripristinare un nodo file del dispositivo utilizzando
rsync --fake-super
e potrebbe vedere i suoi dati usandolsextattr
egetextattr
. - Wikipedia ha alcune discussioni nella pagina di discussione di xattr. Apparentemente c'era una volta un'affermazione secondo cui ZFS supporta xattr da FreeBSD 8, ma è stata rimossa in seguito, con riferimento alla manpage (vedi 3.).
Attualmente ho l'impressione che gli attributi estesi su zfs funzionino in pratica, ma che xattr
la proprietà che ne controllerebbe l'uso non funziona come in altre distribuzioni zfs. Ma mi piacerebbe sentirlo confermato (o corretto) prima di affidare grandi quantità di dati di backup a un rsync --fake-super
in esecuzione su una macchina del genere. Preferirei non perdere tutti i miei metadati a causa di problemi noti di xattr.
Se è importante, questo è un molto nuova installazione di FreeBSD 10.2 che ho appena impostato, con ZFS impostato dall'installer.
Risposta accettata:
Come hai scoperto, xattrs funzionerà, ma ci sono degli spigoli.
A volte devi avvicinarti al codice open source come un antropologo. Se questo non è di per sé utile, forse questo provocherà dei contributi migliori (o eventualmente correzioni del codice!)
Ho trovato questo nel codice sorgente:
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);
e questo https://github.com/freebsd/freebsd/blob/386ddae58459341ec567604707805814a2128a57/sys/cddl/contrib/opensolaris/common/zfs/zfs_prop.c#L302
eppure questo ti dà una pausa:https://github.com/freebsd/freebsd/blob/e95b1e137c604a612291fd223fce89c2095cddf2/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c#L1638
Relazionato:Impossibile scrivere su file su FreeBSD — filesystem di sola lettura?Quindi quello che penso stia effettivamente accadendo è che xattr funziona ma la funzionalità per disattivarli (o attivarli) dalle proprietà del set di dati ZFS è interrotta, quindi il messaggio "non supportato" significa "sei da solo".
C'è del codice che imposta MNTOPT_XATTR ma non l'ho rintracciato. provare a cambiarlo usando zfs set ti ottiene il messaggio non supportato. La mia ipotesi è che spieghi la stranezza della proprietà zfs xattr con /, /usr, /var e l'impostazione/comportamento in conflitto di /home.
Questo fa luce sulle cose. https://www.lesbonscomptes.com/pages/extattrs.html