发现并挂载所有驱动器上的所有文件系统(包括 LVM)

发现并挂载所有驱动器上的所有文件系统(包括 LVM)

我正在创建一张 Live CD,它将访问机器上所有物理连接的磁盘。无需用户干预,我需要找到并安装所有可以安装的驱动器。我还需要能够处理磁盘是否使用 LVM 并安装每个卷组。

答案1

以下是我找到并挂载所有可用磁盘的方法。此脚本还将跟踪所有失败的挂载(在我的情况下也需要它,虽然不是问题的一部分,但对其他人可能有用)。

在这里我扫描所有分区/proc/partitions并尝试挂载我找到的每个分区。扫描并激活 LVM 分区后,它们也将列在此文件中。

# Scan for all volume groups
lvscan
# Activate all volume groups
vgchange -a y

# Get all partitions (-n+3 skips first 3 lines since they do not contain partitions)
# Also skip partitions that are loop devices which is actually the ISO cd itself
all_partitions=$(tail -n+3 /proc/partitions | awk '{print $4}' | grep -v loop)

# Array of failed mounts
declare -a failed_mounts=()

# Mount each partition to /mnt/{partition name}
for partition in ${all_partitions}; do
    mountdir=/mnt/${partition}
    mkdir -p ${mountdir}
    mount /dev/${partition} ${mountdir} &>>${INIT_LOG}
    if [ $? -ne 0 ]; then
        echo "Failed to mount ${partition}"
        rm -rf ${mountdir}
        failed_mounts+=(${partition})
    fi
done

这可能依赖于或不依赖于发行版,但由于我将其集成到实时 CD 中,因此它不必独立于发行版。

答案2

仅 LVM 部分

首先激活所有卷组:

vgchange -a y

然后

lvdisplay -c | sed -e 's/  //; s/:.*//'

应该会为您提供已激活的 LVM 卷列表。它们应该是以下形式/dev/VGNAME/LVNAME,您现在可以使用它来根据需要创建挂载点。

相关内容