记录工作-Linux脚本-未挂载磁盘检测

本文介绍了一个Linux脚本,用于检测虚拟机中未被挂载、未分区且未做pv的磁盘资源。脚本首先根据操作系统版本获取主机IP,然后遍历磁盘,判断是否存在未挂载且未做分区的情况,记录相关信息到日志文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

脚本背景:需要批量跑脚本检查虚拟机未使用的磁盘资源,缓解资源池压力。

脚本检测项目(目前想到的):磁盘未被挂载,磁盘未分区,且磁盘未做pv视为未使用磁盘。

入参:无

脚本如下:

#!/bin/sh
#获取当前机器磁盘

#操作系统版本号
if grep -q 'CentOS.*.release 6.*\.' /etc/redhat-release; then
os_release=el6
elif grep -q 'CentOS.*.release 7.*\.' /etc/redhat-release; then
os_release=el7
elif grep -q 'Red Hat.*.release 6.*\.' /etc/redhat-release; then
os_release=el6
elif grep -q 'Red Hat.*.release 7.*\.' /etc/redhat-release; then
os_release=el7
fi
#本机ip
if [[ "$os_release" == "el6" ]];then
CHECK_IP=`ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'|head -1`
elif [[ "$os_release" == "el7" ]];then
CHECK_IP=`ifconfig |grep netmask|grep -v 127.0.0.1 |awk '{ print $2 }'|head -1`
fi
log=/home/sa/${CHECK_IP}_Disk.log
Disk=`cat /proc/partitions |awk '{print $4}'|grep -v '[0-9]'|grep -v name|grep -Ev "^$|[#;]"`
echo "磁盘检查开始" >$log
#计数
NUMBER_COUNT_

磁盘已经挂载的情况下,若希望实现自动执行磁盘中的Shell脚本,可以通过系统服务或守护进程监听挂载点目录,检测特定脚本是否存在,并执行该脚本。以下提供两种可行方案: ### 使用systemd路径单元监听挂载点 通过创建`systemd`路径单元(path unit),可以监听挂载点目录或特定脚本文件是否存在。一旦检测到指定脚本文件,即可触发执行。 创建一个路径单元文件,例如`/etc/systemd/system/run-script-on-mount.path`,内容如下: ```ini [Unit] Description=Run script on mount point detection [Path] PathExists=/mnt/usb/run.sh Unit=run-script-on-mount.service [Install] WantedBy=multi-user.target ``` 再创建对应的服务单元文件`/etc/systemd/system/run-script-on-mount.service`: ```ini [Unit] Description=Execute script from mounted disk [Service] Type=oneshot ExecStart=/bin/bash -c "chmod +x /mnt/usb/run.sh && /mnt/usb/run.sh" ``` 启用并启动该路径单元: ```bash systemctl enable run-script-on-mount.path systemctl start run-script-on-mount.path ``` 该配置会在检测到`/mnt/usb/run.sh`存在时自动执行该脚本[^1]。 ### 使用inotify监听挂载点变化 `inotify`是一种Linux内核机制,可用于监控文件系统事件。通过编写`inotify`脚本,可以监听挂载点目录,一旦检测到`run.sh`文件被创建,即可执行该脚本。 示例脚本如下: ```bash #!/bin/bash MOUNT_POINT="/mnt/usb" while true; do inotifywait -e create "$MOUNT_POINT" if [ -f "$MOUNT_POINT/run.sh" ]; then chmod +x "$MOUNT_POINT/run.sh" "$MOUNT_POINT/run.sh" fi done ``` 确保安装`inotify-tools`: ```bash yum install -y inotify-tools ``` 将上述脚本加入开机启动或通过`systemd`管理,即可实现挂载点中脚本的自动执行[^1]。 ### 注意事项 -脚本执行前应确保脚本具有可执行权限,可通过`chmod +x`命令赋予执行权限。 - 为避免脚本执行失败,建议在脚本中加入日志记录和错误处理机制。 -挂载点路径不固定,可结合`mount`命令动态获取挂载信息,或使用`udev`规则配合脚本实现更灵活的自动化流程[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值