【问题标题】:How to check a disk for partitions for use in a script in Linux?如何检查磁盘的分区以在​​ Linux 中的脚本中使用?
【发布时间】:2014-11-11 19:51:35
【问题描述】:

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

我可以使用grepawksed 来解析来自fdisksfdisk 等的输出,但这似乎不是一门精确的科学。

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

你会推荐什么?

【问题讨论】:

  • 您想准确检测什么?你的最终目标是什么?
  • sfdisk -d 生成的格式更易于解析,但仍不理想。 kpartx -l 在这方面甚至更好,如果你安装了它。可能还有其他实用程序。
  • @Ethan Reisner:没有抓住;我只是检查分区。如果没有,脚本最终会创建一个新的 MBR 分区架构并在驱动器上创建一个大分区。
  • sfdisk on RHEL 5.5 抱怨 GPT 标签。让我改用parted

标签: linux bash disk-partitioning


【解决方案1】:

我想我找到了一个可靠的方法。我在阅读手册页时无意中了解了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 无效)。

【讨论】:

  • 学到了一些新东西。正如您所说,这可能是一种更好的机器解析方式。谢谢。
【解决方案2】:

另一种选择是运行:

lsblk

https://unix.stackexchange.com/a/108951

【讨论】:

  • lsblk 在 RHEL 5.5 上不存在
【解决方案3】:

你也可以使用:

parted /dev/sda print 1 &amp;&gt; /dev/null echo $?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-18
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 2017-02-16
    • 2021-06-05
    相关资源
    最近更新 更多