Mengukur 'total byte yang ditulis' di Linux


36

Kami cukup tertarik menjelajahi kemungkinan menggunakan drive SSD di lingkungan server. Namun, satu hal yang perlu kita tegaskan adalah umur panjang yang diharapkan. Menurut artikel ini, pabrikan melaporkan daya tahan drive dalam hal 'total byte tertulis' (TBW). Misalnya dari artikel itu, SSD C400 Krusial memiliki peringkat TBW 72TB. Apakah ada skrip / alat di bawah ekosistem Linux untuk membantu kami mengukur TBW? (dan kemudian membuat keputusan yang lebih berpendidikan tentang kelayakan menggunakan drive SSD)

Jawaban:


28

Kemungkinan lain adalah dengan melihat / proc / diskstats . Ini tidak persisten di seluruh reboot, tetapi memiliki data untuk setiap perangkat blok. Mungkin yang paling menarik bagi Anda adalah bidang 10, yang berisi jumlah total sektor yang ditulis. Pada sistem dengan disk scsi dengan ukuran sektor 512 byte, Anda dapat menjalankannya

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

untuk melihat berapa megabita yang ditulis untuk setiap perangkat. Outputnya akan terlihat seperti

sda 728.759
sda1 79.0908
sda2 649.668


4
Ukuran sektor dapat ditemukan dengan menjalankan perintah #cat / sys / block / sda / queue / hw_sector_size
Antonio

@Antonio terima kasih! Saya tidak yakin kapan itu ditambahkan. Sepertinya itu dalam 3.2 tetapi tidak 2.6.18.
sciurus

@sciurus, bisakah Anda menjelaskan perhitungan di balik perhitungan? Anda sedang berbicara tentang ukuran sektor = 512 tetapi perhitungan Anda membagi nilai baca dengan 2/1024
gyre

@gyre Field 10 berisi jumlah sektor 0,5 kilobyte yang ditulis. Saya membaginya dengan 2 untuk mendapatkan jumlah kilobyte yang ditulis. Saya kemudian membaginya dengan 1024 untuk mengkonversi ke megabyte.
sciurus

@antonio Itu memang menunjukkan ukuran sektor yang digunakan dengan perangkat keras yang mendasarinya, tetapi akibat dari sumber kernel, sumber iostat, dan tes empiris, angka "sektor" di / proc / diskstats selalu mengacu pada 512 byte, bahkan ketika hw_sector_sizeberbeda ( setidaknya sejak seri 2.4). Lihat block/cfq-iosched.c, khususnya cfqg_stats_update_dispatch().
the paul

23

Saya kesulitan dengan masalah yang sama pada notebook saya, tetapi karena saya reboot setiap hari, jawaban yang diterima tidak membantu. Saya memiliki Samsung mSATA SSD, yang kebetulan memiliki atribut SMART # 241 Total_LBAs_Written. Menurut dokumentasi resmi ,

Untuk menghitung ukuran total (dalam Bytes), kalikan nilai mentah atribut ini dengan 512B.

Jadi perintah berikut memberi saya total TB yang ditulis pada disk SSD saya (sdb)

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

Karena ini juga berfungsi pada HDD saya, saya berasumsi bahwa itu harus bekerja pada hampir setiap hard disk modern.


3
Tidak, ini hanya ada pada model drive SSD tertentu. Itu tidak universal.
Michael Hampton

3
Saya ingin menunjukkan bahwa persamaan Anda benar-benar menghasilkan angka yang tidak aktif itu akan lebih akurat sebagai: sudo smartctl -A /dev/sda1 | awk '/^241/ { print "TBW: "($10 * 512) * 1.0e-12, "TB" }'.
Jordon Bedwell

Intel Intel SSD saya memiliki atribut yang sama tetapi namanya Host_Writes_32MiB. Juga ada Atribut 249 NAND_Writes_1GiB. Jadi ketahuilah bahwa pada setiap SSD hal ini tampaknya berbeda (mis. SSD mSATA Intel SSD saya tidak memiliki atribut-atribut itu)
reox

Pada Intel SSD Pro 5400s (SATA) saya, Total_LBAs_Writtenditentukan dalam GB! Tidak bisa membuat akal rendah rendah 4714sedang ditampilkan. Tetapi melihat di Intel SSD Toolbox di Windows menunjukkan itu dalam GB.
MrCalvin

15

Anda dapat melihat berapa banyak data yang telah ditulis ke sistem file ext4 dengan melihat / sys / fs / ext4 / $ PERANGKAT / lifetime_write_kbytes.


Itu fitur keren yang saya tidak tahu! Sayang sekali sebagian besar sistem kami menjalankan ext3 dan juga beberapa partisi LVM mentah untuk VM :)
badnews

ext3 (dan sedikit lebih rendah) ext4 tidak dirancang untuk menulis ke flash. Kegagalan akan terjadi tergantung pada berapa kali lokasi ditulis - dan dengan sistem file konvensional, hotspot berkembang sangat cepat. Angka-angka yang dikutip oleh produsen sangat menyesatkan karena mereka menganggap penyebaran tulisan yang merata. Ada filesystem - seperti JFFS2 - yang dirancang khusus untuk memperpanjang umur SSD Anda.
symcbean

2
@symcbean - dengan perangkat flash saat ini, ini sebagian besar bukan masalah. Mereka semua memiliki rutinitas level-aus yang terpasang pada pengendali on board mereka.
EEAA

1
@symcbean - Ada dua jenis perangkat flash. Perangkat Teknologi Memori (atau MTD) menghadirkan antarmuka langsung ke memori flash. Ini biasanya ditemukan di perangkat yang disematkan dan untuk apa filesystem seperti JFFS2 dirancang. Jenis lain dari perangkat flash menyembunyikan memori flash di belakang Flash Translation Later (FTL) sehingga terlihat seperti perangkat blok biasa. Ini adalah bagaimana teknologi konsumen seperti SSD, stik usb, dan kartu memori diimplementasikan. Filesystem seperti JFFS2 tidak sesuai untuk ini; sebagai gantinya, Anda harus menggunakan sistem file seperti ext4 yang dirancang untuk memblokir perangkat.
sciurus

1
WASPADALAH: ext4 lifetime_write_kbytes dan session_write_kbytes tidak mewakili penulisan sel memori SSD. Saya telah melihat satu sistem melaporkan 15TB untuk ext4 lifetime_write_kbytes, sedangkan SSD itu sendiri melaporkan hanya 1TB melalui atribut SMART 241. Saya menduga ext4 mungkin menambahkan seluruh ukuran ruang bebas sistem file ke statistik tersebut setiap kali fstrim berjalan, meskipun SSD controller jelas tidak akan berulang kali menghapus semua blok yang tersedia jika belum disentuh sejak penghapusan terakhir. Output tune2fs -l tampaknya juga menyesatkan.
ʇsәɹoɈ

2

Anda bisa mencoba iostat. Ini memberi Anda statistik terkait dengan penggunaan IO dan CPU. Lihatlah manualnya man iostat.


Saya kira itu bisa bekerja tetapi saya berharap ada sesuatu tingkat yang lebih tinggi tersedia yang dapat memberikan total byte kumulatif :)
badnews

2

Untuk KINGSTON SEDC400S37480G saya, di bawah Ubuntu Server 14.04, saya menggunakan skrip berikut untuk memantau TBW. Saya menjalankannya dari cron sekali setiap hari. Script output ke file log.

Anda perlu menghitung agar bisa berfungsi. Instal calc menggunakan:

apt-get install apcalc

Konten skrip:

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

Akan menampilkan:

*** Thu, 20 Jul 2017 03:02:51 +0300 ***
TB written to sda1:
    3.062138442

Alih-alih menghitung, orang dapat menggunakan GNU bc
Elton Carvalho
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.