我正在寻找一种解析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
答案 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
因此,在该示例中,rpool
和js_data_san
每个都有两个设备。它不会指示它们是镜像还是串联的,但这在脚本中很容易更改。