linux命令-磁盘管理-6
大纲
| 命令 | 核心功能 | 适用场景 | 关键参数/示例 |
|---|---|---|---|
lsblk | 列出块设备(磁盘/分区/挂载点) | 快速查看存储拓扑 | lsblk -f 显示文件系统类型和UUID |
fdisk | MBR分区表管理(≤2TB磁盘) | 传统磁盘分区 | fdisk /dev/sda 进入交互式分区 |
gdisk | GPT分区表管理(>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/sdb1 | vgcreate myvg /dev/sdb1 | lvcreate -L 10G -n mylv myvg |
| 查看信息 | pvdisplay | vgdisplay myvg | lvdisplay /dev/myvg/mylv |
| 扩展 | - | vgextend myvg /dev/sdc1 | lvextend -L +5G /dev/myvg/mylv |
| 缩减 | - | vgreduce myvg /dev/sdc1 | lvreduce -L 15G /dev/myvg/mylv |
| 删除 | pvremove /dev/sdb1 | vgremove myvg | lvremove /dev/myvg/mylv |
| 扫描 | pvscan | vgscan | lvscan |
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 extendedSelect (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文件,块大小为4MBof 输出文件 (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/sdbPhysical volume "/dev/sdb" successfully created. [root@localhost ~]# pvcreate /dev/sdcPhysical volume "/dev/sdc" successfully created.# 创建vg , 这里先创建,然后在把另一块也给它扩进去 [root@localhost ~]# vgcreate myvg /dev/sdbVolume group "myvg" successfully created [root@localhost ~]# vgsVG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- <99.00g 4.00mmyvg 1 0 0 wz--n- <30.00g <30.00g# 如果没两块就略过它 [root@localhost ~]# vgextend myvg /dev/sdcVolume group "myvg" successfully extended [root@localhost ~]# vgsVG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- <99.00g 4.00mmyvg 2 0 0 wz--n- 49.99g 49.99g# 创建lv [root@localhost ~]# lvcreate -l 100%free -n mylv myvgLogical volume "mylv" created.[root@localhost ~]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertmylv 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~]# pvsPV VG Fmt Attr PSize PFree/dev/sda2 centos lvm2 a-- <99.00g 4.00m -
简要pv信息显示:
pvdisplay[root@localhost ~]# pvdisplay --- Physical volume ---PV Name /dev/sda2VG Name centosPV Size <99.00 GiB / not usable 3.00 MiBAllocatable yes PE Size 4.00 MiBTotal PE 25343Free PE 1Allocated PE 25342PV UUID ErBUzf-ov2g-yG25-MHED-wBKg-2x0S-LW3GXB -
创建pv:
pvcreate /dev/DEVICE~]# pvcreate /dev/sdcPhysical volume "/dev/sdc" successfully created. -
删除pv:
pvremove /dev/DEVICE~]# pvremove /dev/sdcLabels on physical volume "/dev/sdc" successfully wiped.
vg
-
显示pv信息:
vgs~]# vgsVG #PV #LV #SN Attr VSize VFreecentos 1 2 0 wz--n- <99.00g 4.00m -
简要vg信息显示:
vgdisplay[root@localhost ~]# vgdisplay --- Volume group ---VG Name centosSystem ID Format lvm2Metadata Areas 1Metadata Sequence No 3VG Access read/writeVG Status resizable....VG Size <99.00 GiBPE Size 4.00 MiBTotal PE 25343Alloc PE / Size 25342 / 98.99 GiBFree PE / Size 1 / 4.00 MiBVG UUID ejf8np-8e5W-Tb4A-93bF-jea3-pzu6-OfMxfO -
创建vg:
vgcreate 名称 磁盘|或分区# 先做pv, 再创建vg ~]# vgcreate myvg /dev/sdcVolume group "myvg" successfully created -
删除vg:
vgremove 名称|磁盘~]# vgremove myvgVolume group "myvg" successfully removed -
扩建vg
[root@localhost ~]# pvsPV 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/sdcVolume group "mydb" successfully extended <-- 将sdc扩到mydb [root@localhost ~]# vgsVG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- <99.00g 4.00mmydb 2 1 0 wz--n- 49.99g 29.99g <-- sdc的20G就扩过来了 -
缩减
~]# vgreduce mydb /dev/sdcRemoved "/dev/sdc" from volume group "mydb" [root@localhost ~]# vgsVG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- <99.00g 4.00mmydb 1 1 0 wz--n- <30.00g <10.00g
lv
-
显示lv
~]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertroot centos -wi-ao---- <94.12gswap centos -wi-ao---- <4.88g -
查看lv的详细信息
~]# lvdisplay --- Logical volume ---LV Path /dev/centos/swapLV Name swapVG Name centosLV UUID u79zY2-R6vo-axdj-COdV-rTrZ-EABg-7vAzJ9LV 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 mydbLogical volume "mylv" created. [root@localhost ~]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertmylv mydb -wi-a----- <30.00g -
删除
[root@localhost ~]# lvremove /dev/mydb/mylv Do you really want to remove active logical volume mydb/mylv? [y/n]: yLogical 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 ~]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertmylv 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,使操作系统启动
