Ich versuche herauszufinden, ob oder inwieweit xattrs in FreeBSD mit ZFS unterstützt werden. Ich habe widersprüchliche Informationen gelesen.
zfs get xattr
listet es alson (default)
auf für/
,/usr
und/var
, aber alsoff (temporary)
für alle anderen Datensätze, einschließlich Kinder der oben genannten.- Ausführen von
zfs set xattr=on zroot/usr/home
Ich bekomme die Meldungproperty 'xattr' not supported on FreeBSD: permission denied
. - Das stimmt mit dem
zfs
überein Manpage:Der
xattr
-Eigenschaft wird derzeit von FreeBSD nicht unterstützt. setextattr
,getextattr
undlsextattr
scheinen gut genug zu funktionieren.- Ich habe es auch geschafft, einen Gerätedateiknoten mit
rsync --fake-super
zu speichern und wiederherzustellen , und konnte seine Daten mitlsextattr
sehen undgetextattr
. - Wikipedia hat einige Diskussionen auf der xattr-Diskussionsseite. Anscheinend wurde einmal behauptet, dass ZFS xattr seit FreeBSD 8 unterstützt, aber das wurde später mit Verweis auf die Manpage entfernt (siehe 3.).
Momentan habe ich den Eindruck, dass erweiterte Attribute auf zfs in der Praxis funktionieren, aber dass die xattr
-Eigenschaft, die ihre Verwendung steuern würde, funktioniert nicht wie in anderen zfs-Distributionen. Aber ich würde das gerne bestätigt (oder korrigiert) hören, bevor ich große Mengen an Sicherungsdaten einem rsync --fake-super
anvertraue läuft auf einer solchen Maschine. Ich möchte lieber nicht alle meine Metadaten aufgrund bekannter xattr-Probleme verlieren.
Wenn es darauf ankommt, ist dies ein sehr Neuinstallation von FreeBSD 10.2, die ich gerade eingerichtet habe, wobei ZFS vom Installationsprogramm eingerichtet wurde.
Akzeptierte Antwort:
Wie Sie festgestellt haben, funktionieren xattrs, aber es gibt Ecken und Kanten.
Manchmal muss man Open-Source-Code wie einen Anthropologen angehen. Wenn dies an sich nicht hilfreich ist, provoziert dies vielleicht einige bessere Beiträge (oder schließlich Code-Korrekturen!)
Ich habe das im Quellcode gefunden:
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);
und dieses https://github.com/freebsd/freebsd/blob/386ddae58459341ec567604707805814a2128a57/sys/cddl/contrib/opensolaris/common/zfs/zfs_prop.c#L302
und doch gibt Ihnen das eine Pause:https://github.com/freebsd/freebsd/blob/e95b1e137c604a612291fd223fce89c2095cddf2/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c#L1638
Siehe auch:Auf FreeBSD kann nicht in eine Datei geschrieben werden – schreibgeschütztes Dateisystem?Was meiner Meinung nach tatsächlich passiert, ist, dass xattrs funktionieren aber die Funktion zum Deaktivieren (oder Aktivieren) durch ZFS-Dataset-Eigenschaften ist defekt, sodass die Meldung „nicht unterstützt“ bedeutet „Sie sind auf sich allein gestellt.“
Es gibt dort einen Code, der MNTOPT_XATTR setzt, aber ich habe ihn nicht nachverfolgt. Wenn Sie versuchen, es mit zfs set zu ändern, erhalten Sie die nicht unterstützte Meldung. Meine Vermutung ist, dass dies die Verrücktheit der xattr-Eigenschaft von zfs mit /, /usr, /var und die widersprüchlichen Einstellungen/das Verhalten von /home erklärt.
Das bringt etwas Licht in die Sache. https://www.lesbonscomptes.com/pages/extattrs.html