1. 场景还原
mac使用久了,我想查看磁盘的写入量和寿命,记录一下查看方法。
系统环境: macOS 14.4.1
电脑配置:MacBook Pro 16英寸 M1 Pro
2. 查看步骤
安装Homebrew
我们要借助Homebrew安装一个叫"smartmontools"的软件,如果你已安装Homebrew请跳过此步骤。
打开终端或者iterm输入以下命令,按照提示安装:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
安装smartmontools
brew install smartmontools
运行命令
smartctl -a disk0 | awk '/SMART\/Health Information/,/^$/'
命令解释:
smartctl: 运行 smartctl 工具的命令。
-a: smartctl 命令的一个参数,指示它显示硬盘的所有可用 S.M.A.R.T. 属性和信息。即,显示硬盘的详细健康状态报告。
disk0: 目标硬盘的标识符。在这个命令中,"disk0" 是硬盘的名称或标识符,可以是系统中硬盘的设备名称或其他标识符,具体取决于操作系统和硬件配置。
|: 这是管道符号,将
smartctl -a disk0
的输出传递给下一个命令。awk: 这是一个用于处理文本数据的强大工具。在这个命令中,我们使用
awk
来处理smartctl
的输出。'/SMART/Health Information/,/^$/': 这是
awk
命令的模式和动作部分。模式部分由两个正则表达式构成,它们用逗号分隔。第一个正则表达式/SMART\/Health Information/
是起始模式,用于匹配包含 "SMART/Health Information" 的行。第二个正则表达式/^$/
是结束模式,用于匹配空行。动作部分: 在模式匹配时执行的动作。在这个命令中,
awk
将会从匹配到的起始模式开始打印输出,并在遇到结束模式(空行)时停止打印。
如何确认当前系统挂载的分区或启动的磁盘标志符?
打开终端运行下面的命令:
diskutil list | grep \* -m 1
如下图所示,最后的disk0即为启动磁盘标志符
如果你要查看别的磁盘,请运行下面的命令查找磁盘标志符(输出结果最后一列IDENTIFIER)
diskutil list
分析输出结果
运行上面的命令后,会得到以下输出,其中的Percentage Used(磁盘使用百分比)和Data Units Written(磁盘写入量)就是我们要关注的值:
SMART/Health Information (NVMe Log 0x02) Critical Warning: 0x00 #严重警告。此处值为 0x00,表示没有严重警告。 Temperature: 33 Celsius #温度。当前温度为 33 摄氏度 Available Spare: 100% #可用备用空间。当前可用备用空间为 100%。 Available Spare Threshold: 99% #可用备用空间阈值。当前可用备用空间阈值为 99%。当可用备用空间低于此阈值时,可能会出现警告。 Percentage Used: 2% #使用百分比。当前使用了 2% 的存储器容量 Data Units Read: 91,207,805 [46.6 TB] #读取的数据单元数量。当前已读取 91,207,805 个数据单元,相当于 46.6 TB 的数据量。 Data Units Written: 95,333,096 [48.8 TB] #写入的数据单元数量。当前已写入 95,333,096 个数据单元,相当于 48.8 TB 的数据量。 Host Read Commands: 2,236,552,092 #主机读命令数量。当前已执行 2,236,552,092 条主机读命令。 Host Write Commands: 1,626,904,490 #主机写命令数量。当前已执行 1,626,904,490 条主机写命令。 Controller Busy Time: 0 #控制器忙碌时间 Power Cycles: 349 #电源循环次数。当前已进行了 349 次电源循环。 Power On Hours: 1,237 #上电时间。当前已经上电运行了 1,237 小时。 Unsafe Shutdowns: 10 #不安全的关闭次数。当前发生了 10 次不安全的关闭。 Media and Data Integrity Errors: 0 #媒体和数据完整性错误。当前没有发生媒体和数据完整性错误。 Error Information Log Entries: 0 #媒体和数据完整性错误。当前没有发生媒体和数据完整性错误。
3. 拓展知识
Smartmontools
Smartmontools 是一组用于监控存储设备健康状态的开源软件。它主要用于监控和分析支持 S.M.A.R.T.(Self-Monitoring, Analysis and Reporting Technology)的存储设备,比如硬盘和固态硬盘(SSD)。S.M.A.R.T. 是一种由硬盘制造商提供的技术,用于检测硬盘的健康状况,并提前警告用户可能的硬盘故障
Smartmontools 软件包括两个主要工具:
smartctl: 这是一个命令行工具,用于读取和解释存储设备的 S.M.A.R.T. 数据。它可以提供硬盘的各种参数,如温度、错误率、剩余寿命等。通过 smartctl,用户可以定期检查硬盘的健康状态,及时发现潜在的故障。
smrtctl的参数:
-a, --all: 显示所有可用的 S.M.A.R.T. 属性和信息。
-H, --health: 显示硬盘的健康状态。
-i, --info: 显示硬盘的基本信息,如型号、序列号等。
-l selftest, --selftest: 显示硬盘自检的结果。
-t test_type, --test= test_type: 执行指定类型的硬盘自检,test_type 可以是 short、long 或 conveyance。
-c, --capabilities: 显示硬盘支持的 S.M.A.R.T. 功能和自检选项。
-d type, --device=type: 指定硬盘接口类型,如 ata、scsi、sat 等。
-q, --quietmode=errorsonly: 以安静模式运行,只显示错误信息。
-a, --nocheck=errorsonly: 只显示关键错误信息。
-l error[,read], --log=error[,read]: 显示硬盘的错误日志,可选择是否显示读取错误日志。
-l xerror[,read], --xall=error[,read]: 显示扩展错误日志,包括读取错误日志。
-t select[,select], --select=select[,select]: 显示指定的 S.M.A.R.T. 属性。
-r ioctl[,dev], --report=ioctl[,dev]: 显示指定的 IOCTL 命令的输出。
smartd: 这是一个守护进程,用于在后台运行并监视存储设备的健康状况。它可以配置成在检测到硬盘问题时发送警报邮件或执行其他操作,以便及时采取措施。
smartd的参数:
-d, --debug: 开启调试模式,输出更详细的调试信息。
-i n, --interval=n: 指定监测硬盘的时间间隔(以分钟为单位)。
-l facility, --logfacility=facility: 指定日志记录的设施。
-n, --nocheck: 不进行初始的 S.M.A.R.T. 检查。
-p, --pidfile=file: 指定 pid 文件的路径,用于记录 smartd 进程的 PID。
-s (l|w|r|n|a) [ , [l|w|r|n|a]]: 指定硬盘状态发生改变时的警报方式。l 表示日志记录,w 表示发送警报邮件,r 表示重新启动系统,n 表示无动作,a 表示执行所有操作。
-t, --test: 在启动时进行一次 S.M.A.R.T. 检查,然后退出。
-m address, --mailto=address: 指定接收警报邮件的地址。
-M exec command, --exec=command: 指定在硬盘状态改变时执行的命令。
-R, --nocheck=errorsonly: 以错误模式运行,只检查关键错误。
-u, --shutdown: 在硬盘状态改变时关闭系统。
Smartmontools 可以在多种操作系统上运行,包括 Linux、FreeBSD、Windows 等,并且支持各种硬盘接口,如 SATA、IDE、SCSI 等。它是一个非常有用的工具,可以帮助用户及时了解硬盘的健康状况,以预防数据丢失和硬盘损坏。