如何检查磁盘上的分区以便在Linux中的脚本中使用?

Syn*_*ead 5 linux bash disk-partitioning

我正在为Bash for Linux系统编写脚本.如何以健壮的方式检查磁盘的分区?

我可以使用grep,awksed从解析输出fdisk,sfdisk等等,但是这似乎并没有成为一门精确的科学.

我还可以检查是否存在分区/dev,但是分区也可能存在并且尚未被探测(partprobe例如,通过).

你会推荐什么?

Syn*_*ead 7

我想我找到了一个可靠的方法.我partprobe在阅读手册页时偶然学到了更多的功能:

-d     Don’t update the kernel.
-s     Show a summary of devices and their partitions.
Run Code Online (Sandbox Code Playgroud)

一起使用,我可以在不更新内核的情况下扫描磁盘以获取分区,并获得可靠的解析输出.它仍然解析文本,但至少输出不为"以人为本"为fdisksfdisk.这也是从磁盘读取的信息,并不依赖于内核对此磁盘的分区状态是最新的.

看一看:

在没有分区表的磁盘上:

# partprobe -d -s /dev/sdb
(no output)
Run Code Online (Sandbox Code Playgroud)

在具有分区表但没有分区的磁盘上:

# partprobe -d -s /dev/sdb
/dev/sdb: msdos partitions
Run Code Online (Sandbox Code Playgroud)

在具有分区表和一个分区的磁盘上:

# partprobe -d -s /dev/sdb
/dev/sdb: msdos partitions 1
Run Code Online (Sandbox Code Playgroud)

在具有分区表和多个分区的磁盘上:

# partprobe -d -s /dev/sda
/dev/sda: msdos partitions 1 2 3 4 <5 6 7>
Run Code Online (Sandbox Code Playgroud)

重要的是要注意,无论现有分区表或分区如何,每个退出状态都为0.另外,我还注意到这些选项不能组合在一起(partprobe -d -s /dev/sdb有效时partprobe -ds /dev/sdb不能).