ext4 ์์ธ
๊ฐ์
ext4๋ ๋ฆฌ๋ ์ค ์ปค๋ 2.6.28(2008๋ )์์ ์ฒซ ๋์ ๋ ํ์ฅ ํ์ผ ์์คํ ์ ๋ค ๋ฒ์งธ ๋ฒ์ ์ผ๋ก, ๊ธฐ์กด ext3์์ ๋์คํฌ ํฌ๋งท๊ณผ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ํญ ๊ฐ์ ํ ๋ฒ์ฉ ํ์ผ ์์คํ ์ด๋ค. Extent ๊ธฐ๋ฐ ํ ๋น, ๋ค์ค ๋ธ๋ก ํ ๋น์(MBAlloc), ์ง์ฐ ํ ๋น(Delayed Allocation) ๋ฑ์ ํตํด ๋์ฉ๋ ํ์ผ ์ฒ๋ฆฌ ์ฑ๋ฅ๊ณผ ์กฐ๊ฐํ ๋ฐฉ์ง ๋ฅ๋ ฅ์ ํฌ๊ฒ ํฅ์์์ผฐ์ผ๋ฉฐ, ์ต๋ 1EB ํ์ผ ์์คํ ํฌ๊ธฐ์ 16TB ๋จ์ผ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ง์ํ๋ค.
ext4๋ ์์ ์ฑ๊ณผ ํธํ์ฑ์ ์ต์ฐ์ ์ผ๋ก ์ค๊ณ๋์ด ๊ฑฐ์ ๋ชจ๋ ๋ฆฌ๋ ์ค ๋ฐฐํฌํ์ ๊ธฐ๋ณธ ๋๋ ์ ํ ํ์ผ ์์คํ ์ผ๋ก ์ฌ์ฉ๋๋ค. ํนํ RHEL/CentOS ๊ณ์ด์์ ๊ธฐ๋ณธ ํ์ผ ์์คํ ์ผ๋ก ์ฑํ๋์ด ์ด์ ํ๊ฒฝ์์ ๋๋ฆฌ ํ์ฉ๋๋ฉฐ, ext3์์ ๋ฌด์์ค ์ ๊ทธ๋ ์ด๋๊ฐ ๊ฐ๋ฅํ์ฌ ๊ธฐ์กด ์ธํ๋ผ์์์ ์ ํ ๋น์ฉ์ด ๋ฎ๋ค. ์ ๋๋ง ๋ฉํ๋ฐ์ดํฐ ์ฒดํฌ์ฌ, ์จ๋ผ์ธ ๋ํ๋๊ทธ๋ฉํ ์ด์ , ๋น ๋ฅธ fsck ๋ฑ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ํตํด ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์์ ํ๋ณดํ๋ค.
ํต์ฌ ๊ฐ๋
Extent ๊ธฐ๋ฐ ํ ๋น
ext3๊น์ง๋ ๊ฐ์ ๋ธ๋ก ๋งคํ(indirect block mapping) ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ๊ฐ ๋ฐ์ดํฐ ๋ธ๋ก์ ๋ํด ๊ฐ๋ณ์ ์ผ๋ก ๋งคํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค. ์ด ๋ฐฉ์์ ๋์ฉ๋ ํ์ผ์์ ๋งคํ ํ ์ด๋ธ์ด ๋น๋ํด์ง๊ณ ์ญ์ /ํธ๋ ํฌ์ผ์ด์ ์ฑ๋ฅ์ด ์ ํ๋๋ ๋ฌธ์ ๊ฐ ์๋ค. ext4๋ ์ด๋ฅผ ๋์ฒดํ์ฌ extent ๊ธฐ๋ฐ ํ ๋น์ ๋์ ํ๋ค.
Extent๋ ์ธ์ ํ ์ฐ์ ๋์คํฌ ๋ธ๋ก์ ๋ฒ์๋ฅผ ํ๋์ ์ํธ๋ฆฌ๋ก ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ์ด๋ค. ์๋ฅผ ๋ค์ด 100MB ํ์ผ์ ํ๋์ extent๋ก ํ ๋นํ๋ฉด 25,600๊ฐ์ ๊ฐ๋ณ ๋ธ๋ก ๋งคํ ๋์ ํ๋์ ์ํธ๋ฆฌ๋ก ๊ด๋ฆฌํ ์ ์๋ค. ext4์ inode๋ ์ต๋ 4๊ฐ์ direct extent๋ฅผ ํฌํจํ๋ฉฐ, ์ด๊ณผํ๋ ๊ฒฝ์ฐ extent tree(Internal Node)๋ก ํ์ฅ๋๋ค.
| ํญ๋ชฉ | ext3 | ext4 |
|---|---|---|
| ํ ๋น ๋ฐฉ์ | ๊ฐ์ ๋ธ๋ก ๋งคํ | Extent ๊ธฐ๋ฐ |
| ๋์ฉ๋ ํ์ผ ํจ์จ | ๋ฎ์ (๋งคํ ํ ์ด๋ธ ๋น๋) | ๋์ (๋ฒ์ ๋จ์ ๊ด๋ฆฌ) |
| ์กฐ๊ฐํ | ๋์ | ๋ฎ์ (์ฐ์ ํ ๋น ์ด์ง) |
| ์ต๋ ํ์ผ ํฌ๊ธฐ | 2TB | 16TB |
๋ค์ค ๋ธ๋ก ํ ๋น์ (MBAlloc)
ext3์ ๋ธ๋ก ํ ๋น์๋ ํธ์ถ๋น ๋จ์ผ ๋ธ๋ก(4KB)๋ง ํ ๋นํ์๋ค. 100MB ๋ฐ์ดํฐ ๊ธฐ๋ก ์ 25,600๋ฒ์ ํ ๋น ํธ์ถ์ด ํ์ํ์ผ๋ฉฐ, ํ ๋น์๊ฐ ์ ์ฒด ํ ๋น ํจํด์ ํ์ ํ์ง ๋ชปํด ์ต์ ํ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค. ext4๋ multiblock allocator(MBAlloc)๋ฅผ ๋์ ํ์ฌ ๋จ์ผ ํธ์ถ๋ก ์ฌ๋ฌ ๋ธ๋ก์ ํ ๋ฒ์ ํ ๋นํ๋ค.
MBAlloc์ ํ ๋น ์ ์ฑ ์ ์ต์ ํํ ์ ์๋ ์ ๋ณด(์ ์ฒด ํ ๋น ํฌ๊ธฐ, ํ์ผ์ ์ ๊ทผ ํจํด ๋ฑ)๋ฅผ ํ๋ณดํ๋ฏ๋ก, ์ฐ์ ๋ธ๋ก ํ ๋น๊ณผ extent ๊ธฐ๋ฐ ํ ๋น์ ํจ์จ์ ๊ทน๋ํํ๋ค. ํนํ ์ง์ฐ ํ ๋น๊ณผ ๊ฒฐํฉ๋์ด ๋ถํ์ํ ํ ๋น์ ์ค์ด๊ณ ์กฐ๊ฐํ๋ฅผ ์ต์ํํ๋ค.
์ง์ฐ ํ ๋น (Delayed Allocation)
๊ธฐ์กด ํ์ผ ์์คํ ์ write() ์์คํ ํธ์ถ ์ ์ฆ์ ๋ธ๋ก์ ํ ๋นํ์๋ค. ๋ฐ์ดํฐ๊ฐ ํ์ด์ง ์บ์์ ๋จธ๋ฌผ ๋์์๋ ๋ธ๋ก์ด ํ ๋น๋๋ฏ๋ก, ํ์ผ์ด ๊ณ์ ์ฑ์ฅํ ๊ฒฝ์ฐ ํ ๋น์๊ฐ ์ต์ ์ ์์น๋ฅผ ์ ํํ ์ ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
ext4๋ ์ง์ฐ ํ ๋น(Delayed Allocation)์ ์ ์ฉํ์ฌ write() ์ ๋ธ๋ก ํ ๋น์ ์ฐ๊ธฐํ๊ณ , ๋ฐ์ดํฐ๊ฐ ์ค์ ๋ก ๋์คํฌ์ ๊ธฐ๋ก๋ ๋๊น์ง ํ ๋น์ ๋ฏธ๋ฃฌ๋ค. ์ด๋ฅผ ํตํด:
- ํ ๋น ์์ ์ ํ์ผ์ ์ต์ข ํฌ๊ธฐ๋ฅผ ํ์ ํ์ฌ ์ต์ ํ ๋น ๊ฐ๋ฅ
- MBAlloc๊ณผ extent๊ฐ ๊ฒฐํฉ๋์ด ์ฐ์ ํ ๋น ํ๋ฅ ์ฆ๊ฐ
- ์กฐ๊ฐํ ํ์ ๋ํญ ๊ฐ์
๋ค๋ง data=journal ๋ชจ๋์์๋ ๋ฐ์ดํฐ๋ ์ ๋์ ๋จผ์ ๊ธฐ๋กํด์ผ ํ๋ฏ๋ก ์ง์ฐ ํ ๋น๊ณผ O_DIRECT๊ฐ ๋นํ์ฑํ๋๋ค. ๋ฐ๋ผ์ ext4์ ์ผ๋ฐ์ ์ธ ์ฑ๋ฅ ํน์ฑ์ ๊ธฐ๋ณธ๊ฐ์ธ data=ordered๋ data=writeback ๋ชจ๋์์ ๊ฐ์ฅ ์ ๋๋ฌ๋๋ค.
์ ๋๋ง (Journaling)
ext4๋ jbd2(Journaling Block Device 2)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉํ๋ฐ์ดํฐ ์ ๋๋ง์ ๊ตฌํํ๋ค. ์ ๋๋ง ๋ชจ๋๋ ๋ค์ ์ธ ๊ฐ์ง๋ก ๋ถ๋ฅ๋๋ค:
| ๋ชจ๋ | ๊ธฐ๋ก ๋์ | ํน์ง |
|---|---|---|
| data=writeback | ๋ฉํ๋ฐ์ดํฐ๋ง | ์ฑ๋ฅ ์ต๊ณ , ๋ฐ์ดํฐ ์์ค ์ํ |
| data=ordered | ๋ฉํ๋ฐ์ดํฐ + ๋ฐ์ดํฐ ์์ ๋ณด์ฅ | ์์ ์ฑ๊ณผ ์ฑ๋ฅ์ ๊ท ํ (๊ธฐ๋ณธ๊ฐ) |
| data=journal | ๋ฉํ๋ฐ์ดํฐ + ๋ฐ์ดํฐ ๋ชจ๋ | ๊ฐ์ฅ ์์ , ์ฑ๋ฅ ์ ํ |
ext4๋ ์ ๋ ๋ธ๋ก ์ฒดํฌ์ฌ์ ์ง์ํ์ฌ ์ ๋ ์์ ์ ๋น ๋ฅด๊ฒ ๊ฐ์งํ๊ณ ๋ณต๊ตฌํ ์ ์๋ค. ์ด๋ฅผ ํตํด ์ด์ง ํธ๋์ญ์ ์ปค๋ฐ์ ๋จ์ผ ์ปค๋ฐ์ผ๋ก ๋ณํํ์ฌ ์ต๋ 20% ์ฑ๋ฅ ํฅ์์ ๋ฌ์ฑํ ์ ์๋ค.
๋ธ๋ก ๊ทธ๋ฃน (Block Group)
ext4 ํ์ผ ์์คํ ์ ์ ์ฒด ๋์คํฌ๋ฅผ ๊ณ ์ ํฌ๊ธฐ์ ๋ธ๋ก ๊ทธ๋ฃน์ผ๋ก ๋ถํ ํ๋ค. ๊ธฐ๋ณธ ๋ธ๋ก ํฌ๊ธฐ 4KB ๊ธฐ์ค์ผ๋ก ๊ฐ ๊ทธ๋ฃน์ 32,768๊ฐ์ ๋ธ๋ก์ ํฌํจํ๋ฉฐ(128MB), ํ ๋น์๋ ๊ฐ์ ํ์ผ์ ๋ธ๋ก์ ๋์ผ ๊ทธ๋ฃน ๋ด์ ์ ์งํ์ฌ ํ์ ์๊ฐ์ ์ต์ํํ๋ค.
์ ์ฐํ ๋ธ๋ก ๊ทธ๋ฃน(Flexible Block Groups, flex_bg)์ ์ฌ๋ฌ ๋ธ๋ก ๊ทธ๋ฃน์ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ทธ๋ฃนํํ์ฌ ๋นํธ๋งต, inode ํ ์ด๋ธ ๋ฑ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฐ์ ๋ฐฐ์นํ๋ค. ์ด๋ฅผ ํตํด:
- ๋ฉํ๋ฐ์ดํฐ ์ฝ๊ธฐ ์ ๋์คํฌ ํ์ ํ์ ๊ฐ์
- ํ์ผ ์์คํ ํ์ฅ ์ ์ฑ๋ฅ ์ ํ ์ต์ํ
- inode ํ ๋น ํจ์จ ํฅ์
๋๋ ํ ๋ฆฌ ์ธ๋ฑ์ฑ (HTree)
ext4๋ ๋ํ ๋๋ ํ ๋ฆฌ์์ ์ ํ ๊ฒ์ ๋น์ฉ์ด ์ปค์ง๋ ๋ฌธ์ ๋ฅผ ์ค์ด๊ธฐ ์ํด HTree ๊ธฐ๋ฐ ๋๋ ํ ๋ฆฌ ์ธ๋ฑ์ฑ์ ์ฌ์ฉํ๋ค. ํ์ผ ์ด๋ฆ ํด์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋๋ ํ ๋ฆฌ ์ํธ๋ฆฌ๋ฅผ ๋ถ์ฐํด ์ ์ฅํ๋ฏ๋ก ์๋ง ๊ฐ ์ด์์ ํ์ผ์ด ์๋ ๋๋ ํ ๋ฆฌ์์๋ ์กฐํ์ ์์ฑ ์ฑ๋ฅ์ด ๊ธ๊ฒฉํ ์ ํ๋์ง ์๋๋ค. ์ด ๊ธฐ๋ฅ์ ๋ฉ์ผ ์คํ, ๋ก๊ทธ ์ ์ฌ ๋๋ ํ ๋ฆฌ, ์ปจํ ์ด๋ ๋ ์ด์ด ์บ์์ฒ๋ผ ์ํธ๋ฆฌ ์๊ฐ ๋ง์ ์ํฌ๋ก๋์์ ํนํ ์ค์ํ๋ค.
๋ฉํ๋ฐ์ดํฐ ์ฒดํฌ์ฌ
ext4๋ ๋ชจ๋ ๋ฉํ๋ฐ์ดํฐ ๊ตฌ์กฐ(inode, ๋๋ ํ ๋ฆฌ ์ํธ๋ฆฌ, extents, ๋นํธ๋งต ๋ฑ)์ CRC-32C ์ฒดํฌ์ฌ์ ๋์ ํ์ฌ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๊ฐํํ๋ค. ext3์์๋ ์ฒดํฌ์ฌ์ด ์์ด ๋ฉํ๋ฐ์ดํฐ ์์์ ์ฆ์ ๊ฐ์งํ ์ ์์๋ค.
๋น ๋ฅธ fsck
ext3์์ fsck์ ๋ชจ๋ inode๋ฅผ ์์ฐจ์ ์ผ๋ก ๊ฒ์ฌํ๋ฏ๋ก ํ์ผ ์์คํ ์ด ํด์๋ก ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค. ext4๋ ๊ฐ ๋ธ๋ก ๊ทธ๋ฃน์ inode ํ ์ด๋ธ ๋์ ๋ฏธ์ฌ์ฉ inode ๋ชฉ๋ก(์ฒดํฌ์ฌ ํฌํจ)์ ์ ์ฅํ์ฌ, fsck์ด ์ฌ์ฉ ์ค์ธ inode๋ง ๊ฒ์ฌํ๋๋ก ํ๋ค.
์ด๋ฅผ ํตํด fsck ์๊ฐ์ด ์ต๋ 20๋ฐฐ ๋จ์ถ๋๋ฉฐ, ๋๊ท๋ชจ ํ์ผ ์์คํ ์์๋ ๋น ๋ฅธ ๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅํ๋ค. ๋จ, ๋ฏธ์ฌ์ฉ inode ๋ชฉ๋ก์ fsck ์คํ ์ ์์ฑ๋๋ฏ๋ก, ์ฒซ ๋ฒ์งธ fsck ์คํ ํ๋ถํฐ ์ฑ๋ฅ ํฅ์ ํจ๊ณผ๊ฐ ์๋ค.
์จ๋ผ์ธ ๋ํ๋๊ทธ๋ฉํ ์ด์
์ง์ฐ ํ ๋น๊ณผ extent๋ ์กฐ๊ฐํ๋ฅผ ์ค์ด์ง๋ง, ์ฅ๊ธฐ ์ฌ์ฉ ์ ์กฐ๊ฐํ๋ ์ฌ์ ํ ๋ฐ์ํ๋ค. ext4๋ e4defrag ๋๊ตฌ๋ฅผ ํตํ ์จ๋ผ์ธ ๋ํ๋๊ทธ๋ฉํ ์ด์ ์ ์ง์ํ๋ฉฐ, ํ์ผ ์์คํ ๋ง์ดํธ ์ํ์์ ๊ฐ๋ณ ํ์ผ ๋๋ ์ ์ฒด ํ์ผ ์์คํ ์ ์กฐ๊ฐ ๋ชจ์์ด ๊ฐ๋ฅํ๋ค.
Inode ๊ด๋ จ ๊ธฐ๋ฅ
- ํ์ฅ๋ inode ํฌ๊ธฐ: ๊ธฐ๋ณธ 256๋ฐ์ดํธ(ext3 128๋ฐ์ดํธ ๋๋น 2๋ฐฐ)๋ก, ๋๋ ธ์ด ํ์์คํฌํ, inode ๋ฒ์ ๋, ํ์ฅ ์์ฑ(Extended Attributes)์ ์ํ ๊ณต๊ฐ์ ํ๋ณด
- ๋๋ ธ์ด ํ์์คํฌํ: ์์ ์๊ฐ(mtime) ๋ฑ์ ํด์๋๊ฐ ์ด ๋จ์์์ ๋๋ ธ์ด ๋จ์๋ก ํฅ์
- inode ์์ฝ: ๋๋ ํ ๋ฆฌ ์์ฑ ์ inode๋ฅผ ์ฌ์ ์์ฝํ์ฌ ํ์ผ ์์ฑ/์ญ์ ์ฑ๋ฅ ํฅ์
- ์์ ์ฌ์ ํ ๋น(persistent preallocation): posix_fallocate()๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ์๋ก ํ ๊ณต๊ฐ์ ๋ฏธ๋ฆฌ ํ๋ณด
๋น๊ต/๋ถ์
ext3 vs ext4 ์ฃผ์ ๊ฐ์ ๋น๊ต
| ํญ๋ชฉ | ext3 | ext4 |
|---|---|---|
| ์ต๋ ํ์ผ ์์คํ ํฌ๊ธฐ | 16TB | 1EB |
| ์ต๋ ํ์ผ ํฌ๊ธฐ | 2TB | 16TB |
| ๋ธ๋ก ํ ๋น ๋ฐฉ์ | ๋จ์ผ ๋ธ๋ก ํ ๋น | ๋ค์ค ๋ธ๋ก ํ ๋น(MBAlloc) |
| ํ ๋น ๋ฉ์ปค๋์ฆ | ๊ฐ์ ๋ธ๋ก ๋งคํ | Extent ๊ธฐ๋ฐ |
| ๋์คํฌ ํฌ๋งท | ๊ณ ์ | ์ ์ฐํ ๋ธ๋ก ๊ทธ๋ฃน, ๋ฉํ๋ฐ์ดํฐ ์ฒดํฌ์ฌ |
| ์ ๋๋ง | jbd | jbd2 (์ฒดํฌ์ฌ ์ง์) |
| inode ํฌ๊ธฐ | 128B (๊ธฐ๋ณธ) | 256B (๊ธฐ๋ณธ) |
| ํ์์คํฌํ ํด์๋ | ์ด | ๋๋ ธ์ด |
| fsck ์๊ฐ | ์ ์ฒด inode ๊ฒ์ฌ | ๋ฏธ์ฌ์ฉ inode ๋ชฉ๋ก์ผ๋ก ์คํต |
์ฑ๋ฅ ํน์ฑ
| ์ํฌ๋ก๋ | ext4 ์ฑ๋ฅ ํน์ฑ |
|---|---|
| ๋์ฉ๋ ํ์ผ ์์ฐจ I/O | ์ฐ์ (extent + MBAlloc) |
| ๋๋ ์๊ท๋ชจ ํ์ผ ์์ฑ | ์ํธ (inode ์์ฝ, flex_bg) |
| ๋๋ ํ ๋ฆฌ ์ค์บ | ์ํธ (HTree ์ธ๋ฑ์ค) |
| fsck ์๊ฐ | ๋น ๋ฆ (๋ฏธ์ฌ์ฉ inode ์คํต) |
| ์กฐ๊ฐํ | ๋ฎ์ (์ง์ฐ ํ ๋น + extent) |
| ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ | ์ต์ |
ext4 vs ๋ค๋ฅธ ํ์ผ ์์คํ ๋น๊ต
| ๊ธฐ๋ฅ | ext4 | XFS | Btrfs | ZFS |
|---|---|---|---|---|
| ์ต๋ ํ์ผ ์์คํ | 1EB | 8EiB | 16EiB | 256ZiB |
| CoW | ์๋์ค | ๋ฆฌํ๋ง ์ ํ | ๋ค์ดํฐ๋ธ | ๋ค์ดํฐ๋ธ |
| ๋ค์ดํฐ๋ธ ์ค๋ ์ท | ์๋์ค | ์๋์ค | ๋ค์ดํฐ๋ธ | ๋ค์ดํฐ๋ธ |
| ํฌ๋ช ์์ถ | ์๋์ค | ์๋์ค | ๋ค์ดํฐ๋ธ | ๋ค์ดํฐ๋ธ |
| ์ค๋ณต ์ ๊ฑฐ | ์๋์ค | ์คํ์ | ๋ค์ดํฐ๋ธ | ๋ค์ดํฐ๋ธ |
| ๋ฉํ๋ฐ์ดํฐ ์ฒดํฌ์ฌ | CRC-32C | ๋ฆฌ๋ฒ์ค ๋งคํ B+tree | CRC-32C/xxHash/SHA256 | ๊ณ์ธต์ |
| ์จ๋ผ์ธ ์ถ์ | ์๋์ค | ์๋์ค | ์ง์ | ์ง์ |
๋์ ์๋ฆฌ
๋ธ๋ก ํ ๋น ํ๋ฆ
- write() ์์คํ ํธ์ถ ์ ๋ฐ์ดํฐ๋ ํ์ด์ง ์บ์(Page Cache)์ ๊ธฐ๋ก๋จ
- ์ง์ฐ ํ ๋น์ ์ํด ๋ธ๋ก ํ ๋น์ด ์ฐ๊ธฐ๋จ (๋์คํฌ ๊ธฐ๋ก ์์ ๊น์ง ๋๊ธฐ)
- ํ๋ฌ์(Flush) ์ MBAlloc์ด ํ์ผ์ ์ต์ข ํฌ๊ธฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ต์ ๋ธ๋ก ์์น ๊ฒฐ์
- Extent ๊ธฐ๋ฐ์ผ๋ก ์ฐ์ ๋ธ๋ก์ ํ ๋นํ๊ณ , inode์ extent ์ํธ๋ฆฌ ๊ธฐ๋ก
- jbd2 ์ ๋์ ๋ฉํ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ฌํญ์ ๊ธฐ๋ก ํ ์ปค๋ฐ
- ๋ฐฐ๋ฆฌ์ด(Barrier)๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ๋ฐ์ดํฐ๊ฐ ๋์คํฌ์ ๊ธฐ๋ก๋ ํ ์ปค๋ฐ ๋ ์ฝ๋ ๊ธฐ๋ก
- ์ปค๋ฐ ์ดํ ์ฒดํฌํฌ์ธํธ ๋จ๊ณ์์ ์ค์ ๋ฉํ๋ฐ์ดํฐ ๋ธ๋ก์ด ๋ณธ๋ ์์น์ ๋ฐ์๋จ
jbd2 ์ ๋ ๋์
jbd2๋ ์์ฐจ์ ๋ก๊ทธ ๊ตฌ์กฐ๋ก ๋ฉํ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ฌํญ์ ๊ธฐ๋กํ๋ค:
- ํธ๋์ญ์ ์์ ์ ์ ๋ฒํธ ํ ๋น
- ๋ฉํ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋ธ๋ก์ ์ ๋ ์์ญ์ ์์ฐจ ๊ธฐ๋ก
- ์ปค๋ฐ ๋ ์ฝ๋์ ํธ๋์ญ์ ๋ฒํธ์ ์ฒดํฌ์ฌ ๊ธฐ๋ก
- ์ปค๋ฐ ๋ ์ฝ๋๊ฐ ๋์คํฌ์ ๊ธฐ๋ก๋๋ฉด ํธ๋์ญ์ ์๋ฃ
- ์ปค๋ฐ ์๋ฃ๋ ํธ๋์ญ์ ์ ์ฒดํฌํฌ์ธํธ ์ ์ค์ ๋ธ๋ก ์์น๋ก ๋ฐ์
Inode์ Extent Tree ๊ตฌ์กฐ
Inode
โโโ i_block[60 bytes]: Direct extents (์ต๋ 4๊ฐ)
โ โโโ ๊ฐ extent: [logical_start, length, physical_start]
โโโ Extent Tree (์ด๊ณผ ์)
โ โโโ Header (eh_depth, eh_entries)
โ โโโ Internal Node: [ei_block, ei_leaf_hi, ei_leaf_lo]
โ โโโ Leaf: [ee_block, ee_len, ee_start_hi, ee_start_lo]
โโโ ๋ฉํ๋ฐ์ดํฐ (UID, GID, ๊ถํ, timestamps)
์ฅ๋จ์
์ฅ์
| ์ฅ์ | ์ค๋ช |
|---|---|
| ์์ ์ฑ๊ณผ ์ฑ์๋ | 2008๋ ์ดํ ์ง์์ ์ธ ๊ฐ์ ๊ณผ ์ด์ ํ๊ฒฝ ๊ฒ์ฆ |
| ๋์ ํธํ์ฑ | ๊ฑฐ์ ๋ชจ๋ ๋ฆฌ๋ ์ค ๋ฐฐํฌํ ์ง์, ext3์์ ๋ฌด์์ค ์ ๊ทธ๋ ์ด๋ ๊ฐ๋ฅ |
| ๋ฎ์ ๋ฆฌ์์ค ์ฌ์ฉ๋ | ๋ฉ๋ชจ๋ฆฌ ๋ฐ CPU ์ฌ์ฉ์ด ์ต์ํ๋์ด ์๋ฒ ๋๋ ์์คํ ์๋ ์ ํฉ |
| ๋น ๋ฅธ fsck | ๋ฏธ์ฌ์ฉ inode ๋ชฉ๋ก์ผ๋ก ๋๊ท๋ชจ ํ์ผ ์์คํ ๋ ๋น ๋ฅธ ๋ณต๊ตฌ |
| ํ์ฅ๋ ์ธํ๋ผ | 1EB ํ์ผ ์์คํ , 16TB ํ์ผ, ๋๋ ธ์ด ํ์์คํฌํ ์ง์ |
| ์จ๋ผ์ธ ๋ํ๋๊ทธ | ๋ง์ดํธ ์ค ์กฐ๊ฐ ๋ชจ์ ๊ฐ๋ฅ |
๋จ์
| ๋จ์ | ์ค๋ช |
|---|---|
| CoW ๋ฏธ์ง์ | ๊ธฐ๋ณธ์ ์ผ๋ก in-place ์ฐ๊ธฐ๋ก ๋ฒ์ ๊ด๋ฆฌ/์ค๋ ์ท ๋ฏธ์ง์ |
| ๋ค์ดํฐ๋ธ ์ค๋ ์ท ๋ถ์ฌ | LVM ๋ฑ ๋ณ๋ ๋ณผ๋ฅจ ๊ด๋ฆฌ์ ํ์ |
| ๋ฐ์ดํฐ ์ฒดํฌ์ฌ ์์ | ๋ฉํ๋ฐ์ดํฐ๋ง ์ฒดํฌ์ฌ, ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ ๋ถ์์ |
| ํฌ๋ช ์์ถ ๋ฏธ์ง์ | Btrfs/ZFS ๋๋น ์ ์ฅ ๊ณต๊ฐ ํจ์จ์ฑ ๋ฎ์ |
| ์จ๋ผ์ธ ์ถ์ ๋ถ๊ฐ | ๋ณผ๋ฅจ ํ์ฅ๋ง ๊ฐ๋ฅ, ์ถ์ ์ ๋ฐฑ์ /์ฌ์์ฑ ํ์ |
| RAID ๋ฏธํตํฉ | mdadm ๋ฑ ์ธ๋ถ RAID ๊ด๋ฆฌ ํ์ |
๊ด๋ จ ๊ธฐ์
- ํ์ผ ์์คํ ๊ฐ์: ext4์ ๋ค๋ฅธ ํ์ผ ์์คํ ์ ์ ์ฒด์ ์ธ ๋น๊ต
- Linux ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ์ด: ํ์ผ ์์คํ ๊ณผ ํ์ด์ง ์บ์์ ์ํธ์์ฉ
- VFS FS PageCache BlockIO: VFS/FS/page cache/blk-mq ๊ณ์ธต์์์ ext4 ๋์
- SSD Internal Parallelism: SSD ๋ด๋ถ ๋ณ๋ ฌ์ฑ๊ณผ ext4 ๋ธ๋ก ํ ๋น ์ต์ ํ
- NVMe Architecture: NVMe ์คํ ๋ฆฌ์ง์ ext4 I/O ์ฒ๋ฆฌ
์ฐธ๊ณ ๋ฌธํ
- The Linux Kernel Documentation: Filesystems - ext4
- The Linux Kernel Documentation: ext4 General Information
- ext4 Wiki: https://ext4.wiki.kernel.org
- Kernelnewbies.org: Ext4
- Rik Van Riel et al., "ext4 Design Documents and Specification"
- Alex Tomas, "ext4 block and inode allocation"
- e2fsprogs project: https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git
ํต์ฌ ์ ๋ฆฌ
- ext4๋ ext3์ ํต์ฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํ ๋ฒ์ฉ ํ์ผ ์์คํ ์ผ๋ก, extent ๊ธฐ๋ฐ ํ ๋น๊ณผ MBAlloc์ ํตํด ๋์ฉ๋ ํ์ผ ์ฒ๋ฆฌ ์ฑ๋ฅ๊ณผ ์กฐ๊ฐํ ๋ฐฉ์ง ๋ฅ๋ ฅ์ ํฌ๊ฒ ํฅ์์์ผฐ๋ค.
- ์ง์ฐ ํ ๋น์ write() ์ ๋ธ๋ก ํ ๋น์ ์ฐ๊ธฐํ์ฌ ํ ๋น์๊ฐ ์ต์ ์์น๋ฅผ ์ ํํ ์ ์๊ฒ ํ๋ฉฐ, extent/MBAlloc๊ณผ ๊ฒฐํฉ๋์ด ์กฐ๊ฐํ๋ฅผ ๋ํญ ๊ฐ์์ํจ๋ค.
- ๋ฉํ๋ฐ์ดํฐ ์ฒดํฌ์ฌ๊ณผ jbd2 ์ ๋์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๊ฐํํ๊ณ , ๋ฏธ์ฌ์ฉ inode ๋ชฉ๋ก ๊ธฐ๋ฐ ๋น ๋ฅธ fsck๋ก ๋๊ท๋ชจ ํ์ผ ์์คํ ์ ๋ณต๊ตฌ ์๊ฐ์ ๋จ์ถํ๋ค.
- ๋จ์ ์ผ๋ก๋ CoW, ๋ค์ดํฐ๋ธ ์ค๋ ์ท, ๋ฐ์ดํฐ ์ฒดํฌ์ฌ, ํฌ๋ช ์์ถ ๋ฏธ์ง์ ๋ฑ์ด ์์ผ๋ฉฐ, ์ด๋ฌํ ๊ธฐ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ Btrfs/ZFS๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค.
- ext4๋ ์์ ์ฑ๊ณผ ํธํ์ฑ์ ์ต์ฐ์ ์ผ๋ก ์ค๊ณ๋์ด ๊ฑฐ์ ๋ชจ๋ ๋ฆฌ๋ ์ค ๋ฐฐํฌํ์์ ๊ธฐ๋ณธ ๋๋ ์ ํ ํ์ผ ์์คํ ์ผ๋ก ์ฌ์ฉ๋๋ฉฐ, ํ์ฅ๋ ์ธํ๋ผ(1EB/16TB)๋ก ๋๊ท๋ชจ ์คํ ๋ฆฌ์ง ํ๊ฒฝ์์๋ ํ์ฉ๋๋ค.