TL;DR: Denne artikel beskriver en praktisk, hurtig og pålidelig metode til at identificere Linux-programmer, der skriver data til disk, hvilket hjælper med at opdage stor eller unormalt hyppig belastning på disksystemet, samt giver mulighed for at vurdere filsystemets omkostninger. Dette er især relevant for SSD'er i pc'er, EMMC og flashhukommelse i enkeltbundkort computere.
Under skrivningen af artiklen blev det opdaget, at skrivning af nogle få kilobyte data til BTRFS-filsystemet resulterer i, at 3 megabyte reelle data skrives til disk.
Introduktion
“Åh, det er nonsense, hukommelsescellerne på moderne SSD'er vil fejle efter årtier med normal brug, så det er ikke værd at bekymre sig om, og slet ikke at flytte swap, virtuelle maskiner og browserprofilmappen til HDD” – et typisk svar på spørgsmålet om pålideligheden af SSD'er med en garanti på ca. 150 TBW. Hvis man overvejer, hvor meget typisk software kan skrive af data, synes det som om 10-20 GB om dagen allerede er et stort tal, lad os sige maksimalt 40 GB, er det ikke mere. I sådanne tal er svaret ganske rimeligt – man skal bruge 10 år for at nå de garanterede værdier for antallet af omskrivninger af celler, ved 40 GB skrevne data dagligt.
Men på 6 år har jeg allerede brugt mit tredje SSD: den første fejlede kontrolle, og den anden begyndte at flytte data mellem cellerne flere gange om dagen, hvilket resulterede i 30 sekunders forsinkelser i skrivebehandlingen.
Efter 7 måneders brug af den nye SSD besluttede jeg at tjekke mængden af skrevne data, som den selv rapporterer gennem SMART.
19,7 TB.
I alt har jeg på 7 måneder brugt 13% af den garanterede mængde skrevne data, på trods af at den er konfigureret i henhold til anbefalingerne for at justere partitioner og indstille FS, swap bruges næsten ikke, og diskene virtual machines er placeret på HDD!
Det er et unormalt stort tal; i det tempo vil den garanterede TBW blive overskredet før afslutningen af den 5-årige garanti på disken. Og min computer kan bestemt ikke skrive 93 gigabyte om dagen! Jeg skal tjekke, hvor mange data der skrives til disken på 10 minutter …
Total:
Skriver i kø: 24.712, 2.237MiB
Skriver afsluttet: 25.507, 2.237MiB
Skrive sammenslutninger: 58, 5.472KiB
2,2 GiB, wow!
Bestemmelse af antallet af skrevne data til diskdrev
Hvis dit apparat understøtter S.M.A.R.T. (SSD, EMMC, nogle industrielle MicroSD'er), så bør du først anmode om data fra lagringsenheden med programmerne smartctl, skdump eller mmc (fra mmc-utils).
Eksempel på output fra programmet smartctl
$ sudo smartctl -a /dev/sdb
smartctl 7.0 2019-03-31 r4903 [x86_64-linux-5.3.11-200.fc30.x86_64] (lokal build)
Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org
=== START AF INFORMATIONSDATA SEKTION ===
Model Family: Samsung baserede SSD'er
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 logisk/fysisk
Rotation Rate: Solid State Device
Form Factor: mSATA
Device is: I smartctl-databasen [for detaljer brug: -P show]
ATA Version is: ACS-4 T13/BSR INCITS 529 revision 5
SATA Version is: SATA 3.1, 6.0 Gb/s (nuværende: 3.0 Gb/s)
Local Time is: Tue Nov 19 01:48:50 2019 MSK
SMART support is: Er tilgængelig - enheden har SMART-funktion.
SMART support is: Aktiveret
=== START AF LÆSNING AF SMART DATA SEKTION ===
SMART samlet sundhed selvvurdering test resultat: BESTÅET
Generelle SMART værdier:
Offline dataindsamlingsstatus: (0x00) Offline dataindsamlingsaktivitet
blev aldrig startet.
Automatisk Offline dataindsamling: Deaktiveret.
Selvtestudførselsstatus: ( 0) Den tidligere selvtestrutine blev
fuldført uden fejl, eller ingen selvtest er nogensinde
blevet udført.
Total tid til at fuldføre Offline
dataindsamling: ( 0) sekunder.
Offline dataindsamlings
kapabiliteter: (0x53) SMART udfør Offline umiddelbart.
Automatisk Offline dataindsamling on/off support.
Suspendere Offline indsamling ved ny
kommando.
Ingen offline overfladeskanning understøttet.
Selvtest understøttet.
Ingen Conveyance Selvtest understøttet.
Selektiv Selvtest understøttet.
SMART kapabiliteter: (0x0003) Gemmer SMART data før indtastning
i strømbesparende tilstand.
Understøtter SMART automatisk gemme timer.
Fejlregistreringskapabilitet: (0x01) Fejlregistrering understøttet.
Generelt Formål Logging understøttet.
Kort selvtest rutine
anbefalet polling tid: ( 2) minutter.
Udvidet selvtest rutine
anbefalet polling tid: ( 85) minutter.
SCT kapabiliteter: (0x003d) SCT Status understøttet.
SCT Fejlgenopretningskontrol understøttet.
SCT Funktion Kontrol understøttet.
SCT Datatabel understøttet.
SMART Attributter Datastruktur revisionsnummer: 1
Leverandørspecifikke SMART Attributter med tærskler:
ID# ATTRIBUTE_NAME FLAG VALUE VÆRST TÆRSK TYPE OPDATERET HVIS_FEJL RAW_VALUE
5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Altid - 0
9 Power_On_Hours 0x0032 098 098 000 Old_age Altid - 5171
12 Power_Cycle_Count 0x0032 099 099 000 Old_age Altid - 459
177 Wear_Leveling_Count 0x0013 096 096 000 Pre-fail Altid - 62
179 Used_Rsvd_Blk_Cnt_Tot 0x0013 100 100 010 Pre-fail Altid - 0
181 Program_Fail_Cnt_Total 0x0032 100 100 010 Old_age Altid - 0
182 Erase_Fail_Count_Total 0x0032 100 100 010 Old_age Altid - 0
183 Runtime_Bad_Block 0x0013 100 100 010 Pre-fail Altid - 0
187 Uncorrectable_Error_Cnt 0x0032 100 100 000 Old_age Altid - 0
190 Airflow_Temperature_Cel 0x0032 058 039 000 Old_age Altid - 42
195 ECC_Error_Rate 0x001a 200 200 000 Old_age Altid - 0
199 CRC_Error_Count 0x003e 100 100 000 Old_age Altid - 0
235 POR_Recovery_Count 0x0012 099 099 000 Old_age Altid - 29
241 Total_LBAs_Written 0x0032 099 099 000 Old_age Altid - 38615215765
SMART Fejllog Version: 1
Ingen fejl registreret
SMART Selvtest logstruktur revisionsnummer 1
Ingen selvtests er blevet registreret. [For at køre selvtests, brug: smartctl -t]
SMART Selektiv selvtest logdata struktur revisionsnummer 1
SPAN MIN_LBA MAX_LBA NUVÆRENDE_TEST_STATUS
1 0 0 Ikke_tester
2 0 0 Ikke_tester
3 0 0 Ikke_tester
4 0 0 Ikke_tester
5 0 0 Ikke_tester
Selektiv selvtestflags (0x0):
Efter scanning af valgte intervaller, LÆS IKKE resterende disk.Min SSD gemmer antallet af skrevne data i parameteren 241 Total_LBAs_Written, i logiske blokke (LBA), ikke i bytes. Størrelsen på den logiske blok i mit tilfælde er 512 bytes (det kan ses i output fra smartctl under Sektorstørrelse). For at få bytes skal værdien af parameteren ganges med 512.
38615215765 × 512 ÷ 1000 ÷ 1000 ÷ 1000 ÷ 1000 = 19,770 TB
38615215765 × 512 ÷ 1024 ÷ 1024 ÷ 1024 ÷ 1024 = 17,981 TiBProgram skdump på min SSD forsøger at fortolke værdien af Total_LBAs_Written på sin egen måde, hvilket resulterer i 1296217.695 TB, hvilket åbenlyst er forkert.
For at finde ud af, hvor meget information der skrives på enheder, kan vi bruge programmet btrace fra pakken blktrace. Det viser både den samlede statistik over programmets samlede kørsel samt individuelle processer og tråde (inklusive kerner), der udførte skrivningen.
Kør følgende kommando for at samle information over 10 minutter, hvor /dev/sdb er din disk:
# btrace -w 600 -a write /dev/sdbTypisk output fra kommandoen
…
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 gør det muligt at se det faktiske antal skrevne data, men det er svært at forstå, hvilke specifikke programmer der udfører skrivningen ud fra outputtet.
Identifikation af programmer, der skriver til lagermediet
Program iotop viser de processer, der skriver til disken, og størrelsen af de skrevne data.
De mest nyttige output leveres af følgende parametre:
# iotop -obPatEksempel på programmets output
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 % 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]'Det springer i øjnene, at Firefox har skrevet 283 megabyte på få minutters arbejde med iotop.
Identifikation af de filer, der skrives til
Information om processen, der slider på disken - godt, men oplysninger om de stier, hvorpå der skrives - endnu bedre.
Lad os bruge programmet fatrace, der overvåger ændringer i filsystemet.
# fatrace -f WEksempel på programmets output
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 kan ikke vise mængden af data, der er skrevet, da det bruger en ret simpel metode til at overvåge adgang til filer via inotify.
I outputtet kan man se, hvordan Habr gemmer min artikel i browserens local storage, mens jeg skriver den, samt udvidelsen Group Speed Dial, som, ved hjælp af fatrace, viser, at den læser sine data hver 30. sekund. Den læser, ikke skriver: CW Før filen indikerer, at filen åbnes til læsning og skrivning, samtidig med at filen oprettes, hvis den ikke eksisterer (openat kaldes med flaget O_RDWR|O_CREAT), men den angiver ikke, at der faktisk blev skrevet nogen information til filen.
For en sikkerheds skyld, for at være sikker på dette, bruger vi strace med filter på filsystemet kald:
strace -yy -e trace=open,openat,close,write -f -p 15057 2>&1 | grep extensionOutput fra kommandoen
[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 Ingen systemkald write(), hvilket indikerer, at der ikke er nogen skrivning til filen.
Bestemmelse af filsystemets overhead
Store forskelle i aflæsninger iotop og btrace gav anledning til at teste filsystemet ved manuelt at skrive data til filen og overvåge aflæsningerne med btrace.
Hvis skrivning til disken helt udelukkes ved at starte i systemd nødtilstand og skrive manuelt et par bytes data til en eksisterende fil, rapporterer btrace på SSD med btrfs at der skrives 3 megabyte virkelige data. Et nyoprettet filsystem på et 8 GB USB-drev skriver mindst 264 KiB ved at skrive ét byte.
Til sammenligning afsluttes skrivningen af et par bytes til en fil på ext4 med en dataoverførsel på 24 kilobyte til disken.
I 2017 udførte Jayashree Mohan, Rohan Kadekodi og Vijay Chidambaram , deres resultater for btrfs og ext4 ved skrivning af 4 KB stemmer overens med mine.

Konklusion og resultater
Gennem de beskrevne manøvrer blev det opdaget:
- Hyppig skrivning af jobstatusser for printere af CUPS dæmonen i /var/cache/cups каждую минуту. Проблема устранена очисткой /var/spool/cups (хотя никаких заданий печати не было);
- Faktisk læsning af databasen hver 30. sekund af Group Speed Dial-udvidelsen til Firefox;
- Periodisk skrivning af logfiler af forskellige ydelser, der overvåger ydeevnen i Fedora, hvilket førte til skrivning af flere megabyte data på btrfs: pmcd.service, pmie.service, pmlogger.service;
- Kæmpe forstærkning ved skrivning af små mængder data ved brug af btrfs.
Konklusion: btrfs bør undgås, hvis programmer ofte skriver små mængder data (flere kilobyte), ellers vil det føre til megabyte af gemte data. Dette er især relevant for enkeltbundkort-computere med OS på MicroSD.
Kilde: habr.com
