逻辑卷LVM相关操作
什么是逻辑卷
- 逻辑卷(lv)是将几个磁盘分区或者块设备(pv,pv的id必须是8e的,pv可以位于不同的磁盘分区里,pv大小可以不一)组织起来形成一个大的扩展分区(vg,卷组,一个vg至少要包含一个pv。),该扩展分区不能直接用,需要将其划分成逻辑卷(lv)才能使用,lv可以格式化成不同的文件系统,挂载后直接使用。
- lv的扩展和缩减是不会影响原有数据的,但逻辑卷缩减的风险大于逻辑卷扩展的风险。
- 逻辑卷可以支持快照功能。
相关术语
物理卷(PV, Physical Volume)
- 物理卷就是指磁盘,磁盘分区或从逻辑上和磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有和LVM相关的管理参数。当前LVM允许你在每个物理卷上保存这个物理卷的0至2份元数据拷贝.默认为1,保存在设备的开始处.为2时,在设备结束处保存第二份备份.
卷组(VG, Volume Group)
- LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。能在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
逻辑卷(LV, Logical Volume)
- LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上能建立文件系统(比如/home或/usr等)。
线性逻辑卷 (Linear Volumes)
- 一个线性逻辑卷聚合多个物理卷成为一个逻辑卷.比如,如果你有两个60GB硬盘,你能生成120GB的逻辑卷.
条块化的逻辑卷(Striped Logical Volumes)
- 当你写数据到此逻辑卷中时,文件系统能将数据放置到多个物理卷中.对于大量连接读写操作,他能改善数据I/O效率.
映像的逻辑卷(Mirrored Logical Volumes)
- 映像在不同的设备上保存一致的数据.数据同时被写入原设备及映像设备.他提供设备之间的容错。
快照卷(Snapshot Volumes)
- 快照卷提供在特定瞬间的一个设备虚拟映像,当快照开始时,他复制一份对当前数据区域的改动,由于他优先执行这些改动,所以他能重构当前设备的状态。
查看逻辑卷信息
查看LV
lvscan1
2
3[root@localhost ~]# lvscan
ACTIVE '/dev/centos/swap' [2.00 GiB] inherit
ACTIVE '/dev/centos/root' [<67.47 GiB] inheritlvdisplay
1 | [root@localhost ~]# lvdisplay |
查看VG
vgscan1
2
3[root@localhost ~]# vgscan
Reading volume groups from cache.
Found volume group "centos" using metadata type lvm2vgdisplay
1 | [root@localhost ~]# vgdisplay |
查看PV
pvscan1
2
3
4[root@localhost ~]# pvscan
PV /dev/sda2 VG centos lvm2 [<19.51 GiB / 0 free]
PV /dev/sdc1 VG centos lvm2 [<50.00 GiB / 36.00 MiB free]
Total: 2 [69.50 GiB] / in use: 2 [69.50 GiB] / in no VG: 0 [0 ]pvdisplay
1 | [root@localhost ~]# pvdisplay |
创建逻辑卷
说明
- 再创建逻辑卷时,应当先创建物理卷(pv),再创建卷组(vg),最后再创建逻辑卷(lv)
创建PV
pvcreate1
2
3
4
5
6
7
8pvcreate <device>
// device: 要创建物理卷的设备路径
示例:
[root@localhost ~]# pvcreate /dev/sda1
Physical volume "/dev/sda1" successfully created
创建VG
vgcreate1
2
3
4
5
6
7
8
9vgcreate <vg_name> <pv list>
// vg_name: 卷组名
// device list: 要添加到卷组的物理卷pv列表
示例:
[root@localhost ~]# vgcreate vg_test /dev/sda1 /dev/sdc1
Volume group "vg_test" successfully created
修改卷组属性
vgchange- 激活卷组:
vgchange -ay vg_test
- 激活卷组:
创建LV
lvcreate1
2
3
4
5
6
7
8
9
10
11
12
13
14lvcreate -n <lv_name> -L <size> <vg_name> -y
lvcreate -n <lv_name> -l <size> <vg_name> -y
// -L: 指定大小(--size LogicalVolumeSize[bBsSkKmMgGtTpPeE])
// -l: 可以指定百分比(--extents LogicalExtentsNumber[%{VG|FREE|ORIGIN}]),如 100%FREE
// lv_name: 逻辑卷名
// size: 创建的卷大小
// vg_name: 卷组名
示例:
lvcreate -n "lv_swap" -L "2GiB" "vg_test" -y
lvcreate -n "lv_data" -l "100%FREE" "vg_test" -y
删除逻辑卷
说明
- 在删除逻辑卷之前,应当先卸载掉已经被挂载的分区,然后再进行逻辑卷的删除。
- 在卸载分区时,如果遇到当前分区正在被使用,无法进行卸载的情况,可以借助
lsof命令找到正在占用挂载点的进程,然后将其kill掉,再进行卸载在操作。
- 在卸载分区时,如果遇到当前分区正在被使用,无法进行卸载的情况,可以借助
- 逻辑卷的删除顺序与创建顺序相反,首先删除逻辑卷(lv),然后删除卷组(vg),最后删除物理卷(pv)
删除LV
lvremove1
2[root@localhost ~]# lvremove /dev/VG_TEST/LV_SWAP -f -y
Logical volume "LV_SWAP" successfully removed
删除VG
vgremove1
2[root@localhost ~]# vgremove VG_TEST -f -y
Volume group "VG_TEST" successfully removed
删除PV
pvremove1
2[root@localhost ~]# pvremove /dev/sdb1 -f -y
Labels on physical volume "/dev/sdb1" successfully wiped.
磁盘分区
创建磁盘分区
- 创建分区表,采用
msdos(MBR)或者GPTGPT分区表:parted -s /dev/sdd mklabel gptMBR分区表:parted -s /dev/sdd mklabel msdos
- 创建主分区:
1
2
3
4
5
6
7
8
9
10
11
12parted -s <device> mkpart <part-type> [fs-type] start end
// deice: 指定磁盘设备
// part-type: 只能为 primary(主分区)、logical(逻辑分区)、extended(扩展分区)
// fs-type: 非必填参数,可以为: "btrfs", "ext2", "ext3", "ext4", "fat16", "fat32", "hfs", "hfs+", "linux-swap", "ntfs", "reiserfs", or "xfs"
// start: 指定分区开始位置,默认为磁盘起始位置
// end: 指定分区结束位置,默认为磁盘结束位置
示例:
parted -s /dev/sdd mkpart primary 4MiB 100%
// 在 /dev/sdd 上创建一个主分区,从4MiB的位置开始,到磁盘末尾结束
// 即整个分区大小为 磁盘大小-4MiB - 修改分区表状态
1
2
3
4
5
6
7
8
9
10parted -s <device> toggle <partition_number> <status>
// device: 指定磁盘设备
// partition_number: 该磁盘设备上的第几个分区
// status: 转换后的状态(raid|lvm)
示例:
parted -s /dev/sdd toggle 1 "lvm"
// 将 /dev/sdd 上的第一个分区标记为 lvm
删除磁盘分区
- 可以通过
parted删除指定的某个分区:parted -s /dev/sdc rm 11
2
3
4
5
6
7
8
9parted -s <device> rm <partition_number>
// device: 指定磁盘设备
// partition_number: 该磁盘设备上的第几个分区
示例:
parted -s /dev/sdc rm 1
// 删除 /dev/sdc 上的第一个分区
- 一般情况下,如果要摧毁整个磁盘分区,那么只需要将磁盘首部的分区表摧毁掉就行了,所以,可以直接采用
dd命令:dd if=/dev/zero of=/dev/sdd bs=16MiB count=1
磁盘格式化
制作交换分区:
mkswap1
2
3
4
5
6
7
8
9mkswap -f -L <label> <device>
// device: 指定磁盘设备
// label: 指定交换分区的标签label
示例:
mkswap -f -L label_swap /dev/vg_test/lv_swap格式化:
mkfs1
2
3
4
5
6
7
8
9
10
11
12
13
mkfs.<fs> -L <label> <device>
// fs: 文件系统格式
// device: 指定磁盘设备
// label: 指定交换分区的标签label
示例:
mkfs.xfs -L label_data /dev/vg_test/lv_data
mkfs.ext4 -L label_data /dev/vg_test/lv_data
mkfs -t xfs -L label_data /dev/vg_test/lv_data
mkfs -t ext4 -L label_data /dev/vg_test/lv_data