2018-2-27Linux系统管理(7)LVM2

  在这一章当中咱们开始讲述LVM2的基础使用,在前一章当中咱们描述了RAID磁盘的基础概念,主要实现的是软RAID,介绍其RAID级别,以及如何建立RAID、管理RAID、删除RAID等操做。node

1、LVM2

  LVM是Logical Volume Manager,叫作逻辑卷管理器,很显然,它是管理逻辑卷的一个工具,版本号为2,和上一章的软RAID的同样,LVM也是经过以软件的形式来组成,将多个磁盘设备抽象成为一个逻辑设备。前者RAID引用的内核模块为md,而在这里引用的是dm,称之为设备映射器,该组件的做用为是将一个或多个底层模块设备组织成一个逻辑设备的模块。
  那么逻辑卷就是无非将多个逻辑设备组成为一个单一设备来管理的一个组件,从这个角度来讲,所谓逻辑卷就是假设有一块磁盘或者为分区,或者是RAID,基于任何一个块设备来进行,咱们能够在逻辑架构中将该磁盘建立成为一个PV,咱们称之为物理卷。这也是最底层的逻辑设备,在该设备之上咱们也能够划分出一个VG,称之为卷组。卷组其实能够包含多个物理卷,卷组的空间大小是由物理卷来提供的,也就是说,能够增长或减小其磁盘空间,不过在VG当中是不能使用该设备的,须要在该基础之上划分为一个LV的逻辑卷,这是真正意义上的逻辑卷。每个LV都是一个文件系统,能够格式化并使用。
  LV是根据VG的容量大小能够来进行划分,也能够动态增长该分区容量的边界。咱们将多个块设备组成VG的话,VG将在逻辑层次上将每个块设备所提供的空间划分红为固定大小的块,咱们称之为PE,PV的大小取决于VG的定义,所以PE是在PV加入到某个VG当中所决定的。LV也能够根据PE的大小来进行划分容量,也可动态扩展与收缩,在这个过程当中并不损坏其数据。因此这对企业存储未知的数据来讲,是一个很是好的选择。
  LVM的缺点是一旦数据丢失就很修复回来,毕竟是由软件来进行实现,并不能在硬件中真正实现,而是靠软件来进行组织的。还须要注意的是,若是拆除一个PV的话会遇到不少问题。必须先将该PV下的数据移动到其它分区才能进行拆除。因此说缩减是很危险的,但扩展来讲通常问题不大。
  一旦PE被分配给某个LV使用的话,那么PE就属于该LV分区,这时候PE就称之为LE。
  对于VG或对于LV来说,该设备文件是在/dev的一个独特的目录下,叫作mapper。
架构

   LVM:Logical Volume Manager, Verion 2

   dm:device mapper,将一个或多个底层模块设备组织成一个逻辑设备的模块;

   /dev/mapper/VG_NAME-LV_NAME
      /dev/mapper/vol0-root   (在vol0卷组上有一个root的逻辑卷)
   /dev/VG_NAME/LV_NAME
     /dev/vol0/root

2、管理工具

  咱们如今介绍一下建立逻辑卷的管理工具,要想使用建立并使用逻辑卷,建立该逻辑卷是由从下往上来依次执行,先建立物理卷,而后在建立卷组,在卷组之上建立逻辑卷。
  要想建立逻辑分区并管理,咱们须要添加磁盘或者直接划分分区也能够。
app

# fdisk -l
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 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 /dev/sdd: 21.5 GB, 21474836480 bytes, 41943040 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 /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 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

  我在虚拟机中添加了三块磁盘,咱们先用这其中两块磁盘来建立物理卷,要想建立该物理卷的话,咱们使用pv建立和管理工具。ide

   pv管理工具:
     pvs:简要pv信息显示;
     pvdisplay:显示pv的详细信息;
    
     # pvcreate /dev/DEVICE  建立pv
     # pvremove /dev/DEVICE  删除pv

  咱们先将/dev/sdb和/dev/sdc建立出来。工具

# pvcreate /dev/sdb /dev/sdc
  Physical volume "/dev/sdb" successfully created.
  Physical volume "/dev/sdc" successfully created.

  建立完成以后,咱们能够详细查看这两个物理卷的信息。spa

# pvdisplay /dev/sdb /dev/sdc
  "/dev/sdb" is a new physical volume of "20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name               
  PV Size               20.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               ryttO9-gZAc-n8LF-KHz5-BoT2-xnF9-gvoS8l
   
  "/dev/sdc" is a new physical volume of "20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name               
  PV Size               20.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               39FLas-V3BY-S1Qd-XvnO-UH5P-kaC0-fiiVWs

  或者使用pvs命令来查看。orm

# pvs
  PV         VG Fmt  Attr PSize  PFree 
  /dev/sdb      lvm2 ---  20.00g 20.00g
  /dev/sdc      lvm2 ---  20.00g 20.00g

  咱们在上述的详细信息格式中看的出来,Allocatable为NO,则说明并无加入那个VG当中。同时,也是没有PE大小等数据。
  接下来建立VG,一样,咱们也要先介绍vg的管理工具,相比之下,比pv还要多不少。
接口

   vg管理工具:
     vgs
     vgdisplay
    
     vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
     vgcreate VG_GROUPNAME /dev/PV_DEVICE
     vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
     vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDeviceParh...] 缩减
         先作pvmore
     vgremove VolumeGroupName

  建立vg时,咱们先必须建立vg的名字,而后指明其设备路径。如今,建立一个卷组叫作vg0,将/dev/sdb和/dev/sdc加入到该组当中。ip

# vgcreate vg0 /dev/sdb /dev/sdc
   Volume group "vg0" successfully created
# vgdisplay vg0
  --- Volume group ---
  VG Name               vg0
  System ID             
  Format                lvm2
  Metadata Areas        2
  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                2
  Act PV                2
  VG Size               39.99 GiB
  PE Size               4.00 MiB
  Total PE              10238
  Alloc PE / Size       0 / 0   
  Free  PE / Size       10238 / 39.99 GiB
  VG UUID               xdF5Fu-nWKM-Sm6V-MRou-LAgl-PCUb-JIEqgE
# vgs
  VG  #PV #LV #SN Attr   VSize  VFree 
  vg0   2   0   0 wz--n- 39.99g 39.99g

  咱们可使用-s来指定大小,前提是不曾建立逻辑卷。
  若是扩展卷组的话,可使用vgextend命令进行扩展,咱们现将不曾建立物理卷的磁盘给予建立。
ci

# pvcreate /dev/sdd
  Physical volume "/dev/sdd" successfully created.
# vgextend vg0 /dev/sdd
  Volume group "vg0" successfully extended

  咱们查看一下vg0卷组是否扩展。

# vgdisplay vg0
  --- Volume group ---
  VG Name               vg0
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  2
  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               <59.99 GiB
  PE Size               4.00 MiB
  Total PE              15357
  Alloc PE / Size       0 / 0   
  Free  PE / Size       15357 / <59.99 GiB
  VG UUID               xdF5Fu-nWKM-Sm6V-MRou-LAgl-PCUb-JIEqgE

  以上这就是vg的扩展,若是想在vg中将某个pv删除的话,先将某个pv删除,若是有大量数据存在的话,会等待很长时间,以后从vg当中进行移除该设备。

# pvmove /dev/sdb
  No data to move for vg0
# vgreduce vg0 /dev/sdb
  Removed "/dev/sdb" from volume group "vg0"
# vgdisplay vg0
  --- Volume group ---
  VG Name               vg0
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               39.99 GiB
  PE Size               4.00 MiB
  Total PE              10238
  Alloc PE / Size       0 / 0   
  Free  PE / Size       10238 / 39.99 GiB
  VG UUID               xdF5Fu-nWKM-Sm6V-MRou-LAgl-PCUb-JIEqgE

  那么接下来讲的就是关于逻辑卷的建立及管理工具。须要注意的是,建立容易,但改变大小是颇有局限性的,扩展是没问题的。并且咱们建立的逻辑卷大小,也要符合卷组边缘内的磁盘容量才行。
  那么如何建立及管理逻辑卷,命令工具介绍以下:

   lv管理工具:
     lvs
     lvdisplay
    
     lvcreate -L #[mMgGtT] -n name VolumeGroup
     
     lvremove /dev/VG_NAME/LV_NAME

  那么咱们如今建立一个叫作vg_lv逻辑卷,指定大小为20G,在vg0逻辑卷组中建立。

# lvcreate -L 20G -n vg_lv vg0
  Logical volume "vg_lv" created.

  因为只建立了单个磁盘,因此咱们直接使用lvdisplay命令来显示信息该逻辑卷的信息。

# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/vg0/vg_lv
  LV Name                vg_lv
  VG Name                vg0
  LV UUID                yshZmA-OgJz-45EB-jOM8-rqDb-goKq-BRkNK9
  LV Write Access        read/write
  LV Creation host, time node1.china.org, 2018-02-27 19:55:21 +0800
  LV Status              available
  # open                 0
  LV Size                20.00 GiB
  Current LE             5120
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

  咱们查看一下/dev/mapper,就会发现有卷组名-逻辑名命名的逻辑卷。

# ls /dev/mapper/
control  vg0-vg_lv

  接下来格式化,以后进行挂载。

# mkfs.xfs /dev/vg0/vg_lv 
# mkdir /mnt/lv_disk
# mount /dev/vg0/vg_lv /mnt/lv_disk/

3、扩展逻辑卷

  扩展逻辑卷的话,咱们使用的是lvextend命令,其命令格式为:

   扩展逻辑卷:
     # lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
     # resize2fs /dev/VG_NAME/LV_NAME

  须要注意的是,+表明着从原来的基础上在加一些磁盘容量,而不加就是直接扩展至磁盘容量的大小。
  如今将磁盘增长至25G。

# lvextend -L 25G /dev/vg0/vg_lv 
  Size of logical volume vg0/vg_lv changed from 20.00 GiB (5120 extents) to 25.00 GiB (6400 extents).
  Logical volume vg0/vg_lv successfully resized.

  扩展完成以后,从新挂载以后就会发现,仍是原来的20G,这是由于逻辑卷的边缘拉大,可是文件系统的边缘并无拉大,因此仍是20G。因此咱们将文件系统的边缘也要随之拉大。无须从新挂载,咱们使用resize2fs,不过这只能用在ext4文件系统上。咱们使用xfs_growfs命令。

# xfs_growfs /dev/vg0/vg_lv 
meta-data=/dev/mapper/vg0-vg_lv  isize=512    agcount=4, agsize=1310720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=5242880, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 5242880 to 6553600

4、缩减逻辑卷

  缩减逻辑卷的话,须要事先缩减文件系统大小,然后才能将你的物理或者说是逻辑空间缩减至指定大小。

   缩减逻辑卷:
     # umount /dev/VG_NAME/LV_NAME
     # e2fsck -f /dev/VG_NAME/LV_NAME
     # resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
     # lvreduce -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
     # mount

  那么第一步,须要先卸载该逻辑卷,缩减必须先得卸载。缩减是不容许联机进行,由于它出错的风险是很是大的。

   # umount /dev/mapper/vg0-vg_lv

  第二步,尝试修复。

   # xfs_repair /dev/mapper/vg0-vg_lv

  第三步,缩减逻辑卷。

# lvreduce -L 20G /dev/vg0/vg_lv 
  WARNING: Reducing active logical volume to 20.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg0/vg_lv? [y/n]: y
  Size of logical volume vg0/vg_lv changed from 25.00 GiB (6400 extents) to 20.00 GiB (5120 extents).
  Logical volume vg0/vg_lv successfully resized.

  因为xfs文件系统只能支持增长,好像不能支持缩减,因此这里的实验,只能强制从新格式化才能挂载并使用,因此缩减逻辑卷并不推荐使用。

# mkfs.xfs -f /dev/vg0/vg_lv

5、快照

  快照其实对咱们并不陌生,在VMWare中就有快照功能,有个快照就有个时间机器,就像哆啦A梦的时光机同样,回到过去某一时刻当中,对于文件或文件系统作快照,就至关于将过去的某一时刻,瞬间扫描一遍,若是不能瞬间完成,则数据随时改变该快照就没有任何意义。这个在备份时特别有用,由于快照很快,可是备份很慢,将文件抽成丝状,称之为序列化的过程复制到另外一个磁盘设备中。那么快照卷其实就是指向原卷的另外一个路径而已,看起来时一个独立的卷,但实际没有存储任何文件而已,可是挂载以后会发现数据都在,这其实就是指向了其原卷的数据而已,但快照容量很小,因此存储的是对方发生变化的文件,没有变化的仍然能够找原卷。
  那么建立快照卷的命令格式为:

   快照:snapshot
     lvcreate -L #[mMgGtT] -p -r -s -n snapshot_lv_name original_lv_name

  那么如今咱们建立一个624M的快照卷,名字为vg_lv-snap,只拥有只读权限,逻辑卷位于/dev/vg0/vg_lv。

# lvcreate -s -L 624M -n vg_lv-snap -p r /dev/vg0/vg_lv
  Using default stripesize 64.00 KiB.
  Logical volume "vg_lv-snap" created.

  咱们挂载至vg_lv-snap目录中。

# mkdir /mnt/vg_lv-snap
# mount /dev/mapper/vg0-vg_lv-snap /mnt/vg_lv-snap/

  以后咱们进入到/mnt/lv_disk目录中,前提是你的逻辑卷挂载好,将/etc/issue文件复制该目录中。

# cp /etc/issue ./

  复制完成以后,进入到vg_lv-snap目录中。

# cd /mnt/vg_lv-snap/

  说明它只是复制变化前的,而你复制的新文件是不会复制到快照卷当中的,复制都是快照那一刻的文件而已,假如备份完成以后,则能够进行删除该逻辑卷。

6、删除操做

  那么如今全部的东西都不要,删除的话操做以下。
  首先,先卸载。

# umount /dev/vg0/vg_lv

  使用lvremove移除逻辑卷,若是有快照的话,就会提问你,没有什么意外的话,直接点击y就能够了。

# lvremove  /dev/vg0/vg_lv
Do you really want to remove active origin logical volume vg0/vg_lv with 1 snapshot(s)? [y/n]: y
  Logical volume "vg_lv-snap" successfully removed
  Logical volume "vg_lv" successfully removed

  以后删除卷组vg0。

# vgremove vg0
  Volume group "vg0" successfully removed

  以后删除pv。

# pvremove /dev/sdb /dev/sdd
  Labels on physical volume "/dev/sdb" successfully wiped.
  Labels on physical volume "/dev/sdd" successfully wiped.

7、文件系统挂载与使用

7.1 挂载光盘设备

  首先,光盘设备的路径在/dev下,取决于什么样的接口,若是为串口,则为sr0以及sr1等,为了便于识别,在/dev目录下有符号连接来指向sr0,不过须要注意的是,并非全部的发行版都有符号连接。因此没有符号连接,则直接使用sr0就能够。

   挂载光盘设备:
     光盘设备文件:
         IDE:/dev/hdc
         SATA:/dev/sr0
        
         符号连接文件:
             /dev/cdrom
             /dev/cdrw
             /dev/dvd
             /dev/dvdrw
            
     mount -r /dev/cdrom /media/cdrom
     umount /dev/cdrom

7.2 dd命令

  dd命令是一个实现底层复制的工具,好处是能够连字节均可以复制,而且指定复制指定的数量,因为复制的很底层,因此比cp命令的效率还要高。其命令用法为:

   用法:
     dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
         bs=#:block size,复制单元大小;
         count=#:复制多少个bs。
    
     磁盘拷贝:
         dd if=/dev/sda of=/dev/sdb
        
     备份MBR
         dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
     
     破坏MBR中的bootloader:
         dd if=/dev/zero of=/dev/sda bs=256 count=1
    
   两个特殊设备:
     /dev/null:数据黑洞;
     /dev/zero:吐零机;
相关文章
相关标签/搜索