6-linux命令-磁盘管理

77 阅读9分钟

大纲

命令核心功能适用场景关键参数/示例
lsblk列出块设备(磁盘/分区/挂载点)快速查看存储拓扑lsblk -f 显示文件系统类型和UUID
fdiskMBR分区表管理(≤2TB磁盘)传统磁盘分区fdisk /dev/sda 进入交互式分区
gdiskGPT分区表管理(>2TB磁盘)大容量磁盘分区gdisk /dev/sdb 创建GPT分区
parted支持MBR/GPT,可调整分区大小非交互式分区、分区表转换parted /dev/sdc print 查看分区表
partprobe通知内核重读分区表(无需重启)分区后刷新系统识别partprobe /dev/sda 更新指定磁盘
dd按块复制数据(备份/恢复/创建镜像)分区备份、制作启动盘dd if=/dev/sda1 of=backup.img

逻辑卷管理器LVM相关命令

操作类型物理卷(PV)命令卷组(VG)命令逻辑卷(LV)命令
创建pvcreate /dev/sdb1vgcreate myvg /dev/sdb1lvcreate -L 10G -n mylv myvg
查看信息pvdisplayvgdisplay myvglvdisplay /dev/myvg/mylv
扩展-vgextend myvg /dev/sdc1lvextend -L +5G /dev/myvg/mylv
缩减-vgreduce myvg /dev/sdc1lvreduce -L 15G /dev/myvg/mylv
删除pvremove /dev/sdb1vgremove myvglvremove /dev/myvg/mylv
扫描pvscanvgscanlvscan

lsblk

列出块设备

  • 示例

    [root@localhost cron.d]# lsblk
    NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda               8:0    0  100G  0 disk 
    ├─sda1            8:1    0    1G  0 part /boot        # 引导分区
    └─sda2            8:2    0   99G  0 part 
      ├─centos-root 253:0    0 94.1G  0 lvm  /            # lvm分区 
      └─centos-swap 253:1    0  4.9G  0 lvm  [SWAP]       # swap
    sr0              11:0    1  4.3G  0 rom  
    sdb               8:16   0   50G  0 disk              # 说明没有被使用
    

fdsik|gdisk

小于2tib的使用fdisk分区即可,大于2tib的使用gdisk分区, 一个用法

  • 说明, 分区看扩展说明

    命令说明
    fdisk创建MBR分区
    gdisk创建GPT分区
    parted高级分区操作
    partprobe重新设置内存中的内核分区表版本
  • 示例

    [root@localhost ~]# fdisk /dev/sdb
    ​
    磁盘 /dev/sdb:32.2 GB, 32212254720 字节,62914560 个扇区
    ​
    命令(输入 m 获取帮助):n      <--- 开始创建
    Partition type:
       p   primary (0 primary, 0 extended, 4 free)
       e   extended
    ​
    Select (default p): p     <--- 创建主分区
    分区号 (1-4,默认 1):1
    ----->  回车两次就是全部大小  <-----  
    ​
    命令(输入 m 获取帮助):p      <-----   打印查看一下
    磁盘 /dev/sdb:32.2 GB, 32212254720 字节,62914560 个扇区
       设备 Boot      Start         End      Blocks   Id  System
    /dev/sdb1            2048    62914559    31456256   83  Linux
    ​
    命令(输入 m 获取帮助):w      <-----   最后要保存
    The partition table has been altered!
    ​
    Calling ioctl() to re-read partition table.
    正在同步磁盘。
    ​
    # 格式化
    ~]# mkfs.xfs /dev/sdb1 
    meta-data=/dev/sdb1              isize=512    agcount=4, agsize=1966016 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0, sparse=0
    data     =                       bsize=4096   blocks=7864064, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal log           bsize=4096   blocks=3839, version=2
             =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    ​
     ~]# tail -n 1 /etc/fstab 
    /dev/sdb1  /opt  xfs defaults 0 0
    ​
    ~]# mount -a
    ~]# df -Th
    /dev/sdb1               xfs        30G   33M   30G    1% /opt
    

parted

parted的操作都是实时生效的,小心使用, 慎用 实时操作

~]# parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 32.2GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 
​
Number  Start   End     Size    Type     File system  标志
 1      1049kB  32.2GB  32.2GB  primary  xfs

partprobe

将修改分区立即生效

  • 创建分区立即 ~]# partprobe
  • 查询是否生效 ~]# cat /proc/partitions

dd

dd 命令:convert and copy a file

  • 参数

    参数含义使用示例示例说明
    if输入文件 (Input File)dd if=/dev/sda of=disk.img bs=4M将整个磁盘 /dev/sda 备份到 disk.img 文件,块大小为4MB
    of输出文件 (Output File)dd if=ubuntu.iso of=/dev/sdb status=progress将ISO镜像写入U盘设备 /dev/sdb,并显示传输进度
    bs同时设置输入/输出块大小dd if=/dev/urandom of=random.data bs=1M count=10生成10MB的随机数据文件,读写块大小均为1MB
    count仅复制指定块数dd if=/dev/sda2 of=partition.img bs=4M count=50仅复制磁盘分区前50个4MB块(共200MB)生成镜像
  • 示例

    • 磁盘克隆与恢复

      dd if=/dev/nvme0n1 of=/dev/sda bs=128K status=progress conv=noerror,sync 
      # 说明:克隆整个NVMe固态硬盘到SATA硬盘,128KB块提升速度,noerror,sync 确保遇到坏块继续复制并用空数据填充。
      
    • 提取文件片段

      dd if=video.mp4  skip=10240 bs=1K count=512 of=fragment.h264
      # 说明:从视频文件跳过前10MB(10240×1KB),提取后续512KB数据(如关键帧)。
      
    • 安全擦除磁盘,慎用,别把引导干崩咯

      dd if=/dev/urandom of=/dev/sdb bs=4M status=progress
      # 说明:用随机数据覆盖整个磁盘,防止恢复(多次执行可增强安全性)。
      
  • ⚠️ 重要注意事项

    • 数据安全of 参数目标若为磁盘(如 /dev/sda)会直接覆盖数据,操作前务必确认设备路径!
    • 块大小优化bs 值影响性能,通常设置为4K~8M(如SSD用128K,HDD用1M)。
    • 进度监控:添加 status=progress 可实时查看传输速率与进度(较新版本支持)。

lvm

逻辑卷管理器(LVM), 物理卷是用固定大小的物理区域(Physical Extent,PE)

  • 说明:dm: device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块

    • 设备名:/dev/dm-#

    • 软链接:

      /dev/mapper/VG_NAME-LV_NAME
      /dev/mapper/vol0-root
      /dev/VG_NAME/LV_NAME
      /dev/vol0/root
      
  • 先来个创建的示例

    # 先搞两块磁盘
    [root@localhost ~]# lsblk 
    NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sdb               8:16   0   30G  0 disk 
    sdc               8:32   0   20G  0 disk 
    ​
    # 使用前不要格式化磁盘,不用分区, 创建pv
    [root@localhost ~]# pvcreate /dev/sdb
      Physical volume "/dev/sdb" successfully created.
    [root@localhost ~]# pvcreate /dev/sdc
      Physical volume "/dev/sdc" successfully created.
    ​
    # 创建vg , 这里先创建,然后在把另一块也给它扩进去
    [root@localhost ~]# vgcreate myvg /dev/sdb
      Volume group "myvg" successfully created
    [root@localhost ~]# vgs
      VG     #PV #LV #SN Attr   VSize   VFree  
      centos   1   2   0 wz--n- <99.00g   4.00m
      myvg     1   0   0 wz--n- <30.00g <30.00g
      
    # 如果没两块就略过它
    [root@localhost ~]# vgextend myvg /dev/sdc
      Volume group "myvg" successfully extended
    [root@localhost ~]# vgs
      VG     #PV #LV #SN Attr   VSize   VFree 
      centos   1   2   0 wz--n- <99.00g  4.00m
      myvg     2   0   0 wz--n-  49.99g 49.99g
    ​
    # 创建lv
    [root@localhost ~]# lvcreate -l 100%free  -n mylv myvg
      Logical volume "mylv" created.
      
    [root@localhost ~]# lvs
      LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      mylv myvg   -wi-a-----  49.99g                                                 
    ​
    # 格式化磁盘
    [root@localhost ~]# mkfs.xfs /dev/myvg/mylv 
    meta-data=/dev/myvg/mylv         isize=512    agcount=4, agsize=3276288 blks
    ....
    ​
    # 查看磁盘
    [root@localhost ~]# lsblk 
    NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sdb               8:16   0   30G  0 disk 
    └─myvg-mylv     253:2    0   50G  0 lvm  
    sdc               8:32   0   20G  0 disk 
    └─myvg-mylv     253:2    0   50G  0 lvm  
    ​
    [root@localhost ~]# mount /dev/myvg/mylv /mnt/
    [root@localhost ~]# df -Th
    文件系统                类型      容量  已用  可用 已用% 挂载点
    /dev/mapper/myvg-mylv   xfs        50G   33M   50G    1% /mnt
    ​
    ​
    # 如果lv用的是扩展
     ~]# lvextend -l +100%FREE /dev/test1/mytest1 
      Size of logical volume test1/mytest1 changed from 20.00 GiB (5119 extents) to 29.99 GiB (7678 extents).
      Logical volume mytest1 successfully resized.
    ​
    # 使用要使用resizefs2命令重新加载逻辑卷的大小才能生效
     ~]# resize2fs /dev/test1/mytest1   # 如果出现大小了 就不用这个命令了
    
  • 缩减逻辑卷

    umount /dev/VG_NAME/LV_NAME
    e2fsck -f /dev/VG_NAME/LV_NAME
    resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
    lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
    mount
    

pv

  • 显示pv信息: pvs

    ~]# pvs
      PV         VG     Fmt  Attr PSize   PFree
      /dev/sda2  centos lvm2 a--  <99.00g 4.00m
    
  • 简要pv信息显示: pvdisplay

    [root@localhost ~]# pvdisplay 
      --- Physical volume ---
      PV Name               /dev/sda2
      VG Name               centos
      PV Size               <99.00 GiB / not usable 3.00 MiB
      Allocatable           yes 
      PE Size               4.00 MiB
      Total PE              25343
      Free PE               1
      Allocated PE          25342
      PV UUID               ErBUzf-ov2g-yG25-MHED-wBKg-2x0S-LW3GXB
    
  • 创建pv: pvcreate /dev/DEVICE

    ~]# pvcreate /dev/sdc
      Physical volume "/dev/sdc" successfully created.
    
  • 删除pv: pvremove /dev/DEVICE

    ~]# pvremove /dev/sdc
      Labels on physical volume "/dev/sdc" successfully wiped.
    

vg

  • 显示pv信息: vgs

    ~]# vgs
      VG     #PV #LV #SN Attr   VSize   VFree
      centos   1   2   0 wz--n- <99.00g 4.00m
    
  • 简要vg信息显示: vgdisplay

    [root@localhost ~]# vgdisplay 
      --- Volume group ---
      VG Name               centos
      System ID             
      Format                lvm2
      Metadata Areas        1
      Metadata Sequence No  3
      VG Access             read/write
      VG Status             resizable
      ....
      VG Size               <99.00 GiB
      PE Size               4.00 MiB
      Total PE              25343
      Alloc PE / Size       25342 / 98.99 GiB
      Free  PE / Size       1 / 4.00 MiB
      VG UUID               ejf8np-8e5W-Tb4A-93bF-jea3-pzu6-OfMxfO
    
  • 创建vg: vgcreate 名称 磁盘|或分区

    # 先做pv, 再创建vg
    ~]# vgcreate myvg /dev/sdc
      Volume group "myvg" successfully created
    
  • 删除vg: vgremove 名称|磁盘

    ~]# vgremove myvg
      Volume group "myvg" successfully removed
    
  • 扩建vg

    [root@localhost ~]# pvs
      PV         VG     Fmt  Attr PSize   PFree  
      /dev/sda2  centos lvm2 a--  <99.00g   4.00m
      /dev/sdb   mydb   lvm2 a--  <30.00g <10.00g   <-- 已经用了lvs 只有10G空闲
      /dev/sdc   mydb   lvm2 a--  <20.00g <20.00g
      
     ~]# vgextend mydb /dev/sdc
      Volume group "mydb" successfully extended     <-- 将sdc扩到mydb
    [root@localhost ~]# vgs
      VG     #PV #LV #SN Attr   VSize   VFree 
      centos   1   2   0 wz--n- <99.00g  4.00m
      mydb     2   1   0 wz--n-  49.99g 29.99g     <-- sdc的20G就扩过来了
    
  • 缩减

    ~]# vgreduce mydb /dev/sdc
      Removed "/dev/sdc" from volume group "mydb"
    [root@localhost ~]# vgs
      VG     #PV #LV #SN Attr   VSize   VFree  
      centos   1   2   0 wz--n- <99.00g   4.00m
      mydb     1   1   0 wz--n- <30.00g <10.00g
    

lv

  • 显示lv

     ~]# lvs
      LV   VG   Attr LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      root centos -wi-ao---- <94.12g
      swap centos -wi-ao----  <4.88g
    
  • 查看lv的详细信息

    ~]# lvdisplay 
      --- Logical volume ---
      LV Path                /dev/centos/swap
      LV Name                swap
      VG Name                centos
      LV UUID                u79zY2-R6vo-axdj-COdV-rTrZ-EABg-7vAzJ9
      LV Write Access        read/write
      ...
      Block device           253:1
    
  • 创建LV

    # 语法
    [root@localhost ~]# lvcreate -L #[mMgGtT] -n NAME VolumeGroup
    [root@localhost ~]# lvcreate -l 60%VG -n mylv testvg
    [root@localhost ~]# lvcreate -l 100%FREE -n yourlv testvg
    
    # 使用示例
    [root@localhost ~]# lvcreate -l 100%free -n mylv mydb
      Logical volume "mylv" created.
    [root@localhost ~]# lvs
      LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      mylv mydb   -wi-a----- <30.00g
    
  • 删除

    [root@localhost ~]# lvremove /dev/mydb/mylv 
    Do you really want to remove active logical volume mydb/mylv? [y/n]: y
      Logical volume "mylv" successfully removed
    
  • 缩减

    [root@localhost ~]# lvextend -L +10G /dev/mydb/mylv 
      Size of logical volume mydb/mylv changed from <9.00 GiB (2303 extents) to <19.00 GiB (4863 extents).
      Logical volume mydb/mylv successfully resized.
      
    [root@localhost ~]# lvs
      LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      mylv mydb   -wi-a----- <19.00g  <-- 缩减前30G
    

扩展

MBR

  • 理论

    • MBR: Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T
    • MBR分区中一块硬盘最多有4个主分区,也可以3主分区+1扩展(N个逻辑分区)
  • 如何分区:按柱面

    • 0磁道0扇区:512bytes
    • 446bytes: boot loader 主引导分区
    • 64bytes:分区表,其中每16bytes标识一个分区
    • 2bytes: 55AA

GPT

  • GPT:GUID(Globals Unique Identifiers) partition table 支持128个分区,使用64位,支持8Z( 512Byte/block )64Z ( 4096Byte/block)
  • 使用128位UUID(Universally Unique Identifier) 表示磁盘和分区 GPT分区表自动备份在头和尾两份,并有CRC校验位
  • UEFI (统一扩展固件接口)硬件支持GPT,使操作系统启动