我正在为 Linux 系统编写 Bash 脚本。如何以稳健的方式检查磁盘的分区?
我可以使用grep
,awk
或sed
来解析 , 等的输出fdisk
,sfdisk
但这似乎不是一门精确的科学。
我还可以检查 中是否有分区/dev
,但也有可能分区存在并且尚未被探测(partprobe
例如,通过 )。
你会推荐什么?
我正在为 Linux 系统编写 Bash 脚本。如何以稳健的方式检查磁盘的分区?
我可以使用grep
,awk
或sed
来解析 , 等的输出fdisk
,sfdisk
但这似乎不是一门精确的科学。
我还可以检查 中是否有分区/dev
,但也有可能分区存在并且尚未被探测(partprobe
例如,通过 )。
你会推荐什么?
我想我找到了一个可靠的方法。partprobe
我在阅读手册页时无意中学到了更多功能:
-d Don’t update the kernel.
-s Show a summary of devices and their partitions.
一起使用,我可以在不更新内核的情况下扫描磁盘的分区并获得可靠的输出来解析。它仍在解析文本,但至少输出不像fdisk
or那样“以人为本” sfdisk
。这也是从磁盘读取的信息,不依赖于内核对该磁盘的分区状态保持最新。
看一看:
在没有分区表的磁盘上:
# 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
无效)。
你也可以使用:
parted /dev/sda print 1 &> /dev/null echo $?
如果存在分区(第一个分区),则返回 true,否则返回 false