我正在寻找一种最简单的方法来解析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发布于 2015-11-26 18:01:29
这应该可以工作,尽管它可能需要对复杂的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发布于 2020-11-25 23:06:51
这也会起作用,并向您显示池的名称。请注意,您需要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因此,在该示例中,rpool和js_data_san各有两个设备。它没有指明它们是镜像的还是串联的,但这很容易在脚本中进行更改。
https://stackoverflow.com/questions/33931201
复制相似问题