笔者在文章-四种方法查看树莓派CPU温度中,用python查看树莓派温度和状态的程序,其中有一段python程序读取磁盘空间ospopen("df -h /") ,df -h /读取整个磁盘的使用情况。
这一次笔者在书籍上看到一个脚本,颇具意义。脚本完成磁盘检查,并打印出使用量位居前十位,生成报告rpt。命令 du -hs /root 可以查看目录的整体使用情况,du -hs /root/可以查看目录一级的整体使用情况,输出统计信息,快速定位问题根源。
同时关于df与du,df是显示磁盘分区上可以使用的磁盘空间,du是显示已经使用的空间。
为了找出占用磁盘空间最多的目录,可以使用sort命令来排序,-r是允许数字排序,-n是逆序排序。
du -hs /root/ | sort -rn
sed编辑器可以对输出内容进行赛选,只选择前四行内容,并添加行号。最后使用gawk格式化输出。
du -hs /root/ | sort -rn | sed '{5,$D; =}' | sed 'N; s/\n/ /' | awk '{printf $1 ":" "\t" $2 "\t" $3 "\n"}'
现在来看看脚本big_userssh,脚本循环检测CHECK_DIRECTORIES中的目录,然后执行 du -S $DIR_CHECK 打印格式化输出磁盘使用情况。exec命令是打开文件outfilename作为stdout,即输出重定向。
#!/bin/bash
#
# Big_Users - Find big disk space users in various directories
###############################################################
# Parameters for Script
#
CHECK_DIRECTORIES=" /var /root" #Directories to check
#
############## Main Script #################################
#
DATE=$(date '+%m%d%y') #Date for report file
#
exec > disk_space_$DATErpt #Make report file STDOUT
#
echo "Top Ten Disk Space Usage" #Report header
echo "for $CHECK_DIRECTORIES Directories"
#
for DIR_CHECK in $CHECK_DIRECTORIES #Loop to du directories
do
echo ""
echo "The $DIR_CHECK Directory:" #Directory header
#
# Create a listing of top ten disk space users in this dir
du -S $DIR_CHECK 2>/dev/null |
sort -rn |
sed '{11,$D; =}' |
sed 'N; s/\n/ /' |
gawk '{printf $1 ":" "\t" $2 "\t" $3 "\n"}'
#
done #End of loop
#
exit
运行 /big_userssh后生成的报告:
top命令的其他参数代表的含义详见top命令详解
sar 命令是分析系统瓶颈的神器,可以用来查看 CPU 、内存、磁盘、网络等性能。
sar 命令查看当前磁盘性能的命令为:
当有新的硬件设备加载到linux系统上的时候,linux系统会自动刷新一条日志信息到dmesg里面。你可以在刚插入U盘的时候,立即执行dmesg命令,然后就能看到这个条日志记录,可以看到U盘对应的盘符。
根据这个思路,你可以通过shell脚本监控这个日志,只要有磁盘设备更新,就取得它的盘符。假设这里是/dev/sdg,获取到盘符以后,再使用命令
fdisk -l /dev/sdg
就可以输出这个磁盘的容量信息以及剩余空间的大小,通过字符串查找把对应的值提取出来即可。
基本思路就是这个,不知道我说清楚了没有,希望可以帮助到你。
import javaioFile;
/
jdk60下的磁盘使用情况例子
/
public class Diskfree {
public static void main(String[] args) {
File[] roots = FilelistRoots();//获取磁盘分区列表
for (File file : roots) {
Systemoutprintln(filegetPath()+"信息如下:");
Systemoutprintln("空闲未使用 = " + filegetFreeSpace()/1024/1024/1024+"G");//空闲空间
Systemoutprintln("已经使用 = " + filegetUsableSpace()/1024/1024/1024+"G");//可用空间
Systemoutprintln("总容量 = " + filegetTotalSpace()/1024/1024/1024+"G");//总空间
Systemoutprintln();
}
}
}
使用Python获取电脑的磁盘信息需要借助于第三方的模块psutil,这个模块需要自己安装,纯粹的CPython下面不具备这个功能。
在iPython交互界面中进行如下演示:
查看电脑的磁盘分区:
In [1]: import psutil
In [2]: psutildisk_partitions()
Out[2]: [sdiskpart(device='/dev/disk2', mountpoint='/', fstype='hfs', opts='rw,local,rootfs,dovolfs,journaled,multilabel')]
In [3]: len(psutildisk_partitions())
Out[3]: 1
从上面的结果看出,电脑只有一个分区。针对最后的结果专门通过判断字典的元素个数来确认了一下。
查看电脑的磁盘使用百分比:
In [4]: psutildisk_usage('/')
Out[4]: sdiskusage(total=1114478608384, used=305497878528, free=808718585856, percent=274)
相对来说还好,新电脑使用时间还不是很长,硬盘暂时还没有塞满。总共用了大约274%。
查看电脑磁盘的IO计数:
In [5]: psutildisk_io_counters()
Out[5]: sdiskio(read_count=112237L, write_count=99750L, read_bytes=5243863040L, write_bytes=7047483392L, read_time=80568L, write_time=138699L)
In [7]: psutildisk_io_counters(perdisk=True)
Out[7]:
{'disk0': sdiskio(read_count=103533L, write_count=86260L, read_bytes=5120090624L, write_bytes=4813373440L, read_time=29774L, write_time=27654L),
'disk1': sdiskio(read_count=8740L, write_count=13723L, read_bytes=124141056L, write_bytes=2237206528L, read_time=50840L, write_time=111871L)}
上面分别使用了两种方式,第一种方式是获取磁盘总的IO信息,第二种是查看电脑分区的磁盘信息。从结果上来看,信息的统计不是按照逻辑分区来统计的,而是按照物理磁盘来统计的。我的电脑上正好是有两块磁盘,一块机械硬盘还有一块固态硬盘,其实这个按照物理磁盘进行统计的说法是根据这个推断出来的。
Copyright © 1999-2020, CSDNNET, All Rights Reserved

打开APP

Linux 查看磁盘IO 转载
2022-09-08 11:04:57

小百菜 
码龄9年
关注
查看命令iostat,# 如果没有 iostat 命令,那么使用 yum install sysstat 进行安装
#间隔1秒,查询10次
iostat -x 1 10

由上图可知,vdb磁盘的 %utilIO几乎都在100%,原因是频繁的读取数据造成的。
其他字段说明
Device:设备名称
tps:每秒的IO读、写请求数量,多个逻辑请求可以组合成对设备的单个I/O请求。
Blk_read/s (kB_read/s, MB_read/s):从设备读取的数据量,以每秒若干块(千字节、兆字节)表示。块相当于扇区,因此块大小为512字节。
Blk_wrtn/s (kB_wrtn/s, MB_wrtn/s):写入设备的数据量,以每秒若干块(千字节、兆字节)表示。块相当于扇区,因此块大小为512字节。
Blk_read (kB_read, MB_read):读取块的总数(千字节、兆字节)。
Blk_wrtn (kB_wrtn, MB_wrtn):写入块的总数(千字节,兆字节)。
rrqm/s:每秒合并到设备的读请求数。即delta(rmerge)/s
wrqm/s:每秒合并到设备的写入请求数。即delta(wmerge)/s
r/s:每秒完成的读I/O设备次数。即delta(rio)/s
w/s:每秒完成的写I/0设备次数。即delta(wio)/s
rsec/s (rkB/s, rMB/s):每秒读取设备的扇区数(千字节、兆字节)。每扇区大小为512字节
wsec/s (wkB/s, wMB/s):每秒写入设备的扇区数(千字节、兆字节)。每扇区大小为512字节
avgrq-sz:平均每次设备I/O *** 作的数据量(扇区为单位)。即delta(rsec+wsec)/delta(rio+wio)
avgqu-sz:平均每次发送给设备的I/O队列长度。
IO实际上是计算机用语,也写作I/O,指输入/输出(Input/Output)。硬盘IO就是指对字节的读取速度,即硬盘的读写能力。
扩展资料
I/O输入/输出(Input/Output),分为IO设备和IO接口两个部分。在POSIX兼容的`系统上,例如Linux系统,I/O *** 作可以有多种方式,比如DIO(DirectI/O),AIO(AsynchronousI/O,异步I/O),Memory-MappedI/O(内存映射I/O)等,不同的I/O方式有不同的实现方式和性能,在不同的应用中可以按情况选择不同的I/O方式。
以上就是关于Shell脚本完成用户磁盘空间监测报告全部的内容,包括:Shell脚本完成用户磁盘空间监测报告、Linux如何查看与测试磁盘IO性能、如何使用shell脚本, 当U盘挂载到Linux系统上时, 自动获取U盘大小和剩余的空间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)