TL;DR: Ta članek opisuje enostaven, hitri in zanesljiv način za določitev Linux programov, ki zapisujejo podatke na disk, kar pomaga pri ugotavljanju velike ali nenormalno pogoste obremenitve diskovne podmene, poleg tega pa omogoča oceno stroškov datotečnega sistema. To je še posebej pomembno za SSD v računalnikih, EMMC in Flash pomnilnik v enotnih računalnikih.
Med pisanjem članka se je izkazalo, da zapis več kilobajtov podatkov na datotečni sistem BTRFS vodi do zapisa 3 megabajtov dejanskih podatkov na disk.
Uvod
"Oh, neumnost, pomnilniške celice na sodobnih SSD-jih se bodo poškodovale šele po desetletjih običajne uporabe, ni vredno skrbeti, še bolj pa ne premikati swap-a, virtualnih strojev in mape profila brskalnika na HDD" — tipičen odgovor na vprašanje o zanesljivosti trdih diskov z garancijo ≈150 TBW. Če ocenimo, koliko tipična programska oprema lahko zapiše podatkov, se zdi, da je 10-20 GB na dan že velika številka, naj bo maksimalno 40 GB, kam več. Pri takšnih številkah je odgovor povsem razumljiv — potrebnih je 10 let, da dosežemo garantirana števila ponovnih zapisov celic, pri 40 GB zapisanih podatkov dnevno.
Vendar pa že 6 let uporabljam tretji SSD: pri prvem je odpovedal kontroler, drugi pa je začel vsak dan večkrat premikati podatke med celicami, kar je povzročilo 30-sekundne zamude pri obravnavi zapisa.
Po 7 mesecih uporabe novega SSD sem se odločil preveriti količino zapisanih podatkov, kot jih sporoča sam disk preko SMART-a.
19.7 TB.
Skupaj v 7 mesecih sem uporabil 13% od zagotovljenega števila zapisanih podatkov, pri čemer je nastavljen v skladu s priporočili za porazdelitev oddelkov in nastavitev FS, swap skoraj ne uporabljam, diski virtualnih naprav so nameščeni na HDD!
To je nenormalno velika številka, pri takem tempu bo zagotovljen TBW presežen prej kot po 5-letni garancijski dobi diska. Pa tudi moj računalnik ne more zapisati 93 gigabajtov na dan! Potrebno je preveriti, koliko podatkov se napiše na disk v 10 minutah…
Skupaj:
Zapiski čakajo: 24.712, 2.237MiB
Zapiski zaključeni: 25.507, 2.237MiB
Združitve zapisov: 58, 5.472KiB
2.2 GiB, uau!
Določitev količine zapisanih podatkov na diskovno napravo
Če vaša naprava podpira S.M.A.R.T. (SSD, EMMC, nekatere industrijske MicroSD), je treba najprej zahtevati podatke iz pomnilnika z programi smartctl, skdump ili mmc (iz kompleta mmc-utils).
Primer izhoda programa smartctl
$ sudo smartctl -a /dev/sdb
smartctl 7.0 2019-03-31 r4903 [x86_64-linux-5.3.11-200.fc30.x86_64] (lokalna gradnja)
Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org
=== POČETAK SEKCIJE INFORMACIJA ===
Porodično ime modela: SSD-ovi bazirani na Samsungu
Model uređaja: Samsung SSD 860 EVO mSATA 250GB
Serijski broj: S41MNC0KA13477K
LU WWN Identifikacija uređaja: 5 002538 e700fa64b
Verzija firmvera: RVT41B6Q
Kapacitet korisnika: 250 059 350 016 bajtova [250 GB]
Veličina sektora: 512 bajtova logički/fizički
Brzina rotacije: Solid State Device
Oblik faktora: mSATA
Uređaj je: U smartctl bazi podataka [za više detalja koristite: -P show]
ATA verzija je: ACS-4 T13/BSR INCITS 529 revizija 5
SATA verzija je: SATA 3.1, 6.0 Gb/s (trenutno: 3.0 Gb/s)
Lokalno vreme je: Uto Nov 19 01:48:50 2019 MSK
SMART podrška je: Dostupna - uređaj ima SMART mogućnost.
SMART podrška je: Aktivna
=== POČETAK SEKCIJE READ SMART PODATAKA ===
SMART rezultat samo-procene ukupnog zdravlja: PROŠAO
Opšte SMART vrednosti:
Status offline prikupljanja podataka: (0x00) Aktivnost offline prikupljanja podataka
nikada nije započeta.
Auto offline prikupljanje podataka: Onemogućeno.
Status izvršenja samo-provere: ( 0) Prethodni rutinski samo-test je
završen bez greške ili nijedan samo-test
nikada nije pokrenut.
Ukupno vreme za završetak
offline prikupljanja podataka: ( 0) sekundi.
Offline prikupljanje
mogućnosti: (0x53) SMART izvršava Offline odmah.
Auto offline prikupljanje podataka uključeno/isključeno.
Obustavi offline prikupljanje na novu
komandu.
Nema offline skeniranja površine podržano.
Samo-test podržan.
Nema podržanog samoprocenjivanja u transportu.
Selektivno samo-testiranje podržano.
SMART mogućnosti: (0x0003) Čuva SMART podatke pre ulaska
u režim uštede energije.
Podržava SMART automatsko čuvanje tajmera.
Mogućnost beleženja grešaka: (0x01) Podržano beleženje grešaka.
Opšte svrhe beleženja podržano.
Preporučeno vreme za kratki samo-test
anketiranja: ( 2) minuta.
Preporučeno vreme za prošireni samo-test
anketiranja: ( 85) minuta.
SCT mogućnosti: (0x003d) SCT Status podržan.
SCT Kontrola oporavka grešaka podržana.
SCT Kontrola mogućnosti podržana.
SCT Tabela podataka podržana.
SMART struktura podataka atributa verzija broj: 1
Proizvođački specifični SMART atributi sa pragovima:
ID# NAZIV_ATRIBUTA FLAG VREDNOST NAJGORI PRAG TIP AŽURIRANO KADA_FAIL RAW_VREDNOST
5 Broj_relokacija_sektora 0x0033 100 100 010 Pre-fail Uvek - 0
9 Satovi_u_radu 0x0032 098 098 000 Staro Uvek - 5171
12 Broj_pali_ciklusa 0x0032 099 099 000 Staro Uvek - 459
177 Broj_nivoa_trošenja 0x0013 096 096 000 Pre-fail Uvek - 62
179 Ukupni_količnik_zauzetih_blk 0x0013 100 100 010 Pre-fail Uvek - 0
181 Ukupni_brojevi_pogrešnih_programa 0x0032 100 100 010 Staro Uvek - 0
182 Ukupni_brojevi_gresaka_brisa 0x0032 100 100 010 Staro Uvek - 0
183 Broj_loših_bloca_u_radu 0x0013 100 100 010 Pre-fail Uvek - 0
187 Broj_neispravnih_grešaka 0x0032 100 100 000 Staro Uvek - 0
190 Temperatura_zraka_Cel 0x0032 058 039 000 Staro Uvek - 42
195 Stopa_ECC_greške 0x001a 200 200 000 Staro Uvek - 0
199 Broj_CRC_greškа 0x003e 100 100 000 Staro Uvek - 0
235 Broj_oporavka_POR 0x0012 099 099 000 Staro Uvek - 29
241 Ukupno_LBAs_napisano 0x0032 099 099 000 Staro Uvek - 38615215765
SMART verzija loga grešaka: 1
Nema zabeleženih grešaka
SMART struktura loga samo-testiranja verzija broj 1
Nema zabeleženih samo-testova. [Za pokretanje samo-testova, koristite: smartctl -t]
SMART struktura podataka loga selektivnog samo-testiranja verzija broj 1
SPAN MIN_LBA MAX_LBA STATUS_TRENUTNOG_TESTA
1 0 0 Nije_testa
2 0 0 Nije_testa
3 0 0 Nije_testa
4 0 0 Nije_testa
5 0 0 Nije_testa
Zastave selektivnog samo-testiranja (0x0):
Nakon skeniranja odabranih segmenata, NE čitajte ostatak diska.
Ako je selektivni samo-test na čekanju prilikom pokretanja, ponovo započnite nakon 0 minuta kašnjenja.Moja SSD shranjuje količino zapisanih podatkov v parametru 241 Total_LBAs_Written, v logičnih blokih (LBA), in ne v bajtih. Velikost logičnega bloka v mojem primeru je 512 bajtov (to lahko vidite v izhodu smartctl, v Sector Size). Da dobimo bajte, je treba vrednost parametra pomnožiti s 512.
38615215765 × 512 ÷ 1000 ÷ 1000 ÷ 1000 ÷ 1000 = 19,770 TB
38615215765 × 512 ÷ 1024 ÷ 1024 ÷ 1024 ÷ 1024 = 17,981 TiBProgram skdump na mojem SSD-ju poskuša interpretirati vrednost Total_LBAs_Written na svoj način, zaradi česar izpisuje 1296217.695 TB, kar je očitno napačno.
Da bi izvedeli količino zapisane informacije na ravni naprave, uporabimo program btrace iz sestavine paketa blktrace. Prikazuje tako splošno statistiko za celotno trajanje delovanja programa kot tudi posamezne procese in niti (vključno z jedrom), ki so izvajale zapisovanje.
Zaženi naslednji ukaz, da zbereš informacije v 10 minutah, kjer /dev/sdb — tvoj disk:
# btrace -w 600 -a write /dev/sdbTipičen izpis ukaza
…
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 omogoča jasno ogledati dejansko količino zabeleženih podatkov, vendar je težko razumeti, katere točno programe izvajajo zapis iz njenega izhoda.
Določanje programov, ki izvajajo zapis na snemalnik
Program iotop bo prikazal procese, ki pišejo na disk, in velikost zabeleženih podatkov.
Najbolj priročen izhod zagotavljajo naslednji parametri:
# iotop -obPatPrimer izhoda programa
02:55:47 Skupno PREBERITE DISK: 0,00 B/s | Skupno ZAPIŠITE DISK: 30,65 K/s
02:55:47 Dejanski PREBERITE DISK: 0,00 B/s | Dejanski ZAPIŠITE DISK: 0,00 B/s
ČAS PID PRIO UPORABNIK PREBERITE DISK ZAPIŠITE DISK SWAPIN IO KOMANDA
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 % 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]'Oči bode Firefox, ki je zabeležil 283 megabajtov v nekaj minutah delovanja iotop.
Določanje datotek, v katere poteka zapis
Informacija o procesu, ki obremenjuje disk — to je dobro, toda poti, po katerih poteka zapis — še boljše.
Uporabimo program fatrace, ki spremlja spremembe v datotečnem sistemu.
# fatrace -f WPrimer izhoda programa
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.sqliteFatrace ne zna pokazati količino zapisanih podatkov zaradi preprostega sledenja dostopu do datotek preko inotify.
Iz izpisa je razvidno, kako Habr shranjuje moj članek v local storage brskalnika, medtem ko ga pišem, ter razširitev Group Speed Dial, ki, kot se je pokazalo s pomočjo fatrace, bere svoje podatke vsakih 30 sekund. Bere, ne pa da zapisuje: CW Pred zapisom datoteke se povečuje, da se datoteka odpira za branje in pisanje, pri čemer se hkrati ustvari datoteka, če le-ta ne obstaja (klic openat s zastavama O_RDWR|O_CREAT), vendar ne pove, ali so bile v datoteko dejansko zapisane kakšne informacije.
Za vsak slučaj, da bi se prepričali, bomo uporabili strace, s filtrom za sistemske klice datotek:
strace -yy -e trace=open,openat,close,write -f -p 15057 2>1 | grep extensionIzlaz komande
[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
[pid 20352] read(153, "SQLite format 3 20 22 @ d 23"..., 100) = 100
[pid 20352] read(153, "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
…
[pid 20352] read(54, " r4304364354354364- 4204!4'414" 250 &"..., 4096) = 4096
[pid 20352] read(54, " 136Pt2262504 O24532016:"16.27 r245306>2461t1q370"..., 4096) = 4096
[pid 20352] close(77) = 0
[pid 20352] close(54) = 0 Ni nobenega klica write(), kar kaže na odsotnost zapisov v datoteko.
Določitev stroškov datotečnega sistema
Velika razlika v izmerah iotop in btrace me je spodbudila, da preizkusim datotečni sistem z ročnim zapisovanjem podatkov v datoteko in spremljanjem izmer btrace.
Če popolnoma izključim zapis na disk, ko se naložim v nujni način systemd, in ročno zapišem nekaj bajtov podatkov v obstoječo datoteko, btrace na SSD-ju z btrfs poroča o zapisu 3 megabajte Praktični podaci. Novo stvoreni fajl sistem na USB sticku od 8 GB minimalno zapisuje 264 KiB prilikom zapisivanja jednog bajta.
Za upoređivanje, zapis dva bajta u fajl na ext4 završava se zapisom od 24 kilobajta podataka na disk.
U 2017. godini, Jayashree Mohan, Rohan Kadekodi i Vijay Chidambaram , čiji su rezultati za btrfs i ext4 prilikom zapisivanja od 4 KB srodni mojim.

Zaključak i preporuka
Kroz opisane manipulacije, otkriveno je:
- Česta beleženja stanja zadataka za štampač demonskim programom za štampanje CUPS u /var/predpomnilnik/cups каждую минуту. Проблема устранена очисткой /var/spool/cups (хотя никаких заданий печати не было);
- Fakt čitanja baze podataka svake 30 sekundi putem ekstenzije Group Speed Dial za Firefox;
- Periodično zapisivanje logova raznim servisima za praćenje performansi u Fedori, što je dovodilo do zapisivanja nekoliko megabajta podataka na btrfs: pmcd.service, pmie.service, pmlogger.service;
- Ogromna amplifikacija prilikom zapisivanja malog broja podataka prilikom korišćenja btrfs.
Zaključak: ne preporučuje se korišćenje btrfs ako programi često beleže male količine podataka (nekoliko kilobajta), inače će to rezultirati megabajtima zapisanih podataka. Ovo je posebno važno za jednoplošne računare sa OS na MicroSD.
Izvor: habr.com
