μ•„μ΄λ…Έλ“œμ— κ΄€ν•œ 것

주기적으둜 μ€‘μ•™μœ ν†΅μ„Όν„°λ‘œ μ΄λ™ν•˜κΈ° μœ„ν•΄ μƒνŠΈνŽ˜ν…Œλ₯΄λΆ€λ₯΄ν¬μ™€ λͺ¨μŠ€ν¬λ°”λ₯Ό μ€‘μ‹¬μœΌλ‘œ μ—¬λŸ¬ λŒ€κΈ°μ—…μ—μ„œ DevOps ν¬μ§€μ…˜μœΌλ‘œ 면접을 λ΄…λ‹ˆλ‹€. λ‚˜λŠ” λ§Žμ€ νšŒμ‚¬(Yandex와 같은 λ§Žμ€ 쒋은 νšŒμ‚¬)κ°€ 두 κ°€μ§€ μœ μ‚¬ν•œ μ§ˆλ¬Έμ„ ν•˜λŠ” 것을 λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€.

  • μ•„μ΄λ…Έλ“œκ°€ λ¬΄μ—‡μΈκ°€μš”?
  • μ–΄λ–€ 이유둜 λ””μŠ€ν¬ μ“°κΈ° 였λ₯˜κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆκΉŒ(예: λ””μŠ€ν¬ 곡간이 λΆ€μ‘±ν•œ μ΄μœ λŠ” λ³Έμ§ˆμ€ λ™μΌν•©λ‹ˆλ‹€).

ν”νžˆ 그렇듯이 λ‚˜λŠ” 이 주제λ₯Ό 잘 μ•Œκ³  μžˆλ‹€κ³  ν™•μ‹ ν–ˆμ§€λ§Œ, μ„€λͺ…을 μ‹œμž‘ν•˜μžλ§ˆμž μ§€μ‹μ˜ 격차가 λ“œλŸ¬λ‚¬μŠ΅λ‹ˆλ‹€. λ‚΄ 지식을 μ²΄κ³„ν™”ν•˜κ³ , λΆ€μ‘±ν•œ 뢀뢄을 λ©”μš°κ³ , 더 이상 λ‹Ήν™©ν•˜μ§€ μ•ŠκΈ° μœ„ν•΄ 이 글을 μ“°κ³  μžˆμŠ΅λ‹ˆλ‹€. μ•„λ§ˆλ„ λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œλ„ 도움이 될 κ²ƒμž…λ‹ˆλ‹€.

맨 μ•„λž˜λΆ€ν„° μ‹œμž‘ν•˜κ² μŠ΅λ‹ˆλ‹€. ν•˜λ“œ λ“œλΌμ΄λΈŒμ—μ„œ(ν”Œλž˜μ‹œ λ“œλΌμ΄λΈŒ, SSD 및 기타 μ΅œμ‹  μž₯μΉ˜λŠ” νκΈ°ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 블둝 크기가 20λ°”μ΄νŠΈμ΄λ―€λ‘œ 80GB λ˜λŠ” 512GB의 였래된 λ“œλΌμ΄λΈŒλ₯Ό κ³ λ €ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.)

ν•˜λ“œ λ“œλΌμ΄λΈŒλŠ” ν•΄λ‹Ή 곡간을 λ°”μ΄νŠΈ λ‹¨μœ„λ‘œ μ£Όμ†Œ μ§€μ •ν•˜λŠ” 방법을 λͺ¨λ₯΄λ©° 쑰건에 따라 λΈ”λ‘μœΌλ‘œ λ‚˜λ‰©λ‹ˆλ‹€. 블둝 번호 지정은 0λΆ€ν„° μ‹œμž‘ν•©λ‹ˆλ‹€. (이λ₯Ό LBA라고 ν•©λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ λ‹€μŒμ„ μ°Έμ‘°ν•˜μ„Έμš”. ru.wikipedia.org/wiki/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

DDoS 보호, VPS VDS μ„œλ²„κ°€ μžˆλŠ” μ‚¬μ΄νŠΈλ₯Ό μœ„ν•œ μ•ˆμ •μ μΈ ν˜ΈμŠ€νŒ… κ΅¬μž… πŸ”₯ DDoS 곡격 λ°©μ§€ κΈ°λŠ₯이 νƒ‘μž¬λœ μ•ˆμ •μ μΈ μ›Ήμ‚¬μ΄νŠΈ ν˜ΈμŠ€νŒ…, VPS 및 VDS μ„œλ²„λ₯Ό κ΅¬λ§€ν•˜μ„Έμš” | ProHoster