CentOS 6中创建及管理LVM逻辑卷

LVM简介:

LVM是逻辑管理卷的简写,其可以将多块物理磁盘的分区组成一个大的卷组(可以把他想象成是一个大的资源池),再在卷组上划分出逻辑卷并在其上建立文件系统最终供用户使用。

LVM的好处是可以动态的增加逻辑卷的大小,这样就不用面临随着业务发展,原本的分区空间不足的尴尬啦!

下面是LVM的结构图,最下面是物理磁盘分区,其上是物理卷(一个物理磁盘分区对应一个物理卷),再往上是我称之为“资源池”的卷组,这个“资源池”的容量是由组成其的物理卷的总容量决定的,而最上面则是可以被当成“普通分区”来使用的逻辑卷,逻辑卷可以划分很多个(默认一个卷组可以划分256个逻辑卷),只要其加起来的容量不超过“资源池”的容量就好!

创建LVM:

一、安装LVM软件包

通常情况下,CentOS中都有自带LVM软件包,但为了以防万一,我还是把安装命令贴出来吧~

[root@localhost ~]# yum install -y lvm

二、创建物理磁盘的分区

记得要先添加一块空磁盘呐,本实验中我添加了一块8GB大小的SCSI磁盘。

查看新添加的磁盘。

[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 4.2G 0 rom /media/cdrom
sda 8:0 0 8G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 7.5G 0 part
 ├─VolGroup-lv_root (dm-0) 253:0 0 6.7G 0 lvm /
 └─VolGroup-lv_swap (dm-1) 253:1 0 816M 0 lvm [SWAP]
sdb 8:16 0 8G 0 disk

如果新加的磁盘不能被系统立即识别请参考此篇文章。

https://www.ibadboy.net/archives/1895.html

使用fdisk工具对新加磁盘进行分区。

[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 0x028d3c84.
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-1044, default 1):   s           //设置起始扇区
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044):522           //设置结束扇区,这里我结束扇区设置为总扇区数的一半,相当于把分区容量设置为总容量的一半
Command (m for help): n          //新建第二块磁盘分区
Command action
   e   extended
   p   primary partition (1-4)
p           //新建为主分区
Partition number (1-4): 2            //设置分区编号
First cylinder (523-1044, default 523):          //设置起始扇区
Using default value 523
Last cylinder, +cylinders or +size{K,M,G} (523-1044, default 1044):             //设置结束扇区
Using default value 1044
Command (m for help): t             //更改分区的标识
Partition number (1-4): 1           //选择编号为1的分区进行操作
Hex code (type L to list codes): 8e //将分区标识更改为“Linux LVM”,其对应的代码是8e,这里可以输入list来查看所有标识对应的代码
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): t             //更改分区的标识
Partition number (1-4): 2           //选择编号为2的分区进行操作
Hex code (type L to list codes): 8e //将分区标识更改为“Linux LVM”
Changed system type of partition 2 to 8e (Linux LVM)
Command (m for help): p             //查看刚刚新建的分区
Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 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: 0x028d3c84
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         522     4192933+  8e  Linux LVM
/dev/sdb2             523        1044     4192965   8e  Linux LVM
Command (m for help): w             //保存并退出fdisk工具
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

三、创建物理卷

使用新创建的/dev/sdb1和/dev/sdb2这两个分区分别组建物理卷。

[root@localhost ~]# pvcreate /dev/sdb[12]
  Physical volume "/dev/sdb1" successfully created          //提示说物理卷创建成功
  Physical volume "/dev/sdb2" successfully created

查看物理卷。

[root@localhost ~]# pvdisplay
  "/dev/sdb1" is a new physical volume of "4.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1            //物理卷名称
  VG Name                                    //所属的卷组名称,这里还未加入任何卷组
  PV Size               4.00 GiB             //物理卷大小
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               pTps5V-4vKA-em0G-XR8Y-ltJu-4CeL-KEOMn3
  "/dev/sdb2" is a new physical volume of "4.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2            //物理卷名称
  VG Name                                    //所属的卷组名称
  PV Size               4.00 GiB             //物理卷大小
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               uzW0YS-fl5a-4Qae-6vcG-iXce-a8iB-QYMvf4

四、创建卷组

将刚刚新建的物理卷/dev/sdb1和/dev/sdb2组成一个卷组——vg1

[root@localhost ~]# vgcreate vg1 /dev/sdb[12]
 Volume group "vg1" successfully created          //提示说卷组创建成功卷

查看卷组

[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               vg1             //卷组名称
  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               7.99 GiB        //卷组容量
  PE Size               4.00 MiB
  Total PE              2046
  Alloc PE / Size       0 / 0
  Free  PE / Size       2046 / 7.99 GiB
  VG UUID               dY8zDo-vD43-DQB8-CpRs-Shla-kWfJ-OuDjhp

五、划分逻辑卷

从总容量为8G(其实不足8G)的卷组vg1中划分四个逻辑卷,分别为lv1、lv2、lv3、lv4,每个大小为2000MB。

[root@localhost ~]# lvcreate -L 2000MB -n lv1 vg1       //-L参数后面接逻辑卷大小,单位可以是KB、MB、GB。
 Logical volume "lv1" created
[root@localhost ~]# lvcreate -L 2000MB -n lv2 vg1
 Logical volume "lv2" created
[root@localhost ~]# lvcreate -L 2000MB -n lv3 vg1
 Logical volume "lv3" created
[root@localhost ~]# lvcreate -L 2000MB -n lv4 vg1
 Logical volume "lv4" created

查看逻辑卷,因为这里的输出信息比较多,我只截取lv1这个逻辑卷的信息做简要说明。

[root@localhost ~]# lvdisplay
 --- Logical volume ---
 LV Path /dev/vg1/lv1          //逻辑卷路径
 LV Name lv1                   //逻辑卷名称
 VG Name vg1                   //逻辑卷所属的卷组的名称
 LV UUID qhypYJ-jPOW-KDDy-NXtO-aWQO-ryHI-Tf04hS
 LV Write Access read/write
 LV Creation host, time localhost.localdomain, 2017-10-11 13:13:54 +0800
 LV Status available
 # open 0
 LV Size 1.95 GiB              //逻辑卷容量
 Current LE 500
 Segments 1
 Allocation inherit
 Read ahead sectors auto
 - currently set to 256
 Block device 253:2

至此,逻辑卷已创建完成,但此时还不能立即使用,还需要在逻辑卷上新建文件系统。

这里为了不让文章显得啰嗦,我只在逻辑卷lv1上创建文件系统。

[root@localhost ~]# mkfs.ext4 /dev/vg1/lv1
mke2fs 1.41.12 (17-May-2010)
文件系统标签=
操作系统:Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
128000 inodes, 512000 blocks
25600 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=524288000
16 block groups
32768 blocks per group, 32768 fragments per group
8000 inodes per group
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912
正在写入inode表: 完成
Creating journal (8192 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

挂载逻辑卷。

[root@localhost ~]# mount /dev/vg1/lv1 /mnt
[root@localhost ~]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root  6.7G  816M  5.5G  13% /
tmpfs                         246M     0  246M   0% /dev/shm
/dev/sda1                     485M   33M  427M   8% /boot
/dev/sr0                      4.2G  4.2G     0 100% /media/cdrom
/dev/mapper/vg1-lv1           2.0G   35M  1.8G   2% /mnt

管理LVM:

卷组的扩容

这里我新增加一块8G的空SCSI磁盘,并在其基础上创建一个8G的物理卷。

将刚刚新建的8G大小的物理卷加入到vg1卷组中,实现对vg1卷组的扩容。

[root@localhost ~]# vgextend vg1 /dev/sdc1
  dev_is_mpath: failed to get device for 8:33
  No physical volume label read from /dev/sdc1
  Physical volume /dev/sdc1 not found
  Physical volume "/dev/sdc1" successfully created
  Volume group "vg1" successfully extended

查看卷组信息,注意看卷组容量。

[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               vg1
  System ID
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  14
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                4
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               15.99 GiB          //卷组的总容量已增加
  PE Size               4.00 MiB
  Total PE              4093
  Alloc PE / Size       2000 / 7.81 GiB
  Free  PE / Size       2093 / 8.18 GiB
  VG UUID               dY8zDo-vD43-DQB8-CpRs-Shla-kWfJ-OuDjhp

逻辑卷的扩容

这里对已经挂载在/mnt目录上的lv1逻辑卷进行扩容,将其大小变为10GB。

[root@localhost ~]# lvextend -L 10GB -n /dev/vg1/lv1
 Extending logical volume lv1 to 10.00 GiB
 Logical volume lv1 successfully resized

重设逻辑卷大小,只有正在使用的逻辑卷才需要重设大小。

[root@localhost ~]# resize2fs /dev/vg1/lv1
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/vg1/lv1 is mounted on /mnt; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/vg1/lv1 to 2621440 (4k) blocks.
The filesystem on /dev/vg1/lv1 is now 2621440 blocks long.

查看此时lv1的容量,已实现动态扩容。

[root@localhost ~]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root  6.7G  816M  5.5G  13% /
tmpfs                         246M     0  246M   0% /dev/shm
/dev/sda1                     485M   33M  427M   8% /boot
/dev/sr0                      4.2G  4.2G     0 100% /media/cdrom
/dev/mapper/vg1-lv1           9.9G   37M  9.4G   1% /mnt

CentOS 6下不重启系统就识别新增加的SCSI磁盘的方法

执行以下命令重新扫描SCSI磁盘,若重新扫描后依然没有看到新增加的磁盘,则将路径中的host0改为host1、host2、host3、host4…直到看到新的磁盘为止(我做这个实验的时候试到host2才扫描到)。

[root@localhost ~]# echo "- - -" > /sys/class/scsi_host/host0/scan

查看硬盘是否被扫描到,可以看到这里多了一块”sdb”就是我新增加的SCSI磁盘。

[root@localhost ~]# lsblk
NAME                        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
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 18.6G  0 lvm  /
  └─VolGroup-lv_swap (dm-1) 253:1    0  960M  0 lvm
sr0                           11:0    1  4.2G  0 rom  /media/cdrom
sdb                            8:16   0   20G  0

disk

CentOS 6下创建和管理软RAID

RAID介绍:
磁盘阵列既本文中所讲的RAID,其具有提高磁盘操作效率及容错的功能。RAID分为硬RAID和软RAID,硬RAID是基于磁盘阵列卡的,而软RAID则是使用软件管理,本文中所述的RAID属于软RAID。
各个RAID类型的简单介绍:

RAID0:至少需要两块磁盘,提高读写性能,没有容错能力。磁盘利用率为:100%
RAID1:至少需要两块硬盘,镜像数据,具有容错能力,读的性能提升,写的性能下降。磁盘利用率为: 50%
RAID4:至少需要三块硬盘,允许一块出错,读写性能提升。磁盘利用率为: (n-1)/n
RAID5:至少需要三块硬盘,允许一块出错,读写性能提升。磁盘利用率为: (n-1)/n
RAID6:至少需要四块硬盘,允许两块出错,读写性能提升。磁盘利用率为:(n-2)/n
RAID10:至少需要四块硬盘,允许不同组内各坏一块盘,读写性能提升。磁盘利用率为:50

环境准备:
本文中使用VirtualBox虚拟机,你也可以使用VMware的虚拟机。虚拟机中安装好CentOS 6.5版本后,添加四块大小为10GB的SCSI硬盘,此处硬盘接口类型可随意。

软件包安装:

# yum install -y mdadm           //mdadm是Linux下的软RAID管理程序。

软RAID创建方法:
查看刚刚添加的硬盘。

# lsblk


若刚才添加的硬盘不显示,则重启系统后再次查看,重启命令如下。

# reboot

下面我将带你创建一个RAID10来了解CentOS 6下软RAID创建和管理的流程。
RAID10是RAID1和RAID0组合在一起的一种形式,兼具两者的优点,在企业中比较常用。制作时先做RAID1再做RAID0,如下图中就是本例中的RAID10的创建方案。结合图片可以很容易理解,RAID10就是两组高可靠的RAID1被使用RAID0组合在一起增加了性能。

具体步骤如下。
一、先为每块硬盘新建一个分区,并将分区类型修改为RAID。此处需注意的是:加入到同一个RAID的不同硬盘上的分区的大小最好相同,否则以容量最小的分区的容量作为同一RAID在所有硬盘上的可用容量,其余空间则浪费掉。
这里只以/dev/sdb为例说明,其余硬盘按照需求参考此步骤操作即可。
使用fdisk工具编辑/dev/sbd硬盘的分区表,本例中为每块硬盘创建1个主分区,每个主分区使用全部硬盘空间。

# fdisk /dev/sdb

fdisk工具的使用方法这里不做详细说明,如需了解可参考此篇文章。

Linux下使用fdisk工具为硬盘分区


查看划分完的分区。

二、将分区类型修改为RAID,默认为Linux。
在fdisk程序中输入t,随后会要求你输入要将分区更改为的类型的代码,并提示可以输入L或list列出所有可选的类型的代码。

注意,如果硬盘中存在多个分区(本例中一块硬盘只有一个分区),那输入t后还会要求你输入要更改分区类型的分区的编号,如下图中,我选择为1号分区更改分区类型。

输入L,查看所有可选类型。

如上图红色箭头标记的,我们要将分区类型修改为Linux raid auto,输入他的代码:fd,而后会弹出一个修改成功的提示。

将所有硬盘的所有分区都按照如上步骤修改其分区类型。
全部修改完后,查看所有磁盘。

# lsblk


上图中,可以看到每块硬盘下都有我们刚刚新建的分区,若你看不到分区也不用着急,可以执行下面的命令后再次查看。

# partprobe     //使系统内核立即读取新的分区表信息

若Shell提示找不到partprobe命令则可以参考此篇文章解决。

CentOS 6找不到partprobe命令的解决方法


三、使用mdadm工具创建并管理软RAID
使用mdadm工具将/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde这四块硬盘组建成RAID10。

# mdadm -C /dev/md10 -a yes -l 10 -n 4 /dev/sd{b,c,d,e}1    //不要看命令好长就觉得头晕,可以结合下面的命令参数解释来试着理解这条命令中每一部分的含义。

执行后,返回信息提示已经成功创建。

在组建RAID时若弹出以下提示是警告你:软RAID不能用作启动盘,是否还继续创建软RAID,输入“y”确认即可。

若出现下图这种提示是因为磁盘之前做过一次RAID,也输入y确认。

以下是mdadm工具各个参数的详细说明:

-A 装配模式    //暂时没搞懂是怎么用的,如果你知道的话欢迎留言。
-C 创建模式
创建模式专用选项:
-n 用于创建RAID设备的个数
-x 热备磁盘的个数
-l 指定RAID级别
-a 参数值:yes(自动为创建的RAID设备创建设备文件)
-c 指定块的大小,默认为512KB
-F FOLLOW 监控
-S 停止RAID
-D 显示阵列详细信息
例如:
# mdadm -C /dev/md10 -a yes -l 10 -n 4 /dev/sd{b,c,d,e}1    //此条命令就是本文中创建RAID10的命令,现在可以结合参数的帮助文档来理解啦!
管理模式命令:
-f 将一块硬盘标记为损坏
-r 移除设备
-a 添加新设备
例如:
# mdadm /dev/md0 -a /dev/sdb1     //这里将/dev/sdb1这块硬盘从RAID10中移除。

需要注意的是,使用mdadm工具组建完软RAID后要将其写入到RAID配置文件中,否则系统重启后RAID设备的名称会变为默认的md127,而非之前指定的md10。

# mdadm -Ds > /etc/mdadm.conf

查看刚刚创建的RAID10的信息。

# mdadm -D /dev/md10


四、为RAID设备指定文件系统。
这里我将其格式化为ext4文件系统。

# mkfs.ext4 /dev/md10

五、挂载磁盘

# mount /dev/md10 /mnt

也可以将其写入到/etc/fstab文件中,使其开自动挂载。

# vim /etc/fstab


 

CentOS 6找不到partprobe命令的解决方法

今天在做CentOS 6下的软RAID时需要使用到partprobe命令使系统内核立即读取新分区,但悲催的是,最小化安装版的CentOS 6是没有这一命令的,百度搜了半天也没搜到解决办法,后来我索性查看了下我网站服务器的CentOS7上有没有这一命令,咦,我狗屎运就是好,还真查到了,赶紧查看了下这个命令属于哪一软件包。

[root@localhost ~]# rpm -qf /sbin/partprobe    //此命令是在可以使用partprobe命令的Linux服务器上执行的,不要傻傻地在自己的系统上试~
parted-3.1-28.el7.x86_64

唔,原来,想使用partprobe命令就要安装parted这个软件包呀!
那就安装呗。

yum install -y parted     //在你的系统上安装这个软件包就可以用partprobe命令啦!

大功告成后就会发现partprobe命令已经可以使用啦!

Linux下使用fdisk工具为硬盘分区

为计算机新添加一块磁盘,想使用它,必须以此进行如下几个步骤的配置:为磁盘分区、给磁盘格式化、挂载磁盘。
磁盘分区
分区用到的fdisk工具是linux下非常常用的磁盘分区工具。
fdisk -l列出所有磁盘

其中盘1既是操作系统所在磁盘,可以看到已经有两个分区了。盘2是新增磁盘,没有分区信息。
“/dev/sdb”为新增磁盘的地址
fdisk /dev/sdb为新增磁盘进行分区操作。

输入m或者help获取帮助信息

主要的五个功能的帮助信息的汉化结果:

分区操作见下图

输入p查看刚刚分好的分区

输入w保存更改并退出

磁盘格式化
格式化使用mkfs命令
mkfs.ext4 /dev/sdb1使用mkfs工具以ext4格式格式化(也可更改为其他格式,比如ext3)/dev/sdb1(这个路径地址在上面查看分区信息的时候可以看到)

格式化成功后即可进行磁盘挂载操作。
磁盘挂载与卸载
磁盘挂载使用mount命令,卸载使用umount命令
磁盘挂载:
mount /dev/sdb1 /data挂载sdb1到根目录下的data目录下

没输出报错信息既是成功挂载,可以通过df命令来查看当前挂载的全部磁盘,可以看到刚刚挂载的磁盘(红框内)。

磁盘卸载:

没有报错信息既是成功卸载。