Bash 脚本:如何判断分区是否可以挂载?

Bash 脚本:如何判断分区是否可以挂载?

情况:在 Linux 上使用 Python 编写自动文件挂载。我找不到使用系统调用来做到这一点的 Pythonic 方式(从技术上讲,这意味着我正在执行 bash 脚本,只是我是通过 Python 执行的)。

问题:获取磁盘标签不足以安装磁盘。例如,我可以获得磁盘标签/dev/sda,但只能/dev/sda1 安装,/dev/sda2作为交换分区。

fdisk输出和parted输出并不能真正帮助我决定可以安装哪些磁盘(即具有有效的可读文件系统)

问题:如何通过使用 Linux/Bash 命令找出可以安装哪些磁盘(我不介意链接超过 10 个grep管道来获得最终结果)。

答案1

lsblk和都blkid可以用来找出分区中的内容(例如交换、已知文件系统、原始数据)。它们都有各种选项来指定输出格式,以便您可以仅提取所需的信息(例如文件系统类型、fs 标签、uuid 等)。

IMOblkid是一个更好的脚本操作工具,根据我的经验,它更擅长检测现有分区的用途,无论正在检查哪种类型的块设备(例如,lsblk不知道如何处理 ZFS zvol) .blkid像任何其他块设备一样对待它 - 这正是它应该做的,因为这正是 ZVOL 的本质)。 lsblk可以在脚本中使用,但在我看来,更倾向于与漂亮打印输出的交互使用。

例如在我的系统之一上:

# blkid /dev/sda*
/dev/sda: PTUUID="3a1e16ae" PTTYPE="dos"
/dev/sda1: UUID="08799b67-8ed7-4cee-aea1-0f9e7bd1fc04" TYPE="ext4" PARTUUID="3a1e16ae-01"
/dev/sda2: UUID="db8bda5f-4f18-4abb-a151-08494e398047" TYPE="swap" PARTUUID="3a1e16ae-02"
/dev/sda3: UUID="fc967791-b9cf-4145-9047-8a8b223ac4bb" TYPE="xfs" PARTUUID="3a1e16ae-03"

或者,如果我只想要 /dev/sda1 的文件系统类型:

# blkid -o value --match-tag TYPE /dev/sda1
ext4

blkid有关详细信息,请参阅手册页。

顺便说一句,file -s也可以使用,但输出更难解析。例如

# file -s /dev/sda1
/dev/sda1: Linux rev 1.0 ext4 filesystem data, UUID=08799b67-8ed7-4cee-aea1-0f9e7bd1fc04 (needs journal recovery) (extents) (large files) (huge files)

相关内容