找出未安装任何分区/LV 的磁盘

找出未安装任何分区/LV 的磁盘

与之相反问题,我想知道哪些(物理)磁盘当前没有安装任何分区或 LV。这是一个脚本,该脚本应返回当前系统中未安装任何分区或 LV 的磁盘。

是否有一种(相当)简单的方法可以使用命令行工具(最好混合使用 bash 内置程序、grep、lsblk 和 sed,但awk如果可能的话,避免“ward”编程或高度专业化的第 3 方程序)来找出这一点。

编辑(为了澄清):

我正在寻找一种方法来获取“/dev/sdc”和/或“/dev/sdd”,如果不是单个分区(例如/dev/sdc{1,2,3,4}都没有)或LV(例如/dev/mapper/some_VG_name-LV_name) 当前已安装在系统上。即使挂载了单个分区或LV,也不会退回磁盘。

答案1

找到了适合我的解决方案:

aAllDisks=($(/usr/bin/lsblk --nodeps --noheadings --output NAME --paths))
aFreeDisks=()
for sDisk in "${aAllDisks[@]}"; do
    sMounts="$(/usr/bin/lsblk --noheadings --output MOUNTPOINT "${sDisk}" | grep -vE "^$")"
    if [ "${sMounts}" == "" ]; then
        aFreeDisks+=("${sDisk}")
    fi
done
echo "${aFreeDisks[@]}"

这将首先获取所有已安装的物理磁盘,然后循环遍历它们。如果磁盘没有任何挂载,则会将其收集以供以后使用。在上面的例子中,我只是简单地回显它。

相关内容