须藤分手

须藤分手

我想捕获所有没有文件系统的磁盘(所有mkfs不在其上运行的磁盘)

我尝试了以下操作,但仍然给出了操作系统( sda )。

lsblk使用或其他命令捕获所有没有文件系统的磁盘的最佳方法是什么?

  lsblk -f | egrep -v "xfs|ext3|ext4"
  NAME             FSTYPE      LABEL UUID                                   
  MOUNTPOINT
 fd0
  sda
 └─sda2           LVM2_member       v0593a-KiKU-9emb-STbx-ByMz-S95k-jChr0m
 ├─vg00-lv_swap swap              1beb675f-0b4c-4225-8455-e876cafc5756   
 [SWAP]
 sdg
 sdh
 sdi
 sdj
 sdk
 sr0

答案1

lsblk -o NAME,FSTYPE -dsn

这将打印一个块设备列表,这些块设备本身不是分区的持有者(它们没有分区表)。检测到的文件系统类型位于第二列中。如果其为空,则表示没有可识别的文件系统。

因此,要通过一个命令获得您想要的输出

lsblk -o NAME,FSTYPE -dsn | awk '$2 == "" {print $1}'

答案2

在我看来,最好的选择是FDISK。句法:

fdisk -l | grep -i ^disk

答案3

您可以使用parted实用程序列出所有磁盘,无论它们是否有文件系统:

须藤分手

然后输入“免费打印”。

它将打印所有分区和未分区的驱动器。

在此输入图像描述

答案4

下面的一句话似乎有效。它打印除具有 TYPE、PTTYPE、LABEL 或 PARTLABEL 的块设备名称之外的所有块设备名称。最后两个是因为带有标签的东西可能已经在使用中。

在我看来,这似乎是一种比使用grep -v排除目前已知的文件系统类型列表更好的方法。

blkid | awk -F': ' '!/ ((PT)?TYPE|(PART)?LABEL)="[^"]+"/ {print $1}'

注:由此产生的块设备列表为不是以任何方式保证不被使用,只是它们没有正在使用的块设备所具有的任何常用标记。他们是大概没有使用,但如果不花更多时间研究这个问题,我什至不愿意建议它是任何类型的有保证的列表。

在我的一台 ZFS On Linux 机器上,它会生成以下输出:

# blkid | awk -F': ' '!/ ((PT)?TYPE|(PART)?LABEL)="[^"]*"/ {print $1}'
/dev/sdb9

这对于该系统来说是正确的。 /dev/sdb9未格式化、未使用的分区。它是磁盘末尾的一个 8MB 分区,用于单磁盘 ZFS 池(这是一台用于测试东西的家用机器,我需要它的镜像驱动器来做其他事情,但还没有时间更换它)


顺便说一句,blkid运行时间比lsblk.它做了一个很多需要做更多的工作来尝试识别它正在查看的块设备类型。

这可能仅在具有数百个驱动器/lvm 成员/zvol 和其他块设备的服务器上才会明显。

例如,在我的一台中型服务器上(有362个各种块设备),blkid运行时间大约为2分钟,而lsblk大约需要0.09秒。在另一个更小的系统上,只有 39 个块设备(上面提到的家庭测试盒),blkid需要 0.16 秒,而lsblk需要 0.01 秒。

如果您需要重复运行此命令并且运行时间太长,您始终可以将blkdid输出暂时缓存在 tmpfile 中。例如,如果缓存不存在或早于 30 分钟,则生成缓存文件 ( blkid > /path/to/blkid.cache) 并将其用作输入awk或其他内容。

相关内容