遍歷多盤的方法

前段時間需要驗證SUT多盤的性能,目前自己總結了一下方法,方便後面使用。
一,首先遍歷盤的指令有很多種,說下其中比較常見的。
1 lsblk : 最爲常見的指令,不過一般我們在遍歷盤的時候不用這個指令。

lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0   400G  0 disk
├─sda1            8:1    0     1G  0 part /boot
└─sda2            8:2    0   399G  0 part
  ├─centos-root 253:0    0    50G  0 lvm  /
  ├─centos-swap 253:1    0   3.9G  0 lvm  [SWAP]
  └─centos-home 253:2    0 345.1G  0 lvm  /home

2 ,ls -l /dev/ |egrep "sd[a-z]|nvme

[root@localhost ~]# ls -l /dev/ |egrep "sd[a-z]|nvme"
crw-------    1 root root    246,   0 Jan 29 19:49 nvme0
brw-rw----    1 root disk    259,   0 Feb  1 01:30 nvme0n1
crw-------    1 root root    246,   1 Jan 29 19:49 nvme1
brw-rw----    1 root disk    259,   1 Feb  1 01:30 nvme1n1
lrwxrwxrwx    1 root root           4 Jan 29 19:47 root -> sda2
brw-rw----    1 root disk      8,   0 Feb  1 01:30 sda
brw-rw----    1 root disk      8,   1 Feb  1 01:30 sda1
brw-rw----    1 root disk      8,   2 Feb  1 01:30 sda2
brw-rw----    1 root disk      8,   3 Feb  1 01:30 sda3
brw-rw----    1 root disk      8,  16 Jan 29 20:45 sdb

這個指令是我們在腳本中常用來遍歷的,比如:
遍歷所有的SATA盤
ls -l /dev/ |grep “sd[a-z]”

[root@localhost ~]# ls -l /dev/ |grep "sd[a-z]"
lrwxrwxrwx    1 root root           4 Jan 29 19:47 root -> sda2
brw-rw----    1 root disk      8,   0 Feb  1 01:30 sda
brw-rw----    1 root disk      8,   1 Feb  1 01:30 sda1
brw-rw----    1 root disk      8,   2 Feb  1 01:30 sda2
brw-rw----    1 root disk      8,   3 Feb  1 01:30 sda3
brw-rw----    1 root disk      8,  16 Jan 29 20:45 sdb
[root@localhost ~]# ls -l /dev/ |grep "sd[a-z]*$"|awk '{print $NF}'
sda
sdb

遍歷所有的nvme盤

[root@localhost ~]# ls -l /dev/ |grep "nvme[0-9]*$"
crw-------    1 root root    246,   0 Jan 29 19:49 nvme0
crw-------    1 root root    246,   1 Jan 29 19:49 nvme1
  1. cat /proc/partitions
    這個也是我們在腳本中常用來遍歷多盤的指令
    過濾SATA盤

 cat /proc/partitions |grep -Pv sd[a-z]
major minor  #blocks  name

 259        0 3907018584 nvme0n1
 259        1 3907018584 nvme1n1
 259        2  130054144 pmem1
 259        3  130054144 pmem3
 259        4  130054144 pmem2
 259        5  130054144 pmem5
 259        6  130054144 pmem4
 259        7  130054144 pmem6
 259        8  130054144 pmem7
 259        9  130054144 pmem0
 [root@localhost ~]# cat /proc/partitions |grep  sd[a-z]
   8        0 1404960768 sda
   8        1    1048576 sda1
   8        2  157286400 sda2
   8        3   52428800 sda3

4 ,lsscsi. 查看SATA盤

lsscsi
[0:0:0:0]    disk    ATA      INTEL SSDSCKKB48 1102  /dev/sda
[10:0:0:0]   disk    ATA      ST4000NM000A-2HZ TN02  /dev/sdb
[12:0:0:0]   disk    ATA      ST8000NM000A-2KE SN01  /dev/sdc

有時候腳本中需要我們獲取盤符,比如 /dev/sda , sda.sdb.等等。下面以lsscsi指令爲例,總結一下常用的盤符獲取的方法
a.第一種:awk -F
for i in lsscsi |awk '{print $NF}'|awk -F "/" '{print $NF}'; do echo $i;done

for i in `lsscsi  |awk '{print $NF}'|awk -F "/" '{print $NF}'`; do echo $i;done
sda
sdb
sdc

b.第二種:tr -s

for i in `lsscsi  |awk '{print $NF}'|tr -s  "/"  " "|awk '{print $NF}'` ;do echo $i;done
sda
sdb
sdc

c.第三種:cut -d

for i in `lsscsi  |awk '{print $NF}'|cut -d  '/'  -f 3` ;do echo $i;done
sda
sdb
sdc

d.第四種:sed 替換
lsscsi |awk ‘{print $NF}’ |sed “s#/dev/##g”

for i in `lsscsi  |awk '{print $NF}' |sed "s#/dev/##g"` ;do echo $i;done
sda
sdb

順便說一下,如果要遍歷的盤符都是有規律的如sd[a-z]
這種。那我們可以直接獲取

for i in sd{
   
   a..d};do echo $i;done
sda
sdb
sdc
sdd
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章