Zfs: 파일 속성

에 λ§Œλ“  2011λ…„ 05μ›” 03일  Β·  12μ½”λ©˜νŠΈ  Β·  좜처: openzfs/zfs

λ‚΄λΆ€μ μœΌλ‘œ ZFSμ—λŠ” 파일 속성(λΆˆλ³€/읽기 μ „μš©/λ“±)을 μ˜¬λ°”λ₯΄κ²Œ μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ λͺ¨λ“  μ½”λ“œκ°€ 이미 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ 속성이 μ„€μ •λœ λ‹€λ₯Έ ν”Œλž«νΌμ—μ„œ 풀을 κ°€μ Έμ˜€λŠ” κ²½μš°μ—λ„ μ μš©λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. λˆ„λ½λœ 것은 μ‚¬μš©μž 곡간을 μ‘°μž‘ν•˜λŠ” 데 ν•„μš”ν•œ μΈν„°νŽ˜μ΄μŠ€μž…λ‹ˆλ‹€. Linuxμ—μ„œλŠ” 일반적으둜 lsattr/chattr μœ ν‹Έλ¦¬ν‹°λ₯Ό μ‚¬μš©ν•˜μ—¬ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ΄λŸ¬ν•œ λ„κ΅¬μ—μ„œ μ§€μ›ν•˜λŠ” 파일 속성은 Solaris 파일 속성 집합과 λΆ€λΆ„μ μœΌλ‘œλ§Œ κ²ΉμΉ©λ‹ˆλ‹€. 즉, Linuxμ—μ„œ 이λ₯Ό μ‘°μž‘ν•˜κΈ° μœ„ν•΄ 자체 도ꡬλ₯Ό μž‘μ„±ν•˜κ±°λ‚˜ Solaris μœ ν‹Έλ¦¬ν‹°λ₯Ό 이식해야 ν•©λ‹ˆλ‹€. 이 μž‘μ—…μ˜ μ „μ œ 쑰건은 κΆŒν•œμ΄ μžˆλŠ” μ‚¬μš©μžλ§Œ 파일 속성을 μ‘°μž‘ν•  수 μžˆλ„λ‘ λ³΄μ•ˆ μ •μ±… ν•Έλ“€λŸ¬κ°€ μž‘λ™ν•˜λ„λ‘ ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

Feature

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

@behlendorf μ§€μ›λ˜λŠ” 속성과 ZFS μ‹œμŠ€ν…œμ—μ„œ μˆ˜ν–‰ν•˜λŠ” μž‘μ—…μ„ λ‚˜μ—΄ν•˜λŠ” μ„€λͺ…μ„œλ‚˜ μ„€λͺ…μ„œκ°€ μžˆμŠ΅λ‹ˆκΉŒ?

λͺ¨λ“  12 λŒ“κΈ€

λ‚˜μ€‘μ— Solaris 도ꡬλ₯Ό κ°€μ Έμ˜€κΈ°λ‘œ κ²°μ •ν•˜λ”λΌλ„ FS__*_FL κ³΅κ°„μ—μ„œ λ³€κ²½ λΆˆκ°€λŠ₯, μΆ”κ°€ μ „μš© λ“±κ³Ό 같은 ν‘œμ€€ Linux 속성을 μ§€μ›ν•˜λŠ” 것은 κ°€μΉ˜κ°€ μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. Linux의 λ§Žμ€ λ‹€λ₯Έ 파일 μ‹œμŠ€ν…œμ€ μ΄λŸ¬ν•œ ν”Œλž˜κ·Έλ₯Ό μ„€μ •ν•˜κΈ° μœ„ν•΄ lsattr/chattr ioctl() μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ§€μ›ν•˜μ§€λ§Œ 일뢀 파일 μ‹œμŠ€ν…œμ€ 자체 μ‚¬μš©μ„ μœ„ν•΄ ν”Œλž˜κ·Έλ₯Ό (거의) λ™λ“±ν•œ μ˜¨λ””μŠ€ν¬ κ°’μœΌλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.

일반적으둜 μœ μš©ν•œ 경우 FS_*_FL에 μƒˆ 속성을 μΆ”κ°€ν•˜λŠ” 것은 λΆˆκ°€λŠ₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(Solarisμ—λŠ” Linux에 μ—†λŠ” 속성이 무엇인지 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€). ν•΄λ‹Ή 곡간이 λΆ€μ‘±ν•˜μ—¬ 기꺼이 μΆ”κ°€ν•  μˆ˜λŠ” μ—†μ§€λ§Œ .

λ™μ˜ν•©λ‹ˆλ‹€. λͺ‡ 달 전에 ν‘œμ€€ Linux 속성을 μ§€μ›ν•˜κΈ° μœ„ν•΄ 처음으둜 μ§„μΆœν–ˆμŠ΅λ‹ˆλ‹€. λ‹Ήμ‹œ λ‚˜λŠ” λΆˆλ³€, μΆ”κ°€ μ „μš© 및 nodumpκ°€ Solaris와 Linux 간에 곡톡적인 μœ μΌν•œ 속성이라고 κ²°μ •ν–ˆμŠ΅λ‹ˆλ‹€. μ•„μ‰½κ²Œλ„ 이 μž‘μ—…μ„ 마칠 μ‹œκ°„μ΄ μ—†μ—ˆμ§€λ§Œ 개발 λΆ„κΈ°λŠ” μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ€ 참쑰용으둜만 μ‚¬μš©ν•  수 μžˆλŠ” zfs μ†μ„±μ˜ 전체 λͺ©λ‘μž…λ‹ˆλ‹€.

 /*
 * μ €μž₯λ˜λŠ” μΆ”κ°€ 파일 레벨 속성
 * zp_flags의 μœ„μͺ½ 절반
 */
 #define ZFS_READONLY 0x0000000100000000ull
 #define ZFS_HIDDEN 0x0000000200000000ull
 #define ZFS_SYSTEM 0x0000000400000000ull
 #define ZFS_ARCHIVE 0x0000000800000000ull
 #define ZFS_IMMUTABLE 0x0000001000000000ull
 #define ZFS_NOUNLINK 0x0000002000000000ull
 #define ZFS_APPENDONLY 0x0000004000000000ull
 #define ZFS_NODUMP 0x0000008000000000ull
 #define ZFS_OPAQUE 0x0000010000000000ull
 #define ZFS_AV_QUARANTINED 0x0000020000000000ull
 #define ZFS_AV_MODIFIED 0x0000040000000000ull
 #define ZFS_REPARSE 0x0000080000000000ull
 #define ZFS_OFFLINE 0x0000100000000000ull
 #define ZFS_SPARSE 0x0000200000000000ull

메일링 λ¦¬μŠ€νŠΈμ—μ„œ μ–ΈκΈ‰ν–ˆλ“―μ΄ λ‚˜λŠ” 이것을 μ‚΄νŽ΄λ³΄κ³  맀핑에 λŒ€ν•΄ μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ€ λ‹€λ₯Έ μ‚¬λžŒλ“€μ΄ μ μ ˆν•˜λ‹€κ³  μƒκ°ν•˜λŠ” 만큼 많이 λ˜λŠ” 적게 κ³ λ €ν•˜λ„λ‘ ν•˜λŠ” 제 μƒκ°μž…λ‹ˆλ‹€.

λͺ…λ°±ν•œ 맀핑:
ZFS_IMMUTABLE <-> FS_IMMUTABLE_FL
ZFS_APPENDONLY <-> FS_APPEND_FL
ZFS_NODUMP <-> FS_NODUMP_FL

ν˜Έν™˜μ„±μ„ μœ„ν•΄ 쒋은 아이디어일 수 μžˆμŠ΅λ‹ˆλ‹€.
ZFS_IMMUTABLE이 μ„€μ •λœ 경우 ZFS_NOUNLINKλ₯Ό μ§€μ›λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ μ‚¬μš©μžκ°€ chattr +i FILE ; chattr -i FILE ZFS_NOUNLINKλ₯Ό μ§€μšΈ 수 μžˆμŠ΅λ‹ˆλ‹€.

미친 아이디어 1:
ZFS_READONLY, ZFS_HIDDEN, ZFS_SYSTEM 및 ZFS_ARCHIVE와 crtime을 Samba ν˜Έν™˜ μ‚¬μš©μžμ— λ§€ν•‘ν•©λ‹ˆλ‹€.DOSATTRIB xattr.

미친 아이디어 2:
λ””λ ‰ν† λ¦¬μ—μ„œ FS_TOPDIR_FL을 μ„€μ •ν•˜λ©΄ ν•΄λ‹Ή λ””λ ‰ν† λ¦¬μ˜ mkdir() μž‘μ—…μ΄ μƒˆ ZFS 데이터 μ„ΈνŠΈλ₯Ό μƒμ„±ν•˜λ„λ‘ 속성이 μ„€μ •λ©λ‹ˆλ‹€. 이것은 예λ₯Ό λ“€μ–΄ /home에 μœ μš©ν•©λ‹ˆλ‹€. 그러면 Linuxμ—μ„œ ZFS λ³€κ²½ 사항을 useradd에 μ—°κ²°ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. 그리고 이미 ext[234]μ—μ„œ chattr +T /home μ„€μ •ν•˜λŠ” 것이 ν•©λ¦¬μ μž…λ‹ˆλ‹€. FS_TOPDIR_FL을 μ—°κ²°ν•˜μ§€ μ•Šλ”λΌλ„ 이 νš¨κ³Όμ— λŒ€ν•œ ZFS μ†μ„±μ˜ μ•„μ΄λ””μ–΄λŠ” /homeμ—μ„œ μ—¬μ „νžˆ μœ μš©ν•  κ²ƒμž…λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ‹­λ‹ˆκΉŒ,

이 μ£Όμ œμ— 진전이 μžˆμŠ΅λ‹ˆκΉŒ? μ΅œκ·Όμ— λ―Έλ””μ–΄ μ„œλ²„λ₯Ό ZFS둜 μ „ν™˜ν–ˆμ§€λ§Œ λ³€κ²½ν•  수 μ—†λŠ” ν”Œλž˜κ·Έλ₯Ό μ„€μ •ν•  κ°€λŠ₯성이 μ—†μŠ΅λ‹ˆλ‹€. 일뢀 νŒŒμΌμ„ "보호"ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. ν”Œλž˜κ·Έλ₯Ό μ„€μ •ν•˜λŠ” ν•΄κ²° 방법이 μžˆμŠ΅λ‹ˆκΉŒ? μ•„λ§ˆλ„ μ™ΈλΆ€ ν”„λ‘œκ·Έλž¨μ„ 톡해? 이게 νš¨κ³Όκ°€ μžˆμ„κΉŒμš”?

κ°μ‚¬ν•©λ‹ˆλ‹€!

@cyberius0 ν˜„μž¬ 아무도 이 μž‘μ—…μ„ ν•˜κ³  μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λˆ„κ΅°κ°€κ°€ μ›ν•œλ‹€λ©΄ λ‚˜λŠ” 그것을 μœ„ν•΄ λͺ¨λ“  κ²ƒμž…λ‹ˆλ‹€.

λˆ„κ΅°κ°€κ°€ λ‚˜λ₯Ό μ˜¬λ°”λ₯Έ λ°©ν–₯으둜 μ•ˆλ‚΄ν•΄ μ€€λ‹€λ©΄ μ‹œλ„ν•΄ 보고 μ‹ΆμŠ΅λ‹ˆλ‹€. 이 κΈ°λŠ₯이 ν•„μš”ν•©λ‹ˆλ‹€.

+1

@rlaager 의 Crazy Idea 2λŠ” 맀우 μœ μš©ν•˜κ²Œ λ“€λ¦½λ‹ˆλ‹€. 그것이 일이 되기λ₯Ό κ°„μ²­ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

+1

Linux 파일 속성 μΈν„°νŽ˜μ΄μŠ€λŠ” Solarisμ—μ„œ λ°œμƒν•˜μ§€ μ•ŠλŠ” TOCTOU κ²½μŸμ„ κ²ͺλŠ”λ‹€λŠ” 점에 μœ μ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€. Solaris 및 Linux의 userland λ„κ΅¬λŠ” 파일 속성을 인수둜 μˆ˜μ •ν•˜κ³  파일 속성은 μ½”μ–΄ 및 λ””μŠ€ν¬μ— λΉ„νŠΈ 마슀크둜 μ €μž₯λ˜μ§€λ§Œ μœ μ‚¬μ μ€ κ±°κΈ°μ„œ λμž…λ‹ˆλ‹€.

Solarisμ—μ„œλŠ” 값이 무엇인지와 ν•¨κ»˜ 변경될 κ°’ λͺ©λ‘μ΄ μ»€λ„λ‘œ μ „μ†‘λ©λ‹ˆλ‹€. ν˜„μž¬ λΉ„νŠΈλ§ˆμŠ€ν¬λ₯Ό 가져와 μˆ˜μ •ν•˜κ³  μ €μž₯ν•˜λŠ” μž‘μ—…μ€ zp->z_lock μ•„λž˜μ—μ„œ μ²˜λ¦¬λ©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ λͺ¨λ“  λ³€κ²½ 사항이 μ›μžμ μ΄λ©° 이것이 μ˜¬λ°”λ₯Έ μž‘μ—… λ°©μ‹μž„μ„ 보μž₯ν•©λ‹ˆλ‹€. Linuxμ—μ„œ μˆ˜μ •μ— λŒ€ν•œ μ±…μž„μ€ μ‚¬μš©μž μ˜μ—­μ— μ•„μ›ƒμ†Œμ‹±λ©λ‹ˆλ‹€. userland μœ ν‹Έλ¦¬ν‹°λŠ” ν˜„μž¬ λΉ„νŠΈλ§ˆμŠ€ν¬λ₯Ό 가져와 λ³€κ²½ν•˜κ³  이전 λΉ„νŠΈλ§ˆμŠ€ν¬λ₯Ό λŒ€μ²΄ν•˜λŠ” μƒˆ λΉ„νŠΈλ§ˆμŠ€ν¬λ₯Ό λ³΄λƒ…λ‹ˆλ‹€. userlandλŠ” μˆ˜μ •μ— λŒ€ν•΄ νŒŒμΌμ„ μž κΈ€ 수 μ—†κΈ° λ•Œλ¬Έμ— λ™μΌν•œ νŒŒμΌμ—μ„œ μ„œλ‘œ λ‹€λ₯Έ λΉ„νŠΈλ₯Ό μ ‘μ΄‰ν•˜λŠ” 두 개의 λ™μ‹œ μŠ€λ ˆλ“œλŠ” λ‘˜ λ‹€ λ³€κ²½λ˜κ±°λ‚˜ ν•œ 번만 변경될 수 μžˆμŠ΅λ‹ˆλ‹€.

zfsonlinux/zfs#1693은 Linux μΈν„°νŽ˜μ΄μŠ€μ™€ Solaris의 ZFS μΈν„°νŽ˜μ΄μŠ€ 간에 일뢀 λ³€ν™˜ μ½”λ“œλ₯Ό κ΅¬ν˜„ν•˜μ—¬ ZFSOnLinuxλ₯Ό 이 λ¬Έμ œμ— μ·¨μ•½ν•˜κ²Œ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. κ³ λ§™κ²Œλ„ 파일 μ†μ„±μ˜ μ΄λŸ¬ν•œ λΉ λ₯Έ μˆ˜μ •μ€ λ“œλ¬ΌκΈ° λ•Œλ¬Έμ— Linuxμ—μ„œ 파일 속성이 처음 κ΅¬ν˜„λ˜μ—ˆμ„ λ•Œ 이것이 κ°μ§€λ˜μ§€ μ•Šμ€ 것 κ°™μŠ΅λ‹ˆλ‹€. μš°λ¦¬λŠ” 우리 μžμ‹ μ˜ 파일 속성 μˆ˜μ • 도ꡬλ₯Ό κ΅¬ν˜„ν•  λ•Œ Solarisκ°€ ν•˜λŠ” 일에 따라 μ›μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ„ ν˜Έν•˜μ—¬ Linux μΈν„°νŽ˜μ΄μŠ€λ₯Ό 더 이상 μ‚¬μš©ν•˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ λ„κ΅¬λŠ” Solarisμ—μ„œ μƒμ†ν•œ ZFS 파일 μ†μ„±μ˜ 전체 λ²”μœ„λ₯Ό λ…ΈμΆœν•˜λŠ” 데 ν•„μš”ν•©λ‹ˆλ‹€.

λͺ…λ°±ν•œ 맀핑에 λŒ€ν•œ 지원이 λ³‘ν•©λ˜μ—ˆμœΌλ©° 0.6.3의 일뢀가 될 κ²ƒμž…λ‹ˆλ‹€.

  • ZFS_IMMUTABLE <-> FS_IMMUTABLE_FL
  • ZFS_APPENDONLY <-> FS_APPEND_FL
  • ZFS_NODUMP <-> FS_NODUMP_FL

이것은 Linux에 μ‘΄μž¬ν•˜μ§€λ§Œ Illumosμ—λŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 속성을 닀루지 μ•ŠμœΌλ©° κ·Έ λ°˜λŒ€μ˜ κ²½μš°λ„ λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€. μΌ€μ΄μŠ€ 바이 μΌ€μ΄μŠ€λ‘œ μ²˜λ¦¬ν•΄μ•Ό ν•˜λ―€λ‘œ 이 문제λ₯Ό μ’…λ£Œν•˜λŠ” 것이 합리적이라고 μƒκ°ν•©λ‹ˆλ‹€. μ–΄λ–»κ²Œ μž‘λ™ν•΄μ•Ό ν•˜λŠ”μ§€μ— λŒ€ν•œ μ„ΈλΆ€ 사항을 λ…Όμ˜ν•˜κΈ° μœ„ν•΄ ν•„μš”μ— 따라 각 속성에 λŒ€ν•œ μƒˆλ‘œμš΄ 문제λ₯Ό μ—΄ β€‹β€‹μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

9d31779 파일 속성 지원 κ΅¬ν˜„
3b4f425 inode_owner_or_capable() autotools 검사λ₯Ό λ¦¬νŒ©ν„°λ§ν•©λ‹ˆλ‹€.

@behlendorf μ§€μ›λ˜λŠ” 속성과 ZFS μ‹œμŠ€ν…œμ—μ„œ μˆ˜ν–‰ν•˜λŠ” μž‘μ—…μ„ λ‚˜μ—΄ν•˜λŠ” μ„€λͺ…μ„œλ‚˜ μ„€λͺ…μ„œκ°€ μžˆμŠ΅λ‹ˆκΉŒ?

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰