2

我正在寻找一种最简单的方法来解析 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
4

2 回答 2

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
于 2015-11-26T10:01:28.700 回答
0

这也将起作用,并向您显示池名称。请注意,您需要nawkSolaris 上更现代的 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每个都有两个设备。它没有表明它们是镜像的还是串联的,但这很容易在脚本中更改。

于 2020-11-25T15:06:51.233 回答