1. LVM基本概念
- 物理卷(PV):物理磁盘或分区,如
/dev/sda
。 - 卷组(VG):由一个或多个物理卷组成的集合。
- 逻辑卷(LV):从卷组中分配的逻辑磁盘,可以被文件系统格式化并用于存储数据。
+----------------+ +----------+ +-----------+
| Physical Disks | --> | Physical | --> | Volume |
| | | Volumes | | Groups |
+----------------+ +----------+ +-----------+
| |
| |
V V
+-------+-------+
| Logical | |
| Volumes| |
+-------+ |
| | |
| | |
V V V
+---+---+---+
| | | |
+-+-+-+-+-+
2. 安装LVM
在CentOS系统中,LVM通常已经预装,如果没有,可以通过以下命令安装:
[root@localhost ~]# sudo yum install lvm2
3. 创建LVM
第一步:创建物理卷(PV)
假设有一个新的磁盘 /dev/sdb
,需要先将其初始化为物理卷:
[root@localhost ~]# sudo pvcreate /dev/sdb /dev/sdc #可以一次选多个
创建成功后,使用 pvdisplay
查看物理卷信息:
[root@localhost ~]# sudo pvdisplay
--- Physical volume ---
PV Name /dev/sda3
VG Name cl
PV Size 38.41 GiB / not usable 2.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB ### 默认4MiB,必须是2的倍速
Total PE 9833
Free PE 0
Allocated PE 9833
PV UUID s1Nddg-Y0AH-3geX-t8Te-1SxI-1aoX-WSJElS
第二步:创建卷组(VG)
创建一个名为 vg01
的卷组,包含 /dev/sdb
:
[root@localhost ~]# sudo vgcreate vg01 /dev/sdb /dev/sdc #可以一次选多个
[root@localhost ~]# sudo vgcreate vg01 -s 8M /dev/sdb /dev/sdc #配置 PE Size
使用 vgdisplay
查看卷组信息:
[root@localhost ~]# sudo vgdisplay
--- Volume group ---
VG Name cl
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 38.41 GiB
PE Size 4.00 MiB
Total PE 9833
Alloc PE / Size 9833 / 38.41 GiB
Free PE / Size 0 / 0
VG UUID nXHyWG-B9cL-jfak-zti4-jetG-FANf-NEYuYl
第三步:创建逻辑卷(LV)
创建一个名为 lv01
的逻辑卷,大小为10GB:
[root@localhost ~]# sudo lvcreate -L 10G -n lv01 vg01
使用 lvdisplay
查看逻辑卷信息:
[root@localhost ~]# sudo lvdisplay
--- Logical volume ---
LV Path /dev/cl/swap
LV Name swap
VG Name cl
LV UUID BJJtAq-VlJo-aJLe-MMI7-Y4ds-Pm1q-57cPvu
LV Write Access read/write
LV Creation host, time localhost, 2024-07-09 16:10:53 +0800
LV Status available
# open 2
LV Size 3.96 GiB
Current LE 1014
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1
--- Logical volume ---
LV Path /dev/cl/root
LV Name root
VG Name cl
LV UUID v2OLhh-UW9f-a6M9-T1jw-9sch-ZdOE-sNlG0I
LV Write Access read/write
LV Creation host, time localhost, 2024-07-09 16:10:53 +0800
LV Status available
# open 1
LV Size <34.45 GiB
Current LE 8819
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
第四步:格式化逻辑卷
对逻辑卷进行格式化,这里以ext4文件系统为例:
[root@localhost ~]# sudo mkfs.ext4 /dev/vg01/lv01
第五步:挂载逻辑卷
创建一个挂载点,并挂载逻辑卷:
[root@localhost ~]# sudo mkdir /mnt/data
[root@localhost ~]# sudo mount /dev/vg01/lv01 /mnt/data
第六步:配置开机自启
编辑 /etc/fstab
文件,添加以下行以实现开机自启:
[root@localhost ~]# /dev/vg01/lv01 /mnt/data ext4 defaults 0 0
4. 扩展逻辑卷
第一步:扩展卷组
假设有一个新的磁盘 /dev/sdc
,将其添加到 vg01
卷组:
[root@localhost ~]# sudo pvcreate /dev/sdc
[root@localhost ~]# sudo vgextend vg01 /dev/sdc
第二步:扩展逻辑卷
将 lv01
扩展到20GB:
[root@localhost ~]# sudo lvextend -L 20G /dev/vg01/lv01
第三步:调整文件系统大小
对于ext4文件系统,使用 resize2fs
命令调整文件系统大小:
[root@localhost ~]# sudo resize2fs /dev/vg01/lv01
5. 缩小逻辑卷
- 卸载逻辑卷:在缩小逻辑卷之前,需要确保逻辑卷没有被挂载。可以使用
umount
命令来卸载逻辑卷。
[root@localhost ~]# umount /mnt/data
- 检查文件系统:在缩小文件系统之前,需要检查文件系统是否有错误。可以使用
e2fsck
命令来检查。
[root@localhost ~]# e2fsck -f /dev/mapper/vg01-lv01
这里的vg-name
和lv-name
需要替换成你的卷组名称和逻辑卷名称。
- 调整文件系统大小:使用
resize2fs
命令来缩小文件系统的大小到你希望的大小。
[root@localhost ~]# resize2fs /dev/mapper/vg01-lv01 new-size
这里的new-size
是你希望缩小到的新大小,例如10G
。
- 缩小逻辑卷:使用
lvreduce
命令来缩小逻辑卷的大小。
[root@localhost ~]# lvreduce -L new-size /dev/mapper/vg01-lv01
这里的new-size
是你希望缩小到的新大小,例如10G
。
- 确认操作:
lvreduce
命令会提示你确认是否要缩小逻辑卷,因为这可能会破坏数据。如果你确认无误,输入y
继续。 - 重新挂载逻辑卷:缩小逻辑卷后,使用
mount
命令重新挂载逻辑卷。
[root@localhost ~]# mount /dev/mapper/vg01-lv01 /mnt/data
6. 创建镜像卷
1. 创建两个逻辑卷
首先,您需要有两个逻辑卷来创建镜像。假设您已经有一个卷组 vg01
,您可以创建两个逻辑卷 lv01
和 lv02
:
[root@localhost ~]# sudo lvcreate -L 10G -n lv01 vg01
[root@localhost ~]# sudo lvcreate -L 10G -n lv02 vg01
2. 创建镜像
使用 lvcreate
命令创建镜像卷:
[root@localhost ~]# sudo lvcreate -m 1 --type mirror -L 10G -n mirror01 vg01
[root@localhost ~]# sudo lvconvert -m 2 /dev/vg01/mirror01
[root@localhost ~]# sudo lvconvert --merge /dev/vg01/mirror01
这里 -m 1
表示创建一个镜像,-m 2
表示添加第二个镜像组件,--merge
用于合并镜像组件。
3. 格式化并挂载镜像卷
[root@localhost ~]# mkfs.ext4 /dev/vg01/mirror01
[root@localhost ~]# mkdir /mnt/mirror01
[root@localhost ~]# mount /dev/vg01/mirror01 /mnt/mirror01
7.创建快照卷
1. 创建快照
假设您有一个逻辑卷 lv01
,您可以创建一个快照 snapshot01
:
[root@localhost ~]# sudo lvcreate -L 2G -s -n snapshot01 /dev/vg01/lv01
这里 -L 2G
表示快照的大小,-s
表示这是一个快照。
2. 格式化并挂载快照卷
[root@localhost ~]# sudo mkfs.ext4 /dev/vg01/snapshot01
[root@localhost ~]# sudo mkdir /mnt/snapshot01
[root@localhost ~]# sudo mount /dev/vg01/snapshot01 /mnt/snapshot01
注意事项
- 在创建镜像卷和快照卷之前,请确保您的卷组有足够的空间。
- 创建镜像卷时,所有参与镜像的逻辑卷必须具有相同的物理扩展(PE)大小。
- 快照卷的大小通常小于或等于源逻辑卷的大小。
- 快照卷可以用于备份和恢复数据,但请注意,快照卷不支持写操作,因为它只是一个数据的快照。
删除
- 卸载文件系统:
- 首先,需要卸载挂载的逻辑卷。使用
umount
命令来卸载。bash [root@localhost ~]# umount /dev/vg0/lv01
- 确保逻辑卷没有被任何进程使用。
- 删除/etc/fstab中的记录:
- 编辑
/etc/fstab
文件,移除与/dev/vg0/lv01
相关的条目。这一步是为了确保在系统重启时不会尝试自动挂载已删除的逻辑卷。bash # 编辑 /etc/fstab 文件 # 移除或注释掉 /dev/vg0/lv01 的条目
- 删除逻辑卷:
- 使用
lvremove
命令来删除逻辑卷。bash [root@localhost ~]# lvremove /dev/vg0/lv01
- 这个命令会从LVM中删除逻辑卷,但不会删除底层的物理存储。
- 删除卷组:
- 在删除所有逻辑卷后,可以使用
vgremove
命令来删除卷组。bash [root@localhost ~]# vgremove vg0
- 这个命令会删除卷组及其包含的所有逻辑卷,但不会删除物理卷。
- 删除物理卷:
- 如果需要释放物理卷,可以使用
pvremove
命令来删除物理卷。bash [root@localhost ~]# pvremove /dev/sdb1
- 请注意,
puremove
命令在你的笔记中可能是一个笔误,正确的命令应该是pvremove
。
- 整理物理卷:
- 删除物理卷后,如果需要重新使用这些空间,可能需要重新分区或格式化。
请确保在执行这些操作之前,你已经备份了所有重要数据,因为这些操作会永久删除数据。同时,确保你有足够的权限来执行这些命令,通常需要root权限。
8. 数据迁移
场景描述
假设您需要将数据从一个逻辑卷(LV)迁移到另一个逻辑卷,可能是因为您需要将数据从一个卷组(VG)移动到另一个卷组,或者因为您需要将数据从一个物理卷(PV)移动到另一个新的物理卷。
步骤1:准备目标逻辑卷
- 创建目标物理卷(PV):如果目标存储在新的物理设备上,首先需要初始化该设备为物理卷。
[root@localhost ~]# sudo pvcreate /dev/sdx
- 创建目标卷组(VG):如果目标存储在新的卷组中,创建一个新的卷组。
[root@localhost ~]# sudo vgcreate vg02 /dev/sdx
- 创建目标逻辑卷(LV):在新的卷组中创建一个足够大的逻辑卷来存储迁移的数据。
[root@localhost ~]# sudo lvcreate -L 20G -n lv02 vg02
步骤2:复制数据
- 复制文件:使用
rsync
或其他文件复制工具将数据从源逻辑卷复制到目标逻辑卷。
[root@localhost ~]# sudo rsync -avH /mnt/data/ /mnt/newdata/
这里/mnt/data
是源逻辑卷的挂载点,/mnt/newdata
是目标逻辑卷的挂载点。
步骤3:验证数据
- 验证复制的数据:确保所有数据都已成功复制到新逻辑卷。可以使用文件系统检查工具或手动验证数据的完整性。
步骤4:更新系统配置
- 更新挂载点:更新系统的挂载配置,如
/etc/fstab
,将源逻辑卷的挂载点指向目标逻辑卷。
[root@localhost ~]# /dev/vg02/lv02 /mnt/data ext4 defaults 0 0
步骤5:卸载源逻辑卷
- 卸载源逻辑卷:一旦确认数据已经成功迁移,并且系统配置已更新,您可以安全地卸载源逻辑卷。
[root@localhost ~]# sudo umount /mnt/data
步骤6:清理源物理卷
- 从卷组中移除源物理卷:如果源物理卷不再需要,可以从卷组中移除,并重新分配给其他用途或安全地移除。
[root@localhost ~]# sudo vgreduce vg01 /dev/sdb
然后,使用pvremove
命令来移除物理卷。
[root@localhost ~]# sudo pvremove /dev/sdb
注意事项
- 在执行数据迁移之前,确保已经对所有重要数据进行了备份。
- 在迁移过程中,确保源逻辑卷和目标逻辑卷的大小足以容纳数据。
- 在迁移完成后,进行彻底的测试以确保数据的完整性和系统的稳定性。
- 数据迁移可能会影响系统的可用性,因此在执行迁移操作时,选择一个合适的维护窗口。
9. 修改物理卷(PV)属性
- 设置PV为不可分配:
[root@localhost ~]# pvchange -x n device
这条命令将指定的物理卷(device)设置为不可分配,即LVM不会使用这个物理卷进行任何操作。
- 设置PV为可分配:
[root@localhost ~]# pvchange -xy device
这条命令将指定的物理卷(device)设置为可分配,即LVM可以利用这个物理卷。
2. 修改卷组(VG)属性
- 激活卷组:
[root@localhost ~]# vgchange -ay vgname
这条命令激活指定的卷组(vgname),使其可以被使用。
- 禁用卷组:
[root@localhost ~]# vgchange -an vgname
这条命令禁用指定的卷组(vgname),使其不可被使用。
3. 修改逻辑卷(LV)属性
- 激活逻辑卷:
[root@localhost ~]# lvchange -ay lvname
这条命令激活指定的逻辑卷(lvname),使其可以被使用。
- 禁用逻辑卷:
[root@localhost ~]# lvchange -an lvname
这条命令禁用指定的逻辑卷(lvname),使其不可被使用。
- 设置逻辑卷为只读:
[root@localhost ~]# lvchange -pr lvname
这条命令将指定的逻辑卷(lvname)设置为只读模式。
- 设置逻辑卷为读写:
[root@localhost ~]# lvchange -prw lvname
这条命令将指定的逻辑卷(lvname)设置为读写模式。
10. 逻辑卷快照
1. 创建逻辑卷快照
逻辑卷快照允许你在特定时间点创建逻辑卷的只读副本,从而实现数据备份。
示例:
[root@localhost ~]# lvcreate -L 64M -s -n datasnap /dev/vg0/lv01
参数说明:
-L 64M
:指定快照大小为64MB。你可以根据实际需求调整此值。-s
:创建快照。-n datasnap
:为快照指定名称为datasnap
。/dev/vg0/lv01
:指定源逻辑卷路径。
创建完成后,你会看到类似如下的信息:
[root@localhost ~]# Logical volume "datasnap" created.
2. 挂载逻辑卷快照
在挂载快照之前,首先需要创建一个挂载点目录。
示例:
[root@localhost ~]# mkdir -p /mnt/datasnap
然后,你可以将快照挂载到该目录。
[root@localhost ~]# mount /dev/vg0/datasnap /mnt/datasnap -o nouuid
参数说明:
-o nouuid
:因为快照是基于原逻辑卷的副本,可能会出现UUID冲突。使用nouuid
选项可以防止此问题,确保快照能够挂载。
挂载后,你可以在 /mnt/datasnap
目录中访问快照数据。
3. 备份数据
在快照挂载后,你可以像普通文件系统一样操作快照,执行数据备份等操作。例如,使用 rsync
备份数据:
[root@localhost ~]# rsync -av /mnt/datasnap/ /backup/datasnap/
4. 卸载快照并移除快照
完成备份后,需要卸载快照并将其删除,以释放空间。
卸载快照:
[root@localhost ~]# umount /mnt/datasnap
移除快照:
[root@localhost ~]# lvremove /dev/vg0/datasnap
系统会提示你确认删除操作,输入 y
进行确认。
5. 快照恢复
如果需要恢复到快照创建时的状态,可以使用 lvconvert
命令将快照合并到原逻辑卷。
示例:
[root@localhost ~]# lvconvert --merge /dev/vg0/datasnap
注意:合并快照时,原逻辑卷会被恢复到快照创建时的状态,因此所有之后的更改会被丢失。
6. 注意事项
- 快照大小:快照的大小通常不需要与原逻辑卷相等。快照的大小由变更数据的数量决定。过小的快照可能无法容纳所有变化,导致快照失败或数据丢失。
- 性能影响:在创建和使用快照时,会有一定的性能影响,特别是在进行大量写操作时。建议根据实际应用场景评估是否使用快照。
11. 卷组迁移到其他主机
1. 卸载逻辑卷(LV)
首先,在迁移之前,需要确保卷组中的逻辑卷已经被卸载。这样可以避免数据损坏或丢失。
[root@localhost ~]# umount /dev/vgname/lvname
参数说明:
/dev/vgname/lvname
:需要卸载的逻辑卷路径。- 确保逻辑卷未被其他进程占用,可以使用
lsof
或fuser
工具检查。
[root@localhost ~]# umount /dev/vg0/lvdata
2. 禁用卷组
在卸载逻辑卷之后,需要禁用卷组,防止该卷组在其他主机上被自动激活。
[root@localhost ~]# vgchange -an vgname
参数说明:
-a
:表示针对所有卷组操作。-n
:禁用指定卷组。
[root@localhost ~]# vgchange -an vg0
3. 导出卷组到磁盘
使用 vgexport
命令导出卷组,以便在目标主机上导入。导出卷组后,卷组的元数据会从当前主机的 LVM 配置中移除。
示例:
[root@localhost ~]# vgexport vgname
参数说明:
vgname
:卷组名称。
[root@localhost ~]# vgexport vg0
此命令会将 vg0
卷组的元数据从当前主机的 LVM 配置中移除,但不影响卷组本身的数据。
4. 关机并移除磁盘
为了迁移卷组的物理卷(PV),需要关机并断开存储设备。你可以通过关机移除物理磁盘(通常是外部存储设备或附加硬盘)以便将其插入目标主机。
[root@localhost ~]# shutdown -h now
关机后,物理设备可以从当前主机上移除。
5. 将磁盘插入新的主机
在关机并移除磁盘之后,将磁盘连接到新的主机上。连接方法取决于你使用的存储硬件(例如 SATA、SCSI、USB、iSCSI 等)。
6. 扫描物理卷(PV)
新主机启动后,使用 pvscan
命令扫描系统中的物理卷。
[root@localhost ~]# pvscan
PV /dev/sdb lvm2 [500.00 GiB]
VG vg0 lvm2 [500.00 GiB / 500.00 GiB free]
该命令会扫描所有已连接的磁盘,识别其中的物理卷。如果设备未识别,可能需要检查硬件连接或驱动。
7. 导入卷组
在新主机上,需要通过 vgimport
命令导入卷组,恢复卷组的元数据。
#
[root@localhost ~]# vgimport vgname
参数说明:
vgname
:需要导入的卷组名称。
[root@localhost ~]# vgimport vg0
该命令会将 vg0
卷组导入新主机,恢复卷组的元数据。
8. 激活卷组
导入卷组后,最后一步是激活卷组,使其在新主机上可用。
[root@localhost ~]# vgchange -ay vgname
参数说明:
-a
:表示激活所有卷组。-y
:激活指定卷组。
[root@localhost ~]# vgchange -ay vg0
这时,卷组和它的逻辑卷将变为活动状态,可以使用 lvscan
命令检查卷组和逻辑卷是否已经激活。
验证迁移结果
完成上述步骤后,可以验证卷组和逻辑卷是否迁移成功。使用以下命令检查卷组和逻辑卷状态:
[root@localhost ~]# vgdisplay vgname
[root@localhost ~]# lvdisplay /dev/vgname/lvname
[root@localhost ~]# vgdisplay vg0
[root@localhost ~]# lvdisplay /dev/vg0/lvdata
如果一切顺利,你应该能够在新主机上访问和使用逻辑卷。
注意事项
- 数据备份:在执行任何迁移操作之前,请确保备份所有重要数据,以防发生意外。
- 磁盘兼容性:确保新的主机可以识别和支持旧主机上的磁盘格式(例如,LVM 配置和物理卷)。
- 驱动和配置:如果新主机使用不同的硬件或驱动,可能需要重新配置 LVM 或安装必要的驱动。
- 磁盘故障排查:如果在迁移后无法识别磁盘,检查硬件连接、磁盘状态、LVM 配置文件等。
Comments NOTHING