您的位置:首页 > 其它

LVM逻辑卷管理

2017-08-17 19:18 423 查看
LVM逻辑卷管理

逻辑卷管理器(英语:Logical Volume Manager,缩写为LVM),又译为逻辑卷宗管理器、逻辑扇区管理器、逻辑磁盘管理器,是Linux核心所提供的逻辑卷管理功能。它在硬盘硬盘分区之上,又创建一个逻辑层,以方便系统管理硬盘分区系统。
lvm的原理:相当于将多个物理的磁盘设备,集中化后创建为一个逻辑的设备。这样便很轻松的对分区进行管理

创建LVM的流程:
加入磁盘
新建分区
fdisk /dev/磁盘设备 (新建主分区并修改分区类型为8e lvm类型)
创建pv:
pvcreate 分区1 分区2 ...

创建vg:
vgcreate vg 分区1 分区2 ....

创建lv:
lvcreate -n /dev/vg/lv -L lv卷的大小

格式化:
mkfs.ext4 /dev/vg/lv

挂载:
mount /dev/vg/lv /挂载点

echo “ /dev/vg/lv /挂载点 ext4 defaults 0 0 ” >>/etc/fstab

扩展LVM的流程:

加入磁盘:
新建分区:
扩容pv:
pvcreate /分区

扩容vg:
vgextend /dev/vg 分区

扩容lv:
lvextend /dev/vg/lv -L +扩容的大小

重构文件系统大小:

resize2fs /dev/vg/lv

现在有4块未分区的磁盘:sdb sdc sdd sde
[root@localhost ~]# lsblk
NAME                        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0                          11:0    1 1024M  0 rom
sda                           8:0    0   20G  0 disk
├─sda1                        8:1    0  500M  0 part /boot
└─sda2                        8:2    0 19.5G  0 part
├─VolGroup-lv_root (dm-0) 253:0    0 17.6G  0 lvm  /
└─VolGroup-lv_swap (dm-1) 253:1    0    2G  0 lvm  [SWAP]
sdb                           8:16   0   20G  0 disk
sdc                           8:32   0   20G  0 disk
sdd                           8:48   0   20G  0 disk
sde                           8:64   0   20G  0 disk
[root@localhost ~]# fdisk -l ##可以查看所有磁盘的大小,以及分区情况
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000172ae
Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64        2611    20458496   8e  Linux LVM
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/sdc: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/sdd: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/sde: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/mapper/VolGroup-lv_root: 18.9 GB, 18865979392 bytes
255 heads, 63 sectors/track, 2293 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/mapper/VolGroup-lv_swap: 2080 MB, 2080374784 bytes
255 heads, 63 sectors/track, 252 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000


对sdb sdc sde分区 分区类型改为8e: ##对sdc sde做同样的操作
[root@localhost ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x046c7ceb.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): n
Command action
e   extended
p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2610, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610):
Using default value 2610
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x046c7ceb
Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        2610    20964793+  8e  Linux LVM
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.


开始逻辑卷的创建:
1 首先创建pv:
pv是将磁盘分区转换成一个个的小块,这些小块被称为pe,默认的1pe=4M 方便动态分配。

命令格式:pvcreate 分区1 分区2 ...
查看pv: pvs

[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sdc1" successfully created
Physical volume "/dev/sdd1" successfully created
[root@localhost ~]# pvs
PV         VG   Fmt  Attr PSize  PFree
/dev/sdb1       lvm2 a--  19.99g 19.99g
/dev/sdc1       lvm2 a--  19.99g 19.99g
/dev/sdd1       lvm2 a--  19.99g 19.99g
2 然后创建vg:

vg是将pv转换后的分区创建为一个整体,相当于融和为一个大的磁盘:

命令格式:vgcreate vg名 分区1 分区2 ....

查看vg: vgs ##可以看到整合后分区

[root@localhost ~]# vgcreate my_vg /dev/sdb1 /dev/sdc1 /dev/sdd1
Volume group "my_vg" successfully created
[root@localhost ~]# vgs
VG       #PV #LV #SN Attr   VSize  VFree
VolGroup   1   2   0 wz--n- 19.51g     0
my_vg      3   0   0 wz--n- 59.98g 59.98g
3 最后创建lv:

lv是将整合后的vg再分出一个个分区

命令格式:lvcreate -n /dev/vg名/lv分区 -L 分出大小
查看lv:lvs

[root@localhost ~]# lvcreate -n /dev/my_vg/my_lv -L 40G
Logical volume "my_lv" created
[root@localhost ~]# lvs
LV      VG       Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
lv_root VolGroup -wi-ao---- 17.57g
lv_swap VolGroup -wi-ao----  1.94g
my_lv   my_vg    -wi-a----- 40.00g


逻辑卷创建完成后,就和正常的分区一样了,接下来就该格式化了挂载分区了

格式化分区:
[root@localhost ~]# mkfs.ext4 /dev/my_vg/my_lv
mke2fs 1.41.12 (17-May-2010)
文件系统标签=
操作系统:Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
2621440 inodes, 10485760 blocks
524288 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=4294967296
320 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, 1605632, 2654208,
4096000, 7962624
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.


挂载分区:

[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/my_vg/my_lv /data/
写入到开机挂载文件/etc/fstab:

[root@localhost ~]# echo "/dev/my_vg/my_lv /data ext4 defaults 0 0 " >>/etc/fstab
[root@localhost ~]# tail -1 /etc/fstab
/dev/my_vg/my_lv /data ext4 defaults 0 0
验证挂载情况:

[root@localhost ~]# mount -a
[root@localhost ~]# mount
/dev/mapper/VolGroup-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/mapper/my_vg-my_lv on /data type ext4 (rw)
[root@localhost ~]# df -lh
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root   18G  1.5G   15G  10% /
tmpfs                         242M     0  242M   0% /dev/shm
/dev/sda1                     485M   34M  427M   8% /boot
/dev/mapper/my_vg-my_lv        40G  176M   38G   1% /data


逻辑卷lv扩容

当创建的逻辑卷lv内的数据文件过多,需要扩容的时候就体现出逻辑卷的方便快捷和强大了。

现在有一块硬盘sde未分区,现在要用这块硬盘给lv扩容。
[root@localhost ~]# lsblk
NAME                        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0                          11:0    1 1024M  0 rom
sda                           8:0    0   20G  0 disk
├─sda1                        8:1    0  500M  0 part /boot
└─sda2                        8:2    0 19.5G  0 part
├─VolGroup-lv_root (dm-0) 253:0    0 17.6G  0 lvm  /
└─VolGroup-lv_swap (dm-1) 253:1    0    2G  0 lvm  [SWAP]
sdb                           8:16   0   20G  0 disk
└─sdb1                        8:17   0   20G  0 part
└─my_vg-my_lv (dm-2)      253:2    0   40G  0 lvm  /data
sdc                           8:32   0   20G  0 disk
└─sdc1                        8:33   0   20G  0 part
└─my_vg-my_lv (dm-2)      253:2    0   40G  0 lvm  /data
sdd                           8:48   0   20G  0 disk
└─sdd1                        8:49   0   20G  0 part
└─my_vg-my_lv (dm-2)      253:2    0   40G  0 lvm  /data
sde                           8:64   0   20G  0 disk


给新硬盘分区:
[root@localhost ~]# fdisk /dev/sde
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xe0bca983.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').

Command (m for help): n
Command action
e   extended
p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2610, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610):
Using default value 2610

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.


逻辑卷扩容流程:

1.将主分区加入到pv
[root@localhost ~]# pvcreate /dev/sde1
Physical volume "/dev/sde1" successfully created
[root@localhost ~]# pvs
PV         VG       Fmt  Attr PSize  PFree
/dev/sda2  VolGroup lvm2 a--  19.51g     0
/dev/sdb1  my_vg    lvm2 a--  19.99g     0
/dev/sdc1  my_vg    lvm2 a--  19.99g     0
/dev/sdd1  my_vg    lvm2 a--  19.99g 19.98g
/dev/sde1           lvm2 a--  19.99g 19.99g
2.加pv分区加入到vg容器里
[root@localhost ~]# vgextend /dev/my_vg /dev/sde1
Volume group "my_vg" successfully extended
[root@localhost ~]# vgs
VG       #PV #LV #SN Attr   VSize  VFree
VolGroup   1   2   0 wz--n- 19.51g     0
my_vg      4   1   0 wz--n- 79.97g 39.97g
##vsize是总大小 vfree是剩余容量

3.给lv扩容:
[root@localhost ~]# lvextend /dev/my_vg/my_lv -L +20G
Extending logical volume my_lv to 60.00 GiB
Logical volume my_lv successfully resized
[root@localhost ~]# lvs
LV      VG       Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
lv_root VolGroup -wi-ao---- 17.57g
lv_swap VolGroup -wi-ao----  1.94g
my_lv   my_vg    -wi-ao---- 60.00g
(可以写作是:lvcreatend /dev/my_vg/my_lv /dev/sde1将整块磁盘扩容给lv)

4.重新构建文件系统大小:
因为文件系统前面已经格式化,设置了文件系统。里面也存放了文件,不能重新格式化文件系统,而扩容了逻辑卷,文件系统无法检测到。这就需要使用resize2fs这条命令重新构建文件系统了。
[root@localhost ~]# resize2fs /dev/my_vg/my_lv
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/my_vg/my_lv is mounted on /data; on-line resizing required
old desc_blocks = 3, new_desc_blocks = 4
Performing an on-line resize of /dev/my_vg/my_lv to 15728640 (4k) blocks.
The filesystem on /dev/my_vg/my_lv is now 15728640 blocks long.
5.查看验证:
[root@localhost ~]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root   18G  1.5G   15G  10% /
tmpfs                         242M     0  242M   0% /dev/shm
/dev/sda1                     485M   34M  427M   8% /boot
/dev/mapper/my_vg-my_lv        60G  180M   56G   1% /data
[root@localhost ~]#
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息