注册
共享存储过滤唯一uuid磁盘(脚本见附件)
技术分享/ 文章详情 /

共享存储过滤唯一uuid磁盘(脚本见附件)

竹蜻蜓vYv 2022/12/18 3018 5 0

1.需求:快速筛选具有唯一UUID的共享存储磁盘

2.服务器磁盘显示图所示:

微信图片_20221218190250.png

3.执行脚本,传系统盘和数据盘,其余盘符是共享存储

## sda 系统盘 ## sdb 数据盘 [root@centos7 ~]# chmod 775 filterdisk.sh [root@centos7 ~]# ./filterdisk.sh sda,sdb
#/bin/bash #==============================================================# # 脚本名 : filterdisk.sh # 创建时间 : 2023-04-29 14:34:00 # 描述 : 过滤唯一uuid磁盘 # 版本 : 1.1.0 # 作者 : yuanzijian(yzj@dameng.com) # Copyright (C) 2022-2023 Zijian yuan #==============================================================# ##服务器版本 os_version=$(grep -oP '(?<=release\s|V)[[:digit:]]+' </etc/system-release) #获取服务器磁盘 all_disk=`lsblk -l | awk '/^sd|vd/{print $1}' | sed -n '/[0-9]$/!p'` #要过滤得磁盘 fil_disk=$1 #==============================================================# # Get UUID # #==============================================================# function get_uuid() { local uuid case $os_version in 6) uuid=$(/sbin/scsi_id -g -u "$1") ;; *) uuid=$(/usr/lib/udev/scsi_id -g -u "$1") ;; esac printf '%s' "$uuid" } #==============================================================# # 获取磁盘容量 # #==============================================================# function disk_storage(){ lsblk -b -o SIZE -n "${1}" | awk '$1 >= 1024*1024*1024 {printf "%.1fG\n", $1/1024/1024/1024}' } #==============================================================# # 过滤唯一uuid磁盘 # #==============================================================# function check_disk() { # 以逗号分割数组 IFS=',' read -ra fil_disk_arr <<<"$fil_disk" declare -a disk_list=() # 使用for-in循环枚举all_disk数组中所有元素 for ad in ${all_disk// / }; do # 判断$ad是否不存在于$fd中,如果是则执行下列操作 if ! [[ ${fil_disk_arr[*]} =~ $ad ]]; then # 将"/dev/$disk"添加到disk_list中 disk_list+=("/dev/$ad") fi done declare -A uuids=() # 声明存储磁盘 UUID 的关联数组 declare -A sizes=() # 声明存储磁盘容量大小的关联数组 # 处理每个磁盘的循环 for disk in "${disk_list[@]}"; do sizes[$disk]=$(disk_storage "$disk") # 保存磁盘容量大小到关联数组中 uuid=$(get_uuid "$disk") # 获取磁盘的 UUID # 如果磁盘有 UUID 并且它还没有添加到数组中,就将其添加到数组中 if [[ $uuid != "" && ! ${uuids[*]} =~ $uuid ]]; then uuids[$disk]=$uuid fi done # 遍历存储磁盘 UUID 的关联数组并打印每个磁盘的 UUID、名称和容量大小 for disk in "${!uuids[@]}"; do echo "${uuids[$disk]} $disk ${sizes[$disk]}" done | sort -k3n -k2 } check_disk

4.筛选之后结果显示图:

1671361565499.png

5.脚本附件

filterdisk.zip

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服