Linux 磁盘相关命令整理


介绍

近来,接触底层的内容多了一些,顺手撸一个 「 磁盘 」 相关主线的命令行备份,记录在这里留作备忘 …

涉及命令

  • lsblk: 罗列所有可用块设备的信息
  • blkid: 显示关于可用块设备的信息
  • sgdisk:
  • smartctl:
  • sas2ircu/sas3iru:

lsblk 命令

lsblk(列出块设备)命令用于列出所有可用块设备的信息,但是,它不会列出RAM盘的信息。块设备有硬盘,闪存盘,CD-ROM等等。 引用自:参考资料 1

lsblk 命令默认情况下将以 「 树状 」 列出所有块设备。在终端输入以下命令:

1
$ lsblk

输出结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@AbsentM ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 557.9G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 500M 0 part /boot
├─sda3 8:3 0 299.4G 0 part
├─sda4 8:4 0 1K 0 part
├─sda5 8:5 0 97.7G 0 part /
├─sda6 8:6 0 97.7G 0 part /var/log
├─sda7 8:7 0 62.5G 0 part [SWAP]
└─sda8 8:8 0 196M 0 part /boot/efi
sdb 8:16 0 200G 0 disk
├─sdb1 8:17 0 150G 0 part /var/lib/cache
└─sdb2 8:18 0 50G 0 part

7 个列的名称解释如下:

  • NAME : 块设备名称。
  • MAJ:MIN : 显示主要和次要设备号。
  • RM : 显示设备是否可移动设备。 RM 值为 1, 表示为可移动设备。
  • SIZE : 列出设备的容量大小信息。
  • RO : 表明设备是否为只读。 RO 值为 0, 表示只读。
  • TYPE : 显示块设备是否是磁盘或磁盘上的一个分区。 disk 表示磁盘,part 表示分区,rom 表示只读存储器。
  • MOUNTPOINT : 显示设备挂载的挂载点。

为了更直观的定制列、格式化输出展示信息,可以使用如下参数格式化输出:

  • -o : output columns,定制列
  • -b : print SIZE in bytes rather than in human readable format
  • -l : use list format output
  • -p : print complate device path
  • -P : use key=“value” output format

可定制的列名称为:

  • NAME : device name
  • MOUNTPOINT : where the device is mounted
  • UUID : filesystem UUID
  • PARTUUID : partition UUID
  • SIZE : size of the device
  • TYPE : device type
  • STATE : state of the device
  • ROTA : rotational device, 可旋转磁盘标志位,可用于区分 HDD 盘和 SSD 盘: 0 - 不可旋转,SSD; 1 - 可旋转,HDD

如,以键值对的形式列出 /dev/sdb 盘的名称,大小,挂载点,类型,ROTA 位,分区 UUID,文件系统 UUID:

1
lsblk /dev/sdb -b -p -P -o NAME,SIZE,MOUNTPOINT,TYPE,ROTA,UUID,PARTUUID

输出结果如下:

1
2
3
4
[root@AbsentM ~]# lsblk /dev/sdb -b -p -P -o NAME,SIZE,MOUNTPOINT,TYPE,ROTA,UUID,PARTUUID
NAME="/dev/sdb" SIZE="214748364800" MOUNTPOINT="" TYPE="disk" ROTA="1" UUID="" PARTUUID=""
NAME="/dev/sdb1" SIZE="161061273600" MOUNTPOINT="" TYPE="part" ROTA="1" UUID="0a3407de-014b-458b-b5c1-848e92a327a3" PARTUUID="b411dc99-f0a0-4c87-9e05-184977be8539"
NAME="/dev/sdb2" SIZE="53687091200" MOUNTPOINT="" TYPE="part" ROTA="1" UUID="" PARTUUID="f9fe0b69-a280-415d-a03a-a32752370dee"

Disk UUID、PARTUUID 解释

关于磁盘 UUID、PARTUUID 等磁盘持久化命名解释可参看:参考资料 2:Persistent block device naming (简体中文)参考资料 3:Part-UUID

SSD、HDD 的 Linux 判断方法

除 lsblk 命令的 ROTA 属性值可以作为 HDD 盘和 SSD 盘的判断方式( 1 - HDD, 0 - SSD) 外,还可以使用如下命令来判断:

1
$ cat /sys/block/xxxx/queue/rotational

如果返回值为:1,则表示为 HDD 盘;如果返回值为:0,则表示为 SSD 盘。其他方法可参看:参考资料 4:Linux下判断磁盘是SSD还是HDD的几种方法

将 HDD 盘模拟为 SSD 盘

可以通过如下命令,将 HDD 盘模拟为非旋转块设备(SSD):

1
echo 0 > /sys/block/xxxx/queue/rotational   # 其中,xxxx 表示磁盘名称,如 sdb.

模拟插拔盘动作

Linux 下可以使用如下命令模拟插拔盘动作,但应注意与实际物理插拔盘仍可能不太一样。

拔盘:

1
echo 1 > /sys/block/xxxx/device/delete   # 其中,xxxx 表示磁盘名称,如 sdb.

插盘:

1
2
echo " - - - " > /sys/class/scsi_host/host0/scan    
# 其中,host0 中的数字 「 0 」 表示:使用 lsscsi 命令查看的 xxxx 盘第一列 [0:0:0:1] 中的第一个数字

blkid 命令

blkid 命令可以显示关于可用块设备的信息,如:设备名称、UUID(文件系统唯一标示符)、Type(文件系统类型)、PARTLABEL、PARTUUID 等信息。

列出所有可用块设备的信息

在终端输入以下命令,列出所有可用块设备的信息:

1
blkid

输出结果如下:

1
2
3
4
5
/dev/sda2: UUID="0733f5c1-cb85-4f98-9d4f-122cfcee9806" TYPE="ext4"
/dev/sda3: UUID="41a18221-6b1f-4ca2-9bc3-dc353c87d932" TYPE="ext4"
/dev/sda4: UUID="57183ff9-d4a5-4623-a47f-f8f17339be03" TYPE="swap"
/dev/sdb1: UUID="0a3407de-014b-458b-b5c1-848e92a327a3" PARTUUID="b411dc99-f0a0-4c87-9e05-184977be8539" TYPE="xfs"
/dev/sdb2: UUID="6bdf487f-cad7-4197-b0d9-4ddc6df1de2d" PARTUUID="f9fe0b69-a280-415d-a03a-a32752370dee" TYPE="xfs"

列出指定块设备的信息

在终端输入以下命令,列出指定块设备的信息:

1
blkid /dev/sdb1

输出结果如下:

1
/dev/sdb1: UUID="0a3407de-014b-458b-b5c1-848e92a327a3" PARTUUID="b411dc99-f0a0-4c87-9e05-184977be8539" TYPE="xfs"

可用参数及格式化输出

列出几个 blkid 命令支持的可用参数:

  • -o : output format; can be one of: value, device, export or full; (default: full)
  • -s : show specified tag(s) (default show all tags)
  • -t : find device with a specified token (NAME=value pair)
  • -L : convert LABEL to device name
  • -U : convert UUID to device name

1/ 使用 -o 参数格式化输出 sdb1 的块设备信息:

1
blkid -o value /dev/sdb1

输出结果如下:

1
2
3
0a3407de-014b-458b-b5c1-848e92a327a3
xfs
b411dc99-f0a0-4c87-9e05-184977be8539

2/ 使用 -o 参数格式化输出 sdb1 的块设备信息:

1
blkid -o export /dev/sdb1

输出结果如下:

1
2
3
4
DEVNAME=/dev/sdb1
UUID=0a3407de-014b-458b-b5c1-848e92a327a3
TYPE=xfs
PARTUUID=b411dc99-f0a0-4c87-9e05-184977be8539

sgdisk 命令


参考资料

[1] https://linux.cn/article-3340-1.html
[2] https://wiki.archlinux.org/index.php/Persistent_block_device_naming_(简体中文)
[3] https://wiki.debian.org/Part-UUID
[4] https://blog.csdn.net/sch0120/article/details/77725658

0%