AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 865792
Accepted
You'reAGitForNotUsingGit
You'reAGitForNotUsingGit
Asked: 2016-12-30 06:30:56 +0800 CST2016-12-30 06:30:56 +0800 CST 2016-12-30 06:30:56 +0800 CST

如何监控三星 SSD 上的 TBW?

  • 772

众所周知,SSD 在 NAND 单元死亡之前具有有限数量的 PE(编程擦除)周期。

因此,了解已将多少数据写入您的 SSD 非常有帮助,以便确定在 NAND 死亡之前它将持续多长时间。

我有一个三星 850 Pro 512GB SSD,我正在运行 Ubuntu 14.04。

如何获得驱动器的 TBW(总写入字节数)?

ssd
  • 4 4 个回答
  • 39370 Views

4 个回答

  • Voted
  1. Best Answer
    You'reAGitForNotUsingGit
    2016-12-30T06:30:56+08:002016-12-30T06:30:56+08:00

    完整披露:此答案中出现的 scipt/commands 不是我自己的,而是 JDG Leaver 的工作。它们来自他网站上的一篇博文。


    注意:

    • 这只会报告三星 SSD 的准确数字。
    • 您需要smartctl从包中安装smartmontools。

    方法一:

    这是一个方便的小脚本,可让您监控 SSD 的 TBW,以及其他一些信息:

    #!/bin/bash
    
    #######################################
    # Variables                           #
    #######################################
    
    SSD_DEVICE="/dev/sda"
    
    ON_TIME_TAG="Power_On_Hours"
    WEAR_COUNT_TAG="Wear_Leveling_Count"
    LBAS_WRITTEN_TAG="Total_LBAs_Written"
    LBA_SIZE=512 # Value in bytes
    
    BYTES_PER_MB=1048576
    BYTES_PER_GB=1073741824
    BYTES_PER_TB=1099511627776
    
    #######################################
    # Get total data written...           #
    #######################################
    
    # Get SMART attributes
    SMART_INFO=$(sudo /usr/sbin/smartctl -A "$SSD_DEVICE")
    
    # Extract required attributes
    ON_TIME=$(echo "$SMART_INFO" | grep "$ON_TIME_TAG" | awk '{print $10}')
    WEAR_COUNT=$(echo "$SMART_INFO" | grep "$WEAR_COUNT_TAG" | awk '{print $4}' | sed 's/^0*//')
    LBAS_WRITTEN=$(echo "$SMART_INFO" | grep "$LBAS_WRITTEN_TAG" | awk '{print $10}')
    
    # Convert LBAs -> bytes
    BYTES_WRITTEN=$(echo "$LBAS_WRITTEN * $LBA_SIZE" | bc)
    MB_WRITTEN=$(echo "scale=3; $BYTES_WRITTEN / $BYTES_PER_MB" | bc)
    GB_WRITTEN=$(echo "scale=3; $BYTES_WRITTEN / $BYTES_PER_GB" | bc)
    TB_WRITTEN=$(echo "scale=3; $BYTES_WRITTEN / $BYTES_PER_TB" | bc)
    
    # Output results...
    echo "------------------------------"
    echo " SSD Status:   $SSD_DEVICE"
    echo "------------------------------"
    echo " On time:      $(echo $ON_TIME | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta') hr"
    echo "------------------------------"
    echo " Data written:"
    echo "           MB: $(echo $MB_WRITTEN | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')"
    echo "           GB: $(echo $GB_WRITTEN | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')"
    echo "           TB: $(echo $TB_WRITTEN | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')"
    echo "------------------------------"
    echo " Mean write rate:"
    echo "        MB/hr: $(echo "scale=3; $MB_WRITTEN / $ON_TIME" | bc | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')"
    echo "------------------------------"
    echo " Drive health: ${WEAR_COUNT} %"
    echo "------------------------------"
    

    这是输出示例:

    ------------------------------
     SSD Status:   /dev/sda
    ------------------------------
     On time:      2 hr
    ------------------------------
     Data written:
               MB: 25,098.917
               GB: 24.510
               TB: .023
    ------------------------------
     Mean write rate:
            MB/hr: 12,549.458
    ------------------------------
     Drive health: 100 %
    ------------------------------
    

    这个数据是准确的,因为我刚刚安装了我的新 850 Pro。


    方法二:

    或者,这是仅获取 TBW 的单行代码:

    echo "GB Written: $(echo "scale=3; $(sudo /usr/sbin/smartctl -A /dev/sda | grep "Total_LBAs_Written" | awk '{print $10}') * 512 / 1073741824" | bc | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')"
    
    • 30
  2. Daniel
    2020-11-06T19:14:46+08:002020-11-06T19:14:46+08:00

    如何查找信息

    我们可以用smartctlTBW 来求值。

    1. 安装smartctl_$ sudo apt install smartmontools

    2. 获取在这种情况下为设备写入的扇区大小和LBA$ sudo smartctl -Ai /dev/sda/dev/sda

    3. 一些数学:[sector size] * [LBA written] / 1024^3 = X GiB写到现在

    设备 /dev/sda 的示例

    $ sudo smartctl -Ai /dev/sda | grep -E 'Sector Size|Total_LBAs_Written'
    Sector Size:      512 bytes logical/physical
    241 Total_LBAs_Written      0x0032   099   099   000    Old_age   Always       -       1214641768
    
    $ calc 1214641768*512/1024^3
        579.186328887939453125
    

    在这种情况下,扇区大小为 512 字节,这是常见的,写入的总 LBA 为 1214641768。结果是到目前为止写入了 579 GiB。这是有道理的,因为该驱动器相对较新。

    命令calc可以安装$ sudo apt install calc或使用其他东西。

    更多信息

    该命令$ sudo smartctl -A /dev/sda提供有关“供应商特定 SMART 属性”的信息,这意味着您的驱动器显示的内容可能与此不同。在示例中,我使用了具有所需信息的三星 SSD。


    金士顿固态硬盘

    根据@JuliSmz 在他们的评论中所说的以及这个 PDF,我怀疑Total_LBAs_Written(至少有一些)金士顿 SSD 返回的已经是 GB。

    在 PDF 的最后一页查找 id 241。它说:

    说明:指示主机系统在驱动器生命周期内写入驱动器的字节数(以 1 GB 分辨率)。

    基本原理:此属性返回字节计数,以 GB 为单位,更新分辨率为 1 GB。计数表示写入的字节数。Attribute读取0,直到写入的字节数达到1GB;在额外的 GB 处,属性增加到1(十进制)的值。

    注意:早于 520ABBF0 的客户端固件和早于 510ABBF0 的企业固件在将 64GB 数据写入驱动器之前不会更新分辨率。

    • 7
  3. Steve C
    2018-11-06T05:59:57+08:002018-11-06T05:59:57+08:00

    Crucial SSD 剩余寿命

    有关 Crucial 英睿达 SSD 剩余寿命百分比,请参阅

    https://www.crucial.com/support/articles-faq-ssd/ssds-and-smart-data

    该文档将 202 标识为 Percent Lifetime Remaining。作为 Ubuntu 16.04 的示例(sudo smartctl /dev/sda1 -a)(smartmontools 的一部分)报告 202 为未知,但值 90 表示剩余 90% 的寿命。在 Ubuntu 20.04 上,Lifetime Remaining 被识别并正确列出

    • 6
  4. Ярослав Рахматуллин
    2019-03-01T04:30:27+08:002019-03-01T04:30:27+08:00

    接受的答案有臃肿的输出,太多无用的脚本向导,并隐藏了初始参数名称smartctl。这是一个更好的版本;

    #!/bin/bash
    
    device=${1:-/dev/sda}
    sudo smartctl -A $device |awk '
    $0 ~ /Power_On_Hours/ { poh=$10; printf "%s / %d hours / %d days / %.2f years\n",  $2, $10, $10 / 24, $10 / 24 / 365.25 }
    $0 ~ /Total_LBAs_Written/ {
        lbas=$10;
        bytes=$10 * 512;
        mb= bytes / 1024^2;
        gb= bytes / 1024^3;
        tb= bytes / 1024^4;
        printf "%s / %s  / %d mb / %.1f gb / %.3f tb\n", $2, $10, mb, gb, tb
        printf "mean writes per hour:  / %.2f",  mb/poh
    }
    $0 ~ /Airflow_Temperature_Cel/ { print $2 " / " $10}
    $0 ~ /Wear_Leveling_Count/ { printf "%s / %d (%% health)\n", $2, int($4) }
    ' |
        sed -e 's:/:@:' |
        sed -e "s\$^\$$device @ \$" |
        column -ts@
    

    样本输出:

    $ for i in /dev/sd{a,b,c,d}; do ssd-tbw $i;done   |sort -k2,2
    /dev/sda    Airflow_Temperature_Cel    49
    /dev/sdb    Airflow_Temperature_Cel    49
    /dev/sdc    Airflow_Temperature_Cel    45
    /dev/sdd    Airflow_Temperature_Cel    47
    /dev/sda    mean writes per hour:      655.80
    /dev/sdb    mean writes per hour:      646.97
    /dev/sdc    mean writes per hour:      874.49
    /dev/sdd    mean writes per hour:      733.95
    /dev/sda    Power_On_Hours             27292 hours / 1137 days / 3.11 years
    /dev/sdb    Power_On_Hours             27300 hours / 1137 days / 3.11 years
    /dev/sdc    Power_On_Hours             14432 hours / 601 days / 1.65 years
    /dev/sdd    Power_On_Hours             23255 hours / 968 days / 2.65 years
    /dev/sda    Total_LBAs_Written         36655329806  / 17898110 mb / 17478.6 gb / 17.069 tb
    /dev/sdb    Total_LBAs_Written         36172538301  / 17662372 mb / 17248.4 gb / 16.844 tb
    /dev/sdc    Total_LBAs_Written         25846999325  / 12620605 mb / 12324.8 gb / 12.036 tb
    /dev/sdd    Total_LBAs_Written         34955224738  / 17067980 mb / 16668.0 gb / 16.277 tb
    /dev/sda    Wear_Leveling_Count        93 (% health)
    /dev/sdb    Wear_Leveling_Count        93 (% health)
    /dev/sdc    Wear_Leveling_Count        95 (% health)
    /dev/sdd    Wear_Leveling_Count        94 (% health)
    

    和单线

    $ sudo /usr/sbin/smartctl -A /dev/sda | 
         awk '$0~/LBAs/{ printf "TBW %.1f\n", $10 * 512 / 1024^4 }'
    TBW 17.1
    
    • 4

相关问题

  • 如何随时间记录我的 SSD 的读取性能?

  • 自 10.10 起适用于 SSD 的最佳 FS [重复]

  • 有没有办法强制特定文件仅存在于 RAM 中?

  • 如何优化 SSD 的操作系统?

  • Ubuntu 是否支持与 SSD 一起使用的 TRIM 命令?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve