*Linux磁盘管理全攻略:LVM+RAID+文件系统指南
目录
一、磁盘结构
1.设备文件
2.硬盘类型
3.机械硬盘和固态硬盘
二、管理存储
1.磁盘分区(MBR/GPT)
1.1目的
1.2MBR
1.3GPT
1.4BIOS和UEFI
2.管理分区
2.1列出块设备
2.2创建分区
二、文件系统
1.文件系统类型
2.文件系统组成类型
3.文件系统管理
3.1创建文件系统
3.2查看和管理分区信息
3.3文件系统检测和修复
4.挂载
4.1挂载文件系统mount
4.2卸载文件系统umount
4.3查看挂载情况
4.4持久挂载
4.5重新挂载
5.处理交换文件和分区
5.1交换分区实现过程
5.2启用swap分区
5.3禁用swap分区
5.4创建swap分区
5.5查看swap分区
5.6修改swap优先级
5.7以文件作为swap分区
5.8永久禁用swap
5.9swap使用策略
6.文件系统查看工具df
7.目录统计工具du
8.文件工具dd
三、RAID
1.实现逻辑卷
1.1pv管理工具
1.2vg管理工具
1.3lv管理工具
1.4扩展逻辑卷
1.5缩减逻辑卷
2.跨主机迁移卷组
3.拆除指定的pv存储设备
五、逻辑卷快照
一、磁盘结构
1.设备文件
对于Linux,一切皆文件,硬件设备同样是以文件形式呈现出来的。设备文件是操作系统中一种特殊的文件类型,其核心作用是作为硬件设备与软件(驱动程序)之间的桥梁。
添加硬盘,不重启识别
[root@rocky136 ~]# echo '- - -' > /sys/class/scsi_host/host0/scan
[root@rocky136 ~]# echo '- - -' > /sys/class/scsi_host/host1/scan
[root@rocky136 ~]# echo '- - -' > /sys/class/scsi_host/host2/scan
##但是在 ubuntu 中,该目录下的内容太多
[root@rocky-136 ~]#ls /sys/class/scsi_host
host0 host12 host16 host2 host23 host27 host30 host5 host9
host1 host13 host17 host20 host24 host28 host31 host6
host10 host14 host18 host21 host25 host29 host32 host7
host11 host15 host19 host22 host26 host3 host4 host8#两种方法
#1.循环遍历
[root@ubuntu2204 ~]# for i in `ls /sys/class/scsi_host/`;do echo '- - -' >
/sys/class/scsi_host/$i/scan;done#2.找出SPI总线对应的 host,只扫描该 host
[root@ubuntu2204 ~]# grep mptspi /sys/class/scsi_host/host*/proc_name
/sys/class/scsi_host/host32/proc_name:mptspi
#此处是重新扫描 SCSI 总线来添加设备,之所以是 SCSI 总线,是因为我们添加的是 SCSI 类型的硬盘[root@ubuntu2204 ~]# echo '- - -' > /sys/class/scsi_host/host32/scan
SCSI:(small computer system interface),小型计算机系统接口,是常用且重要的数据传输协议之一,它支撑着操作系统对外部设备的i/o操作。实际应用场景中,在linux系统上添加一个新的 scsi 磁盘是不需要重启的,一般可以通过扫描发现的操作来识别就绪设备。
/sys 文件是系统是和 /proc 一样,是一个内存文件系统 ,在磁盘上并没有对应的内容。通常称其为
sysfs, 这是内核 “暴露” 给用户空间的一个 驱动模型层次结构的展现。因此,host0, host1 这些 “文件” 是内核根据设备驱动程序 “发现” 的设备后在内存中创建的对应的 “文件” 和 "文件层次"。
2.硬盘类型
3.机械硬盘和固态硬盘
机械硬盘(HDD)是传统存储设备,核心结构包含盘片、磁头等精密部件,工作时盘片高速旋转,磁头以极微小间隙贴近盘面并沿半径移动来定位数据,通过电磁流改变磁极读写数据。因依赖机械运动,对环境洁净度要求苛刻,不过具有成本低、容量大的优势,适用于大规模数据存储。
固态硬盘(SSD)则采用固态电子芯片阵列,无机械结构,靠电信号直接读写数据,接口和外形与HDD兼容,性能上防震抗摔、传输速率快、功耗低、重量轻且无噪音,适合高效数据访问和移动场景,但单位容量成本高,大容量产品价格远超HDD 。
#识别SSD和HDD类型
#1表示机械,0表示SSD
[root@rocky86 ~]# lsblk -d -o name,rota
NAME ROTA
sda 1
sr0 1
nvme0n1 0
nvme0n2 0[root@rocky86 ~]# ls /sys/block/
nvme0n1 nvme0n2 sda sr0[root@rocky86 ~]# cat /sys/block/*/queue/rotational
0
0
1
1[root@rocky86 ~]# cat /sys/block/sda/queue/rotational
1#测速
[root@rocky-136 ~]#dd | hdparm -t /dev/sda
/dev/sda:Timing buffered disk reads: 322 MB in 3.01 seconds = 107.10 MB/sec
磁盘寻址:CHS、LBA。
二、管理存储
使用磁盘空间过程:
1.设备分区
2.创建文件系统
3.挂载新的文件系统
1.磁盘分区(MBR/GPT)
1.1目的
优化I/O性能
实现磁盘空间配额限制
提高修复速度
隔离系统和程序
安装多个OS
采用不同文件系统
1.2MBR
MBR,硬盘的第一个物理扇区(0 柱面 0 磁头 1 扇区),大小 512 字节
446bytes: 主引导程序代码,用于在系统启动时查找并加载操作系统引导程序
64bytes:分区表,其中每16bytes标识一个分区
2bytes: 55AA,标识位,用于标识该扇区为有效的 MBR 扇区
MBR分区中一块硬盘最多有4个主分区,也可以3主分区+1扩展(N个逻辑分区) 。
MBR分区:主和扩展分区对应的1--4,/dev/sda3,逻辑分区从5开始,/dev/sda。
#查看分区表信息
[root@rocky-136 ~]#hexdump -C -n 512 /dev/sda
备份MBR分区表,破坏后恢复
#查看分区表
[root@rocky86 ~]# fdisk -l /dev/sda
Disk /dev/sda: 200 GiB, 214748364800 bytes, 419430400 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x5b8e1003
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 419430399 417331200 199G 8e Linux LVM#备份MBR分区表
[root@rocky86 ~]# dd if=/dev/sda of=/data/dpt.img bs=1 count=64 skip=446#64字节大小
[root@rocky86 ~]# ll /data/dpt.img
-rw-r--r-- 1 root root 64 Jul 30 11:49 /tmp/dpt.img#查看具体内容
[root@rocky86 ~]# hexdump -vC /data/dpt.img#备份到远端
[root@rocky86 ~]# scp /tmp/dpt.img 192.168.61.140:#破坏MBR分区表
[root@rocky86 ~]# dd if=/dev/zero of=/dev/sda bs=1 count=64 seek=446
64+0 records in
64+0 records out
64 bytes copied, 0.00248682 s, 25.7 kB/s#再次查看前512字节
[root@rocky86 ~]# hexdump -vC -n 512 /dev/sda#再次查看分区表,没有分区信息
[root@rocky86 ~]# fdisk -l /dev/sda
Disk /dev/sda: 200 GiB, 214748364800 bytes, 419430400 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x3475e2b0#但内存中还有相关信息
[root@rocky86 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 199G 0 part ├─rl-root 253:0 0 70G 0 lvm /├─rl-swap 253:1 0 2G 0 lvm [SWAP]└─rl-home 253:2 0 127G 0 lvm /home
sr0 11:0 1 10.5G 0 rom#重启后无法进系统
[root@rocky86 ~]# reboot#用光盘启动,进入Rescue mode,选第3项skip to shell#配置网络
ifconfig ens33 192.168.61.136/24#从远端拿回分区表信息
scp 192.168.61.140:/root/dpt.img .#恢复MBR分区表
dd if=dpt.img of=/dev/sda bs=1 seek=446#重启
reboot
1.3GPT
GPT优势显著,支持 128 个分区,采用 64 位技术,兼容 8Z(512Byte/block)和 64Z(4096Byte/block)模式,用 128 位 UUID 标识磁盘与分区。分区表具备自动备份功能,头尾各存一份,还设有 CRC 校验位保障数据准确。同时,UEFI 硬件对 GPT 的支持,让操作系统能基于 GPT 分区启动。GPT 分区结构由 GPT 头、分区表、GPT 分区以及备份区域这 4 个区域构成。
#ubuntu默认使用GPT分区
[root@ubuntu-140 ~]#fdisk -l /dev/sda
Disk /dev/sda: 150 GiB, 161061273600 bytes, 314572800 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: B2665541-61DD-47CD-9C55-6F66731D73F1Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 4198399 4194304 2G Linux filesystem
/dev/sda3 4198400 314570751 310372352 148G Linux filesystem
1.4BIOS和UEFI
BIOS是固化在主板上用于系统自检和引导操作系统的程序,诞生于1975年,用16位汇编语言编写,只能访问1M内存,仅支持MBR初始化的硬盘,最大支持2T硬盘和4个主分区,采用字符操作界面,已无法满足64位系统需求。EFI作为BIOS的继任标准,由UEFI继承发展,后者由国际组织统一管理,采用32/64位C语言编写,突破实模式限制,提供图形化界面和文件式信息存储,支持GPT分区表及2T以上硬盘,能实现更灵活的硬盘分区。
2.管理分区
2.1列出块设备
lsblk [options] [<device> ...]#常用选项
-a|--all #输出所有设备信息
-b|--bytes #以字节为单位显示设备大小
-d|--nodeps #不显示分区信息
-e|--exclude <list> #以主设备号排除设备
-f|--fs #显示文件系统
-i|--ascii #只使用 ascii 字符输出
-I|--include <list> #仅显示指定的设备
-J|--json #以json格式显示输出
-l|--list #以列表显示
-T|--tree #以树状结构显示,默认项
-m|--perms #显示属主属组及权限
-n|--noheadings #不显示表头
-o|--output <list> #只显示指定列
-O|--output-all #显示所有列
-p|--paths #显示设备全路径
-P|--pairs #以 k=>v 的格式显示输出
-r|--raw #原样输出
-s|--inverse #反向显示关联信息
-S|--scsi #显示scsi设备(small computer system interface device,小型计算机接口设备)
-t|--topology #显示拓扑信息#常用字段
NAME #设备名称
MAJ:MIN #主设备号:次设备号
RM #是否是可移动设备
SIZE #设备容量大小
RO #是否是只读设备
TYPE #设备类型
MOUNTPOINT #挂载点
2.2创建分区
2.2.1parted高级分区操作命令,可以是交互或非交互方式,实时生效的,没有交互式确认。
parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]#常用选项
-l|--list #显示所有硬盘分区信息
-s|--script #不输出提示信息 #常用子命令
align-check TYPE N #检查分区是否满足对齐(最小|最佳)类型的对齐方式
help [COMMAND] #显示命令帮助
mklabel|mktable LABEL-TYPE #指定磁盘的分区类型 gpt|msdos(mbr)
mkpart PART-TYPE [FS-TYPE] START END #新建分区,指定分区类型,文件系统,开始结束位置
name NUMBER NAME #重命名指定分区
print [devices|free|list,all|NUMBER] #显示
quit #退出
rescue START END #空间碎片整理
resizepart NUMBER END #重置分区大小
rm NUMBER #删除指定分区
select DEVICE #选择设备
disk_set FLAG STATE #为设备打标签
disk_toggle [FLAG] #修改flag
set NUMBER FLAG STATE #设置flag
toggle [NUMBER [FLAG]] #修改flag
unit UNIT #设置默认单位, 默认为MB,B|KB|MB|GB|TB
version #显示版本
#显示所有硬盘分区信息
[root@ubuntu-140 ~]#parted -l#查看指定磁盘设备分区信息,unknown无分区信息,新磁盘
[root@ubuntu-140 ~]#parted /dev/sdb print
Error: /dev/sdb: unrecognised disk label
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags: #磁盘上指定GPT分区
[root@ubuntu-140 ~]#parted /dev/sdb mklabel gpt
Information: You may need to update /etc/fstab.#查看
[root@ubuntu-140 ~]#parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: Number Start End Size File system Name Flags#创建分区
[root@ubuntu-140 ~]#parted /dev/sdb mkpart primary 1 1001
Information: You may need to update /etc/fstab.#查看
[root@ubuntu-140 ~]#parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: Number Start End Size File system Name Flags1 1049kB 1001MB 1000MB primary#再次创建
[root@ubuntu-140 ~]#parted /dev/sdb mkpart primary 1002 1102
Information: You may need to update /etc/fstab.#再次查看
[root@ubuntu-140 ~]#parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: Number Start End Size File system Name Flags1 1049kB 1001MB 1000MB primary2 1002MB 1102MB 99.6MB primary#删除
[root@ubuntu-140 ~]#parted /dev/sdb rm 2
Information: You may need to update /etc/fstab.#再次查看
[root@ubuntu-140 ~]#parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: Number Start End Size File system Name Flags1 1049kB 1001MB 1000MB primary
2.2.2fdisk
fdisk [options] <disk>
fdisk [options] -l [<disk>] #类似于fdisk 的GPT分区工具
gdisk [options] [device...] #常用选项
-b|--sector-size <size> #指定扇区大小,默认512字节
-L|--color[=color] #显示时是否添加颜色(auto|always|never)默认启用颜色
-l|--list #显示所有磁盘设备
-o|--output <list> #只显示指定列
-u|--units[=<unit>] #设置显示单位 cylinders|sectors,默认sectors
-s|--getsz #显示设备有多少个扇区
-b|--bytes N #以指定的字节大小来计算扇区数量
-t|--type type #只显示指定类型的分区表
-C|--cylinders N #指定柱面数
-H|--heads N #指定磁头数
-S|--sectors N #指定每条磁道的扇区数#常用子命令
p #输出分区列表
t #更改分区类型
n #创建新分区
d #删除分区
v #校验分区
u #转换单位
w #保存并退出
q #不保存并退出
x #高级功能(专家模式)#不同类型分区可用的列,配合 -o 选项
gpt: Device Start End Sectors Size Type Type-UUID Attrs Name UUID
dos: Device Start End Sectors Cylinders Size Type Id Attrs Boot End-C/H/S StartC/H/S
bsd: Slice Start End Sectors Cylinders Size Type Bsize Cpg Fsize
sgi: Device Start End Sectors Cylinders Size Type Id Attrs
sun: Device Start End Sectors Cylinders Size Type Id Flags
#显示所有设备
[root@rocky86 ~]# fdisk -l#显示指定设备
[root@rocky86 ~]# fdisk -l /dev/sda#显式指定列
[root@ubuntu-140 ~]#fdisk /dev/sda -lo start,end,type
Disk /dev/sda: 150 GiB, 161061273600 bytes, 314572800 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: B2665541-61DD-47CD-9C55-6F66731D73F1Start End Type2048 4095 BIOS boot4096 4198399 Linux filesystem
4198400 314570751 Linux filesystem#查看内核是否已经识别新的分区
[root@ubuntu-140 ~]#cat /proc/partitions
...#同步分区表
partprobe
#创建分区
[root@rocky-136 ~]#fdisk /dev/sdbWelcome to fdisk (util-linux 2.37.4).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x75d3fb8f.Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x75d3fb8fCommand (m for help): n
Partition typep primary (0 primary, 0 extended, 4 free)e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-41943039, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-41943039, default 41943039): +5GCreated a new partition 1 of type 'Linux' and of size 5 GiB.Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x75d3fb8fDevice Boot Start End Sectors Size Id Type
/dev/sdb1 2048 10487807 10485760 5G 83 Linux.
.
.Command (m for help): n
Partition typep primary (2 primary, 0 extended, 2 free)e extended (container for logical partitions)
Select (default p): e
Partition number (3,4, default 3):
First sector (20973568-41943039, default 20973568):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (20973568-41943039, default 41943039): +8GCreated a new partition 3 of type 'Extended' and of size 8 GiB.Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x75d3fb8fDevice Boot Start End Sectors Size Id Type
/dev/sdb1 2048 10487807 10485760 5G 83 Linux
/dev/sdb2 10487808 20973567 10485760 5G 83 Linux
/dev/sdb3 20973568 37750783 16777216 8G 5 Extended.
.
.Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x75d3fb8fDevice Boot Start End Sectors Size Id Type
/dev/sdb1 2048 10487807 10485760 5G 83 Linux
/dev/sdb2 10487808 20973567 10485760 5G 83 Linux
/dev/sdb3 20973568 37750783 16777216 8G 5 Extended
/dev/sdb5 20975616 27267071 6291456 3G 83 Linux
/dev/sdb6 27269120 37750783 10481664 5G 83 LinuxCommand (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.[root@rocky-136 ~]#lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 5G 0 part
├─sdb2 8:18 0 5G 0 part
├─sdb3 8:19 0 1K 0 part
├─sdb5 8:21 0 3G 0 part
└─sdb6 8:22 0 5G 0 part #删除第二个分区
Command (m for help): d
Partition number (1-3,5,6, default 6): 2Partition 2 has been deleted.Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x75d3fb8fDevice Boot Start End Sectors Size Id Type
/dev/sdb1 2048 10487807 10485760 5G 83 Linux
/dev/sdb3 20973568 37750783 16777216 8G 5 Extended
/dev/sdb5 20975616 27267071 6291456 3G 83 Linux
/dev/sdb6 27269120 37750783 10481664 5G 83 Linux
2.2.3gdisk
gdisk [ -l ] device#常用子命令
b #备份分区表到指定文件
c #修改分区名
d #删除分区
i #显示分区详细信息
l #列出所有分区类型
n #新建分区
o #创建新的分区表
p #查看分区
q #退出
r #恢复和转换选项,非专业人士勿用
s #排序
t #修改分区类型,默认 8300,表示普通分区
v #检测硬盘是否有问题
w #保存退出
x #额外功能,专家模式
? #显示帮助
#创建分区
[root@ubuntu-140 ~]#gdisk /dev/sdc
GPT fdisk (gdisk) version 1.0.8Partition table scan:MBR: not presentBSD: not presentAPM: not presentGPT: not presentCreating new GPT entries in memory.Command (? for help): n
Partition number (1-128, default 1):
First sector (34-41943006, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: +5G
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): L
Type search string, or <Enter> to show all codes: L
0701 Microsoft Storage Replica 3900 Plan 9
...
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'Command (? for help): p
Disk /dev/sdc: 41943040 sectors, 20.0 GiB
Model: VMware Virtual S
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): C75F7D47-329E-4639-88DD-F49EA483A872
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 31457213 sectors (15.0 GiB)Number Start (sector) End (sector) Size Code Name1 2048 10487807 5.0 GiB 8300 Linux filesystemCommand (? for help): n
Partition number (2-128, default 2):
First sector (34-41943006, default = 10487808) or {+-}size{KMGTP}:
Last sector (10487808-41943006, default = 41943006) or {+-}size{KMGTP}: +5G
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'Command (? for help): n
Partition number (3-128, default 3):
First sector (34-41943006, default = 20973568) or {+-}size{KMGTP}:
Last sector (20973568-41943006, default = 41943006) or {+-}size{KMGTP}:
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'Command (? for help): p
Disk /dev/sdc: 41943040 sectors, 20.0 GiB
Model: VMware Virtual S
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): C75F7D47-329E-4639-88DD-F49EA483A872
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)Number Start (sector) End (sector) Size Code Name1 2048 10487807 5.0 GiB 8300 Linux filesystem2 10487808 20973567 5.0 GiB 8300 Linux filesystem3 20973568 41943006 10.0 GiB 8300 Linux filesystemCommand (? for help): wFinal checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.#删除分区
[root@ubuntu-140 ~]#gdisk /dev/sdc
GPT fdisk (gdisk) version 1.0.8Partition table scan:MBR: protectiveBSD: not presentAPM: not presentGPT: presentFound valid GPT with protective MBR; using GPT.Command (? for help): p
Disk /dev/sdc: 41943040 sectors, 20.0 GiB
Model: VMware Virtual S
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): C75F7D47-329E-4639-88DD-F49EA483A872
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)Number Start (sector) End (sector) Size Code Name1 2048 10487807 5.0 GiB 8300 Linux filesystem2 10487808 20973567 5.0 GiB 8300 Linux filesystem3 20973568 41943006 10.0 GiB 8300 Linux filesystemCommand (? for help): d
Partition number (1-3): 2Command (? for help): p
Disk /dev/sdc: 41943040 sectors, 20.0 GiB
Model: VMware Virtual S
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): C75F7D47-329E-4639-88DD-F49EA483A872
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 10487774 sectors (5.0 GiB)Number Start (sector) End (sector) Size Code Name1 2048 10487807 5.0 GiB 8300 Linux filesystem3 20973568 41943006 10.0 GiB 8300 Linux filesystemCommand (? for help): wFinal checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.
二、文件系统
文件系统是操作系统中专门管理存储设备上数据的核心组件,它通过定义文件存储的结构、规则和访问方式,将物理存储空间逻辑化为可操作的目录和文件,实现数据的组织、存储、检索与保护,具体功能包括分配磁盘空间、管理文件权限、记录文件信息(如名称、大小、修改时间)、支持快速读写操作,以及提供数据备份、加密、压缩等高级服务,确保用户能高效、安全地管理和使用存储设备中的数据。所谓文件系统,是做在分区或者磁盘上的。
#查看当前内核支持的文件系统
ls /lib/modules/`uname -r`/kernel/fs
#查看当前系统可用的文件系统
cat /proc/filesystems
注意:系统“当前可用”的文件系统是编译内核时选入modules的,而默认支持的文件系统只是可用文件系统的子集;若要使用未在/proc文件系统列出的文件系统,需重新编译内核将其加入modules。
1.文件系统类型
2.文件系统组成类型
用户空间的应用程序无需直接与硬件或底层文件系统交互,而是通过操作系统提供的抽象接口(如系统调用)来间接操作文件,操作系统作为中间层,向上为应用程序提供统一的文件操作接口,向下管理硬件和文件系统的具体实现 。
3.文件系统管理
3.1创建文件系统
①mkfs
mkfs [options] [-t <type>] [fs-options] <device> [<size>]#常用选项
-t|--type=model #指定文件系统类型 (ext2|ext3|ext4|xfs),默认 ext2
-b #指定块 block 大小 (1024|2048|4096)
-L LABEL #设置卷标
-V|--verbose #显示创建过程
-j #同 -t ext3
-i N #为数据空间中每多少个字节创建一个inode;不应该小于block大小
-N N #指定分区中创建多少个inode
-I N #一个inode记录占用的磁盘空间大小,128---4096
-m N #默认5%,为管理人员预留空间占总空间的百分比
-O FEATURE[,...] #启用指定特性
-O ^FEATURE #关闭指定特性
root@ubuntu-140:~# lsblk /dev/sdc -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sdc
├─sdc1
├─sdc2
└─sdc3 ##创建xfs文件系统
root@ubuntu-140:~# mkfs -t xfs /dev/sdc1
meta-data=/dev/sdc1 isize=512 agcount=4, agsize=327680 blks= sectsz=512 attr=2, projid32bit=1= crc=1 finobt=1, sparse=1, rmapbt=0= reflink=1 bigtime=0 inobtcount=0
data = bsize=4096 blocks=1310720, imaxpct=25= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0#查看
root@ubuntu-140:~# lsblk /dev/sdc -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sdc
├─sdc1 xfs c27dc89c-4b76-4708-bdc3-fc73675b9879
├─sdc2
└─sdc3 #df只能查看已挂载的而设备
root@ubuntu-140:~# df -lh
Filesystem Size Used Avail Use% Mounted on
tmpfs 193M 1.5M 192M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 73G 6.4G 63G 10% /
tmpfs 964M 0 964M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 2.0G 252M 1.6G 14% /boot
tmpfs 193M 4.0K 193M 1% /run/user/0
②mke2fs
#ext系列文件系统专用管理工具
mke2fs [OPTION]... DEVICE #常用选项
-t #指定文件系统类型 {ext2|ext3|ext4|xfs}
-b #指定块大小{1024|2048|4096}
-L LABEL #设置卷标
-j #同 -t ext3,mkfs.ext3|mkfs -t ext3|mke2fs -j|mke2fs -t ext3
-i N #为数据空间中每多少个字节创建一个inode 不应该小于block大小
-N N #指定分区中创建多少个inode
-I N #一个inode记录占用的磁盘空间大小,128---4096
-m N #默认5%,为管理人员预留空间占总空间的百分比
-O FEATURE[,...] #启用指定特性
-O ^FEATURE #关闭指定特性
3.2查看和管理分区信息
①blkid
#查看块设备属性信息
blkid [OPTION]... [DEVICE]#常用选项
-U UUID #根据指定的UUID来查找对应的设备
-L LABEL #根据指定的LABEL来查找对应的设备
[root@rocky-136 ~]#blkid
/dev/mapper/rl-swap: UUID="ef5bdf1d-9726-4b85-9fe3-444e70d8db7c" TYPE="swap"
/dev/sr0: UUID="2024-11-16-01-52-31-00" LABEL="Rocky-9-5-x86_64-dvd" TYPE="iso9660" PTUUID="5d896d99" PTTYPE="dos"
/dev/mapper/rl-home: UUID="8eda8e72-ea86-4d70-a4eb-1e59d3d7b9a7" TYPE="xfs"
/dev/mapper/rl-root: UUID="bd30888e-8a4e-4125-9644-528e1dafc887" TYPE="xfs"
/dev/sda2: UUID="202a26bd-1f18-4fae-bdf8-c1096dafbadd" TYPE="xfs" PARTUUID="4f872db8-9313-4f1d-b439-5ca4ec05eede"
/dev/sda3: UUID="318G1d-SxtT-RwiR-Wfmr-Sh2a-0flK-MOXskh" TYPE="LVM2_member" PARTUUID="a47321ad-6ff6-475b-ba98-513ec9a3670c"
/dev/sda1: UUID="24A0-CF4F" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="6611a933-97f4-4c90-8105-66b9f0f1d411"
/dev/sdb2: UUID="aff8b768-0957-4a0e-8ed0-f7b42e4166c1" TYPE="ext4" PARTUUID="75d3fb8f-02"
/dev/sdb5: UUID="47854f8e-a05c-4773-905f-b3cb6e677e79" TYPE="xfs" PARTUUID="75d3fb8f-05"
/dev/sdb1: UUID="0dba9e49-6366-404d-bf26-f5cb4b0c615e" TYPE="xfs" PARTUUID="75d3fb8f-01"
/dev/sdb6: PARTUUID="75d3fb8f-06"[root@rocky-136 ~]#blkid -U 'aff8b768-0957-4a0e-8ed0-f7b42e4166c1'
/dev/sdb2
②e2label
#管理ext系列文件系统的LABEL
e2label DEVICE [LABEL]
③findfs
#查找分区
findfs [options] {LABEL,UUID,PARTUUID,PARTLABEL}=<value>
[root@ubuntu2204 ~]# findfs UUID=b2d34757-f593-46ce-a8e6-d1009eb71fdc
/dev/sdc2[root@ubuntu2204 ~]# findfs LABEL='Ubuntu-Server 22.04 LTS amd64'
/dev/sr0
④tune2fs
#重新设定ext系列文件系统可调整参数的值
tune2fs [OPTION]... [DEVICE]#常用选项
-l #查看指定文件系统信息
-L LABEL #修改卷标
-m N #修预留给管理员的空间百分比
-j #将ext2升级为ext3
-O #文件系统属性启用或禁用, -O ^has_journal
-o #调整文件系统的默认挂载选项,-o ^acl
-U UUID #修改UUID号
[root@ubuntu2204 ~]# tune2fs -l /dev/sdc1
tune2fs 1.46.5 (30-Dec-2021)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: e55d9611-63c5-43dd-a6b3-fe6409778834
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
......
......
⑤dumpe2fs
#显示ext文件系统信息,将磁盘块分组管理
dumpe2fs [OPTION]... [DEVICE]
[root@ubuntu2204 ~]# dumpe2fs /dev/sdc1
dumpe2fs 1.46.5 (30-Dec-2021)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: e55d9611-63c5-43dd-a6b3-fe6409778834
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
......
......#查看超级块信息
[root@ubuntu2204 ~]# dumpe2fs -h /dev/sdc1
dumpe2fs 1.46.5 (30-Dec-2021)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: e55d9611-63c5-43dd-a6b3-fe6409778834
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
......
......
⑥xfs_info
#显示已挂载的 xfs 文件系统信息
xfs_info mountpoint|devname
超级块和INODE TABLE
超级块(Superblock)是文件系统的元数据核心,存储文件系统类型、大小、状态等全局信息;INode表(INode Table)是文件索引数据库,记录每个文件的属性、权限及数据块位置,二者共同支撑文件系统的组织与访问。
3.3文件系统检测和修复
文件系统故障常发生于死机或者非正常关机之后,挂载为文件系统标记为"no clean"。
注意:一定不要在挂载状态下执行下面命令修复
①fsck
fsck [options] -- [fs-options] [<filesystem> ...]#常用选项
-a #自动修复
-r #交互式修复错误
②e2fsck
#ext系列文件专用的检测修复工具
e2fsck [options] -- [fs-options] [<filesystem> ...]#常用选项
-y #自动回答为yes
-f #强制修复
-p #自动进行安全的修复文件系统问题
③xfs_repair
#xfs文件系统专用检测修复工具
xfs_repair [options] device#常用选项
-f #修复文件,而设备
-n #只检查
-d #允许修复只读的挂载设备,在单用户下修复 / 时使用,然后立即reboot
4.挂载
挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为。
卸载:为解除此关联关系的过程。
挂载点下原有文件在挂载完成后会被临时隐藏,因此,挂载点目录一般为空 进程正在使用中的设备无法被卸载。
4.1挂载文件系统mount
device:指明要挂载的设备
设备文件:例如:/dev/sda5
卷标:-L 'LABEL', 例如 -L 'MYDATA'
UUID: -U 'UUID':例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'
伪文件系统名称:proc, sysfs, devtmpfs, configfs
mountpoint:挂载点目录必须事先存在,建议使用空目录
mount [-lhV]
mount -a [options]
mount [options] [--source] <source> | [--target] <directory>
mount [options] <source> <directory>
mount <operation> <mountpoint> [<target>]-a|--all #自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)
-B|--bind #绑定目录到另一个目录上
-c|--no-canonicalize #不对路径规范化
-f|--fake #空运行;跳过 mount(2) 系统调用
-F|--fork #对每个设备禁用 fork,配合-a 选项一起使用
-T|--fstab path #指定写文件,默认 /etc/fstab
-i|--internal-only #不调用 mount.<type> 辅助程序
-l|--show-labels #显示文件系统的 labels
-n|--no-mtab #不更新/etc/mtab,mount不可见
-o|--options o1,o2 #挂载选项列表,以英文逗号分隔
-O|--test-opts o1,o2 #限制文件系统集合(和 -a 选项一起使用)
-r|--read-only #以只读方式挂载文件系统(同 -o ro)
-t|--types #指定要挂载的设备上的文件系统类型,如:ext4,xfs
--source device #指明源(路径、标签、uuid)
--target mountpoint #指明挂载点
-v|--verbose #显示过程
-w|--rw|--read-write #以读写方式挂载文件系统(默认)
-L LABEL #以卷标指定挂载设备
-U UUID #以UUID指定要挂载的设备#-o选项值
async #异步模式,内存更改时,写入缓存区buffer,过一段时间再写到磁盘中,效率高,但不安全
sync #同步模式,内存更改时,同时写磁盘,安全,但效率低下
atime/noatime #包含目录和文件
diratime/nodiratime #目录的访问时间戳
auto/noauto #是否支持开机自动挂载,是否支持-a选项
exec/noexec #是否支持将文件系统上运行应用程序
dev/nodev #是否支持在此文件系统上使用设备文件
suid/nosuid #是否支持suid和sgid权限
remount #重新挂载
ro/rw #只读/读写
user/nouser #是否允许普通用户挂载此设备,/etc/fstab使用
acl/noacl #启用此文件系统上的acl功能
loop #使用loop设备
_netdev #当网络可用时才对网络资源进行挂载,如:NFS文件系统
defaults #相当于rw, suid, dev, exec, auto, nouser, async#--source 选项值
-L|--label label #同 LABEL=label
-U|--uuid uuid #同 UUID=uuid
LABEL=label #用label值指定设备
UUID=uuid #用uuid值指定设备
PARTLABEL=label #按PARTLABEL值指定设备
PARTUUID=uuid #按PARTUUID值指定设备
device #按路径指定设备
directory #绑定式挂载的挂载点(参阅 --bind/rbind)
file #用于设置回环设备的常规文件
规则:
一个挂载点同一时间只能挂载一个设备。
一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏。
一个设备可以同时挂载到多个挂载点。
通常挂载点一般是已存在空的目录。
4.2卸载文件系统umount
#卸载时:可使用设备,也可以使用挂载点
umount [-hV]
umount -a [options]
umount [options] <source> | <directory>
4.3查看挂载情况
查看挂载
mount #通过mount命令查看
cat /etc/mtab #通过查看/etc/mtab文件显示当前已挂载的所有设备
cat /proc/mounts #查看内核追踪到的已挂载的所有设备
查看挂载点情况
findmnt [options]
findmnt [options] <device> | <mountpoint>
findmnt [options] <device> <mountpoint>
findmnt [options] [--source <device>] [--target <path> | --mountpoint <dir>]
查看正在访问指定文件系统的进程
lsof MOUNT_POINT
fuser -v MOUNT_POINT
终止所有在正访问指定的文件系统的进程
fuser -km MOUNT_POINT
4.4持久挂载
将挂载保存到 /etc/fstab 中可以下次开机时,自动启用挂载。
[root@rocky-136 ~]#cat /etc/fstab | grep -v "^[#]"/dev/mapper/rl-root / xfs defaults 0 0
UUID=202a26bd-1f18-4fae-bdf8-c1096dafbadd /boot xfs defaults 0 0
UUID=24A0-CF4F /boot/efi vfat umask=0077,shortname=winnt 0 2
/dev/mapper/rl-home /home xfs defaults 0 0
/dev/mapper/rl-swap none swap defaults 0 0#要挂载的设备或伪文件系统设备文件(LABEL=label | UUID=uuid | /dev/sda1)
#挂载点:必须是事先存在的目录
#文件系统类型:ext4,xfs,iso9660,nfs,none
#挂载选项:defaults ,acl,bind,ro,rw 等
#转储频率:0 不做备份; 1 每天转储; 2 每隔一天转储
#fsck检查的文件系统的顺序:0 不自检 ; 1 首先自检,一般只有rootfs才用;2 非rootfs使用
添加新的挂载项,需要执行下面命令生效;此命令只针对文件新增行或删除行有效,如果在中间修改了挂载选项,则此命令无效。
mount -a
4.5重新挂载
修改了/etc/fstab 文件中的挂载规则,无法通过 mount -a 生效,要执行执行挂载。
mount -o remount MOUNTPOINT
5.处理交换文件和分区
Swap交换分区是Linux系统虚拟内存机制的核心组件,作为RAM的补充空间,当物理内存不足时自动将不活跃数据换出至磁盘,防止内存耗尽导致进程崩溃;但过度配置会浪费存储资源并掩盖内存泄漏问题,合理优化方案包括分散布局swap分区或使用高速存储介质以提升性能。
[root@rocky-136 ~]#free -h -s 1[root@rocky-136 ~]#dd if=/dev/zero of=/dev/null bs=3G count=1
0+1 records in
0+1 records out
2147479552 bytes (2.1 GB, 2.0 GiB) copied, 28.4729 s, 75.4 MB/s...total used free shared buff/cache available
Mem: 1.7Gi 1.2Gi 260Mi 12Mi 418Mi 509Mi
Swap: 2.0Gi 0B 2.0Gitotal used free shared buff/cache available
Mem: 1.7Gi 1.6Gi 81Mi 5.0Mi 230Mi 142Mi
Swap: 2.0Gi 11Mi 2.0Gi
...
5.1交换分区实现过程
①创建交换分区或者文件
② 使用mkswap写入特殊签名
③在/etc/fstab文件中添加适当的条目
④使用swapon -a 激活交换空间
5.2启用swap分区
swapon [options] [<spec>]#常用选项
-a|--all #激活 /etc/fstab 中的所有交换区
-d|--discard[=policy] #根据条件禁用(once|pages)
-e|--ifexists #自动跳过不存在的设备而不提示
-f|--fixpgsz #必要时重新初始化交换区
-o|--options list #指定选项,swapon -o pri=1,discard=pages,nofail /dev/sda2
-p|--priority N #指定交换设备的优先级(-1到32767),值越大优先级越高,也可在/etc/fstab第4列指定pri=value
-s|--summary #显示已使用交换设备的摘要
--show[=columns] #以可自定义的表格形式打印摘要 swapon --show|swapon --show=NAME,TYPE
--noheadings #不打印表头,配合 --show 选项
--raw #使用原生输出格式,配合 --show 选项
--bytes #在 --show 输出中以字节数显示交换区大小
-v|--verbose #显示详细信息#<spec> 参数:
-L label #同 LABEL=label
-U uuid #同 UUID=uuid
LABEL=label #按交换区标签指定设备
UUID=uuid #按交换区 UUID 指定设备
PARTLABEL=label #按分区标签指定设备
PARTUUID=uuid #按分区 UUID 指定设备
device #要使用设备的名称
filename #要使用文件的名称#可显示列
NAME #设备文件或分区路径
TYPE #设备的类型
SIZE #交换区大小
USED #已使用字节数
PRIO #交换优先级
UUID #uuid
LABEL #label
5.3禁用swap分区
swapoff [options] [<spec>]#常用选项
-a|--all #禁用 /proc/swaps 中的所有交换区
-v|--verbose #显示过程#spec 参数
-L label #要使用设备的标签
-U uuid #要使用设备的 UUID
LABEL=label #要使用设备的标签
UUID=uuid #要使用设备的 UUID
device #要使用设备的名称
filename #要使用文件的名称
5.4创建swap分区
#创建swap分区
#先创建分区,选择swap类型#在创建swap文件系统
[root@ubuntu-140 ~]#mkswap /dev/sdb3
Setting up swapspace version 1, size = 4 GiB (4294963200 bytes)
no label, UUID=6ef3b273-eb49-42d7-b7df-3ea988705ec7
[root@ubuntu-140 ~]#mkswap /dev/sdb4
Setting up swapspace version 1, size = 5 GiB (5367635968 bytes)
no label, UUID=d443c378-8610-41ee-8a5a-bb4f0c9e8eb4#查看
[root@ubuntu-140 ~]#lsblk -f
NAME FSTYPE FSVER LABEL
loop0 squashfs 4.0
loop1 squashfs 4.0
loop2 squashfs 4.0
loop4 squashfs 4.0
loop5 squashfs 4.0
loop6 squashfs 4.0
sda
├─sda1
├─sda2 ext4 1.0
└─sda3 LVM2_member LVM2 001 └─ubuntu--vg-ubuntu--lv ext4 1.0
sdb
├─sdb1
├─sdb2
├─sdb3 swap 1
└─sdb4 swap 1
sr0 iso9660 Joliet Extension Ubuntu-Server 22.04.5 LTS amd6[root@ubuntu-140 ~]#vim /etc/fstab
...
/dev/sdb3 none swap sw 0 0
/dev/sdb4 none swap sw 0 0[root@ubuntu-140 ~]#free -htotal used free shared buff/cache available
Mem: 1.9Gi 344Mi 249Mi 1.0Mi 1.3Gi 1.4Gi
Swap: 2.0Gi 0.0Ki 2.0Gi#禁用 启用
[root@ubuntu-140 ~]#swapoff -a
[root@ubuntu-140 ~]#swapon -a[root@ubuntu-140 ~]#free -htotal used free shared buff/cache available
Mem: 1.9Gi 351Mi 241Mi 1.0Mi 1.3Gi 1.3Gi
Swap: 10Gi 0B 10Gi
5.5查看swap分区
[root@ubuntu-140 ~]#swapon -s
Filename Type Size Used Priority
/swap.img file 2097148 0 -2
/dev/sdb3 partition 4194300 0 -3
/dev/sdb4 partition 5241832 0 -4[root@ubuntu-140 ~]#cat /proc/swaps
Filename Type Size Used Priority
/swap.img file 2097148 0 -2
/dev/sdb3 partition 4194300 0 -3
/dev/sdb4 partition 5241832 0 -4
5.6修改swap优先级
Linux的Swap分区优先级机制允许用户通过指定0到32767的正数值来控制Swap设备的使用顺序(值越大优先级越高);若未手动指定,内核会自动分配负优先级(从-1开始递减),确保用户显式设置的Swap(正数)始终优先于系统自动分配的Swap(负数),从而实现灵活的内存换出策略管理。
[root@ubuntu-140 ~]#swapon -s
Filename Type Size Used Priority
/swap.img file 2097148 0 -2
/dev/sdb3 partition 4194300 0 -3
/dev/sdb4 partition 5241832 0 -4
[root@ubuntu-140 ~]#vim /etc/fstab
[root@ubuntu-140 ~]#cat /etc/fstab | grep -v "^#"
/dev/disk/by-id/dm-uuid-LVM-fNrnSk6JqHwgGPkevf3TEE7uQHJ9SVkHmQrhmuvVeWeZlZ0c8wojejRJEz8wa9i7 / ext4 defaults 0 1
/dev/disk/by-uuid/519162fa-646a-4961-ade8-3e2269441253 /boot ext4 defaults 0 1
/swap.img none swap sw 0 0/dev/sdb3 none swap sw,pri=100 0 0
/dev/sdb4 none swap sw 0 0[root@ubuntu-140 ~]#swapoff -a;swapon -a;swapon -s
Filename Type Size Used Priority
/swap.img file 2097148 0 -2
/dev/sdb3 partition 4194300 0 100
/dev/sdb4 partition 5241832 0 -3
5.7以文件作为swap分区
#创建文件
[root@rocky86 ~]# dd if=/dev/zero of=/swapfile bs=1G count=2
2+0 records in
2+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 4.72333 s, 455 MB/s#创建文件系统
[root@rocky86 ~]# mkswap /swapfile
mkswap: /swapfile: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=b1edc27b-2f23-4991-b211-0d2c4bd6a85f#修改/etc/fstab,添加行
/swapfile none swap sw 0 0#启用
[root@ubuntu2204 ~]# swapon /swapfile
swapon: /swapfile: insecure permissions 0644, 0600 suggested.#查看
[root@ubuntu2204 ~]# swapon -s
Filename Type Size Used Priority
/swap.img file 2097148 0 -2
/dev/sdc3 partition 2097148 3352 123
/swapfile file 2097148 0 -3
5.8永久禁用swap
#删除swap行
[root@ubuntu2204 ~]# sed -i.bak '/swap/d' /etc/fstab#或注释swap行
[root@ubuntu2204 ~]# sed -i.bak '/swap/s@^@#@' /etc/fstab#禁用swap,由于修改了配置文件,所以重启也不会有SWAP
[root@ubuntu2204 ~]# swapoff -a
5.9swap使用策略
/proc/sys/vm/swappiness 的值决定了当内存占用达到一定的百分比时,会启用swap分区的空间。当内存使用率达到100-swappiness时,会启用交换分区;简单地说这个参数定义了系统对swap的使用倾向,此值越大表示越倾向于使用swap。可以设为0,这样做并不会禁止对swap的使用,只是最大限度地降低了使用swap的可能性
移动介质
挂载意味着使外来的文件系统看起来如同是主目录树的一部分,所有移动介质也需要挂载,挂载点通常在/media 或 /mnt下。访问前,介质必须被挂载,摘除时,介质必须被卸载。
按照默认设置,非根用户只能挂载某些设备(光盘、DVD、软盘、USB等等)。
手动挂载:mount /dev/sr0 /mnt/
自动挂载
#ubuntu
[root@ubuntu2204 ~]# apt install autofs#己运行,己加开机启动
[root@ubuntu2204 ~]# systemctl status autofs#修改配置文件
[root@ubuntu2204 ~]# vim /etc/auto.master
......
/misc /etc/auto.misc #取消此行注释#重启服务
[root@ubuntu2204 ~]# systemctl restart autofs#查看
[root@ubuntu2204 ~]# ls /misc/cd
boot boot.catalog casper dists EFI install md5sum.txt pool ubuntu#rocky
[root@rocky86 ~]# yum install -y autofs
[root@rocky86 ~]# systemctl enable --now autofs
#这样就能自动列出光盘内容
[root@rocky86 ~]# ls /misc/cd
6.文件系统查看工具df
df [OPTION]... [FILE]...#常用选项
-a|--all #显示所有
-B|--block-size=SIZE #显示时指定块大小
--direct #将挂载点那一列标题显示为文件
-h|--human-readable #以方便阅读的方式显示
-H|--si #以 1000为单位,而不是1024
-i|--inodes #显示inode 信息而非块使用量
-k #同 --block-size=1K
-l|--local #只显示本机的文件系统
--output[=FIELD_LIST] #只显示指定字段
-P|--portability #以Posix兼容的格式输出
--total #最后加一行汇总数据
-t|--type=TYPE #根据文件系统类型过滤
-T|--print-type #显示文件系统类型
-x|--exclude-type=TYPE #根据文件系统类型反向过滤
[root@ubuntu2204 ~]# df -Th
[root@ubuntu-140 ~]#df -Th
Filesystem Type Size Used Avail Use% Mounted on
tmpfs tmpfs 193M 1.9M 191M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv ext4 73G 6.4G 63G 10% /
tmpfs tmpfs 964M 96K 964M 1% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 ext4 2.0G 252M 1.6G 14% /boot
tmpfs tmpfs 193M 4.0K 193M 1% /run/user/0[root@ubuntu-140 ~]#df /dev/sda
Filesystem 1K-blocks Used Available Use% Mounted on
udev 928960 0 928960 0% /dev
7.目录统计工具du
du [OPTION]... [FILE]...
du [OPTION]... --files0-from=F#常用选项
-0|--null #输出时以NULL分割,而不是换行
-a|--all #显示所有文件和目录大小
-B|--block-size=SIZE #指定块大小
-b|--bytes #同 --apparent-size --block-size=1
-c|--total #汇总
-d|--max-depth=N #指定最大目录层级
-h|--human-readable #以方便阅读的格式显示
-k #同 --block-size=1K
-m #同 --block-size=1M
--si #友好显示,以 1000 为单位,而不是 1024
-s|--summarize #只显示外层目录
-X|--exclude-from=FILE #根据文件名忽略
--exclude=PATTERN #根据正则表达式忽略
-x|--one-file-system #忽略不在同一个文件系统的目录
#查看目录占用多大空间
[root@ubuntu2204 ~]# du -sh /etc/
6.5M /etc/#查看目录下每个文件或子目录大小
[root@ubuntu2204 ~]# du -sh /var/log/* | head -n 3
40K /var/log/alternatives.log
16K /var/log/apache2
252K /var/log/apt
8.文件工具dd
dd [OPERAND]...
dd OPTION#常用格式
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST bs=N count=N#常用选项
if=file #从所命名文件读取而不是从标准输入
of=file #写到所命名的文件而不是到标准输出
ibs=size #一次读size个byte
obs=size #一次写size个byte
bs=size #指定块大小(既是是ibs也是obs)
cbs=size #一次转化size个byte
skip=blocks #从开头忽略blocks个ibs大小的块
seek=blocks #从开头忽略blocks个obs大小的块
count=n #复制n个bs
conv=conversion[,conversion...] #用指定的参数转换文件#conversion 转换参数
ascii #转换 EBCDIC 为 ASCII
ebcdic #转换 ASCII 为 EBCDIC
lcase #把大写字符转换为小写字符
ucase #把小写字符转换为大写字符
nocreat #不创建输出文件
noerror #出错时不停止
notrunc #不截短输出文件
sync #把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
fdatasync #写完成前,物理写入输出文件
三、RAID
RAID(磁盘阵列)技术由David Patterson等人在1987年提出,最初称为“廉价磁盘冗余阵列,后更名为“独立硬盘冗余阵列,其核心是通过虚拟化存储技术将多个物理硬盘组合为逻辑硬盘,以提升性能、数据冗余或兼顾两者。
1988年论文中定义了RAID 1至RAID 5的五个基础级别,后续扩展出RAID 0、RAID 6等更多层级,每个级别通过不同的数据分散模式(如条带化、镜像、校验)平衡数据可靠性与读写性能。
RAID将多块硬盘视为单一实体,常用于服务器场景,现因硬盘成本下降及主板集成支持,也普及至普通用户的大容量存储需求(如音视频制作)。
实现方式包括外接式磁盘阵列(通过扩展卡适配)、内接式RAID(主板集成控制器,需BIOS配置)和软件RAID(依赖操作系统,如NAS系统),主要功能为通过并行读写提升IO能力,并利用冗余算法保障数据耐用性。
RAID级别总结
四、逻辑卷管理
LVM(Logical Volume Manager,逻辑卷管理器)是Linux系统中一种灵活的磁盘管理技术,通过将物理存储设备(如硬盘、分区)抽象为逻辑卷,实现动态调整存储空间、跨磁盘合并容量、支持快照与数据迁移等功能;用户可按需扩展或缩减卷大小,无需受限于物理分区,同时通过卷组(Volume Group)和逻辑卷(Logical Volume)的分层架构,显著提升存储资源的利用率和管理效率。
实现过程:
1.将设备指定为物理卷
2.用一个或者多个物理卷来创建一个卷组,物理卷是用固定大小的物理区域PE定义
3.在物理卷上创建的逻辑卷, 是由物理区域(PE)组成
4.可以在逻辑卷上创建文件系统并挂载
1.实现逻辑卷
apt install lvm2
1.1pv管理工具
将块设备创建为物理卷,本质上就是给块设备打一个标签,块设备数量和物理卷数量是对应的,有几个块设备,就可以创建几个物理卷,块设备容量大小不限,可以跨分区。
#显示pv信息
pvs #简要pv信息显示
pvdisplay #显示详细信息#创建pv
pvcreate /dev/DEVICE#删除pv
pvremove /dev/DEVICE
1.2vg管理工具
#显示卷
vgs
vgdisplay#创建卷组
vgcreate [-s Size ] vgname pv1 [pv2...]
#-s 指定PE大小,数字加单位,单位为 k|K|m|M|g|G|t|T|p|P|e|E#管理卷组
vgextend vgname pv1 [pv2...] #往卷组中添加物理卷
vgreduce vgname pv1 [pv2...] #从卷组中移除物理卷#删除卷组
#删除vg之前,要先把对应的 pv 解除绑定 (pvmove)
vgremove vgname
1.3lv管理工具
#显示逻辑卷
lvs
Lvdisplay#创建逻辑卷
lvcreate {-L N[mMgGtT]|-l N} -n NAME VolumeGroup
-L|--size N[mMgGtT] #指定大小
-l|--extents N #指定PE个数,也可用百分比
-n Name #逻辑卷名称#扩展逻辑卷
lvextend {-L N[mMgGtT]|-l N} LV_NAME#常用选项
-L|--size [+]Size[mMgGtT] #N个单位大小,也可写成+10M
-l|--extents [+]Number[PERCENT] #N个PE,也可以写成+10,表示在原基础上加10个PE大小,+100%free 表示把剩下空间都用完
-r|--resizefs #自动重置文件系统大小#缩减逻辑卷
lvreduce {-L N[mMgGtT]|-l N} LV_NAME#常用选项
-L|--size [-]Size[mMgGtT] #N个单位大小,也可写成-10M
-l|--extents [-]Number[PERCENT] #N个PE,也可以写成-10,表示在原基础上减10个PE大小#删除逻辑卷
lvremove /dev/VG_NAME/LV_NAME#重设文件系统大小
#修改了逻辑卷大小后,要同步文件系统
fsadm [options] resize device [new_size[BKMGTEP]]
resize2fs [-f] [-F] [-M] [-P] [-p] lvname #只支持ext系列文件系统
xfs_growfs /mountpoint #只支持xfs 文件系统
逻辑卷的使用跟硬盘分区使用一样,要先创建文件系统,再进行挂载。
1.4扩展逻辑卷
扩展逻辑卷之前,要先保证卷组上还有空间,先扩展逻辑卷,再扩容文件系统。
#第一步实现逻辑卷的空间扩展
lvextend -L [+]N[mMgGtT] /dev/VG_NAME/LV_NAME#第二步实现文件系统的扩展
#针对ext
resize2fs /dev/VG_NAME/LV_NAME#针对xfs
xfs_growfs MOUNTPOINT
#一步实现容量和文件系统的扩展
lvresize -r -l +100%FREE /dev/VG_NAME/LV_NAME
1.5缩减逻辑卷
注意:缩减有数据损坏的风险,建议先备份再缩减,不支持在线缩减,要先取消挂载,xfs文件系统不支持缩。
#取消挂载
umount /dev/VG_NAME/LV_NAME#文件系统检测,e2fsck可写成fsck
e2fsck -f /dev/VG_NAME/LV_NAME#缩减文件系统到指定大小
resize2fs /dev/VG_NAME/LV_NAME N[mMgGtT]#缩减逻辑卷
lvreduce -L [-] N[mMgGtT] /dev/VG_NAME/LV_NAME#重新挂载
mount /dev/VG_NAME/LV_NAME mountpoint#简化版
umount /dev/VG_NAME/LV_NAME
lvreduce -L N[mMgGtT] -r /dev/VG_NAME/LV_NAME
mount /dev/VG_NAME/LV_NAME mountpoint
2.跨主机迁移卷组
源计算机上
1 在旧系统中,umount 所有卷组上的逻辑卷
2 禁用卷组
vgchange -a n vg0
lvdisplay3 导出卷组
vgexport vg0
pvscan
vgdisplay4 拆下旧硬盘在目标计算机上,并导入卷组
vgimport vg05 启用
vgchange -ay vg06 mount 所有卷组上的逻辑卷
3.拆除指定的pv存储设备
#vg中拆除
vgreduce vg_name device#pv重拆除
pvremove /device
root@ubuntu-140:~# lsblk -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
...
sdb
sdc
├─sdc1 LVM2_member LVM2 001 mk2Ceu-LOZL-DEqC-ffCm-cXf2-0fSK-QBONcf
└─sdc2 LVM2_member LVM2 001 BfIUUZ-guuU-cLPC-yFcR-Vhke-GVvk-imK0fY
sr0 iso9660 Joliet Extens Ubuntu-Server 22.04.5 LTS amd64 2024-09-11-18-46-48-00 root@ubuntu-140:~# pvsPV VG Fmt Attr PSize PFree /dev/sda3 ubuntu-vg lvm2 a-- <148.00g 74.00groot@ubuntu-140:~# pvcreate /dev/sdc1Physical volume "/dev/sdc1" successfully created.
root@ubuntu-140:~# pvcreate /dev/sdc2Physical volume "/dev/sdc2" successfully created.root@ubuntu-140:~# pvsPV VG Fmt Attr PSize PFree /dev/sda3 ubuntu-vg lvm2 a-- <148.00g 74.00g/dev/sdc1 lvm2 --- 4.00g 4.00g/dev/sdc2 lvm2 --- 6.00g 6.00groot@ubuntu-140:~# vgsVG #PV #LV #SN Attr VSize VFree ubuntu-vg 1 1 0 wz--n- <148.00g 74.00g
root@ubuntu-140:~# vgcreate vg1 /dev/sdc1 /dev/sdc2Volume group "vg1" successfully created
root@ubuntu-140:~# pvsPV VG Fmt Attr PSize PFree /dev/sda3 ubuntu-vg lvm2 a-- <148.00g 74.00g/dev/sdc1 vg1 lvm2 a-- <4.00g <4.00g/dev/sdc2 vg1 lvm2 a-- <6.00g <6.00g
root@ubuntu-140:~# vgdisplay vg1--- Volume group ---VG Name vg1System ID Format lvm2Metadata Areas 2Metadata Sequence No 1VG Access read/writeVG Status resizableMAX LV 0Cur LV 0Open LV 0Max PV 0Cur PV 2Act PV 2VG Size 9.99 GiBPE Size 4.00 MiBTotal PE 2558Alloc PE / Size 0 / 0 Free PE / Size 2558 / 9.99 GiBVG UUID H2ZkkJ-T0XA-PV9d-etIh-VCuS-TKr2-Px3HJGroot@ubuntu-140:~# pvcreate /dev/sdbPhysical volume "/dev/sdb" successfully created.
root@ubuntu-140:~# pvsPV VG Fmt Attr PSize PFree /dev/sda3 ubuntu-vg lvm2 a-- <148.00g 74.00g/dev/sdb lvm2 --- 10.00g 10.00g/dev/sdc1 vg1 lvm2 a-- <4.00g <4.00g/dev/sdc2 vg1 lvm2 a-- <6.00g <6.00g
root@ubuntu-140:~# vgextend vg1 /dev/sdbVolume group "vg1" successfully extended
root@ubuntu-140:~# vgsVG #PV #LV #SN Attr VSize VFree ubuntu-vg 1 1 0 wz--n- <148.00g 74.00gvg1 3 0 0 wz--n- <19.99g <19.99g
root@ubuntu-140:~# vgdisplay vg1--- Volume group ---VG Name vg1System ID Format lvm2Metadata Areas 3Metadata Sequence No 2VG Access read/writeVG Status resizableMAX LV 0Cur LV 0Open LV 0Max PV 0Cur PV 3Act PV 3VG Size <19.99 GiBPE Size 4.00 MiBTotal PE 5117Alloc PE / Size 0 / 0 Free PE / Size 5117 / <19.99 GiBVG UUID H2ZkkJ-T0XA-PV9d-etIh-VCuS-TKr2-Px3HJGroot@ubuntu-140:~# pvsPV VG Fmt Attr PSize PFree /dev/sda3 ubuntu-vg lvm2 a-- <148.00g 74.00g/dev/sdb vg1 lvm2 a-- <10.00g <10.00g/dev/sdc1 vg1 lvm2 a-- <4.00g <4.00g/dev/sdc2 vg1 lvm2 a-- <6.00g <6.00g
root@ubuntu-140:~# lvcreate -l 100 -n lv1 vg1Logical volume "lv1" created.
root@ubuntu-140:~# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertubuntu-lv ubuntu-vg -wi-ao---- <74.00g lv1 vg1 -wi-a----- 400.00m root@ubuntu-140:~# lvcreate -L 12G -n lv2 vg1Logical volume "lv2" created.
root@ubuntu-140:~# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertubuntu-lv ubuntu-vg -wi-ao---- <74.00g lv1 vg1 -wi-a----- 400.00m lv2 vg1 -wi-a----- 12.00g root@ubuntu-140:~# lsblk
...
sdb 8:16 0 10G 0 disk
└─vg1-lv2 253:2 0 12G 0 lvm
sdc 8:32 0 20G 0 disk
├─sdc1 8:33 0 4G 0 part
│ ├─vg1-lv1 253:1 0 400M 0 lvm
│ └─vg1-lv2 253:2 0 12G 0 lvm
└─sdc2 8:34 0 6G 0 part
sr0 11:0 1 2G 0 rom
root@ubuntu-140:~# mkfs.ext4 /dev/vg1/lv2
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 3145728 4k blocks and 786432 inodes
Filesystem UUID: 1bb711b4-9437-4e21-8fdd-b9edce933fc8
Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done root@ubuntu-140:~# lsblk -f
...
sdb LVM2_membe LVM2 001 wrB17P-ajY5-0JaC-8M76-PoRz-rO7W-WYQM34
└─vg1-lv2 ext4 1.0 1bb711b4-9437-4e21-8fdd-b9edce933fc8
sdc
├─sdc1 LVM2_membe LVM2 001 mk2Ceu-LOZL-DEqC-ffCm-cXf2-0fSK-QBONcf
│ ├─vg1-lv1
│ └─vg1-lv2 ext4 1.0 1bb711b4-9437-4e21-8fdd-b9edce933fc8
└─sdc2 LVM2_membe LVM2 001 BfIUUZ-guuU-cLPC-yFcR-Vhke-GVvk-imK0fY
sr0 iso9660 Joliet Exten Ubuntu-Server 22.04.5 LTS amd64 2024-09-11-18-46-48-00 root@ubuntu-140:~# mkdir /lv{1,2,3}
root@ubuntu-140:~# mount /dev/vg1/lv2 /lv2
root@ubuntu-140:~# lsblk
...
sdb 8:16 0 10G 0 disk
└─vg1-lv2 253:2 0 12G 0 lvm /lv2
sdc 8:32 0 20G 0 disk
├─sdc1 8:33 0 4G 0 part
│ ├─vg1-lv1 253:1 0 400M 0 lvm
│ └─vg1-lv2 253:2 0 12G 0 lvm /lv2
└─sdc2 8:34 0 6G 0 part
sr0 11:0 1 2G 0 rom
root@ubuntu-140:~# df -lh
Filesystem Size Used Avail Use% Mounted on
tmpfs 193M 1.6M 192M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 73G 6.4G 63G 10% /
tmpfs 964M 96K 964M 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 2.0G 252M 1.6G 14% /boot
tmpfs 193M 4.0K 193M 1% /run/user/0
/dev/mapper/vg1-lv2 12G 24K 12G 1% /lv2root@ubuntu-140:~# dd if=/dev/zero of=/lv2/test.img bs=1G count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 9.84044 s, 109 MB/s
root@ubuntu-140:~# cp /etc/fstab /lv2/
root@ubuntu-140:~# cp /var/log/auth.log /lv2/root@ubuntu-140:~# df -lh
Filesystem Size Used Avail Use% Mounted on
tmpfs 193M 1.6M 192M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 73G 6.4G 63G 10% /
tmpfs 964M 96K 964M 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 2.0G 252M 1.6G 14% /boot
tmpfs 193M 4.0K 193M 1% /run/user/0
/dev/mapper/vg1-lv2 12G 1.1G 11G 10% /lv2
root@ubuntu-140:~# ls /lv2/
auth.log fstab lost+found test.img#添加新分区
root@ubuntu-140:~# lsblk
...
sdb 8:16 0 10G 0 disk
└─vg1-lv2 253:2 0 12G 0 lvm /lv2
sdc 8:32 0 20G 0 disk
├─sdc1 8:33 0 4G 0 part
│ ├─vg1-lv1 253:1 0 400M 0 lvm
│ └─vg1-lv2 253:2 0 12G 0 lvm /lv2
├─sdc2 8:34 0 6G 0 part
└─sdc3 8:35 0 8G 0 part
sr0 11:0 1 2G 0 rom root@ubuntu-140:~# pvcreate /dev/sdc3Physical volume "/dev/sdc3" successfully created.
root@ubuntu-140:~# pvsPV VG Fmt Attr PSize PFree /dev/sda3 ubuntu-vg lvm2 a-- <148.00g 74.00g/dev/sdb vg1 lvm2 a-- <10.00g 0 /dev/sdc1 vg1 lvm2 a-- <4.00g 1.60g/dev/sdc2 vg1 lvm2 a-- <6.00g <6.00g/dev/sdc3 lvm2 --- 8.00g 8.00g
root@ubuntu-140:~# vgextend vg1 /dev/sdc3Volume group "vg1" successfully extended
root@ubuntu-140:~# vgsVG #PV #LV #SN Attr VSize VFree ubuntu-vg 1 1 0 wz--n- <148.00g 74.00gvg1 4 2 0 wz--n- 27.98g 15.59g
root@ubuntu-140:~# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertubuntu-lv ubuntu-vg -wi-ao---- <74.00g lv1 vg1 -wi-a----- 400.00m lv2 vg1 -wi-ao---- 12.00g
root@ubuntu-140:~# lvextend -L +10G /dev/vg1/lv2Size of logical volume vg1/lv2 changed from 12.00 GiB (3072 extents) to 22.00 GiB (5632 extents).Logical volume vg1/lv2 successfully resized.
root@ubuntu-140:~# df -lh
Filesystem Size Used Avail Use% Mounted on
tmpfs 193M 1.7M 192M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 73G 6.4G 63G 10% /
tmpfs 964M 96K 964M 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 2.0G 252M 1.6G 14% /boot
tmpfs 193M 4.0K 193M 1% /run/user/0
/dev/mapper/vg1-lv2 12G 1.1G 11G 10% /lv2
root@ubuntu-140:~# resize2fs /dev/vg1/lv2
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/vg1/lv2 is mounted on /lv2; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
The filesystem on /dev/vg1/lv2 is now 5767168 (4k) blocks long.root@ubuntu-140:~# df -lh
Filesystem Size Used Avail Use% Mounted on
tmpfs 193M 1.7M 192M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 73G 6.4G 63G 10% /
tmpfs 964M 96K 964M 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 2.0G 252M 1.6G 14% /boot
tmpfs 193M 4.0K 193M 1% /run/user/0
/dev/mapper/vg1-lv2 22G 1.1G 20G 5% /lv2#root@ubuntu-140:~# umount /lv2
root@ubuntu-140:~# lsblk
...
sda 8:0 0 150G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 148G 0 part └─ubuntu--vg-ubuntu--lv 253:0 0 74G 0 lvm /
sdb 8:16 0 10G 0 disk
└─vg1-lv2 253:2 0 22G 0 lvm
sdc 8:32 0 20G 0 disk
├─sdc1 8:33 0 4G 0 part
│ ├─vg1-lv1 253:1 0 400M 0 lvm
│ └─vg1-lv2 253:2 0 22G 0 lvm
├─sdc2 8:34 0 6G 0 part
│ └─vg1-lv2 253:2 0 22G 0 lvm
└─sdc3 8:35 0 8G 0 part └─vg1-lv2 253:2 0 22G 0 lvm
sr0 11:0 1 2G 0 rom
root@ubuntu-140:~# e2fsck -f /dev/vg1/lv2
e2fsck 1.46.5 (30-Dec-2021)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg1/lv2: 14/1441792 files (0.0% non-contiguous), 380298/5767168 blocks
root@ubuntu-140:~# resize2fs /dev/vg1/lv2 16G
resize2fs 1.46.5 (30-Dec-2021)
Resizing the filesystem on /dev/vg1/lv2 to 4194304 (4k) blocks.
The filesystem on /dev/vg1/lv2 is now 4194304 (4k) blocks long.root@ubuntu-140:~# lvreduce -L 16G /dev/vg1/lv2WARNING: Reducing active logical volume to 16.00 GiB.THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg1/lv2? [y/n]: ySize of logical volume vg1/lv2 changed from 22.00 GiB (5632 extents) to 16.00 GiB (4096 extents).Logical volume vg1/lv2 successfully resized.
root@ubuntu-140:~# mount /dev/vg1/lv2 /lv2
root@ubuntu-140:~# ls /lv2
auth.log fstab lost+found test.imgroot@ubuntu-140:~# pvsPV VG Fmt Attr PSize PFree /dev/sda3 ubuntu-vg lvm2 a-- <148.00g 74.00g/dev/sdb vg1 lvm2 a-- <10.00g 0 /dev/sdc1 vg1 lvm2 a-- <4.00g 0 /dev/sdc2 vg1 lvm2 a-- <6.00g <6.00g/dev/sdc3 vg1 lvm2 a-- <8.00g <5.60g
root@ubuntu-140:~# pvmove /dev/sdc2No data to move for vg1.
root@ubuntu-140:~# vgreduce vg1 /dev/sdc2Removed "/dev/sdc2" from volume group "vg1"
root@ubuntu-140:~# pvsPV VG Fmt Attr PSize PFree /dev/sda3 ubuntu-vg lvm2 a-- <148.00g 74.00g/dev/sdb vg1 lvm2 a-- <10.00g 0 /dev/sdc1 vg1 lvm2 a-- <4.00g 0 /dev/sdc2 lvm2 --- 6.00g 6.00g/dev/sdc3 vg1 lvm2 a-- <8.00g <5.60g
root@ubuntu-140:~# pvremove /dev/sdc2Labels on physical volume "/dev/sdc2" successfully wiped.
root@ubuntu-140:~# pvsPV VG Fmt Attr PSize PFree /dev/sda3 ubuntu-vg lvm2 a-- <148.00g 74.00g/dev/sdb vg1 lvm2 a-- <10.00g 0 /dev/sdc1 vg1 lvm2 a-- <4.00g 0 /dev/sdc3 vg1 lvm2 a-- <8.00g <5.60g
root@ubuntu-140:~# vgsVG #PV #LV #SN Attr VSize VFree ubuntu-vg 1 1 0 wz--n- <148.00g 74.00gvg1 3 2 0 wz--n- <21.99g <5.60g
root@ubuntu-140:~# pvdisplay /dev/sdc*Cannot use /dev/sdc: device is partitioned--- Physical volume ---PV Name /dev/sdc1VG Name vg1PV Size 4.00 GiB / not usable 4.00 MiBAllocatable yes (but full)PE Size 4.00 MiBTotal PE 1023Free PE 0Allocated PE 1023PV UUID mk2Ceu-LOZL-DEqC-ffCm-cXf2-0fSK-QBONcf--- Physical volume ---PV Name /dev/sdc3VG Name vg1PV Size 8.00 GiB / not usable 4.00 MiBAllocatable yes PE Size 4.00 MiBTotal PE 2047Free PE 1433Allocated PE 614PV UUID XOQZqW-Ur0S-R4TF-9SEB-vCcV-GXpM-DjJUoAFailed to find physical volume "/dev/sdc2".
root@ubuntu-140:~# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertubuntu-lv ubuntu-vg -wi-ao---- <74.00g lv1 vg1 -wi-a----- 400.00m lv2 vg1 -wi-ao---- 16.00g
root@ubuntu-140:~# pvmove /dev/sdc1 /dev/sdc1: Moved: 7.82%/dev/sdc1: Moved: 9.78%/dev/sdc1: Moved: 100.00%
root@ubuntu-140:~# pvdisplay /dev/sdc*Cannot use /dev/sdc: device is partitioned--- Physical volume ---PV Name /dev/sdc1VG Name vg1PV Size 4.00 GiB / not usable 4.00 MiBAllocatable yes PE Size 4.00 MiBTotal PE 1023Free PE 1023Allocated PE 0PV UUID mk2Ceu-LOZL-DEqC-ffCm-cXf2-0fSK-QBONcf--- Physical volume ---PV Name /dev/sdc3VG Name vg1PV Size 8.00 GiB / not usable 4.00 MiBAllocatable yes PE Size 4.00 MiBTotal PE 2047Free PE 410Allocated PE 1637PV UUID XOQZqW-Ur0S-R4TF-9SEB-vCcV-GXpM-DjJUoAFailed to find physical volume "/dev/sdc2".
root@ubuntu-140:~# vgreduce vg1 /dev/sdc1Removed "/dev/sdc1" from volume group "vg1"
root@ubuntu-140:~# pvsPV VG Fmt Attr PSize PFree /dev/sda3 ubuntu-vg lvm2 a-- <148.00g 74.00g/dev/sdb vg1 lvm2 a-- <10.00g 0 /dev/sdc1 lvm2 --- 4.00g 4.00g/dev/sdc3 vg1 lvm2 a-- <8.00g 1.60g
root@ubuntu-140:~# pvremove /dev/sdc1Labels on physical volume "/dev/sdc1" successfully wiped.
root@ubuntu-140:~# pvsPV VG Fmt Attr PSize PFree /dev/sda3 ubuntu-vg lvm2 a-- <148.00g 74.00g/dev/sdb vg1 lvm2 a-- <10.00g 0 /dev/sdc3 vg1 lvm2 a-- <8.00g 1.60g
root@ubuntu-140:~# lsblk -f
...
sda
├─sda1
├─sda2 ext4 1.0 519162fa-646a-4961-ade8-3e2269441253 1.5G 13% /boot
└─sda3 LVM2_membe LVM2 001 4WDF2I-3rZ6-fHkc-IyCD-L8S7-NRKw-iRu4Xh └─ubuntu--vg-ubuntu--lvext4 1.0 b13468b6-d709-4cb1-a6bc-377fb60c3785 62.2G 9% /
sdb LVM2_membe LVM2 001 wrB17P-ajY5-0JaC-8M76-PoRz-rO7W-WYQM34
└─vg1-lv2 ext4 1.0 1bb711b4-9437-4e21-8fdd-b9edce933fc8 13.9G 6% /lv2
sdc
├─sdc1
├─sdc2
└─sdc3 LVM2_membe LVM2 001 XOQZqW-Ur0S-R4TF-9SEB-vCcV-GXpM-DjJUoA ├─vg1-lv1 └─vg1-lv2 ext4 1.0 1bb711b4-9437-4e21-8fdd-b9edce933fc8 13.9G 6% /lv2
sr0 iso9660 Joliet Exte Ubuntu-Server 22.04.5 LTS amd64 2024-09-11-18-46-48-00
五、逻辑卷快照
LVM快照是一种高效的逻辑卷数据保护机制,通过创建原始逻辑卷在特定时间点的虚拟副本实现数据备份或临时复制。其核心原理是仅在原始卷或快照数据发生修改时,将变更前的旧数据块动态存储到快照预留空间中,未修改部分则由快照与原始卷共享存储,从而大幅减少空间占用(快照初始仅需少量空间,可后续通过lvextend扩展)。
说明:
1. 如果log_lv 中的文件不做任何修改,则快照空间为空
2. 修改f1,第一次修改时,将修改前的f1推到快照,后续的修改不管
3. 删除f2,将f2推送到快照
4. 新建f3,不会被推送到快照
5. 使用快照还原,则f1被还原,f2被还原,f3也没有
特点:备份速度快,瞬间完成;应用场景是测试环境,不能完全代替备份;快照后,逻辑卷的修改速度会一定有影响。
#实现逻辑快照
[root@ubuntu-140 ~]#pvcreatr /dev/sdc{1,2}
Command 'pvcreatr' not found, did you mean:command 'pvcreate' from deb lvm2 (2.03.11-2.1ubuntu5)
Try: apt install <deb name>
[root@ubuntu-140 ~]#pvcreate /dev/sdc{1,2}Physical volume "/dev/sdc1" successfully created.Physical volume "/dev/sdc2" successfully created.
[root@ubuntu-140 ~]#pvsPV VG Fmt Attr PSize PFree /dev/sda3 ubuntu-vg lvm2 a-- <148.00g 74.00g/dev/sdb vg1 lvm2 a-- <10.00g 0 /dev/sdc1 lvm2 --- 4.00g 4.00g/dev/sdc2 lvm2 --- 6.00g 6.00g/dev/sdc3 vg1 lvm2 a-- <8.00g 1.60g
[root@ubuntu-140 ~]#vgcreate vg2 /dev/sdc{1,2}Volume group "vg2" successfully created
[root@ubuntu-140 ~]#vgsVG #PV #LV #SN Attr VSize VFree ubuntu-vg 1 1 0 wz--n- <148.00g 74.00gvg1 2 2 0 wz--n- 17.99g 1.60gvg2 2 0 0 wz--n- 9.99g 9.99g
[root@ubuntu-140 ~]#lvcreate -L 6G -n test-lv vg2Logical volume "test-lv" created.
[root@ubuntu-140 ~]#lsblk -f
NAME FSTYPE FSVER LABEL UUID
loop0 squashfs 4.0
loop1 squashfs 4.0
loop2 squashfs 4.0
loop4 squashfs 4.0
loop5 squashfs 4.0
loop6 squashfs 4.0
sda
├─sda1
├─sda2 ext4 1.0 519162fa-646a-
└─sda3 LVM2_member LVM2 001 4WDF2I-3rZ6-fH└─ubuntu--vg-ubuntu--lv ext4 1.0 b13468b6-d709-
sdb LVM2_member LVM2 001 wrB17P-ajY5-0J
└─vg1-lv2 ext4 1.0 1bb711b4-9437-
sdc
├─sdc1 LVM2_member LVM2 001 cZ65hz-nr4r-WK
│ └─vg2-test--lv
├─sdc2 LVM2_member LVM2 001 lFw7Dd-N5Bo-0e
│ └─vg2-test--lv
└─sdc3 LVM2_member LVM2 001 XOQZqW-Ur0S-R4├─vg1-lv1 └─vg1-lv2 ext4 1.0 1bb711b4-9437-
sr0 iso9660 Joliet Extension Ubuntu-Server 22.04.5 LTS amd64 2024-09-11-18-
[root@ubuntu-140 ~]#mkfs.ext4 /dev/vg2/test-lv
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 1572864 4k blocks and 393216 inodes
Filesystem UUID: bc50f5ed-f9e0-46da-a6ac-87a4be5e3699
Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done [root@ubuntu-140 ~]#mkdir /test-lv
[root@ubuntu-140 ~]#mount /dev/vg2/test-lv /test-lv/
[root@ubuntu-140 ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 87M 1 loop /snap/lxd/29351
loop1 7:1 0 63.8M 1 loop /snap/core20/2599
loop2 7:2 0 38.8M 1 loop /snap/snapd/21759
loop4 7:4 0 89.4M 1 loop /snap/lxd/31333
loop5 7:5 0 50.8M 1 loop /snap/snapd/25202
loop6 7:6 0 63.8M 1 loop /snap/core20/2669
sda 8:0 0 150G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 148G 0 part └─ubuntu--vg-ubuntu--lv 253:0 0 74G 0 lvm /
sdb 8:16 0 10G 0 disk
└─vg1-lv2 253:2 0 16G 0 lvm /lv2
sdc 8:32 0 20G 0 disk
├─sdc1 8:33 0 4G 0 part
│ └─vg2-test--lv 253:3 0 6G 0 lvm /test-lv
├─sdc2 8:34 0 6G 0 part
│ └─vg2-test--lv 253:3 0 6G 0 lvm /test-lv
└─sdc3 8:35 0 8G 0 part ├─vg1-lv1 253:1 0 400M 0 lvm └─vg1-lv2 253:2 0 16G 0 lvm /lv2
sr0 11:0 1 2G 0 rom
[root@ubuntu-140 ~]#vgdisplay vg2--- Volume group ---VG Name vg2System ID Format lvm2Metadata Areas 2Metadata Sequence No 2VG Access read/writeVG Status resizableMAX LV 0Cur LV 1Open LV 1Max PV 0Cur PV 2Act PV 2VG Size 9.99 GiBPE Size 4.00 MiBTotal PE 2558Alloc PE / Size 1536 / 6.00 GiBFree PE / Size 1022 / 3.99 GiBVG UUID r0Qw43-Yyyn-JuHQ-HqgG-uGyc-MHFs-CJnjIM[root@ubuntu-140 ~]#ls /test-lv/
lost+found
[root@ubuntu-140 ~]#cp /etc/fstab /test-lv/f1
[root@ubuntu-140 ~]#cp /var/log/syslog /test-lv/f2
[root@ubuntu-140 ~]#cp /var/log/auth.log /test-lv/f3
[root@ubuntu-140 ~]#ls /test-lv
f1 f2 f3 lost+found
[root@ubuntu-140 ~]#ll /test-lv
total 52
-rw-r--r-- 1 root root 657 Sep 28 18:52 f1
-rw-r----- 1 root root 25013 Sep 28 18:53 f2
-rw-r----- 1 root root 875 Sep 28 18:53 f3
drwx------ 2 root root 16384 Sep 28 18:51 lost+found
[root@ubuntu-140 ~]#lvdisplay /dev/vg2/test-lv--- Logical volume ---LV Path /dev/vg2/test-lvLV Name test-lvVG Name vg2LV UUID MSeXq2-DQ4c-dklD-qAu4-YIi8-KtfC-r0yInhLV Write Access read/writeLV Creation host, time ubuntu-140, 2025-09-28 18:50:30 +0800LV Status available# open 1LV Size 6.00 GiBCurrent LE 1536Segments 2Allocation inheritRead ahead sectors auto- currently set to 256Block device 253:3[root@ubuntu-140 ~]#lvcreate -n test-lv-snap -s -L 2G -p r /dev/vg2/test-lvLogical volume "test-lv-snap" created.
[root@ubuntu-140 ~]#lvdisplay /dev/vg2/test-lv*--- Logical volume ---LV Path /dev/vg2/test-lvLV Name test-lvVG Name vg2LV UUID MSeXq2-DQ4c-dklD-qAu4-YIi8-KtfC-r0yInhLV Write Access read/writeLV Creation host, time ubuntu-140, 2025-09-28 18:50:30 +0800LV snapshot status source oftest-lv-snap [active]LV Status available# open 1LV Size 6.00 GiBCurrent LE 1536Segments 2Allocation inheritRead ahead sectors auto- currently set to 256Block device 253:3--- Logical volume ---LV Path /dev/vg2/test-lv-snapLV Name test-lv-snapVG Name vg2LV UUID 7fFupV-Dj3P-53uy-ZtBx-ZKuM-uN9a-p0nURFLV Write Access read onlyLV Creation host, time ubuntu-140, 2025-09-28 18:55:07 +0800LV snapshot status active destination for test-lvLV Status available# open 0LV Size 6.00 GiBCurrent LE 1536COW-table size 2.00 GiBCOW-table LE 512Allocated to snapshot 0.01%Snapshot chunk size 4.00 KiBSegments 1Allocation inheritRead ahead sectors auto- currently set to 256Block device 253:6
#测试
[root@ubuntu-140 ~]#mkdir /test-lv-snap
[root@ubuntu-140 ~]#mount /dev/vg2/test-lv-snap /test-lv-snap
mount: /test-lv-snap: WARNING: source write-protected, mounted read-only.
[root@ubuntu-140 ~]#ls /test-lv -lh
total 52K
-rw-r--r-- 1 root root 657 Sep 28 18:52 f1
-rw-r----- 1 root root 25K Sep 28 18:53 f2
-rw-r----- 1 root root 875 Sep 28 18:53 f3
drwx------ 2 root root 16K Sep 28 18:51 lost+found
[root@ubuntu-140 ~]#ls /test-lv -snap -lh
total 60K
4.0K drwxr-xr-x 3 0 0 4.0K Sep 28 18:53 ./
4.0K drwxr-xr-x 26 0 0 4.0K Sep 28 18:56 ../
4.0K -rw-r--r-- 1 0 0 657 Sep 28 18:52 f128K -rw-r----- 1 0 0 25K Sep 28 18:53 f2
4.0K -rw-r----- 1 0 0 875 Sep 28 18:53 f316K drwx------ 2 0 0 16K Sep 28 18:51 lost+found/[root@ubuntu-140 ~]#echo "-------" >> /test-lv/f1
[root@ubuntu-140 ~]#ls /test-lv -lh
total 52K
-rw-r--r-- 1 root root 665 Sep 28 18:59 f1
-rw-r----- 1 root root 25K Sep 28 18:53 f2
-rw-r----- 1 root root 875 Sep 28 18:53 f3
drwx------ 2 root root 16K Sep 28 18:51 lost+found
[root@ubuntu-140 ~]#ls /test-lv-snap -lh
total 52K
-rw-r--r-- 1 root root 657 Sep 28 18:52 f1
-rw-r----- 1 root root 25K Sep 28 18:53 f2
-rw-r----- 1 root root 875 Sep 28 18:53 f3
drwx------ 2 root root 16K Sep 28 18:51 lost+found[root@ubuntu-140 ~]#rm -rf /test-lv/f2
[root@ubuntu-140 ~]#ls /test-lv -lh
total 24K
-rw-r--r-- 1 root root 665 Sep 28 18:59 f1
-rw-r----- 1 root root 875 Sep 28 18:53 f3
drwx------ 2 root root 16K Sep 28 18:51 lost+found
root@ubuntu-140:~# ls /test-lv-snap -lh
total 52K
-rw-r--r-- 1 root root 657 Sep 28 18:52 f1
-rw-r----- 1 root root 25K Sep 28 18:53 f2
-rw-r----- 1 root root 875 Sep 28 18:53 f3
drwx------ 2 root root 16K Sep 28 18:51 lost+found[root@ubuntu-140 ~]#dd if=/dev/zero of=/test-lv/f4 bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB, 10 MiB) copied, 0.0457188 s, 229 MB/s
[root@ubuntu-140 ~]#ls /test-lv -lh
total 11M
-rw-r--r-- 1 root root 665 Sep 28 18:59 f1
-rw-r----- 1 root root 875 Sep 28 18:53 f3
-rw-r--r-- 1 root root 10M Sep 28 19:01 f4
drwx------ 2 root root 16K Sep 28 18:51 lost+found
root@ubuntu-140:~# ls /test-lv-snap -lh
total 52K
-rw-r--r-- 1 root root 657 Sep 28 18:52 f1
-rw-r----- 1 root root 25K Sep 28 18:53 f2
-rw-r----- 1 root root 875 Sep 28 18:53 f3
drwx------ 2 root root 16K Sep 28 18:51 lost+found
#使用快照恢复
[root@ubuntu-140 ~]#umount /test-lv/
[root@ubuntu-140 ~]#umount /test-lv-snap
[root@ubuntu-140 ~]#lsblk
...
sdb 8:16 0 10G 0 disk
└─vg1-lv2 253:2 0 16G 0 lvm /lv2
sdc 8:32 0 20G 0 disk
├─sdc1 8:33 0 4G 0 part
│ ├─vg2-test--lv-real 253:4 0 6G 0 lvm
│ │ ├─vg2-test--lv 253:3 0 6G 0 lvm
│ │ └─vg2-test--lv--snap 253:6 0 6G 1 lvm
│ └─vg2-test--lv--snap-cow 253:5 0 2G 0 lvm
│ └─vg2-test--lv--snap 253:6 0 6G 1 lvm
├─sdc2 8:34 0 6G 0 part
│ └─vg2-test--lv-real 253:4 0 6G 0 lvm
│ ├─vg2-test--lv 253:3 0 6G 0 lvm
│ └─vg2-test--lv--snap 253:6 0 6G 1 lvm
└─sdc3 8:35 0 8G 0 part ├─vg1-lv1 253:1 0 400M 0 lvm └─vg1-lv2 253:2 0 16G 0 lvm /lv2
sr0 11:0 1 2G 0 rom #从快照中恢复
[root@ubuntu-140 ~]#lvconvert --merge /dev/vg2/test-lv-snapMerging of volume vg2/test-lv-snap started.vg2/test-lv: Merged: 100.00%
[root@ubuntu-140 ~]#mount /dev/vg2/test-lv /test-lv
[root@ubuntu-140 ~]#ls
hu snap
[root@ubuntu-140 ~]#ls /test-lv -lh
total 52K
-rw-r--r-- 1 root root 657 Sep 28 18:52 f1
-rw-r----- 1 root root 25K Sep 28 18:53 f2
-rw-r----- 1 root root 875 Sep 28 18:53 f3
drwx------ 2 root root 16K Sep 28 18:51 lost+found#恢复后快照没有,一次性的
[root@ubuntu-140 ~]#lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertubuntu-lv ubuntu-vg -wi-ao---- <74.00g lv1 vg1 -wi-a----- 400.00m lv2 vg1 -wi-ao---- 16.00g test-lv vg2 -wi-ao---- 6.00g