磁盘与文件系统管理工具

概述

参考:

磁盘分区管理工具

Parted

参考:

Parted 是一个 partition(分区) 操作程序,支持对 2T 以上硬盘的分区,支持 GTP 分区表,如果直接输入 parted 命令则进入 parted 工具,以交互式方式对 DEVICE 进行操作。

Parted 程序在 CentOS 和 Ubuntu 中都属于 parted 包,这个包中有两个程序,partedpartprobe

parted 程序可以在交互模式中运行,当 parted 运行在交互模式中时,对磁盘进行的操作,只有在执行 quit 命令后,才会将更新通知给 Linux 内核

Syntax(语法)

parted [OPTIONS] [DEVICE [COMMAND [ARGUMENT…]…]]

OPTIONS

  • -a, –align=[none|cyl|min|opt] # alignment for new partitions
  • -l, –list # 列出所有块设备上的分区布局,i.e.列出所有磁盘的分区
  • -m, –machine # 与 -l 选项配合, 显示出机器可以解析的输出内容
  • -s, –script # never prompts for user intervention

COMMAND

align-check <ALIGN-TYPE> <DEVICE> # 检查指定分区是否对齐

  • ALIGN-TYPE
    • minimal #
    • optimal #

select <DEVICE> # 选择对 DEVICE 磁盘进行操作

mklable <LABEL-TYPE> # 创建一个新的 Disk Label(磁盘标签)。

Disk Label 其实就是 Partition Table(分区表),也有的人称为 Partition Map(分区图)

这个行为会虽然不会导致磁盘所有数据丢失,但是却无法使用这些数据,如果想要恢复,可以通过恢复模式,参考这里进行恢复。当为一个已经有磁盘标签的磁盘创建标签时,将会出现如下提示:

Warning: The existing disk label on /dev/vdb will be destroyed and all data on this disk will be lost. Do you want to continue?

  • LABEL-TYPE
    • bsd
    • loop # 这个标签通常用于 LVM 类型的磁盘上,带有这种标签的磁盘,其实是没有分区表的。
    • gpt # 这个类型的标签就是 GPT 分区表
    • msdos # 这个类型的标签就是 MBR 分区表
    • pc98
    • sun
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start  End  Size  File system  Name  Flags


Model: Virtio Block Device (virtblk)
Disk /dev/vda: 107GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End    Size   Type     File system  Flags
 1      1049kB  107GB  107GB  primary  ext4         boot

不同类型的分区表,其显示的内容也不同,比如 GPT 分区别没有 Type 列,有 Name 列;而 msdos 有 Type 列却没有 Name 列。所以不同的分区表类型,会影响 mkpart 等命令的参数。

mkpart [PART-TYPE NAME FS-TYPE] <START> <END> # 创建一个新的分区。

  • PART-TYPE # 分区类型
    • 注意:该参数仅适用于分区表类型为 msdos 和 dvh 的磁盘
    • extended # 扩展分区
    • logical # 逻辑分区
    • primary # 主分区
  • NAME # 分区表的名字
    • 注意:分区表类型为 GPT 的磁盘必须指定 NAME 参数。如果是在交互模式中,可以设定一个空名字~~~o(╯□╰)o
  • FS-TYPE # 为分区添加文件系统类型的签名,通常都是在该分区的 offset 0 处添加签名。注意:仅仅是添加签名,并不是真的创建一个文件系统,想要创建文件系统,使用单独的 mkfs 等命令
    • btrfs
    • ext2、ext3、ext4
    • fat16、fat32
    • hfs、hfs+
    • linux-swap
    • ntfs
    • reiserfs
    • udf
    • xfs

name <NUMBER> <NAME> # 设置 NUMBER 号分区的名称为 NAME。仅对 GPT、Mac、MIPS、PC98 磁盘类型下的分区有效。

print [NUMBER] # 显示磁盘的分区信息,或者显示指定分区的信息

rescure START END # 救援一个丢失的分区。好像没什么用~~o(╯□╰)o?????????????????

resizepart <NUMBER> <END> # 移动指定分区的结束位置,即.调整分区的容量大小。注意:这不会修改分区中的任何文件系统,如果需要调整文件系统,则需要使用 resize2fs 之类的程序。

rm <NUMBER> # 删除指定的分区

select * <DEVICE> # 在交互模式中选择要编辑的磁盘设备。DEVICE 可以是 Linux 硬盘设备、分区、软 RAID 设备、LVM

set <NUMBER> <FLAG> <STATE> # 设置分区的 Flag。这命令有啥用?~~囧???????????

unit <UNIT> # 设定 parted 程序在显示磁盘信息时所使用的默认单位。

当我们使用 % 给磁盘分区后,过了一段时间我们往往忘记了每个分区具体都占了磁盘的百分比,这时候,使用 unit % 指令就可以看到这些信息了。o(∩_∩)o

EXAMPLE

检查 /dev/vda 磁盘的 1 号分区是否对齐

  • parted /dev/vda align-check optimal 1

设置 /dev/vdb 磁盘的分区表为 msdos 格式

  • parted /dev/vdb mktable msdos

设置/dev/vdb 磁盘的第一个分区的 FLAG 为 lvm

  • parted /dev/vdb set 1 lvm on

partprobe - 探测分区

当创建完分区而无法用 mkfs 创建文件系统的时候,用该命令,让内核重新读取分区情况以便让新增加的分区可以在不重启的情况下使用

fdisk

与 parted 工具类似,分为交互式命令与非交互式命令

Syntax(语法)

fdisk [/Path/DEV]

EXAMPLE

  • fdisk -l # 查看当前磁盘分区详情

磁盘设备管理工具

lsblk

参考:

lsblk 是 list block devices 的简称。该工具可以列出有关所有可用或指定的块设备的信息。 lsblk 命令读取 sysfs文件系统udev db 来收集信息。

默认情况下,该命令以树形格式打印所有块设备(除了 RAM 磁盘)。效果如下:

~]# lsblk
NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sr0           11:0    1  1024M  0 rom
vda          252:0    0   500G  0 disk
├─vda1       252:1    0     2M  0 part
├─vda2       252:2    0   500M  0 part /boot
└─vda3       252:3    0 499.5G  0 part
  └─vg1-root 253:0    0 499.5G  0 lvm  /

除了上面例子中的 6 列信息,lsblk 还会提供很多其他信息,使用 lsblk –help 命令获取所有可用列的列表。

  • NAME # 块设备名称
  • KNAME # 该块设备在内核内的名称。
  • MAJ:MIN # major(主要):minor(次要) 的块设备编号
    • MIN 就是 /dev/dm-X 设备后面那个 X 的编号
  • ROTA # 该设备是否为旋转设备(不是旋转设备就表示设备是固态硬盘或做过 raid 的逻辑盘)。1 是,0 不是
  • RM # 该设备是否是可移动设备
  • SIZE # 块设备大小
  • RO #
  • TYPE # 块设备类型
  • MOUNTPOINT # 该块设备的挂载路径

lsblk [OPTIONS] [DEVICE…]

OPTIONS

  • -J, –json # 使用 JSON 格式输出内容。
  • -o, –output(LIST) # 指定要打印的输出列,多个列以口号分割。
    • 使用 –help 获取所有受支持列的列表。如果以+LIST 格式(例如 lsblk -o + UUID)指定 LIST,则可以扩展默认的列表。
  • -p, –paths # 在 NAME 列显示块设备所在位置的绝对路径
  • -t, –topology # 输出块设备的拓扑信息。相当于 -o NAME,ALIGNMENT,MIN-IO,OPT-IO,PHY-SEC,LOG-SEC,ROTA,SCHED,RQ-SIZE,RA,WSAME

EXAMPLE

  • lsblk –output NAME,KNAME,TYPE,SIZE,MOUNTPOINT # 只显示部分列的信息

JSON 格式的信息

~]# lsblk -J -bno NAME,SERIAL,TYPE,SIZE,VENDOR,MODEL,MOUNTPOINT,UUID
{
   "blockdevices": [
      {"name": "sda", "serial": "TF0500WE0GAV0V", "type": "disk", "size": "500107862016", "vendor": "ATA     ", "model": "HGST HTS725050A7", "mountpoint": null,
         "children": [
            {"name": "sda1", "serial": null, "type": "part", "size": "4294967296", "vendor": null, "model": null, "mountpoint": "/boot"},
            {"name": "sda2", "serial": null, "type": "part", "size": "4294967296", "vendor": null, "model": null, "mountpoint": "[SWAP]"},
            {"name": "sda3", "serial": null, "type": "part", "size": "1024", "vendor": null, "model": null, "mountpoint": null},
            {"name": "sda5", "serial": null, "type": "part", "size": "107374182400", "vendor": null, "model": null, "mountpoint": "/Data"},
            {"name": "sda6", "serial": null, "type": "part", "size": "64424509440", "vendor": null, "model": null, "mountpoint": "/"}
         ]
      }
   ]
}

blkid - 查看块设备 UUID

效果如下:

~]# blkid
/dev/vda1: PARTUUID="155ebb92-01"
/dev/vda2: UUID="6c780e7d-7d0d-4e87-a3a3-77bd9a6ff9d5" TYPE="ext4" PARTUUID="155ebb92-02"
/dev/vda3: UUID="SADfxz-bqhC-QdUe-ogW1-diaM-1Fr8-TppSou" TYPE="LVM2_member" PARTUUID="155ebb92-03"
/dev/mapper/vg1-root: UUID="47af4ed5-64c5-405f-bef1-c65dc2984e21" TYPE="xfs"

dmsetup

参考:

低级的逻辑卷管理

dmsetup ls

dmsetup remove ceph–a56518ac–089c–4567–8000–7084c8fe9624-osd–block–ca074b77–a560–434d–86da–f329f21d018e

hdparm

参考:

hdparm 是一个 Linux 命令行程序,用于设置和查看 ATA 硬盘驱动器的硬件参数并测试性能 。它可以设置诸如驱动器缓存、睡眠模式、电源管理、声学管理和 DMA 设置等参数 。GParted 和 Parted Magic 都包含 hdparm 。

显示 /dev/sda 这块硬盘信息

hdparm -I /dev/sda

smartctl

参考:

OPTIONS

  • -a, –all # 打印有关设备的所有 SMART 信息。
    • 对于 ATA,这相当于 -H -i -c -A -l error -l selftest -l selected
      • 不再建议对 ATA 磁盘使用此选项,因为它不会启用需要支持 48 位 ATA 命令的 SMART 选项(请参阅下面的“-x”)
    • 对于 SCSI,这相当于 -H -i -A -l error -l selftest
    • 对于 NVMe,这相当于 -H -i -c -A -l error -l selftest
  • -i, –info # 打印设备型号、序列号、固件版本和 ATA 标准版本/修订信息;显示设备是否支持 SMART,如果支持,则说明 SMART 支持当前是启用还是禁用。
    • 如果设备支持逻辑块地址模式(LBA 模式),则打印当前用户驱动器容量(以字节为单位)。(如果驱动器保留了用户保护区域或被“裁剪”,则此容量可能小于驱动器的最大容量。)指示驱动器是否在 smartmontools 数据库中(请参阅下面的“-v”选项)。如果在,则还可以打印驱动器型号系列。如果指定了“-n”(请参阅​​下文),则打印驱动器的电源模式。

EXAMPLE

~]# smartctl -i /dev/sda
smartctl 7.2 2020-12-30 r5155 [x86_64-linux-5.15.0-141-generic] (local build)
Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Phison Driven OEM SSDs
Device Model:     SATA SSD
Serial Number:    96C50773120300059480
LU WWN Device Id: 5 000000 000000000
Firmware Version: SBFM01.0
User Capacity:    128,035,676,160 bytes [128 GB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    Solid State Device
Form Factor:      mSATA
TRIM Command:     Available
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ACS-4 (minor revision not indicated)
SATA Version is:  SATA 3.2, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Mon Jun  1 14:35:15 2026 CST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

最佳实践

获取磁盘硬件信息

~]# lsblk -d -o NAME,SIZE,MODEL
NAME   SIZE MODEL
sda  447.1G SAMSUNG MZ7L3480HCHQ-00B7C
sdb    3.6T TOSHIBA MG04ACA400N
sdc    3.6T TOSHIBA MG04ACA400N
sdd    3.6T TOSHIBA MG04ACA400N
sde    3.6T ST4000NM000A-2HZ100

并非所有场景都会显示品牌,若是在阵列卡下且没直通,可能只会看到 MODEL 都是 LOGICAL VOLUME

~]# lsscsi
[0:0:16:0]   enclosu MSCC     SXP 36x12G       RevB  -
[0:2:0:0]    disk    AVAGO    MR9361-8i        4.68  /dev/sda
[0:2:1:0]    disk    AVAGO    MR9361-8i        4.68  /dev/sdb

lsscsi 命令在 只有 typedisk 时才表示为一块硬盘,其它如 loop 则应该过滤掉。 每块硬盘中的 children 表示它下面的分区,通过 mountpoint 可确定硬盘在此系统上的使用情况。


最后修改 June 1, 2026: linux hardware mgmt tools (3da84609)