lsblk + 如何捕获没有文件系统的磁盘

1 filesystems bash rhel awk lsblk

亲爱的朋友和大学

\n

我们有 rhel 7.5 版本的服务器,每台服务器都包含带文件系统的磁盘和不带文件系统的磁盘

\n

通常sda- 是操作系统磁盘,并且sdb是已经有文件系统的磁盘,

\n

使用以下lsblk语法,我们可以捕获具有文件系统类型的磁盘列表

\n
lsblk --fs  -o NAME,FSTYPE\nNAME             FSTYPE\nsda\n\xe2\x94\x9c\xe2\x94\x80sda1           xfs\n\xe2\x94\x94\xe2\x94\x80sda2           LVM2_member\n  \xe2\x94\x9c\xe2\x94\x80VG-LV_root xfs\n  \xe2\x94\x9c\xe2\x94\x80VG-LV_swap swap\n  \xe2\x94\x94\xe2\x94\x80VG-LV_var  xfs\nsdb              ext4\nsdc  \nsdd\n
Run Code Online (Sandbox Code Playgroud)\n

我想知道如何匹配所有没有文件系统的磁盘

\n

预期产出

\n
sdc\nsdd\n
Run Code Online (Sandbox Code Playgroud)\n

所以我们尝试以下语法

\n
lsblk --fs  -o NAME,FSTYPE |  awk '$2 == "" {print $1}'\n
Run Code Online (Sandbox Code Playgroud)\n

但我们得到以下结果

\n
sda\nsdc\nsdd\n
Run Code Online (Sandbox Code Playgroud)\n

所以我们sda尽管如此sda有文件系统(XFS)

\n

那么如何仅捕获real disks没有文件系统的文件-sdc / sdd

\n

ste*_*ver 6

如果您lsblk支持--json输出格式,并且已经jq安装,则可以解析以下块设备(a)没有子设备(即未分区)和(b)本身没有定义的文件系统:

lsblk --fs --json |
  jq -r '.blockdevices[] | select(.children == null and .fstype == null) | .name'
Run Code Online (Sandbox Code Playgroud)