在zpool中解析磁盘

时间:2015-11-26 05:29:59

标签: shell solaris zfs

我正在寻找一种解析zpool中磁盘的最简单方法。 空格分隔格式的磁盘列表。 例如,下面的输出显示了zpool信息。是否有任何命令只能获取物理磁盘列表?

   # zpool status pool
      pool: pool
      state: ONLINE
      scan: none requested
      config:

            NAME       STATE     READ WRITE CKSUM
            pool       ONLINE       0     0     0
              c2d44s2  ONLINE       0     0     0
              c2d45s2  ONLINE       0     0     0
              c2d46s2  ONLINE       0     0     0

    errors: No known data errors

2 个答案:

答案 0 :(得分:3)

虽然可能需要对复杂的zpool status输出进行一些修复,但这应该有效:

# cat parsezs
awk '
  NF != 5 {next}
  $1 == "NAME" {getline;show=1;next}
  $1 ~ "mirror" {next}
  $1 ~ "raidz" {next}
  $1 ~ "replacing" {next}
  $1 ~ "error" {next}
  show == 1 {printf("%s ",$1)}
  END {printf("\n")}'
# zpool status pool | parsezs
c2d44s2 c2d45s2 c2d46s2

答案 1 :(得分:0)

这也将起作用,并且还会显示池名称。请注意,您需要nawk,它是Solaris上Awk的更新版本:

zpool status  | nawk 'BEGIN{Disp=0}{if($1=="pool:") {if(Disp!=0) print ""; else Disp = 1; printf("%s ",$2)} ; if($1~"^c[0-9]") printf("%s ",$1)}END{print ""}'

Disp变量只是为了整理输出。这是一个典型的结果:

js_data_san c0t6006016049B13A00B337B4F7F1DDE411d0 c0t6006016093003B0022E5A8A8C833E711d0
rpool c0t5000CCA07D07C764d0 c0t5000CCA07D07C514d0
s10patchchk-ospool c0t6006016093003B00B488CFCF10D8E611d0
vmware_ds_nfs01 c0t6006016049B13A005AE1A9648112E511d0

因此,在该示例中,rpooljs_data_san每个都有两个设备。它不会指示它们是镜像还是串联的,但这在脚本中很容易更改。