Đo 'tổng số byte được viết' trong Linux


36

Chúng tôi khá thích khám phá khả năng sử dụng ổ SSD trong môi trường máy chủ. Tuy nhiên, một điều mà chúng ta cần thiết lập là mong muốn kéo dài tuổi thọ. Theo bài viết này, nhà sản xuất đang báo cáo độ bền của ổ đĩa theo 'tổng số byte được viết' (TBW). Ví dụ, từ bài viết đó, SSD C400 quan trọng được đánh giá ở mức 72TB TBW. Có bất kỳ tập lệnh / công cụ nào tồn tại trong hệ sinh thái Linux để giúp chúng tôi đo TBW không? (và sau đó đưa ra quyết định có học thức hơn về tính khả thi của việc sử dụng ổ SSD)

Câu trả lời:


28

Một khả năng khác là nhìn vào / Proc / dĩa . Nó không liên tục trong các lần khởi động lại, nhưng nó có dữ liệu cho mọi thiết bị khối. Có lẽ thú vị nhất với bạn là trường 10, trong đó có tổng số lĩnh vực được viết. Trên hệ thống có đĩa scsi có kích thước cung từ 512 byte, bạn có thể chạy

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

để xem có bao nhiêu megabyte được ghi vào mỗi thiết bị. Đầu ra sẽ như thế nào

sda 728.759
sda1 79.0908
sda2 649.668


4
Có thể tìm thấy kích thước cung cấp bằng cách chạy lệnh #cat / sys / block / sda / queue / hw_sector_size
Antonio

@Antonio cảm ơn! Tôi không chắc chắn khi nó được thêm vào. Có vẻ như nó nằm trong 3.2 nhưng không phải 2.6,18.
tọa

@sciurus bạn có thể giải thích toán học đằng sau các tính toán của bạn không? Bạn đang nói về kích thước của khu vực = 512 nhưng những tính toán của bạn được chia giá trị đọc với 2/1024
Gyre

@gyre Field 10 chứa số lượng 0,5 kilobyte ngành được viết. Tôi chia số đó cho 2 để lấy số kilobyte được viết. Sau đó tôi chia nó cho 1024 để chuyển đổi thành megabyte.
tọa

@antonio Đó không hiển thị kích thước khu vực được sử dụng với các phần cứng cơ bản, nhưng afaict từ nguồn hạt nhân, iostat nguồn, và kiểm tra thực nghiệm, các "thành phần" số trong / proc / diskstats luôn đề cập đến 512 byte, ngay cả khi hw_sector_sizelà khác nhau ( ít nhất là từ loạt 2.4). Xem block/cfq-iosched.c, đặc biệt cfqg_stats_update_dispatch().
paul

23

Tôi đã vật lộn với cùng một vấn đề trên máy tính xách tay của mình, nhưng khi tôi khởi động lại nó khá nhiều hàng ngày, câu trả lời được chấp nhận là không hữu ích. Tôi có SSD Samsung mSATA, tình cờ có thuộc tính SMART # 241 Total_LBAs_Written. Theo tài liệu chính thức ,

Để tính tổng kích thước (tính bằng byte), nhân giá trị thô của thuộc tính này với 512B.

Vì vậy, lệnh sau cung cấp cho tôi tổng số TB được ghi trên đĩa SSD (sdb)

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

Vì nó cũng hoạt động trên ổ cứng của tôi, tôi cho rằng nó sẽ hoạt động trên hầu hết mọi ổ cứng hiện đại.


3
Không, điều này chỉ tồn tại trên một số mẫu ổ SSD nhất định. Nó không phải là phổ quát.
Michael Hampton

3
Tôi muốn chỉ ra rằng phương trình của bạn thực sự tạo ra một số tắt, nó sẽ chính xác hơn như : sudo smartctl -A /dev/sda1 | awk '/^241/ { print "TBW: "($10 * 512) * 1.0e-12, "TB" }'.
Jordon Bedwell

Intel SSD của tôi có cùng thuộc tính nhưng được gọi là Host_Writes_32MiB. Ngoài ra còn có Thuộc tính 249 NAND_Writes_1GiB. Vì vậy, hãy lưu ý rằng trên mỗi SSD, điều này dường như khác nhau (ví dụ: SSD Intel mSATA của tôi không có các thuộc tính đó)
reox

Trên Intel SSD Pro 5400s (SATA) của tôi, Total_LBAs_Writtenđược chỉ định bằng GB! Không thể làm cho bất kỳ ý nghĩa của 4714thông minh thấp đã được hiển thị. Nhưng nhìn vào Hộp công cụ SSD Intel trong Windows cho thấy nó có GB.
MrCalvin

15

Bạn có thể thấy có bao nhiêu dữ liệu đã được ghi vào hệ thống tập tin ext4 bằng cách tìm trong / sys / fs / ext4 / $ DEVICE / life_write_kbytes.


Đó là một tính năng thú vị mà tôi không biết! Thật xấu hổ khi hầu hết các hệ thống của chúng tôi đang chạy ext3 và một số phân vùng LVM thô cho máy ảo :)
badnews

ext3 (và ở mức độ thấp hơn một chút) ext4 không được thiết kế để ghi vào flash. Lỗi sẽ xảy ra tùy thuộc vào số lần ghi vị trí - và với các hệ thống tệp thông thường, các điểm nóng phát triển rất nhanh. Các số liệu được trích dẫn bởi các nhà sản xuất là rất sai lệch vì họ cho rằng một sự lan truyền thậm chí của văn bản. Có các hệ thống tệp - chẳng hạn như JFFS2 - được thiết kế đặc biệt để kéo dài tuổi thọ của ổ SSD của bạn.
symcbean

2
@symcbean - với các thiết bị flash hiện nay, đây không phải là vấn đề. Tất cả đều có thói quen cân bằng độ mòn được tích hợp trong bộ điều khiển trên tàu.
EEAA

1
@symcbean - Có hai loại thiết bị flash. Thiết bị công nghệ bộ nhớ (hoặc MTD) trình bày giao diện trực tiếp với bộ nhớ flash. Chúng thường được tìm thấy trong các thiết bị nhúng và là hệ thống tập tin như JFFS2 được thiết kế cho. Một loại thiết bị flash khác ẩn bộ nhớ flash phía sau Bộ dịch Flash sau (FTL) để nó trông giống như một thiết bị khối thông thường. Đây là cách công nghệ tiêu dùng như SSD, thẻ nhớ USB và thẻ nhớ được triển khai. Các hệ thống tập tin như JFFS2 không thích hợp cho các hệ thống này; thay vào đó, bạn phải sử dụng các hệ thống tập tin như ext4 được thiết kế cho các thiết bị khối.
tọa

1
BEWARE: ext4 life_write_kbytes và session_write_kbytes không phải là đại diện cho ghi bộ nhớ tế bào SSD. Tôi đã thấy một hệ thống báo cáo 15TB cho ext4 life_write_kbytes, trong khi bản thân SSD chỉ báo cáo 1TB thông qua thuộc tính SMART 241. Tôi nghi ngờ ext4 có thể thêm toàn bộ kích thước của không gian trống của hệ thống tệp vào các thống kê đó mỗi khi fstrim chạy, mặc dù SSD Bộ điều khiển rõ ràng sẽ không lặp lại xóa tất cả các khối có sẵn nếu chúng không bị chạm kể từ lần xóa cuối cùng. đầu ra Tune2fs -l có vẻ sai lệch tương tự.
ʇsәɹoɈ

2

Bạn có thể thử iostat. Nó cung cấp cho bạn số liệu thống kê liên quan đến việc sử dụng IO và CPU. Có một cái nhìn vào hướng dẫn man iostat.


Tôi cho rằng nó có thể hoạt động nhưng tôi đã hy vọng có một thứ gì đó ở cấp độ cao hơn có thể cung cấp tổng số byte tích lũy :)
badnews

2

Đối với KINGoston SEDC400S37480G của tôi, trong Ubuntu Server 14.04, tôi sử dụng tập lệnh sau để theo dõi TBW. Tôi chạy nó từ cron một lần mỗi ngày. Kịch bản xuất ra một tệp nhật ký.

Bạn cần calc cho nó hoạt động. Cài đặt calc bằng cách sử dụng:

apt-get install apcalc

Nội dung kịch bản:

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

Sẽ xuất:

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

Thay vì calc, người ta có thể sử dụng GNU bc
Elton Carvalho
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.