์ฃผ๊ธฐ์ ์ผ๋ก ์ค์์ ํต์ผํฐ๋ก ์ด๋ํ๊ธฐ ์ํด ์ํธํํ ๋ฅด๋ถ๋ฅดํฌ์ ๋ชจ์คํฌ๋ฐ๋ฅผ ์ค์ฌ์ผ๋ก ์ฌ๋ฌ ๋๊ธฐ์ ์์ DevOps ํฌ์ง์ ์ผ๋ก ๋ฉด์ ์ ๋ด ๋๋ค. ๋๋ ๋ง์ ํ์ฌ(Yandex์ ๊ฐ์ ๋ง์ ์ข์ ํ์ฌ)๊ฐ ๋ ๊ฐ์ง ์ ์ฌํ ์ง๋ฌธ์ ํ๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
- ์์ด๋ ธ๋๊ฐ ๋ฌด์์ธ๊ฐ์?
- ์ด๋ค ์ด์ ๋ก ๋์คํฌ ์ฐ๊ธฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๊น(์: ๋์คํฌ ๊ณต๊ฐ์ด ๋ถ์กฑํ ์ด์ ๋ ๋ณธ์ง์ ๋์ผํฉ๋๋ค).
ํํ ๊ทธ๋ ๋ฏ์ด ๋๋ ์ด ์ฃผ์ ๋ฅผ ์ ์๊ณ ์๋ค๊ณ ํ์ ํ์ง๋ง, ์ค๋ช ์ ์์ํ์๋ง์ ์ง์์ ๊ฒฉ์ฐจ๊ฐ ๋๋ฌ๋ฌ์ต๋๋ค. ๋ด ์ง์์ ์ฒด๊ณํํ๊ณ , ๋ถ์กฑํ ๋ถ๋ถ์ ๋ฉ์ฐ๊ณ , ๋ ์ด์ ๋นํฉํ์ง ์๊ธฐ ์ํด ์ด ๊ธ์ ์ฐ๊ณ ์์ต๋๋ค. ์๋ง๋ ๋ค๋ฅธ ์ฌ๋์๊ฒ๋ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
๋งจ ์๋๋ถํฐ ์์ํ๊ฒ ์ต๋๋ค. ํ๋ ๋๋ผ์ด๋ธ์์(ํ๋์ ๋๋ผ์ด๋ธ, SSD ๋ฐ ๊ธฐํ ์ต์ ์ฅ์น๋ ํ๊ธฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ธ๋ก ํฌ๊ธฐ๊ฐ 20๋ฐ์ดํธ์ด๋ฏ๋ก 80GB ๋๋ 512GB์ ์ค๋๋ ๋๋ผ์ด๋ธ๋ฅผ ๊ณ ๋ คํด ๋ณด๊ฒ ์ต๋๋ค.)
ํ๋ ๋๋ผ์ด๋ธ๋ ํด๋น ๊ณต๊ฐ์ ๋ฐ์ดํธ ๋จ์๋ก ์ฃผ์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๋ฉฐ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ธ๋ก์ผ๋ก ๋๋ฉ๋๋ค. ๋ธ๋ก ๋ฒํธ ์ง์ ์ 0๋ถํฐ ์์ํฉ๋๋ค. (์ด๋ฅผ LBA๋ผ๊ณ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ค์์ ์ฐธ์กฐํ์ธ์.
๊ทธ๋ฆผ์์ ๋ณผ ์ ์๋ฏ์ด LBA ๋ธ๋ก์ HDD ๋ ๋ฒจ๋ก ์ง์ ํ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ค์๊ณผ ๊ฐ์ด ๋์คํฌ์ ๋ธ๋ก ํฌ๊ธฐ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
root@ubuntu:/home/serp# blockdev --getpbsz /dev/sdb
512
์ ์์ค์ ์ ์ฒด ๋์คํฌ์ ๋ํ ํํฐ์ ์ ๋๋ค(๊ฐ๋จํจ์ ์ํด ๋ค์ ํ ๋ฒ ์ธ๊ธํจ). ๋๋ถ๋ถ์ ๊ฒฝ์ฐ msdos์ gpt๋ผ๋ ๋ ๊ฐ์ง ์ ํ์ ํํฐ์ ๋งํฌ์ ์ด ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ๋ผ์ msdos๋ ์ต๋ 2Tb์ ๋์คํฌ๋ฅผ ์ง์ํ๋ ๊ธฐ์กด ํ์์ด๊ณ , gpt๋ 1๋ฐ์ดํธ ๋ธ๋ก ์ค ์ต๋ 512์ ํ๋ฐ์ดํธ๊น์ง ์ฃผ์๋ฅผ ์ง์ ํ ์ ์๋ ์๋ก์ด ํ์์ ๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ๊ทธ๋ฆผ์์ ๋ณผ ์ ์๋ฏ์ด msdos ์ ํ์ ํํฐ์ ์ด ์์ต๋๋ค. ํํฐ์ ์ ๋ธ๋ก ๋ฒํธ 1๋ก ์์ํ๊ณ MBR์๋ XNUMX์ด ์ฌ์ฉ๋ฉ๋๋ค.
์ฒซ ๋ฒ์งธ ํํฐ์ ์์ ext2 ํ์ผ ์์คํ ์ ์์ฑํ๋๋ฐ ๊ธฐ๋ณธ ๋ธ๋ก ํฌ๊ธฐ๋ 4096๋ฐ์ดํธ์ด๋ฉฐ ์ด๋ ๊ทธ๋ฆผ์๋ ๋ฐ์๋์ด ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ํ์ผ ์์คํ ๋ธ๋ก ํฌ๊ธฐ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
root@ubuntu:/home/serp# tune2fs -l /dev/sdb1
tune2fs 1.42.9 (4-Feb-2014)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: a600bf40-f660-41f6-a3e6-96c303995479
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: ext_attr resize_inode dir_index filetype sparse_super large_file
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 65536
Block count: 261888
Reserved block count: 13094
Free blocks: 257445
Free inodes: 65525
First block: 0
Block size: 4096
Fragment size: 4096
Reserved GDT blocks: 63
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Filesystem created: Fri Aug 2 15:02:13 2019
Last mount time: n/a
Last write time: Fri Aug 2 15:02:14 2019
Mount count: 0
Maximum mount count: -1
Last checked: Fri Aug 2 15:02:13 2019
Check interval: 0 (<none>)
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Default directory hash: half_md4
Directory Hash Seed: c0155456-ad7d-421f-afd1-c898746ccd76
ํ์ํ ๋งค๊ฐ๋ณ์๋ "๋ธ๋ก ํฌ๊ธฐ"์ ๋๋ค.
์ด์ ํฅ๋ฏธ๋ก์ด ๋ถ๋ถ์ /home/serp/testfile ํ์ผ์ ์ฝ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ํ์ผ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ํ๋ ์ด์์ ํ์ผ ์์คํ ๋ธ๋ก์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ํ์ผ ์ด๋ฆ์ ์๋ฉด ์ด๋ป๊ฒ ์ฐพ์ ์ ์๋์? ์ด๋ค ๋ธ๋ก์ ์ฝ์ด์ผ ํ๋์?
์ด๊ฒ์ inode๊ฐ ์ ์ฉํ ๊ณณ์ ๋๋ค. ext2fs ํ์ผ ์์คํ ์๋ ๋ชจ๋ inode์ ๋ํ ์ ๋ณด๊ฐ ํฌํจ๋ "ํ ์ด๋ธ"์ด ์์ต๋๋ค. ext2fs์ ๊ฒฝ์ฐ inode ์๋ ํ์ผ ์์คํ ์์ฑ ์ ์ค์ ๋ฉ๋๋ค. tune2fs ์ถ๋ ฅ์ "Inode count" ๋งค๊ฐ๋ณ์์์ ํ์ํ ์ซ์๋ฅผ ์ดํด๋ด ๋๋ค. ์ฆ, 65536๊ฐ์ ์กฐ๊ฐ์ด ์์ต๋๋ค. inode์๋ ์ฐ๋ฆฌ๊ฐ ์ฐพ๊ณ ์๋ ํ์ผ์ ๋ํ ํ์ผ ์์คํ ๋ธ๋ก ๋ชฉ๋ก๊ณผ ๊ฐ์ ํ์ํ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ํน์ ํ์ผ์ inode ๋ฒํธ๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
ํด๋น ์ด๋ฆ๊ณผ inode ๋ฒํธ๋ ๋๋ ํ ๋ฆฌ์ ํฌํจ๋์ด ์์ผ๋ฉฐ ext2fs์ ๋๋ ํ ๋ฆฌ๋ ํน๋ณํ ์ ํ์ ํ์ผ์ ๋๋ค. ๋ํ ์์ฒด inode ๋ฒํธ๋ ์์ต๋๋ค. ์ด ์ ์ํ์ ๊นจ๊ธฐ ์ํด "๊ณ ์ ๋" inode ๋ฒํธ "2"๊ฐ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ์ ํ ๋น๋์์ต๋๋ค. inode ๋ฒํธ 2์ ๋ด์ฉ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
root@ubuntu:/# debugfs /dev/sdb1
debugfs 1.42.9 (4-Feb-2014)
debugfs: stat <2>
Inode: 2 Type: directory Mode: 0755 Flags: 0x0
Generation: 0 Version: 0x00000000:00000002
User: 0 Group: 0 Size: 4096
File ACL: 0 Directory ACL: 0
Links: 3 Blockcount: 8
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x5d43cb51:16b61bcc -- Fri Aug 2 16:34:09 2019
atime: 0x5d43c247:b704301c -- Fri Aug 2 15:55:35 2019
mtime: 0x5d43cb51:16b61bcc -- Fri Aug 2 16:34:09 2019
crtime: 0x5d43b5c6:00000000 -- Fri Aug 2 15:02:14 2019
Size of extra inode fields: 28
BLOCKS:
(0):579
TOTAL: 1
๋ณด์๋ค์ํผ, ํ์ํ ๋๋ ํ ๋ฆฌ๋ ๋ธ๋ก ๋ฒํธ 579์ ํฌํจ๋์ด ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ํ ํด๋์ ๋ ธ๋ ๋ฒํธ๋ฅผ ์ฐพ๊ณ serp ๋๋ ํ ๋ฆฌ์์ ์์ฒญ๋ ํ์ผ์ ๋ ธ๋ ๋ฒํธ๋ฅผ ๋ณผ ๋๊น์ง ์ฒด์ธ์ ๋ฐ๋ผ๊ฐ๋๋ค. ๊ฐ์๊ธฐ ๋๊ตฐ๊ฐ๊ฐ ๋ฒํธ๊ฐ ๋ง๋์ง, ํ์ํ ์ ๋ณด๊ฐ ์๋์ง ํ์ธํ๊ณ ์ถ๋ค๋ฉด ์ด๋ ต์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ํ๋ค:
root@ubuntu:/# dd if=/dev/sdb1 of=/home/serp/dd_image bs=4096 count=1 skip=579
1+0 records in
1+0 records out
4096 bytes (4,1 kB) copied, 0,000184088 s, 22,3 MB/s
root@ubuntu:/# hexdump -c /home/serp/dd_image
์ถ๋ ฅ์์ ๋๋ ํฐ๋ฆฌ์ ์๋ ํ์ผ ์ด๋ฆ์ ์ฝ์ ์ ์์ต๋๋ค.
๊ทธ๋์ ์ ๋ "์ด๋ค ์ด์ ๋ก ๋ น์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๊น?"๋ผ๋ ์ฃผ์ ์ง๋ฌธ์ ๋๋ฌํ์ต๋๋ค.
๋น์ฐํ ํ์ผ ์์คํ ์ ์ฌ์ ๋ธ๋ก์ด ๋จ์ ์์ง ์์ผ๋ฉด ์ด๋ฐ ์ผ์ด ๋ฐ์ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ๋ฌด์์ ํ ์ ์์ต๋๊น? ๋ช ๋ฐฑํ "๋ถํ์ํ ๊ฒ์ ์ ๊ฑฐ"ํ๋ ๊ฒ ์ธ์๋ ext2,3, 4 ํ์ผ ์์คํ ์๋ "์์ฝ๋ ๋ธ๋ก ์"์ ๊ฐ์ ๊ฒ์ด ์๋ค๋ ๊ฒ์ ๊ธฐ์ตํด์ผ ํฉ๋๋ค. ์ ๋ชฉ๋ก์ ๋ณด๋ฉด ํด๋น ๋ธ๋ก์ด "13094"๊ฐ ์์ต๋๋ค. ๋ฃจํธ ์ฌ์ฉ์๋ง ์ธ ์ ์๋ ๋ธ๋ก์ ๋๋ค. ํ์ง๋ง ๋ฌธ์ ๋ฅผ ์ ์ํ๊ฒ ํด๊ฒฐํด์ผ ํ๋ ๊ฒฝ์ฐ ์์ ์๋ฃจ์ ์ผ๋ก ๋ชจ๋ ์ฌ๋์ด ์ฌ์ฉํ ์ ์๋๋ก ํ์ฌ ์ฌ์ ๊ณต๊ฐ์ ํ๋ณดํ ์ ์์ต๋๋ค.
root@ubuntu:/mnt# tune2fs -m 0 /dev/sdb1
tune2fs 1.42.9 (4-Feb-2014)
Setting reserved blocks percentage to 0% (0 blocks)
์ ๊ฒ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐ๊ธฐ์ ์ฌ์ฉํ ์ ์๋ ๋์คํฌ ๊ณต๊ฐ์ 5%์ด๋ฉฐ, ์ต์ ๋์คํฌ ๋ณผ๋ฅจ์ ๊ณ ๋ คํ๋ฉด ์ด๋ ์๋ฐฑ ๊ธฐ๊ฐ๋ฐ์ดํธ์ ์ด๋ฅผ ์ ์์ต๋๋ค.
๋ ๋ฌด์์ด ์์๊น์? ์ฌ์ฉ ๊ฐ๋ฅํ ๋ธ๋ก์ด ์์ง๋ง ๋ ์ด์ ๋ ธ๋๊ฐ ์์ ์๋ ์์ต๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ํ์ผ ์์คํ ๋ธ๋ก ํฌ๊ธฐ๋ณด๋ค ์์ ํ์ผ ๋ฌถ์์ด ํ์ผ ์์คํ ์ ์๋ ๊ฒฝ์ฐ์ ๋ฐ์ํฉ๋๋ค. 1๊ฐ์ inode๊ฐ 1๊ฐ์ ํ์ผ ๋๋ ๋๋ ํ ๋ฆฌ์ ์๋น๋๊ณ ์ด๊ณ(์ฃผ์ด์ง ํ์ผ ์์คํ ์ ๋ํด) 65536์ด ์๋ค๋ ์ ์ ๊ณ ๋ คํ๋ฉด ์ํฉ์ ํ์ค์ ์ด์์ ๋๋ค. ์ด๋ df ๋ช ๋ น์ ์ถ๋ ฅ์์ โโ๋ช ํํ๊ฒ ๋ณผ ์ ์์ต๋๋ค.
serp@ubuntu:~$ df -hi
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 493K 480 492K 1% /dev
tmpfs 493K 425 493K 1% /run
/dev/xvda1 512K 240K 273K 47% /
none 493K 2 493K 1% /sys/fs/cgroup
none 493K 2 493K 1% /run/lock
none 493K 1 493K 1% /run/shm
none 493K 2 493K 1% /run/user
/dev/xvdc1 320K 4,1K 316K 2% /var
/dev/xvdb1 64K 195 64K 1% /home
/dev/xvdh1 4,0M 3,1M 940K 78% /var/www
serp@ubuntu:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 2,0G 4,0K 2,0G 1% /dev
tmpfs 395M 620K 394M 1% /run
/dev/xvda1 7,8G 2,9G 4,6G 39% /
none 4,0K 0 4,0K 0% /sys/fs/cgroup
none 5,0M 0 5,0M 0% /run/lock
none 2,0G 0 2,0G 0% /run/shm
none 100M 0 100M 0% /run/user
/dev/xvdc1 4,8G 2,6G 2,0G 57% /var
/dev/xvdb1 990M 4,0M 919M 1% /home
/dev/xvdh1 63G 35G 25G 59% /var/www
/var/www ํํฐ์ ์์ ๋ช ํํ๊ฒ ๋ณผ ์ ์๋ฏ์ด ํ์ผ ์์คํ ์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ธ๋ก ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ ธ๋ ์๋ ํฌ๊ฒ ๋ค๋ฆ ๋๋ค.
์์ด๋
ธ๋๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ์๋ ์ด๋ค ์ฃผ๋ฌธ๋ ์๋ ค์ฃผ์ง ์์ ๊ฒ์
๋๋ค. ์๋ํ๋ฉด... (๋ด๊ฐ ํ๋ ธ๋ค๋ฉด ์๋ ค์ฃผ์ธ์). ๋ฐ๋ผ์ ์์ ํ์ผ์ด ๋ง์์ง๋ ํํฐ์
์ ๊ฒฝ์ฐ ํ์ผ ์์คํ
์ ํ๋ช
ํ๊ฒ ์ ํํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, btrfs inode๋ ์ข
๋ฃ๋ ์ ์์ต๋๋ค. ํ์ํ ๊ฒฝ์ฐ ์ ํญ๋ชฉ์ด ๋์ ์ผ๋ก ์์ฑ๋ฉ๋๋ค.
์ถ์ฒ : habr.com