Röviden összefoglalvaA cikk egy kényelmes, gyors és megbízható módszert mutat be Linux-programok azonosítására, amelyek adatokat írnak a lemezre, segítve a nagy vagy szokatlanul gyakori lemezeljárás terhelésének azonosítását, valamint lehetővé téve a fájlrendszer költségeinek értékelését. Ez különösen fontos SSD-k esetén PC-kben, EMMC és Flash memóriák esetén egylapú számítógépekben.
A cikk megírása során kiderült, hogy néhány kilobájt adat írása a BTRFS fájlrendszerbe 3 megabájt valódi adat lemezre írását eredményezi.
Bevezetés
„Ó, hülyeség, a modern SSD-k memóriasejtjei évtizedek alatt elhasználódnak a szokásos használat mellett, nem érdemes aggódni emiatt, és pláne nem érdemes a swapot, virtuális gépeket és a böngésző profil mappáját HDD-re helyezni” — ez a tipikus válasz az SSD-k megbízhatóságával kapcsolatos kérdésekre, ahol a garantált érték ≈150 TBW. Ha megnézzük, hogy mennyi adatot írhat a tipikus szoftver, akkor úgy tűnik, hogy a napi 10-20 GB már egy jelentős szám, mondjuk, legyen maximum 40 GB, ennél többet nem is nagyon lehet. Ezek mellett a számok mellett a válasz teljesen ésszerű — 10 év szükséges a garantált sejti újraírásának számának eléréséhez, napi 40 GB adat írása mellett.
Ellenben 6 év alatt már a harmadik SSD-met használom: az első vezérlője meghibásodott, a második pedig naponta többször is adatokat kezdett mozgatni a sejtek között, ami 30 másodperces késéseket okozott az írás kiszolgálásában.
Új SSD használatának 7 hónapja után úgy döntöttem, hogy ellenőrzöm az írt adatok mennyiségét, ahogy azt magáról a lemezről a SMART-on keresztül jelzi.
19.7 TB.
Összesen 7 hónap alatt a garantált írt adat mennyiség 13%-át használtam el, holott a lemez a partíciók kiegyensúlyozására és a fájlrendszer beállításaira vonatkozó ajánlások szerint van beállítva, a swap-ot szinte nem használom, a lemezek virtuális gépekhez pedig HDD-n találhatók!
Ez egy rendkívül magas szám, ilyen ütemben a garanciális TBW előbb lejár, mint hogy a lemez 5 éves garanciális idejét elérjük. És a gépem 93 gigabájtot sem írhat naponta! Ellenőrizni kell, mennyi adatot ír a lemezre 10 perc alatt...
Összesen:
Feldolgozás alatt lévő írások: 24,712, 2,237MiB
Befejezett írások: 25,507, 2,237MiB
Írások egyesítése: 58, 5,472KiB
2.2 GiB, wow!
Az adatok lemezre írásának mennyiségének meghatározása
Ha az eszköze támogatja a S.M.A.R.T.-ot (SSD, EMMC, egyes ipari MicroSD-k), akkor először érdemes adatokat kérni a meghajtóról a smartctl, skdump vagy mmc (a mmc-utils csomag részeként).
A program smartctl kimeneti példája
$ sudo smartctl -a /dev/sdb
smartctl 7.0 2019-03-31 r4903 [x86_64-linux-5.3.11-200.fc30.x86_64] (helyi build)
Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org
=== INFORMÁCIÓS SZEKCIÓ KEZDETE ===
Modellcsalád: Samsung alapú SSD-k
Eszközmodell: Samsung SSD 860 EVO mSATA 250GB
Sorozatszám: S41MNC0KA13477K
LU WWN Eszközazonosító: 5 002538 e700fa64b
Firmware verzió: RVT41B6Q
Felhasználói kapacitás: 250 059 350 016 byte [250 GB]
Sektor méret: 512 byte logikai/fizikai
Forgási sebesség: Szilárd állapotú eszköz
Formátum: mSATA
Eszköz állapota: Az smartctl adatbázisában [további részletekhez használja: -P show]
ATA verzió: ACS-4 T13/BSR INCITS 529 revízió 5
SATA verzió: SATA 3.1, 6.0 Gb/s (jelenlegi: 3.0 Gb/s)
Helyi idő: 2019. november 19. 01:48:50 MSK
SMART támogatás: Elérhető - az eszköz rendelkezik SMART képességgel.
SMART támogatás: Engedélyezve
=== SMART ADATOK OLVASÁS SZEKCIÓ KEZDETE ===
SMART összes egészségügyi önellenőrzés teszt eredménye: SIKERES
Általános SMART értékek:
Offline adatgyűjtési állapot: (0x00) Offline adatgyűjtési tevékenység
soha nem kezdődött el.
Automatikus Offline adatgyűjtés: Letiltva.
Önellenőrzési végrehajtási állapot: ( 0) Az előző önellenőrzési rutin
hibamentesen zárult le, vagy soha nem
futott önellenőrzés.
Teljes idő az Offline adatgyűjtés befejezéséhez: ( 0) másodperc.
Offline adatgyűjtési
képességek: (0x53) SMART azonnali Offline végrehajtása.
Automatikus Offline adatgyűjtési be-/kikapcsolás támogatás.
Offline gyűjtés felfüggesztése új
parancs esetén.
Nincs Offline felületvizsgálat támogatva.
Önellenőrzés támogatva.
Nincs szállítási önellenőrzés támogatva.
Szelektív önellenőrzés támogatva.
SMART képességek: (0x0003) Mentse a SMART adatokat a
energiatakarékos módba való belépés előtt.
Támogatja a SMART automatikus mentési időzítőt.
Hiba naplózási képesség: (0x01) Hibajelentések támogatva.
Általános célú naplózás támogatva.
Rövid önellenőrzési rutin
ajánlott lekérdezési idő: ( 2) perc.
Kiterjesztett önellenőrzési rutin
ajánlott lekérdezési idő: ( 85) perc.
SCT képességek: (0x003d) SCT állapot támogatott.
SCT hiba-helyreállítási vezérlés támogatott.
SCT funkcióvezérlés támogatott.
SCT adat táblázat támogatott.
SMART attribútumok adatstruktúra verzió száma: 1
Gyártóspecifikus SMART attribútumok küszöbértékekkel:
ID# ATRIBUTUM_NEV FLAG ÉRTÉK LEGROSSZABB THRESH TÍPUS FRISSÍTETT HIBA ESETÉN RAW ÉRTÉK
5 Reallocated_Sector_Ct 0x0033 100 100 010 Előfeltétel Mindig - 0
9 Power_On_Hours 0x0032 098 098 000 Öregedés Mindig - 5171
12 Power_Cycle_Count 0x0032 099 099 000 Öregedés Mindig - 459
177 Wear_Leveling_Count 0x0013 096 096 000 Előfeltétel Mindig - 62
179 Used_Rsvd_Blk_Cnt_Tot 0x0013 100 100 010 Előfeltétel Mindig - 0
181 Program_Fail_Cnt_Total 0x0032 100 100 010 Öregedés Mindig - 0
182 Erase_Fail_Count_Total 0x0032 100 100 010 Öregedés Mindig - 0
183 Runtime_Bad_Block 0x0013 100 100 010 Előfeltétel Mindig - 0
187 Uncorrectable_Error_Cnt 0x0032 100 100 000 Öregedés Mindig - 0
190 Airflow_Temperature_Cel 0x0032 058 039 000 Öregedés Mindig - 42
195 ECC_Error_Rate 0x001a 200 200 000 Öregedés Mindig - 0
199 CRC_Error_Count 0x003e 100 100 000 Öregedés Mindig - 0
235 POR_Recovery_Count 0x0012 099 099 000 Öregedés Mindig - 29
241 Total_LBAs_Written 0x0032 099 099 000 Öregedés Mindig - 38615215765
SMART Hiba napló verzió: 1
Nincsenek naplózott hibák
SMART Önellenőrzési napló struktúra verziószáma 1
Nincsenek naplózott önellenőrzések. [Önellenőrzések futtatásához használja: smartctl -t]
SMART Szelektív önellenőrzés napló adatstruktúra verziószáma 1
SPAN MIN_LBA MAX_LBA JELENLEGI_TESZTÁLLAPOT
1 0 0 Nincs_tesztelés
2 0 0 Nincs_tesztelés
3 0 0 Nincs_tesztelés
4 0 0 Nincs_tesztelés
5 0 0 Nincs_tesztelés
Szelektív önellenőrzési jelzések (0x0):
A kiválasztott tartományok átvizsgálása után NE olvassa le a többi lemezt.Az SSD-m a 241 Total_LBAs_Written paraméterben tárolja az írt adatok mennyiségét logikai blokkokban (LBA), nem bájtban. Az én esetemben a logikai blokk mérete 512 bájt (ezt a smartctl kimenetében látni lehet a Sector Size-nál). Ahhoz, hogy bájtokat kapjunk, meg kell szorozni a paraméter értékét 512-től.
38615215765 × 512 ÷ 1000 ÷ 1000 ÷ 1000 ÷ 1000 = 19,770 TB
38615215765 × 512 ÷ 1024 ÷ 1024 ÷ 1024 ÷ 1024 = 17,981 TiBProgram skdump az SSD-m megpróbálja saját módján értelmezni a Total_LBAs_Written értékét, ami miatt 1296217.695 TB, ami nyilvánvalóan helytelen.
A készüléken írt információ mennyiségének megismeréséhez használjuk a btrace csomag részeként. blktrace-tEz megmutatja a program működésének egészére vonatkozó statisztikát, valamint a különböző folyamatokat és szálakat (beleértve a magokat), amelyek írást végeztek.
Futtassa a következő parancsot, hogy információt gyűjtsön 10 perc alatt, ahol /dev/sdb – az Ön lemeze:
# btrace -w 600 -a write /dev/sdbA parancs tipikus kimenete
…
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):
Read Queued: 0, 0KiB Write Queued: 345, 25,932KiB
Read Dispatch: 0, 0KiB Write Dispatch: 331, 25,788KiB
Read Requeued: 0 Write Requeued: 0
Read Completed: 0, 0KiB Write 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):
Read Queued: 0, 0KiB Write Queued: 502, 39,948KiB
Read Dispatch: 0, 0KiB Write Dispatch: 495, 40,076KiB
Read Requeued: 0 Write Requeued: 0
Read Completed: 0, 0KiB Write 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):
Read Queued: 0, 0KiB Write Queued: 297, 26,800KiB
Read Dispatch: 0, 0KiB Write Dispatch: 287, 26,800KiB
Read Requeued: 0 Write Requeued: 0
Read Completed: 0, 0KiB Write 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):
Read Queued: 0, 0KiB Write Queued: 418, 24,432KiB
Read Dispatch: 0, 0KiB Write Dispatch: 408, 24,448KiB
Read Requeued: 0 Write Requeued: 0
Read Completed: 0, 0KiB Write 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):
Read Queued: 0, 0KiB Write Queued: 1,562, 117,112KiB
Read Dispatch: 0, 0KiB Write Dispatch: 1,521, 117,112KiB
Read Requeued: 0 Write Requeued: 0
Read Completed: 0, 0KiB Write 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 lehetővé teszi a ténylegesen rögzített adatok mennyiségének vizuális szemrevételezését, de nehéz megérteni, hogy mely programok végzik a rögzítést az outputból.
A lemezre író programok azonosítása
Program iotop megmutatja a lemezre író folyamatokat és a rögzített adatok méretét.
A legkényelmesebb kimenetet a következő paraméterek biztosítják:
# iotop -obPatA program kimenetének példája
02:55:47 Összes lemezolvasás: 0.00 B/s | Összes lemezírás: 30.65 K/s
02:55:47 Aktuális lemezolvasás: 0.00 B/s | Aktuális lemezírás: 0.00 B/s
IDŐ PID PRIÓ FELHASZNÁLÓ LEMEZ OLVASÁS LEMEZ ÍRÁS SWAPIN IO PARANCS
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]'Szembetűnő a Firefox, amely néhány perc alatt 283 megabájt adatot írt.
A fájlok azonosítása, amelyekbe írás történik
Hasznos információ a lemezt terhelő folyamatról — de még jobb a fájlok útvonala, amelyekbe az írás zajlik.
Használjuk a programot fatrace, amely figyelemmel kíséri a fájlrendszer változásait.
# fatrace -f WA program kimenetének példája
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.sqliteA Fatrace nem tudja megjeleníteni az írt adatok mennyiségét a fájlokhoz való hozzáférés inotify-n keresztüli nyomkövetésének egyszerűsége miatt.
A kimenetből látszik, ahogyan a Habr a cikkemet a böngésző helyi tárolójában menti írás közben, valamint a Group Speed Dial bővítmény, amely, ahogyan a fatrace segítségével felfedeztem, 30 másodpercenként olvassa a saját adatait. Ugyanúgy olvassa, de nem írja: CW A fájl előtti rész azt jelzi, hogy a fájl olvasásra és írásra nyílik meg, miközben létrejön, ha nem létezik (az openat O_RDWR|O_CREAT kapcsolójával hívva), de nem mondja el, hogy a fájlba ténylegesen írtak bármilyen információt.
Minden esetre, hogy megbizonyosodjunk erről, használjunk strace-t, fájlrendszeri hívásokra filterezve:
strace -yy -e trace=open,openat,close,write -f -p 15057 2>&1 | grep extensionA parancs kimenete
[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 Nincs egyetlen hívás sem write(), ami a fájlba való írás hiányát jelzi.
A fájlrendszer költségeinek meghatározása
Jelentős eltérés a mérésekben iotop és btrace arra késztetett, hogy teszteljem a fájlrendszert manuális adatok fájlba írásával és a btrace mérések nyomon követésével.
Ha teljesen kizárjuk a lemezre írást, belépve a systemd emergency üzemmódba, és manuálisan írok pár bájtot a létező fájlba, a btrace SSD-vel btrfs jelzi az írást 3 megabájt valós adatok. Az újonnan létrehozott fájlrendszer a 8 GB-os flash meghajtón minimum 264 KiB-ot ír egy bájt írása mellett.
Összehasonlításképpen, két bájt fájlba írása az ext4 fájlrendszeren 24 kilobájt adat írásával végződik a lemezre.
2017-ben Jayashree Mohan, Rohan Kadekodi és Vijay Chidambaram Az eredményeik a btrfs és ext4 fájlrendszereknél a 4 KB-os írás kapcsán összefüggésben állnak az enyémmel.

Következtetés és összegzés
A leírt manipulációk révén kimutatták:
- A nyomtatási feladatok állapotának gyakori írása a CUPS nyomtató démon által a /var/cache/cups каждую минуту. Проблема устранена очисткой /var/spool/cups (хотя никаких заданий печати не было);
- A Group Speed Dial bővítmény által a Firefoxon végzett adatbázis-olvasás 30 másodpercenként;
- Teljesítményfigyelő szolgáltatások által a Fedora rendszerében végzett naplóírás, amely több megabájt adat írásához vezetett a btrfs-en: pmcd.service, pmie.service, pmlogger.service;
- Hatalmas amplifikáció kis mennyiségű adat írásakor a btrfs használatakor.
Következtetés: nem érdemes btrfs-t használni, ha a programok gyakran írnak kis mennyiségű adatot (több kilobájt), különben ez megabájtok írását eredményezi. Ez különösen aktuális az olyan egylapos számítógépeken, amelyek MicroSD-re telepített OS-t futtatnak.
Forrás: habr.com
