创建逻辑卷的原理图
我们为什么要创建逻辑卷及用途
创建逻辑卷(Logical Volume,LV)的原因和用途主要包括以下几点:
1. 灵活性:逻辑卷管理(LVM)提供了一种灵活的方式来管理存储空间。与传统的分区相比,逻辑卷允许你更灵活地调整存储空间的大小,而不需要重新格式化整个硬盘。
2. 空间合并:逻辑卷可以将多个物理硬盘或分区合并成一个大的存储池(卷组),这样你可以跨多个物理设备创建一个逻辑卷,突破单个物理硬盘容量的限制。
3. 动态调整大小:逻辑卷支持动态扩展和缩减。这意味着你可以根据实际需要随时增加或减少逻辑卷的大小,而不需要重新分配整个存储空间。
4. 快照功能:逻辑卷支持创建快照,这是一种在特定时间点创建数据副本的功能。这对于系统备份和恢复非常有用,可以在系统升级或关键操作前后创建快照,以便在出现问题时快速恢复。
5. 支持多种RAID配置:LVM支持多种RAID级别(如RAID 1、4、5、6、10),这提供了数据冗余和性能优化的可能性。
6. 精简配置:逻辑卷可以实现精简配置(Thin Provisioning),即只分配实际使用的空间,而不是预先分配全部空间。这有助于更有效地利用存储资源。
7. 缓存卷:逻辑卷还可以使用快速存储设备(如SSD)作为缓存,以提高慢速存储设备(如HDD)的性能。
8. 简化管理:逻辑卷提供了一种更为统一和简化的存储管理方式,使得管理员可以更容易地监控和管理存储资源。
总的来说,逻辑卷提供了一种高效、灵活且功能丰富的存储管理解决方案,适用于需要动态调整存储空间、优化性能和数据保护的场景。
我们怎么来理解逻辑卷
逻辑卷(LV)可以被视为一个虚拟的存储空间,它是建立在物理存储设备(如硬盘驱动器)之上的。逻辑卷管理(LVM)允许我们将一个或多个物理硬盘(或硬盘上的分区)组合成一个卷组(VG),然后从这个卷组中创建逻辑卷。这些逻辑卷在操作系统中表现为独立的存储单元,但实际上它们使用的确是底层物理硬盘上的空间。
逻辑卷的虚拟性体现在以下几个方面:
1. 空间分配:逻辑卷可以跨越多个物理硬盘,或者将多个物理硬盘的空间合并为一个连续的存储空间,这在传统的分区管理中是做不到的。
2. 动态调整:逻辑卷的大小可以根据需要动态调整,这与物理硬盘的固定分区大小形成对比。
3. 快照和备份:逻辑卷可以创建快照,这是物理硬盘上无法直接实现的功能。
4. 数据布局:逻辑卷的数据可以在物理硬盘上以优化的方式分布,例如,为了提高性能或数据冗余,数据可以被分散存储在不同的硬盘上。
尽管逻辑卷是虚拟的,但它们确实使用了真实的物理空间。当您创建一个逻辑卷时,LVM会从卷组中分配相应的物理空间来存储数据。这些物理空间可以是单个硬盘的一部分,也可以是多个硬盘的组合。逻辑卷的虚拟性提供了更高的灵活性和更好的数据管理能力,而实际的数据存储仍然依赖于物理硬件。
如何创建逻辑卷(lvm)
创建逻辑卷的思路
1.增加硬盘
2.给磁盘进行分区
3.给分区创建物理卷
4.创建卷组
5.创建逻辑卷
6.给逻辑卷格式化并创建文件系统
7.将逻辑卷挂载到系统目录下
1.增加硬盘
我们以centos系统为例,给系统增加一个20G的硬盘,分成单个文件
在Vmware软件中我们点击【虚拟机-设置】
【点击添加-选择硬盘-点击下一步】
【磁盘类型选择(scsi)-点击下一步】
【点击创建虚拟磁盘-点击下一步】
【磁盘大小选择20G(根据需要自行增加或减少,我这里以20G为例)-将磁盘分成单个文件-点击下一步】
【点击完成】
【点击确定】
2.给磁盘进行分区
到这里们只是将硬盘加了进去但还是没有生效的我们可以通过命令查看一下
[root@controller ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 59G 0 part
├─centos-root 253:0 0 38.3G 0 lvm /
├─centos-swap 253:1 0 2G 0 lvm [SWAP]
└─centos-home 253:2 0 18.7G 0 lvm /home
sr0 11:0 1 942M 0 rom
[root@controller ~]#
如何让加进去的硬盘生效:
1.reboot(重启)
2.通过手动命令的方式
#在执行下面命令是要先进入到 /sys/class/scsi_host目录下查看
[root@controller ~]# cd /sys/class/scsi_host
[root@controller scsi_host]# ls
host0 host1 host2
[root@controller scsi_host]#
#如果是向上面的三个文件那么下面的命令中就写{0..2},如果是四个文件那么就写{0..3}....依次类推
# for语句执行
for i in {0..2};do echo "- - -" > /sys/class/scsi_host/host$i/scan;done
[root@controller scsi_host]# for i in {0..2};do echo "- - -" > /sys/class/scsi_host/host$i/scan;done
[root@controller scsi_host]#
这条命令是怎样让增加进去的硬盘生效的:
这段命令是用于在Linux系统中扫描SCSI或SATA设备的。具体来说,它会遍历SCSI主机适配器(通常是硬盘控制器),并触发这些适配器进行设备扫描。这通常用于在添加新硬盘或更改现有硬盘配置后,让系统重新识别这些设备。
命令的各个部分解释如下:
- `for i in {0..2}`:这是一个循环,`i`的值从0遍历到2。这意味着命令会执行三次,每次`i`的值分别为0、1和2。
- `echo “- - -”`:`echo`命令用于输出后面的字符串。这里的字符串`"- - -"`(注意这里的空格)是一个特定的信号,用于告诉SCSI主机适配器进行扫描。
- `> /sys/class/scsi_host/host$i/scandone`:`>`是重定向操作符,它将`echo`命令的输出发送到指定的文件。`/sys/class/scsi_host/host$i/scandone`是一个特殊的文件,位于`/sys`文件系统中,代表SCSI主机适配器的扫描完成文件。当向这个文件写入特定的信号时,会触发对应的SCSI主机适配器扫描其连接的设备。
这个命令通常在脚本中使用,以便在系统启动或配置更改后自动扫描新设备。在某些情况下,如果手动添加了新硬盘,可能需要手动执行这个命令来让系统识别新设备。不过,现代的Linux系统通常会自动处理这些情况,所以手动执行这个命令的情况较少。
执行成功后再次用命令查看发现硬盘被加进去了(sdb)
分区
[root@controller ~]# fdisk /dev/sdb #分区命令
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xf58d1c0a 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):m
命令操作
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
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
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
命令(输入 m 获取帮助):p #打印分区列表,可以看到此时该硬盘还没有分区
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xf58d1c0a
设备 Boot Start End Blocks Id System
命令(输入 m 获取帮助):n #创建新的分区
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p #分区类型,默认为主分区
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+10G #设置分区的大小
分区 1 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):w #保存退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@controller ~]# lsblk #查看分区是否生成
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 59G 0 part
├─centos-root 253:0 0 38.3G 0 lvm /
├─centos-swap 253:1 0 2G 0 lvm [SWAP]
└─centos-home 253:2 0 18.7G 0 lvm /home
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 10G 0 part #sdb1就是新创建的分区
sr0 11:0 1 942M 0 rom
3.给新建的分区创建物理卷
[root@controller ~]# pvcreate /dev/sdb1 #创建物理卷的命令
Physical volume "/dev/sdb1" successfully created.
[root@controller ~]# pvs #查看创建的物理卷
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <59.00g 4.00m
/dev/sdb1 lvm2 --- 10.00g 10.00g #创建完成的物理卷
4.创建卷组
[root@controller ~]# vgcreate vg1 /dev/sdb1 #创建卷组的命令,vg1是卷组的名称,后面是设备名
Volume group "vg1" successfully created
[root@controller ~]# vgs #查看创建卷组的情况
VG #PV #LV #SN Attr VSize VFree
centos 1 3 0 wz--n- <59.00g 4.00m
vg1 1 0 0 wz--n- <10.00g <10.00g #创建完成的卷组
[root@controller ~]#
5.创建逻辑卷
[root@controller ~]# lvcreate -L +5g -n lv1 vg1 #创建逻辑卷的格式,lv1为逻辑卷的名字,vg1为卷组名,意义就是从vg1这个卷组中拿出5G的空间创建逻辑卷
Logical volume "lv1" created.
[root@controller ~]# lvs #查看逻辑卷的情况
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home centos -wi-ao---- <18.70g
root centos -wi-ao---- <38.30g
swap centos -wi-ao---- 2.00g
lv1 vg1 -wi-a----- 5.00g #创建完成的逻辑卷
6.给逻辑卷创建文件系统
[root@controller ~]# mkfs.ext4 /dev/vg1/lv1 #固定格式。ext4是文件系统的类型,除此之外还有xfs,ext3类型等等,vg1是卷组名,lv1是逻辑卷的名字
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
7.挂载到目录下使用
手动挂载
[root@controller ~]# mkdir /controller #手动创建一个目录,也可以挂到系统目录下,但是考虑到系统目录下由文件,所以这里就先挂载到手动创建的目录下
[root@controller ~]# mount /dev/vg1/lv1 /controller /挂载的命令
查看是否挂载成功
[root@controller ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 979M 0 979M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.6M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/mapper/centos-root 39G 1.7G 37G 5% /
/dev/mapper/centos-home 19G 33M 19G 1% /home
/dev/sda1 1014M 137M 878M 14% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/mapper/vg1-lv1 4.8G 20M 4.6G 1% /controller
#发现lv1已经挂载到controller目录下使用了
开机自动挂载
由于手动挂载,在每次开机后都要在重新执行一次,比较麻烦,所以这里我们设置开机自动挂载
#
# /etc/fstab
# Created by anaconda on Sun Mar 10 02:03:08 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=92c4c6d8-e45b-4b14-899a-103a6fa2d784 /boot xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/vg1/lv1 /controller ext4 defaults 0 0 #固定形式,具体解释,我的上一篇由先详细的解释,这里不做介绍
修改完配置文件后还需完成以下操作
[root@controller ~]# umount /controller #将原来手动挂载的卸载掉
[root@controller ~]# mount -a #重新挂载,是自动挂载生效
[root@controller ~]# df -h #查看挂载情况
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 979M 0 979M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.5M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/mapper/centos-root 39G 1.7G 37G 5% /
/dev/mapper/centos-home 19G 33M 19G 1% /home
/dev/sda1 1014M 137M 878M 14% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/mapper/vg1-lv1 4.8G 20M 4.6G 1% /controller
那么到这里我们就完成了整个逻辑卷的创建过程
8.如何进行扩容
扩容逻辑卷(LV)通常涉及以下几个步骤。请注意,扩容逻辑卷之前,需要确保有足够的空间在卷组(VG)中未被使用。以下是扩容逻辑卷的一般步骤:
1. 检查卷组空间:
- 使用`vgdisplay`命令查看卷组的详细信息,包括可用空间。
vgdisplay
2. 扩展卷组(如果需要):
- 如果卷组空间不足,您可能需要先扩展卷组。这可以通过添加新的物理卷(PV)来实现。
- 使用`pvcreate`命令将新的硬盘分区标记为物理卷。
pvcreate /dev/sdXN
(将`sdXN`替换为新硬盘分区的设备标识)
- 然后使用`vgextend`命令将新的物理卷添加到现有的卷组中。
sudo vgextend vgname /dev/sdXN
(将`vgname`替换为卷组名称,`sdXN`替换为新物理卷的设备标识)
3. 扩展逻辑卷:
- 使用`lvextend`命令扩展逻辑卷的大小。
sudo lvextend -L +size /dev/vgname/lvname
(将`size`替换为要增加的大小,如`+100G`表示增加100GB,`vgname`和`lvname`分别替换为卷组和逻辑卷的名称)
4. 调整文件系统大小:
- 逻辑卷扩容后,文件系统也需要相应地调整大小。这取决于您使用的文件系统类型。对于ext3/ext4文件系统,可以使用`resize2fs`命令。
resize2fs /dev/vgname/lvname
(同样替换`vgname`和`lvname`)
- 对于XFS文件系统,使用`xfs_growfs`命令。
xfs_growfs /dev/vgname/lvname
5. 验证扩容结果:
- 使用`df -h`命令查看文件系统的新大小,确保扩容成功。
df -h /path/to/mountpoint
(将`/path/to/mountpoint`替换为逻辑卷挂载的目录路径)
如果是对已经挂载到目录下的逻辑卷进行扩容则需要谨慎对待
需要先用umount命令对逻辑卷进行卸载,然后在执行后面的命令,执行完成后在重新过载就行了
9.如何删除创建的逻辑卷
删除逻辑卷(LV)是一个需要谨慎进行的操作,因为它会永久移除逻辑卷及其上的所有数据。在删除逻辑卷之前,请确保您已经备份了所有重要数据。以下是删除逻辑卷的步骤:
1. 卸载逻辑卷:
- 首先,确保逻辑卷未被挂载。如果逻辑卷已经挂载,您需要先卸载它。
umount /path/to/mountpoint
(将`/path/to/mountpoint`替换为逻辑卷挂载的目录路径)
2. 删除逻辑卷:
- 使用`lvremove`命令从卷组中删除逻辑卷。
lvremove /dev/vgname/lvname
(将`vgname`和`lvname`分别替换为卷组和逻辑卷的名称)
3. 删除物理卷(可选):
- 如果您想要释放物理卷(PV)上的空间,以便它可以被重新使用,您需要先从卷组中移除物理卷。
vgreduce vgname /dev/sdXN
(将`vgname`替换为卷组名称,`sdXN`替换为物理卷的设备标识)
4. 删除卷组(可选):
- 如果卷组中没有其他逻辑卷,或者您想要删除整个卷组,可以使用`vgremove`命令。
vgremove vgname
(将`vgname`替换为卷组名称)
5. 删除物理卷(可选):
- 如果您不再需要物理卷,并且想要从系统中完全移除它,可以使用`pvremove`命令。
pvremove /dev/sdXN
(将`sdXN`替换为物理卷的设备标识)
在执行这些操作时,请确保您有足够的权限(通常需要root权限)。删除逻辑卷是一个不可逆的过程,一旦执行,所有在逻辑卷上的数据都将丢失。因此,在执行删除操作之前,请再次确认您已经备份了所有重要数据。