linux lvm逻辑卷创建管理删除扩展减少的组成元素

作者: admin 分类: linux常用命令大全 发布时间: 2018-04-28 10:56

  逻辑盘卷管理

  Linux提供的逻辑卷LVM管理(logical volume manager ,LVM)功能,实现了文件系统跨越不同磁盘和分区操作,能够自如地调整文件系统的大小。

  LVM是Linux环境下对磁盘分区进行管理的一种机制,建立在硬盘和分区之上的一个逻辑层,提高了磁盘分区管理的灵活性。通过LVM,系统管理员可以轻松地管理磁盘分区,而不必将磁盘中的文件移动到新的磁盘上以充分利用新的存储空间,只需直接扩展文件系统的跨越磁盘即可。

  卷的基本术语

  物理存储(the physical media)

  系统的存储设备硬盘,如/dev/hdal和/dev/sda等,是存储系统最低层的存储单元。

  物理卷(physical volume, PV)

  物理卷是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块。
 

PV物理卷流程
PV创建物理卷图

  卷组(volume group,VG)

  LVM卷组类似于非LVM系统中的物理硬盘,由物理卷组成。可以在卷组上创建一个或多个LVM分区(逻辑卷),其LVM卷组由一个或多个物理卷组成。
 

VG卷组图
VG卷组图

  逻辑卷(logical volume,LV)

  LVM的逻辑卷类似于非LVM系统中的磁盘分区,在逻辑卷之上可以建立文件系统,如/home和/usr等。

  物理区域(physical extent,PE)

  每一个物理卷被划分为称为PE的基本单元,其具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。

  逻辑区域(logical extent,LE)

  逻辑区域是逻辑卷中被称为LE的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

  卷组描述区域(volume group descriptor area, VGDA)

  VGDA中存放了逻辑卷和卷组相关的数据,包括PV描述符、VG描述符、LV描述符和PE描述符。系统启动LVM时激活VG,并将VGDA加载至内存,用来识别LV的实际物理存储位置。当系统进行I/O操作时,会根据VGDA建立的映射机制来访问实际的物理位置。

  常见的LVM管理命令

 

 功能

 物理卷管理

 卷组管理

 逻辑卷管理

 扫描 scan

 pvscan

 vgscan

 lvscan

 建立 create

 pvcreate

 vgcreate

 lvcreate

 显示 display

 pvdisplay

 vgdisplay

 lvdisplay

 删除 remove

 pvremove

 vgremove

 lvremove

 扩展 extend

 

 vgextend

 lvextend

 减少 reduce

 

 vgreduse

 lvreduse

  常用命令:

  准备好我们的分区,然后更改好分区的格式

  [root@linuxidc ~]# fdisk -l

  Disk /dev/sdb: 128.8 GB, 128849018880 bytes, 251658240 sectors

  Units = sectors of 1 * 512 = 512 bytes

  Sector size (logical/physical): 512 bytes / 512 bytes

  I/O size (minimum/optimal): 512 bytes / 512 bytes

  #查看下有哪些空闲的磁盘,我这里使用/dev/sdb和块,部分信息省略。

  [root@linuxidc ~]# fdisk /dev/sdb

  Command (m for help): t

  Partition number (1-4, default 4):

  Hex code (type L to list all codes): 8e ##更改格式为8e

  Changed type of partition 'Linux' to 'Linux LVM'

  Command (m for help): p

  Disk /dev/sdb: 128.8 GB, 128849018880 bytes, 251658240 sectors

  Units = sectors of 1 * 512 = 512 bytes

  Sector size (logical/physical): 512 bytes / 512 bytes

  I/O size (minimum/optimal): 512 bytes / 512 bytes

  Disk label type: dos

  Disk identifier: 0x6428a1e6

  Device Boot Start End Blocks Id System

  /dev/sdb1 2048 62916607 31457280 8e Linux LVM

  /dev/sdb2 62916608 125831167 31457280 8e Linux LVM

  /dev/sdb3 125831168 188745727 31457280 8e Linux LVM

  /dev/sdb4 188745728 251658239 31456256 8e Linux LVM

  ########################################看此时我们的格式都全部改为了8e lvm格式。

  [root@linuxidc ~]# ls /dev/sdb* #查看下有没有识别到我们分区

  /dev/sdb /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb4

  [root@linuxidc ~]# partprobe /dev/sdb #如果分区没识别我们需要刷新下强制识别。

 

  创建pv卷

  PV 有关的命令:

  pvcreate :将实体 partition 创建成为 PV ;

  pvscan :扫描系统存在的pv,pvs简要显示

  pvdisplay :显示出目前系统上面的 PV 状态;

  pvremove :将 PV 属性移除,让该 partition 不具有 PV 属性。

  [root@linuxidc ~]# pvcreate /dev/sdb{1,2,3}

  Device /dev/sdb1. not found (or ignored by filtering).

  Physical volume "/dev/sdb2" successfully created

  Physical volume "/dev/sdb3" successfully created

  ##我们一次创建了三个pv,分别为/dev/sdb1 /dev/sdb2 /dev/sdb3

  [root@linuxidc ~]# pvscan

  PV /dev/sdb2 lvm2 [30.00 GiB]

  PV /dev/sdb3 lvm2 [30.00 GiB]

  PV /dev/sdb1 lvm2 [30.00 GiB]

  Total: 3 [90.00 GiB] / in use: 0 [0 ] / in no VG: 3 [90.00 GiB]

  ## 显示pv的基本信息,总共pv大小,vg已经使用pv大小,剩余pv的大小

  [root@linuxidc ~]# pvdisplay ##显示pv的详细信息

  "/dev/sdb2" is a new physical volume of "30.00 GiB"

  --- NEW Physical volume ---

  PV Name /dev/sdb2 ##pv的名称

  VG Name ##没有被分配所以显示空白

  PV Size 30.00 GiB ##pv容量大小

  Allocatable NO #是否被分配

  PE Size 0 #PE的大小

  Total PE 0 已分配出去PE大小

  Free PE 0 空闲PE大小

  Allocated PE 0 #剩下可用PE大小

  PV UUID bmWNn0-7PND-2yVL-TGT7-U9mf-Du01-ERq7FY#pv的id号

  ##由于PE是在啊VG创建的时候才会指定各种的大小,所以此次大不分都显示0

  "/dev/sdb3" is a new physical volume of "30.00 GiB"

  --- NEW Physical volume ---

  PV Name /dev/sdb3

  VG Name

  PV Size 30.00 GiB

  Allocatable NO

  PE Size 0

  Total PE 0

  Free PE 0

  Allocated PE 0

  PV UUID sRE2ko-dd80-RxF3-zTGi-OMFH-z1AD-KFN0cL

  "/dev/sdb1" is a new physical volume of "30.00 GiB"

  --- NEW Physical volume ---

  PV Name /dev/sdb1

  VG Name

  PV Size 30.00 GiB

  Allocatable NO

  PE Size 0

  Total PE 0

  Free PE 0

  Allocated PE 0

  PV UUID 67mTD7-OroO-n5iK-GWBQ-Mqow-BYzi-HXraKm

 

   创建VG

  创建 VG 相关的命令:

  vgcreate -s 大小 VG名 pv名(创建的时候可以指定PE大小)

  vgcreate :就是主要创建 VG 的命令

  vgscan :搜寻系统上面是否有 VG ,vgs显示简要信息

  vgdisplay :显示目前系统上面的 VG 状态

  vgextend :扩展VG

  vgreduce :在 VG 内移除 PV

  vgchange :配置 VG 是否启动 (active)

  vgremove :删除一个 VG

  [root@linuxidc ~]# vgcreate vg0 /dev/sdb{1,2,3}

  Volume group "vg0" successfully created

  [root@linuxidc ~]# vgs

  VG #PV #LV #SN Attr VSize VFree

  vg0 3 0 0 wz--n- 89.99g 89.99g

  [root@linuxidc ~]# vgscan

  Reading all physical volumes. This may take a while...

  Found volume group "vg0" using metadata type lvm2

  [root@linuxidc ~]# vgdisplay

  --- Volume group ---

  VG Name vg0

  System ID

  Format lvm2

  Metadata Areas 3

  Metadata Sequence No 1

  VG Access read/write

  VG Status resizable

  MAX LV 0

  Cur LV 0

  Open LV 0

  Max PV 0

  Cur PV 3

  Act PV 3

  VG Size 89.99 GiB##VG总共的大小90G(我pv每个大小30G)

  PE Size 4.00 MiB ##每个PE的大小为4MB

  Total PE 23037

  Alloc PE / Size 0 / 0

  Free PE / Size 23037 / 89.99 GiB

  VG UUID p8dacU-UFYP-eazU-Jelp-vRAN-wEP3-hxzXfW

 

  创建LVM

  LVM创建相关命令:

  lvcreate :创建 LV

  lvscan :查询系统上面的

  lvdisplay :显示系统上面的 LV 状态啊

  lvextend :扩展容量

  lvreduce :减少容量

  lvremove :删除一个 LV

  [root@linuxidc ~]# lvcreate -L +50G -n lv0 vg0 ##创建LVM大小50G,名称lv0,从vg0中调容量

  Logical volume "lv0" created.##创建成功

  [root@linuxidc ~]# lvs

  LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert

  lv0 vg0 -wi-a----- 50.00g

  [root@linuxidc ~]# lvscan

  ACTIVE '/dev/vg0/lv0' [50.00 GiB] inherit

  [root@linuxidc ~]# lvdisplay

  --- Logical volume ---

  LV Path /dev/vg0/lv0#lv全名称

  LV Name lv0

  VG Name vg0

  LV UUID bCpncg-nTn7-V5vk-NWVq-NTT5-lmQx-Ayfcqd

  LV Write Access read/write ##可读可写权限

  LV Creation host, time linuxidc, 2016-06-04 15:16:40 +0800#创建时间和创建人

  LV Status available

  # open 0

  LV Size 50.00 GiB

  Current LE 12800

  Segments 2

  Allocation inherit

  Read ahead sectors auto

  - currently set to 8192

  Block device 253:0

  将创建好的lvm卷进行文件系统格式处理,然后挂载供我们使用

  [root@linuxidc ~]# mkfs.ext4 /dev/vg0/lv0

  mke2fs 1.42.9 (28-Dec-2013)

  Filesystem label=

  OS type: Linux

  Block size=4096 (log=2)

  Fragment size=4096 (log=2)

  Stride=0 blocks, Stripe width=0 blocks

  3276800 inodes, 13107200 blocks

  655360 blocks (5.00%) reserved for the super user

  First data block=0

  Maximum filesystem blocks=2162163712

  400 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, 11239424

  Allocating group tables: done

  Writing inode tables: done

  Creating journal (32768 blocks): done

  Writing superblocks and filesystem accounting information: done

  [root@linuxidc ~]# mkdir /lvmtest/

  [root@linuxidc ~]# mount /dev/vg0/lv0 /lvmtest/

  [root@linuxidc ~]# mount

  /dev/sda5 on /testdir type xfs (rw,relatime,seclabel,attr2,inode64,noquota)

  /dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,noquota)

  tmpfs on /run/user/42 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=100136k,mode=700,uid=42,gid=42)

  tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=100136k,mode=700)

  /dev/mapper/vg0-lv0 on /lvmtest type ext4 (rw,relatime,seclabel,data=ordered)

  [root@linuxidc ~]# cd /lvmtest/

  [root@linuxidc lvmtest]# ls

  lost+found

  [root@linuxidc lvmtest]# mkdir lvmtest1

  [root@linuxidc lvmtest]# ls

  lost+found lvmtest1

  创建了/lvmtest目录,然后挂载到此目录下,去写了点东西,测试OK没有问题!

  当我们的vg和lv空间不够用了那么我们该怎么办呢?

 

  vg的扩展,缩减,移除

  扩展vg卷大小

  我之前还有一个/dev/sdb4分区没有,现在可以派上用场了。

  [root@linuxidc ~]# vgextend vg0 /dev/sdb4

  Physical volume "/dev/sdb4" successfully created##将/dev/sdb4分区创建成了pv

  Volume group "vg0" successfully extended###/dev/sdb4这个pv成功的加入到了vg中来了

  [root@linuxidc ~]# pvscan

  PV /dev/sdb1 VG vg0 lvm2 [30.00 GiB / 0 free]

  PV /dev/sdb2 VG vg0 lvm2 [30.00 GiB / 9.99 GiB free]

  PV /dev/sdb3 VG vg0 lvm2 [30.00 GiB / 30.00 GiB free]

  PV /dev/sdb4 VG vg0 lvm2 [30.00 GiB / 30.00 GiB free]##看此时相比前面多了一个pv

  Total: 4 [119.98 GiB] / in use: 4 [119.98 GiB] / in no VG: 0 [0 ]

  [root@linuxidc ~]# vgscan

  Reading all physical volumes. This may take a while...

  Found volume group "vg0" using metadata type lvm2

  [root@linuxidc ~]# vgdisplay

  --- Volume group ---

  VG Name vg0

  System ID

  Format lvm2

  Metadata Areas 4

  Metadata Sequence No 3

  VG Access read/write

  VG Status resizable

  MAX LV 0

  Cur LV 1

  Open LV 1

  Max PV 0

  Cur PV 4

  Act PV 4

  VG Size 119.98 GiB###看大小发生了改变了

  PE Size 4.00 MiB

  Total PE 30716

  Alloc PE / Size 12800 / 50.00 GiB

  Free PE / Size 17916 / 69.98 GiB

  VG UUID p8dacU-UFYP-eazU-Jelp-vRAN-wEP3-hxzXfW

  缩减vg大小

  [root@linuxidc ~]# pvscan

  PV /dev/sdb1 VG vg0 lvm2 [30.00 GiB / 0 free]

  PV /dev/sdb2 VG vg0 lvm2 [30.00 GiB / 9.99 GiB free]

  PV /dev/sdb3 VG vg0 lvm2 [30.00 GiB / 30.00 GiB free]

  PV /dev/sdb4 VG vg0 lvm2 [30.00 GiB / 30.00 GiB free]

  Total: 4 [119.98 GiB] / in use: 4 [119.98 GiB] / in no VG: 0 [0 ]

  ##查看下pv有哪些是没有被使用的,由此我们可以看出/dev/sdb3 /dev/sdb4没用

  [root@linuxidc ~]# vgreduce vg0 /dev/sdb4

  Removed "/dev/sdb4" from volume group "vg0"

  [root@linuxidc ~]# pvscan

  PV /dev/sdb1 VG vg0 lvm2 [30.00 GiB / 0 free]

  PV /dev/sdb2 VG vg0 lvm2 [30.00 GiB / 9.99 GiB free]

  PV /dev/sdb3 VG vg0 lvm2 [30.00 GiB / 30.00 GiB free]

  PV /dev/sdb4 lvm2 [30.00 GiB]

  Total: 4 [119.99 GiB] / in use: 3 [89.99 GiB] / in no VG: 1 [30.00 GiB]

  [root@linuxidc ~]# vgdisplay

  --- Volume group ---

  VG Name vg0

  System ID

  Format lvm2

  Metadata Areas 3

  Metadata Sequence No 9

  VG Access read/write

  VG Status resizable

  MAX LV 0

  Cur LV 1

  Open LV 1

  Max PV 0

  Cur PV 3

  Act PV 3

  VG Size 89.99 GiB

  PE Size 4.00 MiB

  Total PE 23037

  Alloc PE / Size 12800 / 50.00 GiB

  Free PE / Size 10237 / 39.99 GiB

  VG UUID p8dacU-UFYP-eazU-Jelp-vRAN-wEP3-hxzXfW

  扩展、缩减LV

  扩展逻辑卷:(支持在线扩展)

  [root@linuxidc ~]# lvextend -L +30G /dev/vg0/lv0

  Size of logical volume vg0/lv0 changed from 80.00 GiB (20480 extents) to 110.00 GiB (28160 extents).

  Logical volume lv0 successfully resized.##o扩展成功

  [root@linuxidc ~]# lvs

  LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert

  lv0 vg0 -wi-ao---- 110.00g

  [root@linuxidc ~]# df -h

  Filesystem Size Used Avail Use% Mounted on

  /dev/sda2 94G 3.2G 90G 4% /

  devtmpfs 475M 0 475M 0% /dev

  tmpfs 489M 84K 489M 1% /dev/shm

  tmpfs 489M 7.1M 482M 2% /run

  tmpfs 489M 0 489M 0% /sys/fs/cgroup

  /dev/sda5 19G 33M 19G 1% /testdir

  ##lv已经扩展成功了,但是我们文件系统中的大小没加大,所以我么还需要处理下。

  [root@linuxidc ~]# resize2fs /dev/vg0/lv0 ##通过此命令让文件系统容量确实增大

  resize2fs 1.42.9 (28-Dec-2013)

  Filesystem at /dev/vg0/lv0 is mounted on /lvmtest; on-line resizing required

  old_desc_blocks = 7, new_desc_blocks = 14

  The filesystem on /dev/vg0/lv0 is now 28835840 blocks long.

  [root@linuxidc ~]# df -h

  Filesystem Size Used Avail Use% Mounted on

  /dev/sda2 94G 3.2G 90G 4% /

  devtmpfs 475M 0 475M 0% /dev

  tmpfs 489M 84K 489M 1% /dev/shm

  tmpfs 489M 7.1M 482M 2% /run

  tmpfs 489M 0 489M 0% /sys/fs/cgroup

  /dev/sda5 19G 33M 19G 1% /testdir

  /dev/sda1 473M 153M 321M 33% /boot

  tmpfs 98M 16K 98M 1% /run/user/42

  tmpfs 98M 0 98M 0% /run/user/0

  /dev/mapper/vg0-lv0 109G 60M 104G 1% /lvmtest ### ok显示现在已经是110G

  缩减逻辑卷:(不支持在线扩展,必须先卸载)

  确保缩减后的空间可以存储原来所有数据。并且在缩减前先要进行强制检查,确保文件系统处于一致状态

  1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 [root@linuxidc ~]# umount /lvmtest/##卸载

  [root@linuxidc ~]# e2fsck -f /dev/vg0/lv0 ##强行检查文件系统

  e2fsck 1.42.9 (28-Dec-2013)

  Pass 1: Checking inodes, blocks, and sizes

  Pass 2: Checking directory structure

  Pass 3: Checking directory connectivity

  Pass 4: Checking reference counts

  Pass 5: Checking group summary information

  /dev/vg0/lv0: 12/7208960 files (0.0% non-contiguous), 500575/28835840 blocks

  [root@linuxidc ~]# resize2fs /dev/vg0/lv0 5G ##缩减逻辑空间到5G

  resize2fs 1.42.9 (28-Dec-2013)

  Resizing the filesystem on /dev/vg0/lv0 to 1310720 (4k) blocks.

  The filesystem on /dev/vg0/lv0 is now 1310720 blocks long.

  [root@linuxidc ~]# lvreduce -L 5G /dev/vg0/lv0 ##缩减逻辑空间到5G

  WARNING: Reducing active logical volume to 5.00 GiB

  THIS MAY DESTROY YOUR DATA (filesystem etc.)

  Do you really want to reduce lv0? [y/n]: y #输入y同意

  Size of logical volume vg0/lv0 changed from 110.00 GiB (28160 extents) to 5.00 GiB (1280 extents).

  Logical volume lv0 successfully resized.##缩减成功

  [root@linuxidc ~]# lvs

  LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert

  lv0 vg0 -wi-a----- 5.00g ##查看lv已经变成5G大小了

  [root@linuxidc ~]# mount /dev/vg0/lv0 /lvmtest/##重新挂载我么的文件系统

  [root@linuxidc ~]# df -h

  Filesystem Size Used Avail Use% Mounted on

  /dev/sda2 94G 3.2G 90G 4% /

  devtmpfs 475M 0 475M 0% /dev

  tmpfs 489M 84K 489M 1% /dev/shm

  tmpfs 489M 7.1M 482M 2% /run

  tmpfs 489M 0 489M 0% /sys/fs/cgroup

  /dev/sda5 19G 33M 19G 1% /testdir

  /dev/sda1 473M 153M 321M 33% /boot

  tmpfs 98M 16K 98M 1% /run/user/42

  tmpfs 98M 0 98M 0% /run/user/0

  /dev/mapper/vg0-lv0 4.8G 33M 4.6G 1% /lvmtest

  [root@linuxidc ~]# cd /lvmtest/

  [root@linuxidc lvmtest]# ls

  lost+found lvmtest1#####测试看ok没有问,数据没损坏。

更多

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!