Mierzenie „całkowitej liczby zapisanych bajtów” w systemie Linux

36

Jesteśmy bardzo zainteresowani zbadaniem możliwości wykorzystania dysków SSD w środowisku serwerowym. Jednak jedna rzecz, którą musimy ustalić, to długowieczność. Zgodnie z tym artykułem producenci zgłaszają wytrzymałość dysku w kategoriach „całkowitej liczby zapisanych bajtów” (TBW). Np. Z tego artykułu dysk Crucial C400 SSD ma 72 TB TBW. Czy w ekosystemie Linux istnieją jakieś skrypty / narzędzia, które pomogą nam zmierzyć TBW? (a następnie podjąć bardziej wykształconą decyzję dotyczącą możliwości korzystania z dysków SSD)

złe wieści
źródło

Odpowiedzi:

28

Inną możliwością jest sprawdzenie / proc / diskstats . Nie jest trwały podczas ponownego uruchamiania, ale ma dane dla każdego urządzenia blokowego. Prawdopodobnie najbardziej interesujące jest dla ciebie pole 10, które zawiera całkowitą liczbę zapisanych sektorów. W systemie z dyskami SCSI o wielkości sektora 512 bajtów można uruchomić

awk '/sd/ {print $3"\t"$10 / 2 / 1024}' /proc/diskstats

aby zobaczyć, ile megabajtów zostało zapisanych na każdym urządzeniu. Wynik będzie wyglądał

sda 728,759
sda1 79,0908
sda2 649,668

Sciurus
źródło
4
Rozmiar sektora można znaleźć, uruchamiając komendę #cat / sys / block / sda / queue / hw_sector_size
Antonio
@Antonio dzięki! Nie jestem pewien, kiedy to zostało dodane. Wygląda na to, że jest w wersji 3.2, ale nie w wersji 2.6.18.
sciurus
@ sciurus, czy mógłbyś wyjaśnić matematykę obliczeń? Mówisz o wielkości sektora = 512, ale twoje obliczenia dzielą wartość odczytaną przez 2/1024
gyre
@gyre Pole 10 zawiera liczbę zapisanych sektorów 0,5 kilobajta. Dzielę to przez 2, aby uzyskać liczbę zapisanych kilobajtów. Następnie dzielę to przez 1024, aby przekonwertować na megabajty.
sciurus
@antonio To robi pokazują rozmiar sektora używanej z podstawowym sprzętem, ale afaict od źródła jądra, iostat źródła i testów empirycznych „sektory” numer w / proc / diskstats zawsze odnosi się do 512 bajtów, nawet gdy hw_sector_sizejest inny ( przynajmniej od serii 2.4). Zobacz block/cfq-iosched.cszczególnie cfqg_stats_update_dispatch().
Paweł
23

Miałem ten sam problem z notebookiem, ale ponieważ codziennie go uruchamiam ponownie, zaakceptowana odpowiedź nie była pomocna. Mam dysk Samsung mSATA SSD, który ma atrybut SMART # 241 Total_LBAs_Written. Według oficjalnej dokumentacji ,

Aby obliczyć całkowity rozmiar (w bajtach), należy pomnożyć surową wartość tego atrybutu przez 512B.

Poniższe polecenie daje mi całkowitą liczbę TB zapisanych na moim dysku SSD (sdb)

sudo smartctl -A /dev/sdb | awk '/^241/ { print "TBW: "($10 * 512) * 1.0e-12, "TB" } '

Ponieważ działa również na moim dysku twardym, zakładam, że powinien on działać na prawie każdym nowoczesnym dysku twardym.

Gabriel Miretti aka gmiretti
źródło
3
Nie, to istnieje tylko w niektórych modelach dysków SSD. To nie jest uniwersalne.
Michael Hampton
3
Chciałem podkreślić, że równanie rzeczywiście produkuje numer, który jest wyłączony byłoby bardziej dokładne, jak: sudo smartctl -A /dev/sda1 | awk '/^241/ { print "TBW: "($10 * 512) * 1.0e-12, "TB" }'.
Jordon Bedwell
Mój dysk SSD firmy Intel ma ten sam atrybut, ale nazywa się Host_Writes_32MiB. Jest też atrybut 249 NAND_Writes_1GiB. Pamiętaj więc, że na każdym dysku SSD wydaje się, że jest inaczej (np. Mój dysk SSD Intel mSATA nie ma tych atrybutów)
reox 30.09.16
Na moim Intel SSD Pro 5400s (SATA) Total_LBAs_Writtenjest to określone w GB! Nie mogłem zrozumieć, jaki był niski poziom 4714inteligencji. Jednak przeglądanie przybornika Intel SSD Toolbox w systemie Windows pokazało, że jest to GB.
MrCalvin
15

Możesz zobaczyć, ile danych zostało zapisanych w systemie plików ext4, zaglądając do katalogu / sys / fs / ext4 / $ DEVICE / lifetime_write_kbytes.

Sciurus
źródło
To fajna funkcja, o której nie wiedziałam! Szkoda, że ​​większość naszych systemów korzysta z ext3, a także niektórych surowych partycji LVM dla maszyn wirtualnych :)
badnews
ext3 (i w nieco mniejszym stopniu) ext4 nie są przeznaczone do pisania we flashu. Awaria wystąpi w zależności od liczby zapisanych lokalizacji - a przy konwencjonalnych systemach plików hotspoty rozwijają się bardzo szybko. Liczby cytowane przez producentów są bardzo mylące, ponieważ zakładają równomierny rozkład liczby zapisów. Istnieją systemy plików - takie jak JFFS2 - specjalnie zaprojektowane w celu przedłużenia żywotności dysków SSD.
symcbean
2
@symcbean - w przypadku współczesnych urządzeń flash, w dużej mierze nie stanowi to problemu. Wszystkie mają wbudowane funkcje kontroli zużycia we wbudowanych kontrolerach.
EEAA
1
@symcbean - Istnieją dwa rodzaje urządzeń flash. Urządzenia technologii pamięci (lub MTD) stanowią bezpośredni interfejs do pamięci flash. Zazwyczaj znajdują się one w urządzeniach osadzonych i są przeznaczone do takiego systemu plików, jak JFFS2. Drugi rodzaj urządzenia flash ukrywa pamięć flash za Flash Translation Later (FTL), aby wyglądała jak zwykłe urządzenie blokowe. W ten sposób wdrażane są technologie konsumenckie, takie jak dyski SSD, pamięci USB i karty pamięci. Systemy plików takie jak JFFS2 nie są dla nich odpowiednie; zamiast tego musisz użyć systemów plików takich jak ext4, które są przeznaczone dla urządzeń blokowych.
sciurus
1
UWAGA: Ext4 lifetime_write_kbytes i session_write_kbytes nie są reprezentatywne dla zapisów komórek pamięci SSD. Widziałem jeden raport systemowy 15 TB dla ext4 lifetime_write_kbytes, podczas gdy sam dysk SSD zgłosił tylko 1 TB za pomocą atrybutu SMART 241. Podejrzewam, że ext4 może dodawać cały rozmiar wolnej przestrzeni systemu plików do tych statystyk przy każdym uruchomieniu fstrim, nawet jeśli dysk SSD kontroler oczywiście nie kasowałby wielokrotnie wszystkich dostępnych bloków, gdyby nie zostały dotknięte od ostatniego kasowania. wyjście tune2fs -l wydaje się podobnie wprowadzać w błąd.
ʇsәɹoɈ
2

Można spróbować iostat. Daje ci statystyki związane z użytkowaniem IO i procesora. Zajrzyj do instrukcji man iostat.

Khaled
źródło
Przypuszczam, że to może zadziałać, ale miałem nadzieję, że istnieje coś wyższego poziomu, który mógłby zapewnić sumę bajtów łącznie :)
badnews 21.02.11
2

W moim KINGSTON SEDC400S37480G na Ubuntu Server 14.04 używam następującego skryptu do monitorowania TBW. Uruchamiam go z crona raz dziennie. Skrypt wyprowadza do pliku dziennika.

Potrzebujesz kalkulatora, aby działał. Zainstaluj program Calc, używając:

apt-get install apcalc

Treść skryptu:

echo "*** $(date -R) ***" >> /scripts/tbw/log.txt
tbw=$(cat /sys/fs/ext4/sda1/lifetime_write_kbytes)
TB=1000000000
echo TB written to sda1: >> /scripts/tbw/log.txt | calc $tbw / $TB >> /scripts/tbw/log.txt

Wyjdzie:

*** Thu, 20 Jul 2017 03:02:51 +0300 ***
TB written to sda1:
    3.062138442
inteq
źródło
Zamiast calc można użyć GNU bc
Elton Carvalho