TL; DR: ์ด ๊ธฐ์ฌ์์๋ ๋์คํฌ์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๋ Linux ํ๋ก๊ทธ๋จ์ ์๋ณํ๋ ํธ๋ฆฌํ๊ณ ๋น ๋ฅด๋ฉฐ ์์ ์ ์ธ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช
ํฉ๋๋ค. ์ด๋ ๋์คํฌ ํ์ ์์คํ
์์ ํฌ๊ฑฐ๋ ๋น์ ์์ ์ผ๋ก ๋น๋ฒํ ๋ก๋๋ฅผ ์๋ณํ๋ ๋ฐ ๋์์ด ๋๋ฉฐ ํ์ผ ์์คํ
์ ์ค๋ฒํค๋๋ฅผ ์ถ์ ํ ์๋ ์์ต๋๋ค. ์ด๋ ํนํ PC์ SSD, EMMC ๋ฐ ๋จ์ผ ๋ณด๋ ์ปดํจํฐ์ ํ๋์ ๋ฉ๋ชจ๋ฆฌ์ ํด๋น๋ฉ๋๋ค.
์ด ๊ธฐ์ฌ๋ฅผ ์์ฑํ๋ ๋์ BTRFS ํ์ผ ์์คํ
์ ์ ํฌ๋ก๋ฐ์ดํธ์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๋ฉด 3MB์ ์ค์ ๋ฐ์ดํฐ๊ฐ ๋์คํฌ์ ๊ธฐ๋ก๋๋ค๋ ์ฌ์ค์ ๋ฐ๊ฒฌํ์ต๋๋ค.
์๊ฐ
"์ ๋ง๋ ์๋๋ ์๋ฆฌ์
๋๋ค. ์ต์ SSD์ ๋ฉ๋ชจ๋ฆฌ ์
์ ์์ญ ๋
๋์ ์ ์์ ์ผ๋ก ์ฌ์ฉํ๋ฉด ์๋ํ์ง ์์ต๋๋ค. ๊ฑฑ์ ํ์ง ๋ง์ญ์์ค. ์ค์, ๊ฐ์ ๋จธ์ ๋ฐ ๋ธ๋ผ์ฐ์ ํ๋กํ ํด๋๋ฅผ HDD๋ก ์ ์กํ๋ ๊ฒ์ ํจ์ฌ ์ ์ต๋๋ค."-์ ๋ํ ์ง๋ฌธ์ ๋ํ ์ผ๋ฐ์ ์ธ ๋๋ต 150TBW๋ฅผ ๋ณด์ฅํ๋ ์๋ฆฌ๋ ์คํ
์ดํธ ๋๋ผ์ด๋ธ์ ์ ๋ขฐ์ฑ. ์ผ๋ฐ์ ์ธ ์ํํธ์จ์ด๊ฐ ์ธ ์ ์๋ ๋ฐ์ดํฐ์ ์์ ์ถ์ ํ๋ฉด ํ๋ฃจ์ 10-20GB๊ฐ ์ด๋ฏธ ํฐ ์์น์ธ ๊ฒ ๊ฐ์ต๋๋ค. ์ต๋ 40GB๊ฐ ํจ์ฌ ๋ ๋ง์ต๋๋ค. ์ด ์ซ์๋ฅผ ๊ณ ๋ คํ๋ฉด ๋๋ต์ ๋งค์ฐ ํฉ๋ฆฌ์ ์
๋๋ค. ๋ฌ์ฑํ๋ ๋ฐ 10๋
์ด ๊ฑธ๋ฆฝ๋๋ค. ๋ณด์ฅ ๋งค์ผ 40GB์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋กํ์ฌ ๋ฎ์ด์ด ์
์์ ๋ํ ๊ฐ์
๋๋ค.
ํ์ง๋ง 6๋
๋ง์ ์ ๋ ์ด๋ฏธ ์ธ ๋ฒ์งธ SSD๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ SSD์ ์ปจํธ๋กค๋ฌ๊ฐ ๊ณ ์ฅ๋ฌ๊ณ , ๋ ๋ฒ์งธ SSD๋ ํ๋ฃจ์ ์ฌ๋ฌ ๋ฒ ์
๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ํ๊ธฐ ์์ํ์ฌ ๋
นํ ์๋น์ค๊ฐ 30์ด ์ง์ฐ๋์์ต๋๋ค.
์ SSD๋ฅผ ์ฌ์ฉํ ์ง 7๊ฐ์์ด ์ง๋์ SMART๋ฅผ ํตํด ๋๋ผ์ด๋ธ ์์ฒด์์ ๋ณด๊ณ ๋๋ ๊ธฐ๋ก๋ ๋ฐ์ดํฐ์ ์์ ํ์ธํ๊ธฐ๋ก ํ์ต๋๋ค.
19.7TB.
ํํฐ์
์ ๋ ฌ ๋ฐ FS ์ค์ ์ ๋ํ ๊ถ์ฅ ์ฌํญ์ ๋ฐ๋ผ ๊ตฌ์ฑํ์์๋ ๋ถ๊ตฌํ๊ณ ๋จ 7๊ฐ์ ๋ง์ ๊ธฐ๋ก๋ ๋ฐ์ดํฐ์ ๋ณด์ฅ๋ ์์ 13%๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ์ค์์ ๊ฑฐ์ ์ฌ์ฉํ์ง ์๊ณ ๊ฐ์ ๋จธ์ ๋์คํฌ๊ฐ ์์นํฉ๋๋ค. HDD์!
์ด๋ ๋น์ ์์ ์ผ๋ก ํฐ ์์น๋ก, ์ด ๋น์จ์์๋ 5๋
๋์คํฌ ๋ณด์ฆ ๊ธฐ๊ฐ์ด ๋๊ธฐ ์ ์ ๋ณด์ฆ TBW๋ฅผ ์ด๊ณผํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ด ์ปดํจํฐ๋ ํ๋ฃจ์ 93GB๋ฅผ ์ธ ์ ์์ต๋๋ค! 10๋ถ ์์ ๋์คํฌ์ ์ผ๋ง๋ ๋ง์ ๋ฐ์ดํฐ๊ฐ ๊ธฐ๋ก๋๋์ง ํ์ธํด์ผ ํ๋๋ฐ...
Total:
Writes Queued: 24,712, 2,237MiB
Writes Completed: 25,507, 2,237MiB
Write Merges: 58, 5,472KiB
2.2 GiB, ์คํธํธ!
๋์คํฌ ์ฅ์น์ ๊ธฐ๋ก๋ ๋ฐ์ดํฐ ์ ํ์ธ
์ฅ์น๊ฐ SMART(SSD, EMMC, ์ผ๋ถ ์ฐ์
์ฉ MicroSD)๋ฅผ ์ง์ํ๋ ๊ฒฝ์ฐ ๊ฐ์ฅ ๋จผ์ ํด์ผ ํ ์ผ์ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ์ฌ ๋๋ผ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ ๊ฒ์
๋๋ค. smartctl
, skdump
๋๋ mmc
(mmc-utils์์).
smartctl ํ๋ก๊ทธ๋จ์ ์ถ๋ ฅ ์
$ sudo smartctl -a /dev/sdb
smartctl 7.0 2019-03-31 r4903 [x86_64-linux-5.3.11-200.fc30.x86_64] (local build)
Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Model Family: Samsung based SSDs
Device Model: Samsung SSD 860 EVO mSATA 250GB
Serial Number: S41MNC0KA13477K
LU WWN Device Id: 5 002538 e700fa64b
Firmware Version: RVT41B6Q
User Capacity: 250โฏ059โฏ350โฏ016 bytes [250 GB]
Sector Size: 512 bytes logical/physical
Rotation Rate: Solid State Device
Form Factor: mSATA
Device is: In smartctl database [for details use: -P show]
ATA Version is: ACS-4 T13/BSR INCITS 529 revision 5
SATA Version is: SATA 3.1, 6.0 Gb/s (current: 3.0 Gb/s)
Local Time is: Tue Nov 19 01:48:50 2019 MSK
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
General SMART Values:
Offline data collection status: (0x00) Offline data collection activity
was never started.
Auto Offline Data Collection: Disabled.
Self-test execution status: ( 0) The previous self-test routine completed
without error or no self-test has ever
been run.
Total time to complete Offline
data collection: ( 0) seconds.
Offline data collection
capabilities: (0x53) SMART execute Offline immediate.
Auto Offline data collection on/off support.
Suspend Offline collection upon new
command.
No Offline surface scan supported.
Self-test supported.
No Conveyance Self-test supported.
Selective Self-test supported.
SMART capabilities: (0x0003) Saves SMART data before entering
power-saving mode.
Supports SMART auto save timer.
Error logging capability: (0x01) Error logging supported.
General Purpose Logging supported.
Short self-test routine
recommended polling time: ( 2) minutes.
Extended self-test routine
recommended polling time: ( 85) minutes.
SCT capabilities: (0x003d) SCT Status supported.
SCT Error Recovery Control supported.
SCT Feature Control supported.
SCT Data Table supported.
SMART Attributes Data Structure revision number: 1
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 0
9 Power_On_Hours 0x0032 098 098 000 Old_age Always - 5171
12 Power_Cycle_Count 0x0032 099 099 000 Old_age Always - 459
177 Wear_Leveling_Count 0x0013 096 096 000 Pre-fail Always - 62
179 Used_Rsvd_Blk_Cnt_Tot 0x0013 100 100 010 Pre-fail Always - 0
181 Program_Fail_Cnt_Total 0x0032 100 100 010 Old_age Always - 0
182 Erase_Fail_Count_Total 0x0032 100 100 010 Old_age Always - 0
183 Runtime_Bad_Block 0x0013 100 100 010 Pre-fail Always - 0
187 Uncorrectable_Error_Cnt 0x0032 100 100 000 Old_age Always - 0
190 Airflow_Temperature_Cel 0x0032 058 039 000 Old_age Always - 42
195 ECC_Error_Rate 0x001a 200 200 000 Old_age Always - 0
199 CRC_Error_Count 0x003e 100 100 000 Old_age Always - 0
235 POR_Recovery_Count 0x0012 099 099 000 Old_age Always - 29
241 Total_LBAs_Written 0x0032 099 099 000 Old_age Always - 38615215765
SMART Error Log Version: 1
No Errors Logged
SMART Self-test log structure revision number 1
No self-tests have been logged. [To run self-tests, use: smartctl -t]
SMART Selective self-test log data structure revision number 1
SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS
1 0 0 Not_testing
2 0 0 Not_testing
3 0 0 Not_testing
4 0 0 Not_testing
5 0 0 Not_testing
Selective self-test flags (0x0):
After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.
๋ด SSD๋ ๋งค๊ฐ๋ณ์ 241 Total_LBA_Written์ ๊ธฐ๋ก๋ ๋ฐ์ดํฐ์ ์์ ๋ฐ์ดํธ๊ฐ ์๋ ๋ ผ๋ฆฌ ๋ธ๋ก(LBA)์ ์ ์ฅํฉ๋๋ค. ์ ๊ฒฝ์ฐ ๋ ผ๋ฆฌ ๋ธ๋ก์ ํฌ๊ธฐ๋ 512๋ฐ์ดํธ์ ๋๋ค(smartctl ์ถ๋ ฅ์ ์นํฐ ํฌ๊ธฐ์์ ๋ณผ ์ ์์). ๋ฐ์ดํธ๋ฅผ ์ป์ผ๋ ค๋ฉด ๋งค๊ฐ๋ณ์ ๊ฐ์ 512๋ฅผ ๊ณฑํด์ผ ํฉ๋๋ค.
38615215765 ร 512 รท 1000 รท 1000 รท 1000 รท 1000 = 19,770 ะขะ
38615215765 ร 512 รท 1024 รท 1024 รท 1024 รท 1024 = 17,981 ะขะธะ
ํ๋ก๊ทธ๋จ skdump
๋ด SSD์์๋ Total_LBA_Written ๊ฐ์ ๋๋ฆ์ ๋ฐฉ์์ผ๋ก ํด์ํ๋ ค๊ณ ์๋ํ๋ฏ๋ก ํ์๋ฉ๋๋ค. 1296217.695 TB
, ์ด๋ ๋ถ๋ช
ํ ์๋ชป๋ ๊ฒ์
๋๋ค.
์ฅ์น ์์ค์์ ๊ธฐ๋ก๋ ์ ๋ณด์ ์์ ํ์ธํ๊ธฐ ์ํด ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ๊ฒ ์ต๋๋ค. btrace
ํจํค์ง์์ blktrace
. ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ์ ์ฒด ์๊ฐ์ ๋ํ ์ผ๋ฐ ํต๊ณ์ ๊ธฐ๋ก์ ์ํํ ๊ฐ๋ณ ํ๋ก์ธ์ค ๋ฐ ์ค๋ ๋(์ปค๋ ํฌํจ)๊ฐ ๋ชจ๋ ํ์๋ฉ๋๋ค.
๋ค์ ๋ช ๋ น์ ์คํํ์ฌ 10๋ถ ์์ ์ ๋ณด๋ฅผ ์์งํฉ๋๋ค. ์ฌ๊ธฐ์ /dev/sdb๋ ๋์คํฌ์ ๋๋ค.
# btrace -w 600 -a write /dev/sdb
์ผ๋ฐ์ ์ธ ๋ช ๋ น ์ถ๋ ฅ
โฆ
8,16 0 3253 50.085433192 0 C WS 125424240 + 64 [0]
8,16 0 3254 50.085550024 0 C WS 193577744 + 64 [0]
8,16 0 3255 50.085685165 0 C WS 197246976 + 64 [0]
8,16 0 3256 50.085936852 0 C WS 125736264 + 128 [0]
8,16 0 3257 50.086060780 0 C WS 96261752 + 64 [0]
8,16 0 3258 50.086195031 0 C WS 94948640 + 64 [0]
8,16 0 3259 50.086327355 0 C WS 124656144 + 64 [0]
8,16 0 3260 50.086843733 15368 C WSM 310218496 + 32 [0]
8,16 0 3261 50.086975238 753 A WSM 310218368 + 32 <- (8,20) 291339904
8,16 0 3262 50.086975560 753 Q WSM 310218368 + 32 [dmcrypt_write/2]
8,16 0 3263 50.086977345 753 G WSM 310218368 + 32 [dmcrypt_write/2]
8,16 0 3264 50.086978072 753 I WSM 310218368 + 32 [dmcrypt_write/2]
8,16 0 3265 50.086979159 753 D WSM 310218368 + 32 [dmcrypt_write/2]
8,16 0 3266 50.087055685 0 C WSM 310218368 + 32 [0]
8,16 0 3267 50.087060168 753 A WSM 310218592 + 160 <- (8,20) 291340128
8,16 0 3268 50.087060367 753 Q WSM 310218592 + 160 [dmcrypt_write/2]
8,16 0 3269 50.087061242 753 G WSM 310218592 + 160 [dmcrypt_write/2]
8,16 0 3270 50.087061698 753 I WSM 310218592 + 160 [dmcrypt_write/2]
8,16 0 3271 50.087062361 753 D WSM 310218592 + 160 [dmcrypt_write/2]
8,16 0 3272 50.087386179 0 C WSM 310218592 + 160 [0]
8,16 0 3273 50.087436417 15368 A FWS 0 + 0 <- (253,1) 0
8,16 0 3274 50.087437471 15368 Q FWS [LS Thread]
8,16 0 3275 50.087440862 15368 G FWS [LS Thread]
8,16 0 3276 50.088300047 0 C WS 0 [0]
8,16 0 3277 50.088470917 753 A WFSM 18882688 + 8 <- (8,20) 4224
8,16 0 3278 50.088471091 753 Q WFSM 18882688 + 8 [dmcrypt_write/2]
8,16 0 3279 50.088471688 753 G WFSM 18882688 + 8 [dmcrypt_write/2]
8,16 0 3280 50.088474334 32254 D WSM 18882688 + 8 [kworker/0:2H]
8,16 0 3281 50.088515572 0 C WSM 18882688 + 8 [0]
8,16 0 3282 50.089229069 0 C WSM 18882688 [0]
CPU0 (8,16):
Reads Queued: 0, 0KiB Writes Queued: 345, 25,932KiB
Read Dispatches: 0, 0KiB Write Dispatches: 331, 25,788KiB
Reads Requeued: 0 Writes Requeued: 0
Reads Completed: 0, 0KiB Writes Completed: 1,597, 117,112KiB
Read Merges: 0, 0KiB Write Merges: 1, 16KiB
Read depth: 0 Write depth: 177
IO unplugs: 0 Timer unplugs: 0
CPU1 (8,16):
Reads Queued: 0, 0KiB Writes Queued: 502, 39,948KiB
Read Dispatches: 0, 0KiB Write Dispatches: 495, 40,076KiB
Reads Requeued: 0 Writes Requeued: 0
Reads Completed: 0, 0KiB Writes Completed: 0, 0KiB
Read Merges: 0, 0KiB Write Merges: 0, 0KiB
Read depth: 0 Write depth: 177
IO unplugs: 0 Timer unplugs: 0
CPU2 (8,16):
Reads Queued: 0, 0KiB Writes Queued: 297, 26,800KiB
Read Dispatches: 0, 0KiB Write Dispatches: 287, 26,800KiB
Reads Requeued: 0 Writes Requeued: 0
Reads Completed: 0, 0KiB Writes Completed: 0, 0KiB
Read Merges: 0, 0KiB Write Merges: 0, 0KiB
Read depth: 0 Write depth: 177
IO unplugs: 0 Timer unplugs: 0
CPU3 (8,16):
Reads Queued: 0, 0KiB Writes Queued: 418, 24,432KiB
Read Dispatches: 0, 0KiB Write Dispatches: 408, 24,448KiB
Reads Requeued: 0 Writes Requeued: 0
Reads Completed: 0, 0KiB Writes Completed: 0, 0KiB
Read Merges: 0, 0KiB Write Merges: 2, 272KiB
Read depth: 0 Write depth: 177
IO unplugs: 0 Timer unplugs: 0
Total (8,16):
Reads Queued: 0, 0KiB Writes Queued: 1,562, 117,112KiB
Read Dispatches: 0, 0KiB Write Dispatches: 1,521, 117,112KiB
Reads Requeued: 0 Writes Requeued: 0
Reads Completed: 0, 0KiB Writes Completed: 1,597, 117,112KiB
Read Merges: 0, 0KiB Write Merges: 3, 288KiB
IO unplugs: 0 Timer unplugs: 0
Throughput (R/W): 0KiB/s / 2,338KiB/s
Events (8,16): 9,287 entries
Skips: 0 forward (0 - 0.0%)
btrace
์ค์ ๋
น์๋ ๋ฐ์ดํฐ์ ์์ ๋ช
ํํ๊ฒ ๋ณผ ์ ์์ง๋ง ์ถ๋ ฅ์์ โโ์ด๋ค ํ๋ก๊ทธ๋จ์ด ๋
น์ํ๊ณ ์๋์ง ์ดํดํ๊ธฐ ์ด๋ ต์ต๋๋ค.
๋๋ผ์ด๋ธ์ ์ฐ๋ ํ๋ก๊ทธ๋จ ํ์ธ
ํ๋ก๊ทธ๋จ iotop
๋์คํฌ์ ์ฐ๋ ํ๋ก์ธ์ค์ ์ฐ์ฌ์ง ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
๊ฐ์ฅ ํธ๋ฆฌํ ์ถ๋ ฅ์ ๋ค์ ๋งค๊ฐ๋ณ์์ ์ํด ์ ๊ณต๋ฉ๋๋ค.
# iotop -obPat
์ํ ํ๋ก๊ทธ๋จ ์ถ๋ ฅ
02:55:47 Total DISK READ : 0.00 B/s | Total DISK WRITE : 30.65 K/s
02:55:47 Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s
TIME PID PRIO USER DISK READ DISK WRITE SWAPIN IO COMMAND
b'02:55:47 753 be/4 root 0.00 B 0.00 B 0.00 % 0.04 % [dmcrypt_write/2]'
b'02:55:47 788 be/4 root 72.00 K 18.27 M 0.00 % 0.02 % [btrfs-transacti]'
b'02:55:47 15057 be/4 valdikss 216.00 K 283.05 M 0.00 % 0.01 % firefox'
b'02:55:47 1588 ?dif root 0.00 B 0.00 B 0.00 % 0.00 % Xorg -nolisten tcp -auth /var/run/sddm/{398f030f-9667-4dff-b371-81eaae48dfdf} -background none -noreset -displayfd 18 -seat seat0 vt1'
b'02:55:47 15692 be/4 valdikss 988.00 K 9.41 M 0.00 % 0.00 % python3 /usr/bin/gajim'
b'02:55:47 15730 ?dif valdikss 9.07 M 0.00 B 0.00 % 0.00 % telegram-desktop --'
b'02:55:47 2174 ?dif valdikss 1840.00 K 2.47 M 0.00 % 0.00 % yakuake'
b'02:55:47 19827 be/4 root 16.00 K 896.00 K 0.00 % 0.00 % [kworker/u16:7-events_unbound]'
b'02:55:47 19074 be/4 root 16.00 K 480.00 K 0.00 % 0.00 % [kworker/u16:4-btrfs-endio-write]'
b'02:55:47 19006 be/4 root 16.00 K 1872.00 K 0.00 % 0.00 % [kworker/u16:1-events_unbound]'
b'02:55:47 1429 be/4 root 484.00 K 0.00 B 0.00 % 0.00 % accounts-daemon'
b'02:55:47 15820 be/4 valdikss 312.00 K 0.00 B 0.00 % 0.00 % firefox -contentproc -childID 6 -isForBrowser -prefsLen 7894 -prefMapSize 223880 -parentBuildID 20191022164834 -greomni /usr/lib64/firefox/omni.ja -appomni /usr/lib64/firefox/browser/omni.ja -appdir /usr/lib64/firefox/browser 15057 tab'
b'02:55:47 2125 ?dif valdikss 0.00 B 92.00 K 0.00 % 0.00 % plasmashell'
b'02:55:47 1268 be/3 root 0.00 B 4.00 K 0.00 % 0.00 % auditd'
b'02:55:47 1414 be/4 root 0.00 B 4.00 K 0.00 % 0.00 % sssd_nss --uid 0 --gid 0 --logger=files'
b'02:55:47 15238 be/4 valdikss 0.00 B 4.00 K 0.00 % 0.00 % thunderbird'
b'02:55:47 18605 be/4 root 0.00 B 3.19 M 0.00 % 0.00 % [kworker/u16:0-btrfs-endio-write]'
b'02:55:47 18867 be/4 root 0.00 B 96.00 K 0.00 % 0.00 % [kworker/u16:5-btrfs-endio-meta]'
b'02:55:47 19070 be/4 root 0.00 B 160.00 K 0.00 % 0.00 % [kworker/u16:2-btrfs-freespace-write]'
b'02:55:47 19645 be/4 root 0.00 B 2.17 M 0.00 % 0.00 % [kworker/u16:3-events_unbound]'
b'02:55:47 19982 be/4 root 0.00 B 496.00 K 0.00 % 0.00 % [kworker/u16:6-btrfs-endio-write]'
Firefox๋ iotop ์คํ ๋ช ๋ถ ๋ง์ 283MB๋ฅผ ๊ธฐ๋กํ์ฌ ๋๊ธธ์ ์ฌ๋ก์ก์ต๋๋ค.
๊ธฐ๋กํ ํ์ผ ๊ฒฐ์
๋์คํฌ๋ฅผ ๊ฐ๊ฐํ๋ ๊ณผ์ ์ ๋ํ ์ ๋ณด๋ ์ข์ง๋ง ๋ น์์ด ์ด๋ฃจ์ด์ง๋ ๊ฒฝ๋ก๋ ๋์ฑ ์ข์ต๋๋ค.
ํ๋ก๊ทธ๋จ์ ํ์ฉํด๋ณด์ fatrace
, ํ์ผ ์์คํ
์ ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ํฉ๋๋ค.
# fatrace -f W
์ํ ํ๋ก๊ทธ๋จ ์ถ๋ ฅ
firefox(15057): CW /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/moz-extension+++e5c304fb-af40-498a-9ba8-47eb0416e933^userContextId=4294967295/idb/3647222921wleabcEoxlt-eengsairo.sqlite-wal
firefox(15057): CW /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/moz-extension+++e5c304fb-af40-498a-9ba8-47eb0416e933^userContextId=4294967295/idb/3647222921wleabcEoxlt-eengsairo.sqlite
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/data.sqlite-journal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/data.sqlite-journal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/data.sqlite-journal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/data.sqlite-journal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/data.sqlite-journal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/data.sqlite-journal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/data.sqlite-journal
firefox(15057): CW /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/usage-journal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/usage
firefox(15057): CW /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/usage
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/data.sqlite-journal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/data.sqlite
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/data.sqlite
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/data.sqlite
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/webappsstore.sqlite-wal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/webappsstore.sqlite-wal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/webappsstore.sqlite-wal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/webappsstore.sqlite-wal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/webappsstore.sqlite-wal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/webappsstore.sqlite-wal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/webappsstore.sqlite-wal
firefox(15057): CW /home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/https+++habr.com/ls/data.sqlite-journal
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/webappsstore.sqlite
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/webappsstore.sqlite
firefox(15057): W /home/valdikss/.mozilla/firefox/xyf4vqh2.default/webappsstore.sqlite
Fatrace๋ inotify๋ฅผ ํตํด ํ์ผ์ ์ก์ธ์คํ๋ค๋ ์ฌ์ค์ ๋งค์ฐ ๊ฐ๋จํ๊ฒ ์ถ์ ํ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ก๋ ๋ฐ์ดํฐ์ ์์ ํ์ํ ์ ์์ต๋๋ค.
์ถ๋ ฅ์์ Habr์ด ๊ธ์ ์ฐ๋ ๋์ ๋ธ๋ผ์ฐ์ ์ ๋ก์ปฌ ์ ์ฅ์์ ๋ด ๊ธ์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ๊ณผ ๊ทธ๋ฃน ๋จ์ถ ๋ค์ด์ผ ํ์ฅ ํ๋ก๊ทธ๋จ์ ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ฃน ๋จ์ถ ๋ค์ด์ผ ํ์ฅ ํ๋ก๊ทธ๋จ์ fatrace๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๊ฒฌํ ์ ์๋ฏ์ด ๋งค๋ฒ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ต๋๋ค. 30 ์ด. ์ฐ๋ ๊ฒ์ด ์๋๋ผ ์ฝ๋๋ค: CW ํ์ผ์ด ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ๋ฅผ ์ํด ์ด๋ ค ์๋ค๊ณ ํ์ํ๊ธฐ ์ ์ ํ์ผ์ด ๋๋ฝ๋ ๊ฒฝ์ฐ ํ์ผ์ ๋์์ ์์ฑํ์ง๋ง(O_RDWR|O_CREAT ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ openat์ด๋ผ๊ณ ํจ) ์ค์ ๋ก ํ์ผ์ ์ ๋ณด๊ฐ ๊ธฐ๋ก๋์์์ ๋ํ๋ด์ง๋ ์์ต๋๋ค.
๋ง์ผ์ ๋๋นํด ์ด๋ฅผ ํ์ธํ๊ธฐ ์ํด ํ์ผ ์์คํ ํธ์ถ์ ๋ํ ํํฐ์ ํจ๊ป strace๋ฅผ ์ฌ์ฉํด ๋ณด๊ฒ ์ต๋๋ค.
strace -yy -e trace=open,openat,close,write -f -p 15057 2>&1 | grep extension
๋ช ๋ น ์ถ๋ ฅ
[pid 20352] openat(AT_FDCWD, "/home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/moz-extension+++e5c304fb-af40-498a-9ba8-47eb0416e933^userContextId=4294967295/idb/3647222921wleabcEoxlt-eengsairo.sqlite", O_RDWR|O_CREAT|O_CLOEXEC, 0644) = 153</home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/moz-extension+++e5c304fb-af40-498a-9ba8-47eb0416e933^userContextId=4294967295/idb/3647222921wleabcEoxlt-eengsairo.sqlite>
[pid 20352] read(153</home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/moz-extension+++e5c304fb-af40-498a-9ba8-47eb0416e933^userContextId=4294967295/idb/3647222921wleabcEoxlt-eengsairo.sqlite>, "SQLite format 3 20 22 @ d 23"..., 100) = 100
[pid 20352] read(153</home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/moz-extension+++e5c304fb-af40-498a-9ba8-47eb0416e933^userContextId=4294967295/idb/3647222921wleabcEoxlt-eengsairo.sqlite>, "SQLite format 3 20 22 @ d 23"..., 4096) = 4096
[pid 20352] openat(AT_FDCWD, "/home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/moz-extension+++e5c304fb-af40-498a-9ba8-47eb0416e933^userContextId=4294967295/idb/3647222921wleabcEoxlt-eengsairo.sqlite-wal", O_RDWR|O_CREAT|O_CLOEXEC, 0644) = 166</home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/moz-extension+++e5c304fb-af40-498a-9ba8-47eb0416e933^userContextId=4294967295/idb/3647222921wleabcEoxlt-eengsairo.sqlite-wal>
โฆ
[pid 20352] read(54</home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/moz-extension+++e5c304fb-af40-498a-9ba8-47eb0416e933^userContextId=4294967295/idb/3647222921wleabcEoxlt-eengsairo.sqlite>, " r4304364354354364- 4204!4'414" 250 &"..., 4096) = 4096
[pid 20352] read(54</home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/moz-extension+++e5c304fb-af40-498a-9ba8-47eb0416e933^userContextId=4294967295/idb/3647222921wleabcEoxlt-eengsairo.sqlite>, " 136Pt2262504 O24532016:"16.27 r245306>2461t1q370"..., 4096) = 4096
[pid 20352] close(77</home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/moz-extension+++e5c304fb-af40-498a-9ba8-47eb0416e933^userContextId=4294967295/idb/3647222921wleabcEoxlt-eengsairo.sqlite-wal>) = 0
[pid 20352] close(54</home/valdikss/.mozilla/firefox/xyf4vqh2.default/storage/default/moz-extension+++e5c304fb-af40-498a-9ba8-47eb0416e933^userContextId=4294967295/idb/3647222921wleabcEoxlt-eengsairo.sqlite>) = 0
์ ํ๊ฐ ์์ต๋๋ค write()
, ์ด๋ ํ์ผ์ ํญ๋ชฉ์ด ์์์ ๋ํ๋
๋๋ค.
ํ์ผ ์์คํ ์ค๋ฒํค๋ ๊ฒฐ์
ํ๋
๊ฐ์ ํฐ ์ฐจ์ด iotop
ะธ btrace
์๋์ผ๋ก ํ์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ณ btrace ํ๋
๊ฐ์ ๋ชจ๋ํฐ๋งํ์ฌ ํ์ผ ์์คํ
์ ํ
์คํธํ๋ ์์ด๋์ด๋ฅผ ์ป์์ต๋๋ค.
์์คํ
๋น์ ๋ชจ๋๋ก ๋ถํ
ํ์ฌ ๋์คํฌ ์ฐ๊ธฐ๋ฅผ ์์ ํ ์ ์ธํ๊ณ ์๋์ผ๋ก ์ฐ๋ ๊ฒฝ์ฐ ๋ช ๋ฐ์ดํธ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์กด ํ์ผ๋ก, btrace๋ฅผ SSD๋ก btrfs ๋ณด๊ณ ์ ๋
น์ 3 ๋ฉ๊ฐ ๋ฐ์ดํธ ์ค์ ๋ฐ์ดํฐ. 8GB ํ๋์ ๋๋ผ์ด๋ธ์ ์๋ก ์์ฑ๋ ํ์ผ ์์คํ
์ 264๋ฐ์ดํธ๋ฅผ ์ธ ๋ ์ต์ XNUMXKiB๋ฅผ ์๋๋ค.
๋น๊ตํ์๋ฉด, ext4์ ํ์ผ์ ๋ช ๋ฐ์ดํธ๋ฅผ ์ฐ๋ฉด ๊ฒฐ๊ตญ 24KB์ ๋ฐ์ดํฐ๊ฐ ๋์คํฌ์ ์ฐ๊ฒ ๋ฉ๋๋ค.
2017๋
, Jayashree Mohan, Rohan Kadekodi, Vijay Chidambaram
๊ฒฐ๋ก ๋ฐ ๊ฒฐ๋ก
์ค๋ช ๋ ์กฐ์์ ํตํด ๋ค์์ด ๋ฐ๊ฒฌ๋์์ต๋๋ค.
- CUPS ์ธ์ ๋ฐ๋ชฌ์ด ํ๋ฆฐํฐ ์์ ์ํ๋ฅผ /var/์ ์์ฃผ ๊ธฐ๋กํฉ๋๋ค.์บ์/cups ๋งค๋ถ. /var/๋ฅผ ์ง์์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค.์คํ/cups (์ธ์ ์์ ์ ์์์ง๋ง);
- Firefox์ฉ ๊ทธ๋ฃน ๋จ์ถ ๋ค์ด์ผ ํ์ฅ ํ๋ก๊ทธ๋จ์ด 30์ด๋ง๋ค ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฝ๋๋ค๋ ์ฌ์ค;
- Fedora์ ๋ค์ํ ์ฑ๋ฅ ์ถ์ ์๋น์ค์ ์ํ ์ ๊ธฐ์ ์ธ ๋ก๊น ์ผ๋ก ์ธํด ์ ๋ฉ๊ฐ๋ฐ์ดํธ์ ๋ฐ์ดํฐ๊ฐ btrfs์ ๊ธฐ๋ก๋ฉ๋๋ค: pmcd.service, pmie.service, pmlogger.service;
- btrfs๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ ๋ฐ์ดํฐ๋ฅผ ์ธ ๋ ์์ฒญ๋ ์ฆํญ์ด ๋ฐ์ํฉ๋๋ค.
๊ฒฐ๋ก : ํ๋ก๊ทธ๋จ์ด ์๋์ ๋ฐ์ดํฐ(๋ช ํฌ๋ก๋ฐ์ดํธ)๋ฅผ ์์ฃผ ์ฐ๋ ๊ฒฝ์ฐ btrfs๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๋ฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฉ๊ฐ๋ฐ์ดํธ์ ๋ฐ์ดํฐ๊ฐ ๊ธฐ๋ก๋ฉ๋๋ค. ์ด๋ ํนํ MicroSD ๊ธฐ๋ฐ OS๋ฅผ ๊ฐ์ถ ๋จ์ผ ๋ณด๋ ์ปดํจํฐ์ ํด๋น๋ฉ๋๋ค.
์ถ์ฒ : habr.com