Shell脚本完成用户磁盘空间监测报告

Shell脚本完成用户磁盘空间监测报告,第1张

    笔者在文章-四种方法查看树莓派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盘大小和剩余的空间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9801734.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存