在这一章当中咱们开始讲述LVM2的基础使用,在前一章当中咱们描述了RAID磁盘的基础概念,主要实现的是软RAID,介绍其RAID级别,以及如何建立RAID、管理RAID、删除RAID等操做。node
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
咱们如今介绍一下建立逻辑卷的管理工具,要想使用建立并使用逻辑卷,建立该逻辑卷是由从下往上来依次执行,先建立物理卷,而后在建立卷组,在卷组之上建立逻辑卷。
要想建立逻辑分区并管理,咱们须要添加磁盘或者直接划分分区也能够。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/
扩展逻辑卷的话,咱们使用的是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
缩减逻辑卷的话,须要事先缩减文件系统大小,然后才能将你的物理或者说是逻辑空间缩减至指定大小。
缩减逻辑卷: # 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
快照其实对咱们并不陌生,在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/
说明它只是复制变化前的,而你复制的新文件是不会复制到快照卷当中的,复制都是快照那一刻的文件而已,假如备份完成以后,则能够进行删除该逻辑卷。
那么如今全部的东西都不要,删除的话操做以下。
首先,先卸载。
# 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.
首先,光盘设备的路径在/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
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:吐零机;