A lemezes tevékenységek folyamatainak azonosítása Linuxban

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 TiB

Program 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/sdb

A 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 -obPat

A 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 W

A 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.sqlite

A 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 extension

A 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 tanulmányozták a különböző fájlrendszerek írásának fokozását.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.

A lemezes tevékenységek folyamatainak azonosítása Linuxban

Következtetés és összegzés

A leírt manipulációk révén kimutatták:

  1. A nyomtatási feladatok állapotának gyakori írása a CUPS nyomtató démon által a /var/cache/cups каждую минуту. Проблема устранена очисткой /var/spool/cups (хотя никаких заданий печати не было);
  2. A Group Speed Dial bővítmény által a Firefoxon végzett adatbázis-olvasás 30 másodpercenként;
  3. 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;
  4. 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

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster