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

时间:2014-11-11 19:51:36

标签: linux bash disk-partitioning

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

我可以使用grepawksed来解析fdisksfdisk等的输出,但这似乎不太合适成为一门精确的科学。

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

你会推荐什么?

3 个答案:

答案 0 :(得分:7)

我想我找到了一种可靠的方法。我在阅读手册页时意外地学习了partprobe的更多功能:

-d     Don’t update the kernel.
-s     Show a summary of devices and their partitions.

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

看看:

在没有分区表的磁盘上:

# partprobe -d -s /dev/sdb
(no output)

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

# partprobe -d -s /dev/sdb
/dev/sdb: msdos partitions

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

# partprobe -d -s /dev/sdb
/dev/sdb: msdos partitions 1

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

# partprobe -d -s /dev/sda
/dev/sda: msdos partitions 1 2 3 4 <5 6 7>

重要的是要注意,无论现有分区表或分区如何,每个退出状态都为0。此外,我还注意到这些选项无法组合在一起(partprobe -d -s /dev/sdb可以正常工作而partprobe -ds /dev/sdb没有)。

答案 1 :(得分:0)

另一种选择是运行:

T NewItem<T>(){
  return (T)Activator.CreateInstance(typeof(T));
}

请参阅https://unix.stackexchange.com/a/108951

答案 2 :(得分:0)

你也可以使用:

parted /dev/sda print 1 &> /dev/null echo $?

如果一个分区(第一个分区)存在,则返回真,否则返回假