๐Ÿ’ฟ Storage

Btrfs ์ƒ์„ธ

๊ฐœ์š”

Btrfs(B-tree File System)๋Š” Copy-on-Write(CoW) ์›๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ํ˜„๋Œ€์ ์ธ ํŒŒ์ผ ์‹œ์Šคํ…œ์œผ๋กœ, 2007๋…„ Oracle์˜ Chris Mason์— ์˜ํ•ด ๊ฐœ๋ฐœ์ด ์‹œ์ž‘๋˜์–ด 2009๋…„ Linux ์ปค๋„ 2.6.29์— ํ†ตํ•ฉ๋˜์—ˆ๋‹ค. Btrfs๋Š” ๊ธฐ์กด ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ๋ณผ๋ฅจ ๊ด€๋ฆฌ, ์Šค๋ƒ…์ƒท, ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ, ์••์ถ•, ์ค‘๋ณต ์ œ๊ฑฐ ๋“ฑ์„ ํŒŒ์ผ ์‹œ์Šคํ…œ ์ˆ˜์ค€์—์„œ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค.

Btrfs์˜ ํ•ต์‹ฌ ์„ค๊ณ„ ๋ชฉํ‘œ๋Š” "์ €์žฅ์†Œ์˜ ํ™•์žฅ์„ฑ๊ณผ ๊ด€๋ฆฌ ์šฉ์ด์„ฑ"์ด๋‹ค. ๋‹จ์ˆœํžˆ ๋Œ€์šฉ๋Ÿ‰ ์ €์žฅ์†Œ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๊น”๋”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ๋Ÿ‰์„ ์ง๊ด€์ ์œผ๋กœ ํŒŒ์•…ํ•˜๊ณ  ์‹œ์Šคํ…œ์„ ์‹ ๋ขฐ์„ฑ ์žˆ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์ง€ํ–ฅํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋™์ผํ•œ CoW B-tree ๊ตฌํ˜„์ฒด๋กœ ํ†ต์ผํ•˜์—ฌ ์ผ๊ด€์„ฑ ์žˆ๋Š” ๋™์ž‘๊ณผ ํšจ์œจ์ ์ธ ์Šค๋ƒ…์ƒท ์ƒ์„ฑ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์˜€๋‹ค.

Btrfs ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์š”

ํ•ต์‹ฌ ๊ฐœ๋…

CoW B-tree ๊ตฌ์กฐ

Btrfs์˜ ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” CoW B-tree์ด๋‹ค. ๊ธฐ์กด B+ tree๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ๋ผ๋ฆฌ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด CoW ์Šค๋ƒ…์ƒท ์‹œ ์ „์ฒด ํŠธ๋ฆฌ๋ฅผ ๋ณต์‚ฌํ•ด์•ผ ํ•˜๋Š” ๋น„ํšจ์œจ์ด ์žˆ์ง€๋งŒ, Btrfs์˜ B-tree๋Š” ๋ฆฌํ”„ ์—ฐ๊ฒฐ์ด ์—†์–ด ๊ฐ ๋…ธ๋“œ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • 136๋น„ํŠธ ํ‚ค ๊ตฌ์กฐ: 64๋น„ํŠธ object ID + 8๋น„ํŠธ ํƒ€์ž… + 64๋น„ํŠธ ์˜คํ”„์…‹์œผ๋กœ ๋ชจ๋“  ์•„์ดํ…œ์„ ์‹๋ณ„
  • ๋‚ด๋ถ€ ๋…ธ๋“œ: ํ‚ค-ํฌ์ธํ„ฐ ์Œ์˜ ํ‰ํ‰ํ•œ ๋ชฉ๋ก์œผ๋กœ ๊ตฌ์„ฑ
  • ๋ฆฌํ”„ ๋…ธ๋“œ: ์•ž์ชฝ์— ์•„์ดํ…œ ํ‚ค, ๋’ค์ชฝ์— ์•„์ดํ…œ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ„์น˜ํ•˜๋ฉฐ ์–‘์ชฝ์ด ์ฑ„์›Œ์ง์— ๋”ฐ๋ผ ํ™•์žฅ
  • ์ฐธ์กฐ ์นด์šดํŠธ: ๊ฐ ํŠธ๋ฆฌ ๋…ธ๋“œ์— ์ฐธ์กฐ ์นด์šดํŠธ๋ฅผ ์œ ์ง€ํ•˜์—ฌ ํšจ์œจ์ ์ธ CoW ๊ฐ€๋Šฅ

์„œ๋ธŒ๋ณผ๋ฅจ (Subvolume)

์„œ๋ธŒ๋ณผ๋ฅจ์€ ํŒŒ์ผ ์‹œ์Šคํ…œ ๋‚ด์—์„œ ๋…๋ฆฝ์ ์œผ๋กœ ๋งˆ์šดํŠธ ๊ฐ€๋Šฅํ•œ POSIX ํŒŒ์ผ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์ด๋‹ค. ๋ฌผ๋ฆฌ์  ๋ณผ๋ฅจ์ด ์•„๋‹Œ ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ๋กœ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์„œ๋ธŒ๋ณผ๋ฅจ์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ ์œ„์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋…๋ฆฝ์  ๋งˆ์šดํŠธ: mount -o subvol=<name> ์˜ต์…˜์œผ๋กœ ๊ฐœ๋ณ„ ๋งˆ์šดํŠธ ๊ฐ€๋Šฅ
  • ์ค‘์ฒฉ ์„œ๋ธŒ๋ณผ๋ฅจ: ์„œ๋ธŒ๋ณผ๋ฅจ ์•ˆ์— ํ•˜์œ„ ์„œ๋ธŒ๋ณผ๋ฅจ ์ƒ์„ฑ ๊ฐ€๋Šฅ
  • ๊ธฐ๋ณธ ์„œ๋ธŒ๋ณผ๋ฅจ: ํŒŒ์ผ ์‹œ์Šคํ…œ ์ƒ์„ฑ ์‹œ ์ž๋™์œผ๋กœ ์„ค์ •๋˜๋ฉฐ, ๋งˆ์šดํŠธ ์‹œ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ
  • ์‚ญ์ œ ์ œ์•ฝ: ํ•˜์œ„ ์„œ๋ธŒ๋ณผ๋ฅจ์ด ๋ชจ๋‘ ์‚ญ์ œ๋˜์–ด์•ผ ์ƒ์œ„ ์„œ๋ธŒ๋ณผ๋ฅจ ์‚ญ์ œ ๊ฐ€๋Šฅ

์Šค๋ƒ…์ƒท (Snapshot)

์Šค๋ƒ…์ƒท์€ ํŠน์ • ์‹œ์ ์˜ ์„œ๋ธŒ๋ณผ๋ฅจ ์ƒํƒœ๋ฅผ ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ  ๋น ๋ฅด๊ฒŒ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค. CoW ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ™œ์šฉํ•˜์—ฌ ๊ธฐ์กด ๋ฐ์ดํ„ฐ ๋ธ”๋ก์„ ๊ณต์œ ํ•˜๊ณ  ๋ณ€๊ฒฝ๋ถ„๋งŒ ์ƒˆ๋กœ์šด ๋ธ”๋ก์— ๊ธฐ๋กํ•œ๋‹ค.

  • ์ฆ‰์‹œ ์ƒ์„ฑ: CoW ํŠน์„ฑ์ƒ ์ถ”๊ฐ€ ๋””์Šคํฌ ๊ณต๊ฐ„ ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ฆ‰์‹œ ์ƒ์„ฑ
  • ์ฝ๊ธฐ ์ „์šฉ/์ฝ๊ธฐ-์“ฐ๊ธฐ ์„ ํƒ: ์šด์˜ ๋ฐฑ์—…์—๋Š” read-only ์Šค๋ƒ…์ƒท, ํ…Œ์ŠคํŠธ๋‚˜ ๋กค๋ฐฑ์—๋Š” read-write ์Šค๋ƒ…์ƒท์„ ์ฃผ๋กœ ์‚ฌ์šฉ
  • ์ฝ๊ธฐ-์“ฐ๊ธฐ ์Šค๋ƒ…์ƒท: ์Šค๋ƒ…์ƒท์—์„œ ์ง์ ‘ ๋ฐ์ดํ„ฐ ์ˆ˜์ • ๊ฐ€๋Šฅ
  • ์ ์ฆ์  ์ „์†ก: btrfs send/receive๋กœ ์Šค๋ƒ…์ƒท ๊ฐ„ ์ฆ๋ถ„ ์ „์†ก ๊ฐ€๋Šฅ
  • ์Šค๋ƒ…์ƒท์˜ ์Šค๋ƒ…์ƒท: ์Šค๋ƒ…์ƒท์—์„œ๋„ ์ถ”๊ฐ€ ์Šค๋ƒ…์ƒท ์ƒ์„ฑ ๊ฐ€๋Šฅ
Btrfs ์Šค๋ƒ…์ƒท ๋™์ž‘ ์›๋ฆฌ

์ฒดํฌ์„ฌ (Checksum)

Btrfs๋Š” ๋ฐ์ดํ„ฐ์™€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ชจ๋‘์— ์ฒดํฌ์„ฌ์„ ์ ์šฉํ•˜์—ฌ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค. ์ฒดํฌ์„ฌ์€ ๋ณ„๋„์˜ ์ฒดํฌ์„ฌ ํŠธ๋ฆฌ์— ์ €์žฅ๋˜๋ฉฐ, ์ฝ๊ธฐ ์‹œ ์ž๋™์œผ๋กœ ๊ฒ€์ฆ๋œ๋‹ค.

  • CRC-32C: ๊ธฐ๋ณธ ์ฒดํฌ์„ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋น ๋ฅธ ๊ฒ€์ฆ ์†๋„
  • xxHash, SHA256, BLAKE2b: ์ปค๋„ 5.5 ์ด์ƒ์—์„œ ์ถ”๊ฐ€ ์ง€์›
  • ์ฝ๊ธฐ ๊ฒฝ๋กœ ๊ฒ€์ฆ: ์ฝ๊ธฐ ์‹œ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•œ ์ฒดํฌ์„ฌ๊ณผ checksum tree ๊ฐ’์„ ๋น„๊ตํ•ด silent corruption์„ ๊ฒ€์ถœ
  • ์ž๋™ ๋ณต๊ตฌ: ๋ฏธ๋Ÿฌ๋ง ๋˜๋Š” RAID ์‚ฌ์šฉ ์‹œ ์†์ƒ๋œ ๋ธ”๋ก์„ ์ข‹์€ ๋ณต์‚ฌ๋ณธ์œผ๋กœ ์ž๋™ ๋ณต๊ตฌ
  • ์Šคํฌ๋Ÿฌ๋ธŒ (Scrub): ์˜จ๋ผ์ธ์œผ๋กœ ์ „์ฒด ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ์Šค์บ”ํ•˜์—ฌ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ

ํ• ๋‹น ํŠธ๋ฆฌ (Extent Allocation Tree)

ํ• ๋‹น ํŠธ๋ฆฌ๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ํ• ๋‹น ๋งต ์—ญํ• ์„ ํ•˜๋Š” B-tree ๊ตฌ์กฐ์ด๋‹ค. ๋ชจ๋“  ์˜์—ญ(extent)์— ๋Œ€ํ•œ ์ •๋ณด์™€ ์—ญ์ฐธ์กฐ(back-reference)๋ฅผ ํฌํ•จํ•˜์—ฌ ์–ด๋–ค ํŠธ๋ฆฌ ๋…ธ๋“œ๋‚˜ ํŒŒ์ผ์ด ํ•ด๋‹น ์˜์—ญ์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์ถ”์ ํ•œ๋‹ค.

  • ๋™์  ๋ธ”๋ก ๊ทธ๋ฃน: ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ๋ฐ์ดํ„ฐ ๋ธ”๋ก ๊ทธ๋ฃน์ด ๋ฒˆ๊ฐˆ์•„ ๊ฐ€๋ฉฐ ๋™์ ์œผ๋กœ ์ƒ์„ฑ
  • ์—ญ์ฐธ์กฐ: ๊ฐ extent์— ์–ด๋–ค ๋…ธ๋“œ/ํŒŒ์ผ์ด ์‚ฌ์šฉํ•˜๋Š”์ง€ ์ถ”์ ํ•˜์—ฌ ํšจ์œจ์ ์ธ ์žฌ๋ฐฐ์น˜ ๊ฐ€๋Šฅ
  • ๊ณต๊ฐ„ ๊ด€๋ฆฌ: extent ํ• ๋‹น ํŠธ๋ฆฌ๊ฐ€ ๊ธฐ์กด ๋น„ํŠธ๋งต ๋ฐฉ์‹์„ ๋Œ€์ฒดํ•˜์—ฌ ํšจ์œจ์ ์ธ ๊ณต๊ฐ„ ๊ด€๋ฆฌ ์ œ๊ณต
  • ์˜จ๋ผ์ธ ๋ฆฌ์‚ฌ์ด์ง•: ํŒŒ์ผ ์‹œ์Šคํ…œ ์˜จ๋ผ์ธ ํ™•์žฅ/์ถ•์†Œ ๊ฐ€๋Šฅ

๋น„๊ต/๋ถ„์„

Btrfs vs ext4 vs XFS ๋น„๊ต

๊ธฐ๋Šฅ Btrfs ext4 XFS
CoW ๋„ค์ดํ‹ฐ๋ธŒ ์ง€์› ๋ฏธ์ง€์› ๋ฆฌํ”Œ๋ง(reflink) ์„ ํƒ ์ง€์›
์ฒดํฌ์„ฌ ๋ฐ์ดํ„ฐ + ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋งŒ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋งŒ
์Šค๋ƒ…์ƒท ์„œ๋ธŒ๋ณผ๋ฅจ ๋ ˆ๋ฒจ LVM ํ•„์š” LVM ํ•„์š”
์„œ๋ธŒ๋ณผ๋ฅจ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฏธ์ง€์› ๋ฏธ์ง€์›
์ค‘๋ณต ์ œ๊ฑฐ ํ›„์ฒ˜๋ฆฌ ๋ฐฉ์‹ ๋ฏธ์ง€์› ๋ฏธ์ง€์›
ํˆฌ๋ช… ์••์ถ• ๋„ค์ดํ‹ฐ๋ธŒ ๋ฏธ์ง€์› ๋ฏธ์ง€์›
RAID ๋„ค์ดํ‹ฐ๋ธŒ (0,1,10) mdadm ํ•„์š” mdadm ํ•„์š”
์˜จ๋ผ์ธ ์ถ•์†Œ ์ง€์› ๋ฏธ์ง€์› ๋ฏธ์ง€์›
์˜จ๋ผ์ธ ๋””ํ”„๋ž˜๊ทธ ์ง€์› ์ง€์› ์ง€์›

Btrfs RAID ๋ ˆ๋ฒจ ๋น„๊ต

RAID ๋ ˆ๋ฒจ ์ตœ์†Œ ๋””์Šคํฌ ๊ฐ€์šฉ์„ฑ ํŠน์ง•
single 1 ์—†์Œ ์ค‘๋ณตํ™” ์—†์Œ
dup 1 ๋†’์Œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์šฉ, ๋™์ผ ๋””์Šคํฌ์— 2 ๋ณต์‚ฌ๋ณธ
raid0 2 ์—†์Œ ์ŠคํŠธ๋ผ์ดํ•‘, ์„ฑ๋Šฅ ํ–ฅ์ƒ
raid1 2 ๋†’์Œ ๋ฏธ๋Ÿฌ๋ง, 2๊ฐœ ๋””์Šคํฌ์— ๋™์ผ ๋ฐ์ดํ„ฐ
raid10 4 ๋†’์Œ ๋ฏธ๋Ÿฌ๋ง + ์ŠคํŠธ๋ผ์ดํ•‘
raid1c3 3 ๋งค์šฐ ๋†’์Œ 3์ค‘ ๋ฏธ๋Ÿฌ๋ง
raid1c4 4 ๋งค์šฐ ๋†’์Œ 4์ค‘ ๋ฏธ๋Ÿฌ๋ง
raid5 3 ์ค‘๊ฐ„ ํŒจ๋ฆฌํ‹ฐ ๊ธฐ๋ฐ˜ (์“ฐ๊ธฐ ํ™€ ๋ฌธ์ œ)
raid6 4 ๋†’์Œ ์ด์ค‘ ํŒจ๋ฆฌํ‹ฐ (์“ฐ๊ธฐ ํ™€ ๋ฌธ์ œ)

๋™์ž‘ ์›๋ฆฌ

CoW ์“ฐ๊ธฐ ๊ณผ์ •

Btrfs์˜ CoW ์“ฐ๊ธฐ๋Š” ๋‹ค์Œ 6๋‹จ๊ณ„๋กœ ์ง„ํ–‰๋œ๋‹ค:

  1. ์ƒˆ ๋ธ”๋ก ํ• ๋‹น: ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋กํ•  ์ƒˆ๋กœ์šด extent๋ฅผ ํ• ๋‹น
  2. ๋ฐ์ดํ„ฐ ๊ธฐ๋ก: ์ƒˆ๋กœ์šด extent์— ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ ๊ธฐ๋ก
  3. ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ: ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํฌ์ธํ„ฐ๋ฅผ ์ƒˆ extent๋กœ ์—…๋ฐ์ดํŠธ
  4. ํŠธ๋ฆฌ ์ƒ์œ„ ์ „ํŒŒ: ๋ณ€๊ฒฝ์ด ์ƒ์œ„ ๋…ธ๋“œ์™€ ๋ฃจํŠธ๊นŒ์ง€ ์ „ํŒŒ
  5. ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹: ์ƒˆ ๋ฃจํŠธ๊ฐ€ ์ปค๋ฐ‹๋˜๋ฉด ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ด€์ ์—์„œ ์ผ๊ด€๋œ ์ƒˆ ๋ฒ„์ „์ด ํ™•์ •
  6. ๊ณต๊ฐ„ ํšŒ์ˆ˜: ๋” ์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ธฐ์กด extent๋Š” ์ง€์—ฐ ํšŒ์ˆ˜ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ์ •๋ฆฌ
Btrfs CoW ์“ฐ๊ธฐ ๊ณผ์ •

๋กœ๊ทธ ํŠธ๋ฆฌ (Log Tree)

fsync ์š”์ฒญ์€ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฆ‰์‹œ ์•ˆ์ •์  ์ €์žฅ์†Œ์— ์ปค๋ฐ‹ํ•œ๋‹ค. fsync๊ฐ€ ๋นˆ๋ฒˆํ•œ ์›Œํฌ๋กœ๋“œ(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ)์—์„œ ๋ถˆํ•„์š”ํ•œ ์“ฐ๊ธฐ I/O๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, Btrfs๋Š” ์ž„์‹œ ๋กœ๊ทธ ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ fsync ํŠธ๋ฆฌ๊ฑฐ๋œ CoW๋ฅผ ์ €๋„๋งํ•œ๋‹ค.

  • ์ž„์‹œ ์ €์žฅ: ์„œ๋ธŒ๋ณผ๋ฅจ๋ณ„ ๋กœ๊ทธ ํŠธ๋ฆฌ์— fsync ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ž„์‹œ ์ €์žฅ
  • ์ „์ฒด ์ปค๋ฐ‹ ์‹œ ํ•ด์ œ: ๋‹ค์Œ ์ „์ฒด ํŠธ๋ฆฌ ์ปค๋ฐ‹ ์‹œ ๋กœ๊ทธ ํŠธ๋ฆฌ์˜ ์•„์ดํ…œ์„ ์‹ค์ œ ํŠธ๋ฆฌ์— ๋ฐ˜์˜ํ•˜๊ณ  ํ•ด์ œ
  • ํฌ๋ž˜์‹œ ๋ณต๊ตฌ: ์‹œ์Šคํ…œ ํฌ๋ž˜์‹œ ์‹œ ๋กœ๊ทธ ํŠธ๋ฆฌ์˜ ์•„์ดํ…œ์„ ๋ฆฌํ”Œ๋ ˆ์ดํ•˜์—ฌ ๋ณต๊ตฌ

์ฒญํฌ ๋ฐ ๋””๋ฐ”์ด์Šค ํŠธ๋ฆฌ

๋ฌผ๋ฆฌ์  ์ฒญํฌ๋Š” ๋ฐ์ดํ„ฐ์šฉ 1GiB, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์šฉ 256MiB ๋‹จ์œ„๋กœ ๊ด€๋ฆฌ๋œ๋‹ค. ์—ฌ๋Ÿฌ ๋””๋ฐ”์ด์Šค์˜ ๋ฌผ๋ฆฌ์  ์ฒญํฌ๋ฅผ ๋ฏธ๋Ÿฌ๋งํ•˜๊ฑฐ๋‚˜ ์ŠคํŠธ๋ผ์ดํ•‘ํ•˜์—ฌ ๋…ผ๋ฆฌ์  ์ฒญํฌ๋กœ ๊ตฌ์„ฑํ•œ๋‹ค.

  • ๋…ผ๋ฆฌ์  ์ฃผ์†Œ ๊ณต๊ฐ„: ๋ชจ๋“  ์ฒญํฌ๋ฅผ ๋‹จ์ผ ๋…ผ๋ฆฌ์  ์ฃผ์†Œ ๊ณต๊ฐ„์œผ๋กœ ํ†ตํ•ฉ
  • ์œ ์—ฐํ•œ ๋งคํ•‘: single, dup, raid0, raid1 ๋“ฑ ๋‹ค์–‘ํ•œ ๋งคํ•‘ ํƒ€์ž… ์ง€์›
  • ๋™์  ํ• ๋‹น: ํ•„์š”ํ•œ ์‹œ์ ์— ์ฒญํฌ๋ฅผ ๋™์ ์œผ๋กœ ํ• ๋‹น

์šด์˜ ์ž‘์—…: scrub, balance, replace

Btrfs๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ์˜จ๋ผ์ธ์œผ๋กœ ์†๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ด€๋ฆฌ ์ž‘์—…์„ ํ•จ๊ป˜ ์ œ๊ณตํ•œ๋‹ค. ์ด ๊ธฐ๋Šฅ๋“ค์€ ์Šค๋ƒ…์ƒท์ด๋‚˜ ์ฒดํฌ์„ฌ๋งŒํผ ์‹ค๋ฌด ์šด์˜์—์„œ ์ค‘์š”ํ•˜๋‹ค.

  • scrub: ์ฒดํฌ์„ฌ์„ ๊ธฐ์ค€์œผ๋กœ ์ „์ฒด ๋ธ”๋ก์„ ์ˆœํšŒํ•˜๋ฉฐ ์†์ƒ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ , ์ค‘๋ณต ๋ณต์‚ฌ๋ณธ์ด ์žˆ์œผ๋ฉด ์ž๋™ ๋ณต๊ตฌ ์‹œ๋„
  • balance: ์ฒญํฌ๋ฅผ ๋‹ค์‹œ ๋ฐฐ์น˜ํ•ด ํ”„๋กœํŒŒ์ผ ๋ณ€ํ™˜์ด๋‚˜ ๊ณต๊ฐ„ ํŽธ์ค‘ ์™„ํ™”๋ฅผ ์ˆ˜ํ–‰
  • device replace: ์žฅ์•  ์ง•ํ›„๊ฐ€ ์žˆ๋Š” ๋””์Šคํฌ๋ฅผ ์˜จ๋ผ์ธ์œผ๋กœ ๊ต์ฒดํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ ์žฌ๋ฐฐ์น˜ ๊ฐ€๋Šฅ

์žฅ๋‹จ์ 

์žฅ์ 

  • ๋„ค์ดํ‹ฐ๋ธŒ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ: ์Šค๋ƒ…์ƒท, ์„œ๋ธŒ๋ณผ๋ฅจ, ์ค‘๋ณต ์ œ๊ฑฐ, ์••์ถ•์„ ํŒŒ์ผ ์‹œ์Šคํ…œ ์ˆ˜์ค€์—์„œ ๋„ค์ดํ‹ฐ๋ธŒ ์ง€์›
  • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ: ๋ฐ์ดํ„ฐ + ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒดํฌ์„ฌ์œผ๋กœ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ, ์Šคํฌ๋Ÿฌ๋ธŒ๋กœ ์ž๋™ ๊ฒ€์ฆ
  • ์œ ์—ฐํ•œ ๊ณต๊ฐ„ ๊ด€๋ฆฌ: ์„œ๋ธŒ๋ณผ๋ฅจ์„ ํ†ตํ•œ ๋…ผ๋ฆฌ์  ๋ณผ๋ฅจ ๊ด€๋ฆฌ, ์˜จ๋ผ์ธ ํ™•์žฅ/์ถ•์†Œ ๊ฐ€๋Šฅ
  • Linux ์ปค๋„ ํ†ตํ•ฉ: ๋ณ„๋„ ์„ค์น˜ ๋ถˆํ•„์š”, ์ปค๋„ ๋‚ด์žฅ์œผ๋กœ ๋†’์€ ํ˜ธํ™˜์„ฑ
  • ํšจ์œจ์ ์ธ ๋ฐฑ์—…: send/receive๋ฅผ ํ†ตํ•œ ์ฆ๋ถ„ ๋ฐฑ์—… ๋ฐ ๋ณต์ œ

๋‹จ์ 

  • RAID 5/6 ์“ฐ๊ธฐ ํ™€ ๋ฌธ์ œ: ์ „์› ์ฐจ๋‹จ ์‹œ ํŒจ๋ฆฌํ‹ฐ ๋ถˆ์ผ์น˜ ๊ฐ€๋Šฅ์„ฑ์œผ๋กœ ํ”„๋กœ๋•์…˜ ์‚ฌ์šฉ ๋น„๊ถŒ์žฅ
  • ์ผ๋ถ€ ๊ธฐ๋Šฅ ์•ˆ์ •ํ™” ๋ฏธํก: RAID 5/6, ์ผ๋ถ€ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์˜ ์•ˆ์ •ํ™”๊ฐ€ ์ง„ํ–‰ ์ค‘
  • ์กฐ๊ฐํ™” ๋ฏผ๊ฐ์„ฑ: CoW ํŠน์„ฑ์ƒ ์“ฐ๊ธฐ ์‹œ ์กฐ๊ฐํ™” ๋ฐœ์ƒ ๊ฐ€๋Šฅ, ์˜จ๋ผ์ธ ๋””ํ”„๋ž˜๊ทธ ํ•„์š”
  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰: btrfs check ๊ฐ™์€ ๋ณต๊ตฌ/์ ๊ฒ€ ์ž‘์—…์€ ํฐ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์š”๊ตฌํ•  ์ˆ˜ ์žˆ์Œ

๊ด€๋ จ ๊ธฐ์ˆ 

  • dm-crypt/LUKS: Btrfs ์œ„์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋””์Šคํฌ ์•”ํ˜ธํ™” ๊ธฐ์ˆ 
  • LVM: Btrfs์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ๋ณผ๋ฅจ ๊ด€๋ฆฌ์ž (๋‹จ, Btrfs์˜ ์„œ๋ธŒ๋ณผ๋ฅจ๊ณผ ์—ญํ•  ์ค‘๋ณต ๊ฐ€๋Šฅ)
  • NVMe: ๊ณ ์„ฑ๋Šฅ ์ €์žฅ ์žฅ์น˜ ์ธํ„ฐํŽ˜์ด์Šค์™€ Btrfs์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”
  • ZFS: Btrfs์™€ ํ•จ๊ป˜ ๋Œ€ํ‘œ๋˜๋Š” CoW ํŒŒ์ผ ์‹œ์Šคํ…œ์œผ๋กœ ๋น„๊ต ๋Œ€์ƒ
  • ext4: ๊ธฐ์กด ๋ฆฌ๋ˆ…์Šค ๋ฒ”์šฉ ํŒŒ์ผ ์‹œ์Šคํ…œ์œผ๋กœ Btrfs์˜ ๋Œ€์•ˆ
  • XFS: ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ์— ํŠนํ™”๋œ ํŒŒ์ผ ์‹œ์Šคํ…œ

๊ด€๋ จ ๋ฌธ์„œ

์ฐธ๊ณ  ๋ฌธํ—Œ

ํ•ต์‹ฌ ์ •๋ฆฌ

  1. Btrfs๋Š” CoW B-tree๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์—ฌ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋™์ผํ•œ ํ˜•์‹์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ ํšจ์œจ์ ์ธ ์Šค๋ƒ…์ƒท๊ณผ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.
  2. ์„œ๋ธŒ๋ณผ๋ฅจ์€ ๋ฌผ๋ฆฌ์  ๋ณผ๋ฅจ์ด ์•„๋‹Œ ๋…ผ๋ฆฌ์  ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ, ์œ ์—ฐํ•œ ์ €์žฅ ๊ด€๋ฆฌ์™€ ๊ฒฉ๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.
  3. ๋ฐ์ดํ„ฐ์™€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ฒดํฌ์„ฌ๊ณผ ์Šคํฌ๋Ÿฌ๋ธŒ ๊ธฐ๋Šฅ์€ ์ž๋™์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๊ฒ€์ฆํ•˜๊ณ  ๋ณต๊ตฌํ•œ๋‹ค.
  4. RAID 5/6์˜ ์“ฐ๊ธฐ ํ™€ ๋ฌธ์ œ๋Š” ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, RAID 0/1/10์ด ๊ถŒ์žฅ๋œ๋‹ค.
  5. send/receive ๊ธฐ๋Šฅ์„ ํ†ตํ•œ ์ฆ๋ถ„ ๋ฐฑ์—…์€ ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ์™€ ๋ณต์ œ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.