FreeBSD의 ZFS xattr 지원 상태

FreeBSD의 ZFS xattr 지원 상태

FreeBSD에서 ZFS를 사용하여 xattrs가 지원되는지, 아니면 xattrs가 어느 정도 지원되는지 알아보려고 합니다. 상충되는 정보를 읽었습니다.

  1. zfs get xattron (default), /및 로 나열 /usr하지만 위 데이터세트의 하위 데이터세트를 포함한 다른 모든 데이터세트 /var에 해당합니다 .off (temporary)
  2. 실행 중 zfs set xattr=on zroot/usr/home메시지를 받았습니다.

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

  3. 이는 다음과 일치합니다.매뉴얼 zfs페이지:

    xattrFreeBSD는 현재 이 속성을 지원하지 않습니다.

  4. setextattr, 충분히 잘 작동하는 것 같습니다 getextattr.lsextattr
  5. 또한 장치 파일 노드를 저장하고 복원했으며 rsync --fake-super해당 데이터를 사용하고 볼 수 있었습니다.lsextattrgetextattr
  6. Wikipedia에 약간의 토론이 있습니다xattr 토론 페이지. 분명히 ZFS는 FreeBSD 8부터 xattr을 지원한다고 주장했지만 나중에 매뉴얼 페이지(3 참조)를 참조하여 제거되었습니다.

현재 내 생각에는 ZFS의 확장 속성이 실제로 작동하지만 xattr해당 사용을 제어하는 ​​속성은 다른 ZFS 배포판에서처럼 잘 작동하지 않는다는 것입니다. 하지만 rsync --fake-super이와 같은 시스템에서 실행되는 대량의 백업 데이터를 신뢰하기 전에 이것이 확인(또는 수정)되는 것을 듣고 싶습니다 . 알려진 xattr 문제로 인해 모든 메타데이터가 손실되는 것을 원하지 않습니다.

중요하다면 이것은매우방금 새로운 FreeBSD 10.2를 설치했고 설치 프로그램이 ZFS를 설정했습니다.

답변1

발견한 대로 xattrs는 작동하지만 일부 거친 부분이 있습니다.

때로는 인류학자처럼 오픈 소스 코드를 다루어야 할 때도 있습니다. 이것이 자체적으로 도움이 되지 않는다면 아마도 더 나은 기여(또는 최종 코드 수정)를 촉발할 것입니다.

소스 코드에서 이것을 찾았습니다.

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);

https://github.com/freebsd/freebsd/blob/386ddae58459341ec567604707805814a2128a57/sys/cddl/contrib/opensolaris/common/zfs/zfs_prop.c#L302

하지만 이렇게 하면 잠시 멈출 수 있습니다. https://github.com/freebsd/freebsd/blob/e95b1e137c604a612291fd223fce89c2095cddf2/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c#L1638

그래서 실제로 일어나는 일은 xattrs라고 생각합니다.일하다그러나 ZFS 데이터 세트 속성을 통해 해당 기능을 끄거나 켜는 기능이 손상되었으므로 "지원되지 않음" 메시지는 "사용자가 스스로 수행해야 함"을 의미합니다.

MNTOPT_XATTR을 설정하는 코드가 있지만 아직 찾지 못했습니다. zfs set을 사용하여 변경하려고 하면 지원되지 않는 메시지가 표시됩니다. 내 생각엔 이것이 /, /usr, /var의 이상한 zfs xattr 속성과 /home의 충돌하는 설정/동작을 설명하는 것 같습니다.

이것은 사물에 대해 어느 정도 밝혀줍니다. https://www.lesbonscomptes.com/pages/extattrs.html

답변2

FreeBSD-13.2에 포함된 ZFS와 함께 작동합니다.

예를 들어

% zfs get xattr rpool/usr/home 
NAME            PROPERTY  VALUE  SOURCE
rpool/usr/home  xattr     on     default
%
% ls -tal test
-rw-r--r--  1 sabadi sabadi  31 May 31  2016 test
%
% setextattr user md5 `md5 -q test` test
% getextattr user md5 test
test    93d1d06c3b60c965fc696609b8c57a3f

관련 정보