1. 磁盘设备的命名规则
- SATA/SAS/USB 硬盘:
- 命名格式:
/dev/sd[a-z]
- 示例:
- 第一块磁盘:
/dev/sda
- 第二块磁盘:
/dev/sdb
- 第三块磁盘:
/dev/sdc
- 第一块磁盘:
- 命名格式:
- NVMe SSD:
- 命名格式:
/dev/nvme[0-9]n[1-9]
- 示例:
- 第一个 NVMe 控制器下的第一个命名空间:
/dev/nvme0n1
- 第二个 NVMe 控制器的第一个命名空间:
/dev/nvme1n1
- 第一个 NVMe 控制器下的第一个命名空间:
- 命名格式:
2. 磁盘分区详解
在 Linux 系统中有 MBR(Master Boot Record) 和 GPT(GUID Partition Table)两种主流的磁盘分区表格式。
- MBR 分区最大支持 2TB 容量,在容量方面存在着极大的瓶颈。并且只支持创建最多4个主分区(或 3 主 + 1 扩展 + 逻辑分区)。
- 主分区:能够直接格式化并存储数据或安装操作系统,操作系统通常需要安装到主分区才能启动。
- 扩展分区:本身不能直接存储数据,仅用于容纳逻辑分区。每块磁盘最多 1 个扩展分区(占用 1 个主分区名额,即最多
3 主 + 1 扩展
),突破 MBR 的 4 分区限制,允许创建更多逻辑分区。 - 逻辑分区:实际存储数据的分区,依赖扩展分区存在,理论上无上限(受磁盘空间和系统限制,通常最多 64 个)。
- GPT 分区最大支持 8ZB(理论值,实际受操作系统限制)容量,支持创建128 个主分区(可调整更多)。这是一个正逐渐取代 MBR 的新标准,需 UEFI 支持。
2.1. 分区管理工具
查看现有分区:
lsblk # 树形显示磁盘和分区
sudo fdisk -l /dev/sda # 查看详细分区表
sudo parted /dev/sda print # 显示分区信息(含文件系统)
BashMRB 分区管理工具 fdisk
fdisk 参数详解:
fdisk /dev/sdb
Command (m for help): m # 输入m列出常用的命令
Command action
a toggle a bootable flag # 切换分区启动标记
b edit bsd disklabel # 编辑sda磁盘标签
c toggle the dos compatibility flag # 切换dos兼容模式
d delete a partition # 删除分区
l list known partition types # 显示分区类型
m print this menu # 显示帮助菜单
n add a new partition # 新建分区
o create a new empty DOS partition table # 创建新的空白分区表
p print the partition table # 显示分区表的信息
q quit without saving changes # 不保存退出
s create a new empty Sun disklabel # 创建新的Sun磁盘标签
t change a partitions system id # 修改分区ID,可以通过l查看id
u change display/entry units # 修改容量单位,磁柱或扇区
v verify the partition table # 检验分区表
w write table to disk and exit # 保存退出
x extra functionality (experts only) # 拓展功能
# 常用参数为 n、p、d、w
# 删除一个已有的分区,保存退出后需要执行partprobe命令刷新一下分区表
Bash创建分区示例:
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xd739fd76 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):+1G
分区 1 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):P
磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x647781dd
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 83 Linux
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
Bash重复上述步骤,再创建3个主分区:
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x647781dd
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 83 Linux
/dev/sdb2 2099200 4196351 1048576 83 Linux
/dev/sdb3 4196352 6293503 1048576 83 Linux
/dev/sdb4 6293504 8390655 1048576 83 Linux
Bash此时磁盘还有剩余空间但不能创建新分区:
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n
If you want to create more than four partitions, you must replace a
primary partition with an extended partition first.
命令(输入 m 获取帮助):
Bash删除主分区4,创建一个扩展分区:
命令(输入 m 获取帮助):d
分区号 (1-4,默认 4):
分区 4 已删除
命令(输入 m 获取帮助):n
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e):
Using default response e
已选择分区 4
起始 扇区 (6293504-20971519,默认为 6293504):
将使用默认值 6293504
Last 扇区, +扇区 or +size{K,M,G} (6293504-20971519,默认为 20971519):+7G
值超出范围。
Last 扇区, +扇区 or +size{K,M,G} (6293504-20971519,默认为 20971519):
将使用默认值 20971519
分区 4 已设置为 Extended 类型,大小设为 7 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x647781dd
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 83 Linux
/dev/sdb2 2099200 4196351 1048576 83 Linux
/dev/sdb3 4196352 6293503 1048576 83 Linux
/dev/sdb4 6293504 20971519 7339008 5 Extended
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
Bash创建一个逻辑分区:
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n
All primary partitions are in use
添加逻辑分区 5
起始 扇区 (6295552-20971519,默认为 6295552):
将使用默认值 6295552
Last 扇区, +扇区 or +size{K,M,G} (6295552-20971519,默认为 20971519):+2G
分区 5 已设置为 Linux 类型,大小设为 2 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x647781dd
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 83 Linux
/dev/sdb2 2099200 4196351 1048576 83 Linux
/dev/sdb3 4196352 6293503 1048576 83 Linux
/dev/sdb4 6293504 20971519 7339008 5 Extended
/dev/sdb5 6295552 10489855 2097152 83 Linux
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
BashGPT 分区管理工具 gdisk
gdisk 参数详解:
# 需要安装命令
[root@localhost ~]# yum install gdisk -y
[root@localhost ~]# gdisk /dev/sdb
...
Command (? for help): m
b back up GPT data to a file # 将GPT数据备份到文件中
c change a partitions name # 更改分区的名称
d delete a partition # 删除分区
i show detailed information on a partition # 显示分区的详细信息
l list known partition types # 列出已知的分区类型
n add a new partition # 添加一个新的分区
o create a new empty GUID partition table (GPT) # 创建一个新的空GUID分区表(GPT)
p print the partition table # 打印分区表
q quit without saving changes # 不保存更改就退出
r recovery and transformation options (experts only) # 恢复和转换选项(仅限专家使用)
s sort partitions # 对分区表进行排序
t change a partitions type code # 更改分区类型代码
v verify disk # 验证磁盘
w write table to disk and exit # 将表写入磁盘并退出
x extra functionality (experts only) # 额外功能(仅限专家使用)
? print this menu # 打印菜单
Bash创建分区示例:
[root@localhost ~]# gdisk /dev/sdb
...
Command (? for help): n # 新建
Partition number (1-128, default 1): # 直接回车,默认分区号为1
First sector (34-5242879966, default = 2048) or {+-}size{KMGTP}: # 直接回车,使用默认的起始位置
Last sector (2048-5242879966, default = 5242879966) or {+-}size{KMGTP}: +1G # 设定1G的空间
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): # 直接回车用默认8300就好,或者输入L,可以看到一系列文件系统信息,默认的8300编号代表Linux filesystem,用它就好
Changed type of partition to 'Linux filesystem'
Command (? for help): p # 打印查看
......
Number Start (sector) End (sector) Size Code Name
1 2048 2099199 1024.0 MiB 8300 Linux filesystem
Command (? for help): w # 保存
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y # 输入y保存
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.
Bash3. 格式化制作文件系统与挂载
在 Linux 系统中,磁盘分区后并不能直接使用,还需要经过 格式化 和 挂载 两个关键步骤才能使分区可用。
格式化制作文件系统:
# 不分区,整个磁盘直接格式化
mkfs.xfs /dev/sdb # /dev/sdb整体就是一个分区
# 分区后对一个分区格式化
mkfs.xfs /dev/sdb1
# .xfs 为文件系统的类型(如 ext4/xfs/ntfs)
# 查看已挂载的文件系统
df -T
Bash挂载与卸载示例:
# 挂载
mount /dev/sdb /opt/
# 卸载
umount /dev/sdb # 或者 umount /opt
# 强制卸载
umount -l /dev/sdb # 或者 umount -l /opt
Bash配置开机自动挂载:
# 方式一:(适用于红帽系)
# 将挂载命令写入/etc/rc.local文件,并添加可执行权限。
# 文件/etc/rc.local中配置的开机启动项不执行原因可能是链接文件未添加可执行权限
ll /etc/rc.local
lrwxrwxrwx. 1 root root 13 5月 8 2024 /etc/rc.local -> rc.d/rc.local
ll /etc/rc.d/rc.local
-rw-r--r--. 1 root root 473 1月 14 2022 /etc/rc.d/rc.local # 没有执行权限,需要加上
chmod +x /etc/rc.d/rc.local
# 方式二:编辑文件/etc/fstab
sed -i '$a /dev/sdb1 /opt xfs defaults 0 0' /etc/fstab
tail -1 /etc/fstab
/dev/sdb /opt xfs defaults 0 0
Bash/etc/fstab 配置文件格式详解:
[root@localhost ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed May 8 01:38:18 2024
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=6d557e68-8b18-4ad5-8d38-c1b9e62d5d18 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
# 第一列:/dev/mapper/centos-root 这是挂载的文件系统的设备名称或块信息,除了指定设备文件外,也可以使用UUID、LABEL来指定分区。
# 第二列:/ 指定挂载点的路径,这里是根目录。
# 第三列:xfs 指定文件系统的类型,如 ext3,ext4,xfs 等。
# 第四列:defaults 指定挂载的参数,默认为 defaults。
## 参数含义:
## async/sync:是否同步方式运行,默认async(异步)。
## user/nouser:是否允许普通用户使用 mount 命令挂载,默认 nouser。
## exec/noexec:是否允许可执行文件执行,默认exec。
## suid/nosuid:是否允许存在suid属性的文件,默认suid。
## auto/noauto:执行mount-a时,此文件系统是否被主动挂载,默认auto。
## rw/ro:是否只读或者读写模式进行挂载。默认rw。
## defaults:具有rw,suid,exec,auto,nouser,async等默认参数的设定。
# 第五列:0 控制 dump 工具是否备份该分区。
## 0 表示不备份,1 表示每天备份,2 表示不定期备份。
## 由于 dump 主要适用于 ext2/ext3/ext4 文件系统,现代系统较少使用,通常设为 0。
# 第六列:0 控制系统启动时 fsck 检查文件系统的顺序。
## 0 表示不检查,1 表示优先检查(通常只有根目录设为 1),2+ 按数字顺序检查。
Bash4. 制作 swap 分区
制作swap分区:
fdisk /dev/sdb # 新建一个磁盘分区
mkswap /dev/sdb1 # 格式化为swap
# 如果磁盘没有过多的分区可用,也可以通过文件模拟 Swap
dd if=/dev/zero of=/swap_file bs=1M count=200 # 创建一个文件
chmod 0600 /swap_file # 修改权限
mkswap -f /swap_file # 将文件格式化为swap,-f 参数表示指定文件
swapon /swap_file
Bash挂载swap分区:
swapon /dev/sdb1 # 临时挂载
swapoff /dev/sdb1 # 卸载
# 开机自动挂载
blkid | grep /dev/sdb1 # 查看 UUID
/dev/sdb1: UUID="91d30c2d-2b43-40b1-b2b5-6f828c585f97" TYPE="swap" PARTUUID="d3b7649d-54aa-45eb-8bef-dccfe6915413"
vim /etc/fstab # 添加挂载信息
UUID="91d30c2d-2b43-40b1-b2b5-6f828c585f97" swap swap defaults 0 0
Bash查看swap分区:
swapon -s # 列出所有正在使用的 Swap 分区
free -m # 查看内存和虚拟内存容量,-m 表示显示单位为兆。
total used free shared buff/cache available
Mem: 3931 178 3568 11 184 3537
Swap: 2047 0 2047
Bash5. 修复文件系统方式
# 0、如果进入不了操作系统,可以进入单用户模式下操作
# 1、首先尝试mount和umount文件系统,以便重放日志,修复文件系统,如果不行,再进行如下操作。
# 2、执行xfs_repair -n,只检查不修复:检查文件系统是否损坏,如何损坏会列出将要执行的操作
[root@localhost ~]# xfs_repair -n /dev/sdb2
如果是日志和数据不一致了,xfs 默认会在挂载的时候修复这种不一致,操作系统给出的建议是以读写的方式挂载并自动修复,可以尝试以只读不修复方式挂载文件系统。
[root@localhost ~]# mount -o ro,norecovery /dev/sdb2 /opt
# 3、如果上述挂载不成功,可以执行xfs_repair修复文件系统
[root@localhost ~]# xfs_repair /dev/sdb2
# 4、如果还不行,那最后方法只能采用"损失部分数据的修复方法"
根据打印消息,修复失败时:
先执行xfs_repair -L /dev/sdb2(清空日志,会丢失文件)
再执行xfs_repair /dev/sdb2
说明:-L是修复xfs文件系统的最后手段,慎重选择,它会清空日志,会丢失用户数据和文件。
备注:在执行xfs_repair操作前,最好使用xfs_metadump工具保存元数据,一旦修复失败,最起码可以恢复到修复之前的状态。
# 5、修复完成以后,尝试能不能正常挂载 ,如能,取消挂载,再启动就正常了
Bash示例:
# 1、准备一个1G的文件系统与数据
[root@localhost ~]# mount /dev/sdb1 /opt/
[root@localhost ~]# echo big_egon > /opt/1.txt
# 2、模拟文件系统损坏(注意下述操作在centos7.9可复现,在centos9+中,你单纯的写前500M根本不会对你后面的分区造成数据影响,而如果你dd的数据量很大,大到蔓延到了你的目标分区,你执行xfs_repair会发现分区表都会消失掉,不过也没啥关系,用下一小节我们学习的xfsdump提前做好备份的话,数据都可以恢复回来)
[root@localhost ~]# dd if=/dev/zero of=/dev/sdb bs=500M count=1 # 直接干/dev/sdb而不是sdb1
记录了1+0 的读入
记录了1+0 的写出
524288000字节(524 MB)已复制,1.09433 秒,479 MB/秒
[root@localhost ~]# # 此时看似一切都正常
[root@localhost ~]# cat /opt/1.txt
big_egon
[root@localhost ~]# echo egon_nb > /opt/2.txt
[root@localhost ~]# cat /opt/2.txt
egon_nb
[root@localhost ~]# # 但是重新挂载就会失效,即断电后系统重启,重新挂载不成功
[root@localhost ~]# umount /opt
[root@localhost ~]# mount /dev/sdb1 /opt
mount: /dev/sdb1 写保护,将以只读方式挂载
mount: 未知的文件系统类型“(null)”
# 3、修复
[root@localhost ~]# umount /opt
[root@localhost ~]# xfs_repair /dev/sdb1
Phase 1 - find and verify superblock...
bad primary superblock - bad magic number !!!
。。。。。。
修复失败,无法挂载
[root@localhost ~]# mount /dev/sdb1 /opt/
mount: 将 /dev/sdb1 挂载到 /opt 失败: 结构需要清理
[root@localhost ~]# xfs_repair -L /dev/sdb1 # 强制修复
[root@localhost ~]# mount /dev/sdb1 /opt/
[root@localhost ~]# ls /opt/ # 数据丢失,所以此时修复的意义在于可用,至于数据,你需要自己有备份意识
[root@localhost ~]#
Bash如果是ext文件系统,修复需要使用fsck命令:
fsck -f -y /dev/sda1
-y 对所有问题都回答 "yes"
-f 即使文件系统标记为 clean 也强制进行检查
Bash6. xfs 文件系统备份与恢复
xfsdump
是专为 XFS 文件系统 设计的备份工具,支持 完整备份 和 增量备份,能够保留文件权限、属性、ACL 和扩展属性。它直接读取文件系统结构,适合大规模数据备份。
基本语法:
xfsdump [选项] -f <备份文件> <源路径>
# 常用参数
# -l:注意不是大写字母L而是小写,就是指定level,有0~9共10个等级,默认为0,即完整备份,1-9(增量备份)。
# -L:xfsdump会记录每次备份的session Label,这里可以填写针对此文件系统的简易说明。
# -M:xfsdump可以记录存储Media Label,这里可以填写此媒体的简易说明。
# -f:后面接产生的文件和destination file 。例如/dev/st0设备文件名或其他一般文件文件名
# -I:从/var/lib/xfsdump/inventory 列出目前备份的信息状态。
# 使用限制
# 1.必须用root权限
# 2.只能备份已挂载的文件系统
# 3.只能备份XFS文件系统
# 4.只能用xfsrestore解释
# 5.透过文件系统的UUID来分辨备份档,因此不能备份相同UUID的文件系统
Bashxfsdump 备份示例:
# 安装
sudo yum install xfsdump -y
# 准备一个分区并制作好xfs文件系统,挂载给测试目录test
cp -r /etc/ /test/ # 添加数据
# 先做全量备份
xfsdump -l 0 -L test_bak -M test_bak -f /test.bak /test # 注意原路径末尾不要加斜杠
# 往 /test 下新增文件,然后增量备份
echo 222 > /test/2.txt
xfsdump -l 1 -L test_bak -M test_bak -f /test.bak1 /test
echo 333 > /test/3.txt
xfsdump -l 2 -L test_bak -M test_bak -f /test.bak2 /test
# 注意:上面备份的都是挂载目录/test,对应文件系统/dev/sdb,这个在centos7.9中还可用,但是到了rockylinux9.3中会报错:
xfsdump: version 3.1.12 (dump format 3.0) - type ^C for status and control
xfsdump: ERROR: /mydata/ does not identify a file system
xfsdump: usage: xfsdump [ -a (dump DMF dualstate files as offline) ]
# 解决办法就是把挂载目录/test换成/dev/sdb
# 如:xfsdump -l 0 -L test_bak -M test_bak -f /test.bak /dev/sdb
# 查看一下备份文件大小
du -sh /test/
32M /test/
ll -h /test.bak # 全量备份大小
-rw-r--r--. 1 root root 30M 5月 23 19:58 /test.bak
ll -h /test.bak1 # 增量备份大小
-rw-r--r--. 1 root root 22K 5月 23 19:58 /test.bak1
ll -h /test.bak2 # 增量备份大小
-rw-r--r--. 1 root root 21K 5月 23 20:04 /test.bak2
Bashxfsdump 恢复示例:
rm -rf /test/*
xfsrestore -f /test.bak /test/ # 先恢复全量
[root@localhost /]# ls /test/
etc
xfsrestore -f /test.bak1 /test/ # 再恢复增量1
[root@localhost ~]# ls /test/
2.txt etc
xfsrestore -f /test.bak2 /test/ # 再恢复增量2
[root@localhost ~]# ls /test/
2.txt 3.txt etc
Bash7. LVM 介绍
LVM 是 Linux 系统下的高级磁盘管理工具,它通过抽象化物理存储设备,提供更灵活的磁盘管理方式,支持动态调整容量、快照、条带化等功能,特别适合需要频繁调整存储的场景(如服务器、数据库)。
7.1. LVM 核心概念
- 物理卷(PV, Physical Volume)
- 底层物理存储单元(如硬盘
/dev/sda
、分区/dev/sda1
)。 - 通过
pvcreate
命令将物理设备初始化为 PV。 - 查看 PV 信息:
sudo pvdisplay
- 底层物理存储单元(如硬盘
- 卷组(VG, Volume Group)
- 由多个 PV 组成的存储池,是 LVM 的中间层。
- 通过
vgcreate
命令创建 VG。 - 查看 VG 信息:
sudo vgdisplay
- 逻辑卷(LV, Logical Volume)
- 从 VG 中划分出的逻辑存储单元(类似传统分区,但可动态调整)。
- 通过
lvcreate
命令创建 LV。 - 查看 LV 信息:
sudo lvdisplay
7.2. LVM 优缺点
- 优点:
- 可以在系统运行的状态下动态的扩展文件系统的大小。
- 文件系统可以跨多个磁盘,因此文件系统大小不会受物理磁盘的限制。
- 可以增加新的磁盘到LVM的存储池中。
- 可以以镜像的方式冗余重要的数据到多个物理磁盘。
- 可以方便的导出整个卷组到另外一台机器。
- 缺点:
- 因为加入了额外的操作,存取性能受到影响(基本可以忽略不计)。
- 当卷组中的一个磁盘损坏时,整个卷组都会受到影响。
- 解释:LVM如果有一个磁盘损坏,会导致数据部分或全部丢失。
- 解决方案:底层用RAID + 上层LVM = 既有冗余又有动态扩展。
- 在从卷组中移除一个磁盘的时候必须使用reducevg命令(该命令要求root权限,并且不允许在快照卷组中使用)
7.3. LVM 使用流程
安装:
yum install -y lvm2
Bash将物理设备初始化为 PV:
# 可以对分区也可以多整个磁盘
pvcreate /dev/sda2 # 对分区初始化为 PV
pvcreate /dev/sdb # 对整块盘初始化为 PV
# 查看pv列表
[root@localhost /]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 lvm2 --- 19.50g 19.50g
/dev/sdb lvm2 --- 10.00g 10.00g
[root@localhost /]# pvscan
PV /dev/sda2 lvm2 [19.50 GiB]
PV /dev/sdb lvm2 [10.00 GiB]
Total: 2 [29.50 GiB] / in use: 0 [0 ] / in no VG: 2 [29.5.00 GiB]
Bash制作 VG,将 PV 加入 VG:
# 制作一个包含/dev/sdb1与/dev/sdc两个PV的VG
vgcreate centos /dev/sda2 /dev/sdb
# 也可将一个PV加入已经存在的VG
vgextend centos /dev/sdb
[root@localhost /]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 2 0 0 wz--n- 29.49g 29.49g
Bash创建逻辑卷 LVM:
# 从 VG 中划分逻辑卷
lvcreate -L 100M -n lv1 centos
lvcreate -L 200M -n lv2 centos
# 选项:
# -L 逻辑卷大小
# -n 逻辑卷名字
# 查看
[root@localhost /]# lvs
# 把vg的100%空间都给lv
lvcreate -l 100%VG -n lv的名字 vg的名字
Bash格式化与挂载:
# 将制作好的lv格式化
mkfs.xfs /dev/centos/lv1
mkfs.xfs /dev/centos/lv2
# 挂载
mount /dev/centos/lv1 /test1/
mount /dev/centos/lv2 /test2/
# 查看
[root@localhost /]# df
Bash动态扩容:
lvextend -L [+]MGT /dev/VG_NAME/VL_NAME
# 示例:
lvextend -L +1000M /dev/centos/lv1
xfs_growfs /dev/centos/lv1 # 扩展逻辑卷后需要更新fs文件系统
Bash移除 LVM 组件:
# 删除lv之前需要先卸载挂载点
umount /test1
lvremove /dev/centos/lv1
# 删除vg
vgremove centos
# 删除pv,只能删掉那些不属于任何vg的pv
pvremove /dev/sdb
Bash迁移数据(PV 移动):
# 将数据从 /dev/sdb 迁移到 /dev/sdd
sudo pvmove /dev/sdb /dev/sdd
Bash快照功能:
# 注意点:
# 1、VG中需要预留存放快照本身的空间,不能全部被占满。
# 2、快照所在的 VG 必须与被备份的 LV 相同,否则创建快照会失败。
# 快照的本质就是一个特殊的lv,创建快照后,如果源数据卷中的文件被更新了,会将老数据赋给快照的空间,这就要求快照的lv也要有足够的空间
# 创建快照
sudo lvcreate -s -L 5G -n my_lv_snap /dev/my_vg/my_lv # -L指快照的大小,一般不超过源的大小。
# 恢复快照
sudo lvconvert --merge /dev/my_vg/my_lv_snap
# 如果只想恢复部分文件,可以将快照挂载到一个目录拷贝需要恢复的文件
# 注意:快照在挂载的时候由于和原来的lvm是同一个UUID,而XFS是不允许相同UUID的文件系统挂载,所以需要加选项 -o nouuid
mount -o nouuid /dev/my_vg/my_lv_snap /opt/
cp /opt/xxx /xxx
umount /opt
Bash