centos系统LVM逻辑卷如何使用调整

首先需要了解几个概念

  • PE (Physical Extend)  物理拓展
  • PV (Physical Volume)  物理卷
  • VG (Volume Group)  卷组
  • LV (Logical Volume)  逻辑卷

未分类

首先使用fdisk -l 查看硬盘状态,这次我们使用的是2块新硬盘sdb 和 sdc

未分类

接着使用fdisk /dev/sdb 对第一块硬盘进行分区

选择p显示分区状态,选择n进行分区,选择t进行标记 lvm的标记为8e,最后使用w保存分区信息。

未分类

接着就需要创建物理卷,也就是PV。

使用pvcreate /dev/sdb1 命令创建

使用pvs 命令查看 (pvdisplay查看详细)

未分类

可以看到系统中增加了sdb1的pv,大小为5G 未使用5G

接着创建卷组,也就是VG

使用vgcreate work /dev/sdb1 命令创建work卷组,同时将/dev/sdb1 加入进来。

使用vgs命令查看 (vgdisplay查看详细)

未分类

其中cl组是系统原有的,这次新的work组已经建立,大小5G,未使用5G

然后我们需要从VG上创建出逻辑卷,也就是LV

使用lvcreate -L 500M -n lv1 work 命令来从work卷组中分配500M大小,用于创建lv1的逻辑卷

用lvs可以查看

未分类

可以看到新的lv1逻辑卷已经建立。这个时候使用vgs查看会发现work组未使用空间只有4.5G了

随后我们需要在LV上建立文件系统,使用mkfs.ext4 /dev/work/lv1 命令创建ext4文件系统

未分类

最后就是需要挂载到相应的目录上了,使用mount /dev/work/lv1 /data 命令来挂载到/data目录

如果需要系统一启动就自动挂载,需要修改/etc/fstab 其中UUID可以使用blkid命令查询

未分类

未分类

第一步我们完成了,将一块新硬盘设置了LVM逻辑卷挂在到了一个目录(/data)下面。

未分类

那如果/data经过一段时间使用,剩余空间不足怎么办?这就需要我们来扩充lv1这个逻辑卷。

使用 lvextend -L +500M /dev/work/lv1 来增加500M空间,给逻辑卷增加空间不会影响文件系统,所以不需要卸载文件系统。

未分类

可以看到 /data目录已经进行了扩容,lv1逻辑卷扩容前后也发生了变化。需要记得使用resize2fs /dev/work/lv1 来同步文件系统

于是我们可以继续使用/data目录了,但当卷组不够用了怎么办?这就需要我们扩容了。

未分类

可以看到此时work卷组几乎没有未使用空间了,我们通过之前的方法把另外一块硬盘也创建PV 。过程就省略了,使用pvs查看新的sdc1分区已经创建了PV

未分类

使用vgextend work /dev/sdc1 命令将sdc1也加入到work卷组中来。使用vgs查看效果

未分类

发现work卷组变大了,有5G空间未使用,接着重复上述操作将它分配给lv1即可。

未分类

突然有一天,我们发现给/data(lv1)分配的空间用不掉,但其他地方缺少空间怎么办?

首先卸载目录/data

然后通过e2fsck -f /dev/mapper/work-lv1命令检测逻辑卷上的空余空间

未分类

使用resize2fs /dev/mapper/work-lv1 700M 将文件系统减少到700M

未分类

使用 lvreduce -L 700M /dev/work/lv1 使lv1卷缩小到700M

未分类

使用vgs发现work卷组未使用空间变大了。接着可以分给其他逻辑卷,这里就不再重复说明了。

至此,基础的LVM操作都涉及到了。但是使用虚拟机的时候,会发生另外一种情况,就是我们的sdb硬盘是可以修改变大的。这本身没有太大区别,当硬盘变大时,使用fdisk继续分区,然后依次创建pv、加入vg、分配给lv就可以了。

linux系统lvm中lv使用空间的调整

前言:最近部署一个项目,甲方使用虚拟化平台,给的服务器都是虚拟化克隆的机器,操作系统安装时默认的分区,现状是根分区只有50G,部署的时候使用软连接创建的部署目录,但是后续升级的同事没有注意,就把部署直接放在根分区,导致近期数据同步时log文件大,使用的log日志删除脚本任务计划未到执行执行时间服务日志文件就把磁盘占满了,处理如下。

一、系统环境

  • 操作系统:Centos_x64 6.5
  • 内核版本:2.6.32-431.el6.X86_64
  • 磁盘格式:EXT4

二、现有分区情况与说明

df -h    #查看当前分区
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root   50G   17G   31G  36% /
tmpfs                         7.8G     0  7.8G   0% /dev/shm
/dev/sda1                     485M   33M  427M   8% /boot
/dev/mapper/VolGroup-lv_home  435G  9.7G  404G   3% /home

说明:可以清楚的看到两个lv卷的分区VolGroup-lv_root挂载为了根分区50G,VolGroup-lv_home挂载为了/home分区,home分区比较大,却没有被使用。

三、释放/home分区的占用并卸载/home分区

1、以为使用fuser -m /home就可以完成但是执行后卸载仍提示/home有占用。情况如下:

# fuser -m /home
/home:               24033ce
# umount /home
umount: /home: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

2、检查占用的文件,发现甲方提供的系统里有金山的防护软件,将软件进程杀掉后卸载/home分区正常:

# lsof | grep /home          --检查发现占用的是金山的防护软件直接运行了kiil -9 24033
KANLinuxC 24033          root  cwd       DIR              253,2      4096    5636103 /home/kingsoft/kavnet
KANLinuxC 24033          root  txt       REG              253,2   1645332    5636130 /home/kingsoft/kavnet/KANMainModule
KANLinuxC 24033          root  mem       REG              253,2   1369600    5636263 /home/kingsoft/kavnet/libcrypto.so.6
KANLinuxC 24033          root  mem       REG              253,2    323320    5636276 /home/kingsoft/kavnet/libssl.so.6
KANLinuxC 24033          root  mem       REG              253,2     34487    5636129 /home/kingsoft/kavnet/KANLocalComm.so
KANLinuxC 24033          root  mem       REG              253,2    626402    5636131 /home/kingsoft/kavnet/KANNetComm.so
KANLinuxC 24033          root  mem       REG              253,2    163342    5636265 /home/kingsoft/kavnet/libjson.so
KANLinuxC 24033          root    3w      REG              253,2    789537    5636280 /home/kingsoft/kavnet/neterror.log
KANLinuxC 24033          root   10w      REG              253,2    789537    5636280 /home/kingsoft/kavnet/neterror.log
KANLinuxC 24033          root   11w      REG              253,2    789537    5636280 /home/kingsoft/kavnet/neterror.log
KANLinuxC 24033          root   13w      REG              253,2    789537    5636280 /home/kingsoft/kavnet/neterror.log
KANLinuxC 24033          root   20w      REG              253,2    789537    5636280 /home/kingsoft/kavnet/neterror.log
# umount /home          --重新卸载未在报错
未在报错。

三、缩减VolGroup-lv_home这个LV的空间

1、检查这个LV分区的信息是否正常;

# e2fsck -f /dev/mapper/VolGroup-lv_home
e2fsck 1.41.12 (17-May-2010)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/mapper/VolGroup-lv_home: 5779/28950528 files (2.2% non-contiguous), 4334183/115775488 blocks

2、调整VolGroup-lv_home分区大小;

#resize2fs -p /dev/mapper/VolGroup-lv_home 80G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/VolGroup-lv_home to 20971520 (4k) blocks.
Begin pass 2 (max = 50904)
正在重定位块            XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 3 (max = 3534)
正在扫描inode表          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 4 (max = 838)
正在更新inode引用       XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/mapper/VolGroup-lv_home is now 20971520 blocks long.

3、重新挂载home分区并检查空间大小,可以发现/home的空间已经变小;

# mount /home
# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root   50G   17G   31G  36% /
tmpfs                         7.8G     0  7.8G   0% /dev/shm
/dev/sda1                     485M   33M  427M   8% /boot
/dev/mapper/VolGroup-lv_home   79G  9.6G   66G  13% /home

4、将VolGroup-lv_home缩减出来的分区设置为空闲分区;

# lvreduce -L 80G /dev/mapper/VolGroup-lv_home
  WARNING: Reducing active and open logical volume to 80.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv_home? [y/n]: y
  Reducing logical volume lv_home to 80.00 GiB
  Logical volume lv_home successfully resized

5、检查空闲出的空间Free PE已经空出了361G;

# vgdisplay 
  --- Volume group ---
  VG Name               VolGroup
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               3
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               499.51 GiB
  PE Size               4.00 MiB
  Total PE              127874
  Alloc PE / Size       35292 / 137.86 GiB
  Free  PE / Size       92582 / 361.65 GiB
  VG UUID               Ur7bJ4-hQKi-xx4R-f9Qt-INvG-fjBf-zcvJ4n

四、将缩减出的空间增加给VolGroup-lv_root这个LV

1、给VolGroup-lv_root增加空间;

# lvresize --size +361G /dev/VolGroup/lv_root 
  Extending logical volume lv_root to 410.71 GiB
  Logical volume lv_root successfully resized

2、让系统重新识别VolGroup-lv_root增加的空间;

# resize2fs -p /dev/mapper/VolGroup-lv_root
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/VolGroup-lv_root is mounted on /; on-line resizing required
old desc_blocks = 4, new_desc_blocks = 26
Performing an on-line resize of /dev/mapper/VolGroup-lv_root to 107665408 (4k) blocks.
The filesystem on /dev/mapper/VolGroup-lv_root is now 107665408 blocks long.

3、检查最终结果,确认操作成功;

# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root  405G   23G  362G   6% /
tmpfs                         7.8G     0  7.8G   0% /dev/shm
/dev/sda1                     485M   33M  427M   8% /boot
/dev/mapper/VolGroup-lv_home   79G  3.5G   72G   5% /home

CentOS LVM卷转变成普通卷操作步骤

CentOS LVM卷转变成普通卷操作步骤

1.系统信息

lsb_release -a
LSB Version:    :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description:    CentOS Linux release 7.2.1511 (Core)
Release:    7.2.1511
Codename:   Core

2.背景

公司线上服务器要上线大数据平台,使用LVM卷对生产上业务有
一定的影响。新机器的部署我都是使用的自动化部署脚本进行的,
脚本中对数据盘使用的LVM格式,因此,我需要手动更改
磁盘卷的类型。

3.具体实施步骤

#操作前请做好数据的备份
#卸载逻辑卷之前的文件系统
df -h
文件系统                    容量  已用  可用 已用% 挂载点
/dev/mapper/vgdata-lvdata1  197G   61M  187G    1% /data
#umount文件系统
umount /data
#lvremove操作
lvremove /dev/vgdata/lvdata1
Do you really want to remove active logical volume vgdata/lvdata1? [y/n]: y
Logical volume "lvdata1" successfully removed
#vgremove操作
vgremove vgdata
Volume group "vgdata" successfully removed
#pvremove操作
pvremove /dev/vdb1
Labels on physical volume "/dev/vdb1" successfully wiped.
#fdisk磁盘分区
##查看下当前lvm的分区
fdisk -l
设备 Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048   419430399   209714176   8e  Linux LVM
#重新进行磁盘分区
fdisk /dev/vdb
d --> p --> n --> 三次enter默认 --> p --> w
#对刚分好分区的磁盘格式化
mkfs.ext4 /dev/vdb1
#查看UUID
blkid
/dev/vdb1: UUID="456b88bf-19fe-4b80-b408-13451d10e78w" TYPE="ext4"
#更改/etc/fstab文件
sed -i 's#/dev/vgdata/lvdata1   /data    ext4    defaults        1 1 #UUID="456b88bf-19fe-4b80-b408-13451d10e78w"  /data                ext4    defaults        1 1#g'
#挂载分区
mount -a

kubernetes 与LVM的结合

本文主要介绍k8s与LVM结合使用的场景,在原生的k8s中对于本地存储提供了hostPath与emptyDir两种volme,hostPath是直接将文件存储在本地主机上,存在的问题是无法进行quota管理,单个用户就可能将所有的磁盘打满;在kubernetes 1.10 local ephemeral storage 成为beta版本,可以对emptyDir进行磁盘限制,但是这里的磁盘配额不仅包括用户写入epmtyDir的数据,也包括writable layer和logs,并且emptyDir会随着pod的删除而删除,无法自定义生命周期,如果应用程序需要在pod退出后保留这些数据,emptyDir就无法胜任了。鉴于k8s原生volume的以上特点无法满足复杂的业务需求,我们可以根据LVM提供一种本地存储的volume方案。本文只介绍LVM与k8s结合实现方式,具体LVM及k8s的知识请自行查阅相关资料。

Out-of-Tree Volume Plugins

k8s对于额外的存储提供良好的支持,参见 Out-of-Tree Volume Plugins, 有两种方式实现volume plugin: CSI和FlexVolume,第一种是现在官方推荐的方式,不过第二种官方还继续提供支持而且使用起来更加简单,官方提供了FelxVolme LVM shell版的简单实现,参见github地址,其实就是一个binary或脚本来提供特定的调用,对于LVM来说需要实现基本的mount和umount subcommand供kubelet回调。mount subcommand创建LVM,分为以下几个步骤:

  1. 调用lvcreate创建LVM设备,大小为用户在yaml文件中指定的磁盘大小,会在kubelet调用plugin的时候作为参数传递进来

  2. 调用mkfs格式化LVM为某种文件类型

  3. 创建挂载点目录,该参数一般都由plugin作为参数传递进来,一般就是$KUBELET_ROOT_DIR/pods/$POD_UID/volumes/…目录下

  4. mount LVM设备到挂载点上

  5. 汇报LVM VG的使用情况,因为后面调度pod的时候需要使用这些信息

上述是kubelet在回调plugin mount subcommand的操作,对于umount subcommand因为需要自定义删除策略,我们不能直接将LVM 删除掉,但挂载点目录必须删除掉,否则kubelet会认为该volume没有被正确移除,pod一直处于terminating无法删除,此时有种tricky的方式就是move挂载点目录,这样LVM正常mount到挂载点上,pods也可以正常被删除,至于后续的自定义删除策略就直接操作move之后的挂载点设备了。需要注意的是应用程序如果要查看退出pod的LVM中的数据必须去移动之后的挂载点目录查看。

LVM GC policy

前面了解了如何在k8s中提供LVM支持,umount的时候不删除LVM来为自定义删除策略提供支持,自定义删除策略就需要写一个旁路清理程序,可以是daemon或cron的形式运行,可以基于磁盘容量或pod退出时间进行GC。比较好的方式是不直接清理LVM, 先lvreduce对LVM进行缩容,将未使用的空间还给VG, 这样即提高磁盘使用率,又保留了用户数据,等到合适的时候再删除。注意此处缩容指的是LVM和文件系统两方面,且不能损坏用户的数据为前提。每次GC之后都需要及时上报VG信息,为后面调度提供信息。

schedule pod based on LVM

上面的实现为集群中的每个node提供了一种额外的资源(LVM)的支持, 既然是node级别的资源,就要考虑在调度pod的时候如何选择合适的node assign,需要自定义调度策略,上文中所有对LVM的操作中都提到了要及时上报VG信息,就是为了调度的时候使用这些信息。官方对于node resource提供了调度的支持,参见https://kubernetes.io/docs/tasks/administer-cluster/extended-resource-node/ ,但是这种方式只适合随着pod生命周期结束而结束的资源,例如emptyDir,memroy,cpu等。还有一种扩展是device plugin,可以考虑将LVM作为一种磁盘device使用,这种方式也不适合,因为对于device设备的申请是有粒度的,例如可以说申请一个磁盘设备,但不能说申请1G的空间。

不能通过上述两种声明node resource的方式利用内置的调度策略,我们只能自己实现调度策略了,k8s对于调度的扩展也有很好的支持,可以定义一个scheduler extender提供一个http webhook。要实现一个scheudler extender, 首先要了解kube-scheduler的调度过程,分为三步,首先是做筛选(predict)或称为filter,过滤掉不能调度到其上的node。其次是排序(priorities),为可以调度的node进行打分,决定最适合调度的node;最后是绑定(bind),绑定操作将该pod“分配”给某台node。scheduler-extender相当于上述步骤的“补充协议”, 可选的为上述步骤补充自己的调度逻辑, 当创建一个pod需要调度的时候,首先会执行内置的调度策略,然后将内置调度器的结果传递过来给你的extender server,调度逻辑完成之后将结果返回给kube-scheduler进行下一个过程。

除了kube-scheduler的调度步骤外,kube-scheduler为了提高调度性能有一个“资源占用”的概念: kube-scheduler会在本地有一个cache存放所有的node信息,该cache会与api-server进行同步,调度pod的信息直接从cache中取,当pod调度到某个node上后,会将cache中该node的资源进行“预先占用”,假定资源已经被pod消耗了,其实pod只是调度到了该node上面,还未真正启动起来,未真正占用资源,通过假定调度上去的pod已经占用了该资源,为后面调度的pod提供变化的信息,如果在指定的timeout内,pod还未启动则将预先占用的资源返回给该node,通过这种异步的最终一致性的方案能够有效提高pod的调度效率。此外在高可用的方案中需要配置多个kube-scheduler,因为每个kube-scheduler的cache并不同步,无法多个kube-scheduler同时对外提供服务,此时只能通过选主协议选择其中的一个进行处理请求。

明白了kube-scheduler的实现之后,来仿照kube-scheduler实现我们的scheduler extender, extender的httpserver位置通过kube-scheduler的–policy-config-file或–policy-configmap来配置,前者指定一个config file,后者通过一个configmap来配置,笔者建议用configmap来管理,因为更新配置只需要改变一个地方对于多个kube-scheduler同时生效。并且可以单独定义上述三步骤中的其中某一步。

apiVersion: v1
kind: ConfigMap
metadata:
  name: lvm-scheduler-extender
  namespace: kube-system
data:
 policy.cfg : |
  {
  "kind" : "Policy",
  "apiVersion" : "v1",
  "extenders" : [
    {
          "urlPrefix": "http://localhost:8384/lvm-scheduler",
          "apiVersion": "v1alpha1",
          "filterVerb": "predicates/lvm_resource",
          "bindVerb": "bind",
          "prioritizeVerb": "",
          "weight": 1,
          "enableHttps": false,
          "nodeCacheCapable": false
    }
      ],
  "hardPodAffinitySymmetricWeight" : 10
  }

上面的配置configmap指定了extender webhook的位置,并且定义了filter和bind这两个操作,之所以定义这两个操作是因为我们只关心哪些node可以调度上去,将LVM剩余空间不足以创建pod的node过滤掉,以及最后到底调度到了那台node上以便在scheduler extender的cache中将该node的资源进行占用。需要注意的是系统中只能有一个执行bind操作的binder, 如果extender中指定了binder,kube-scheduler内置的就不会生效了,需要通过k8s client-go来绑定:

clientset.CoreV1().Pods(podNamespace).Bind(&v1.Binding{
        ObjectMeta: metav1.ObjectMeta{Namespace: podNamespace, Name: podName, UID: podUID},
        Target: v1.ObjectReference{
            Kind: "Node",
            Name: nodeName,
        }})

前面在介绍plugin和GC的时候每次操作LVM都需要及时将LVM信息上报来提供extender进行调度决策,那么该向哪里汇报这些VG信息?如何汇报? 这个问题根据不同的场景下有不同的解决方案,首先肯定不能直接向extender上报,因为高可用集群中往往不只有一个exteder示例,所以需要提供一个分离的统一后端存储,所有的extender直接从后端存储里取,可以存储在Mysql或redis中,比较tricky的方式是直接存储在k8s的etcd中,这些数据量比较小不会占用太多空间,也免了额外的操作数据库,但是直接操作etcd有点不妥,可以定义一种CRD资源,为每台node创建一个crd资源实体表示该node可用LVM空间的大小,这样就可以像其他资源一样方便查询,在LVM资源发生变化之后对该crd对象进行patch。在extender中watch该crd资源即可。此外需要提供一个cache进行资源的预先占用,同时提供选主协议的实现,以上都可以参考kube-scheduler中的实现。

summary

麻雀虽小,五脏俱全上述通过实现LVM这种node resource的支持,分别涉及到了storage plugin,scheduelr extender,CRD等,虽然内容较多但是实际编码并不多,感谢kubernetes提供了一种灵活的扩展,感兴趣的可以自己去实现一下。

分区规划及使用、LVM逻辑卷

分区规划

扇区的大小:默认 512 字节

• 识别硬盘 => 分区规划 => 格式化 => 挂载使用

一、分区规划

MBR分区模式 最大2TB空间

– 三种分区类型:主分区  扩展分区  逻辑分区

– 1~4个主分区,或者 3个主分区+1个扩展分区(n个逻辑分区)
– 最大支持容量为 2.2TB 的磁盘
– 扩展分区不能格式化
– 理论上:最多有4个主分区

/dev/sdc5 表示 scsi类型的磁盘,第三块,第一个逻辑分区

虚拟机Server

1.查看本机识别硬盘

[root@server0 ~]# lsblk

2.分区指令 fdisk

[root@server0 /]# fdisk /dev/vdb 
n 创建新的分区----->回车----->回车---->回车----->在last结束时 +2G
p 查看分区表
n 创建新的分区----->回车----->回车---->回车----->在last结束时 +2G
d 删除分区
w 保存并退出

[root@server0 ~]# lsblk 
[root@server0 ~]# ls /dev/vdb[1-2]

3.格式化文件系统

  • mkfs 工具集
  • mkfs.ext3 分区设备路径
  • mkfs.ext4 分区设备路径
  • mkfs.xfs 分区设备路径
  • mkfs.vfat -F 32 分区设备路径
[root@server0 ~]# blkid /dev/vdb1 #查看分区UUID及文件系统信息
[root@server0 ~]# mkfs.ext4 /dev/vdb1
[root@server0 ~]# blkid /dev/vdb1

[root@server0 ~]# blkid /dev/vdb2 #查看分区UUID及文件系统信息
[root@server0 ~]# mkfs.xfs /dev/vdb2
[root@server0 ~]# blkid /dev/vdb2

[root@server0 ~]# mkfs.xfs /dev/vdb2
mkfs.xfs: /dev/vdb2 appears to contain an existing filesystem (xfs).
mkfs.xfs: Use the -f option to force overwrite.
-f :强制格式化

4.挂载使用

[root@server0 ~]# mount /dev/vdb1 /mypart1
mount: 挂载点 /mypart1 不存在
[root@server0 ~]# mkdir /mypart1
[root@server0 ~]# mkdir /mypart2
[root@server0 ~]# mount /dev/vdb1 /mypart1
[root@server0 ~]# mount /dev/vdb2 /mypart2

[root@server0 ~]# df -h #查看所有 正在挂载使用 的分区的信息

################################################################

综合分区:

请划分 3个主分区,分别为2G
划分 2个逻辑分区,分别 为 1G

[root@server0 ~]# fdisk /dev/vdb
p 查看分区表
n 创建新的分区----->回车----->回车---->回车----->在last结束时 +2G
p 查看分区表
n 创建新的分区 
----->回车---->起始回车----->结束回车 将所有空间给扩展分区
p 查看分区表
n 创建新的分区----->起始回车------>结束+1G
n 创建新的分区----->起始回车------>结束+1G
d 删除分区
w 保存并退出

[root@server0 ~]# partprobe #刷新 新的分区
[root@server0 ~]# lsblk

[root@server0 ~]# ls /dev/vdb[1-6]

##################################################################

总结分区:

1.查看识别硬盘 lsblk
2.划分分区 fdisk
3.刷新新的分区 partprobe
4.格式化 mkfs.ext4
5.查看文件系统类型 blkid
6.挂载使用 mount
7.查看挂载使用 df -h
8.完成开机自动挂载 /etc/fstab
9.验证书写内容 mount -a

#################################################################

开机自动挂载分区

  • 配置文件 /etc/fstab 的记录格式
  • 设备路径 挂载点 类型 参数 备份标记 检测顺序

补充:vim 命令模式 按 o 另起一行进入 插入模式

[root@server0 ~]# blkid /dev/vdb1
[root@server0 ~]# vim /etc/fstab

/dev/vdb1 /mypart1 ext4 defaults 0 0

[root@server0 ~]# mount -a #检测/etc/fstab文件格式,并尝试挂载设备
[root@server0 ~]# df -h

################################################################

对于/dev/vdc进行综合分区:

划分3个主分区,分别为10G
划分2个逻辑分区,分别为10G

[root@server0 ~]# fdisk /dev/vdc
p 查看分区表
n 创建新的分区----->回车----->回车---->回车----->在last结束时 +10G #第一个主分区
p 查看分区表
.......
n 创建新的分区(扩展分区) 
----->回车---->起始回车----->结束回车 将所有空间给扩展分区
p 查看分区表
n 创建新的分区----->起始回车------>结束+10G #划分第一个逻辑分区
n 创建新的分区----->起始回车------>结束+10G #划分第二个逻辑分区
d 删除分区
w 保存并退出
[root@server0 ~]# lsblk #查看分区情况

################################################################

LVM逻辑卷

作用:    1. 可以整合分散的空间
         2. 逻辑卷可以容量扩大

将众多的物理卷(pv),组成卷组(vg),再从卷组中划分逻辑卷(lv),再去格式化逻辑卷,进行挂载

 面粉---------》大面团---------》小面团------》蒸--------》吃

 砖---------》大房子---------》打隔段---------》装修---------》入住

一、制作逻辑卷

1.创建卷组 : vgcreate 卷组的名字 组成卷组的成员

[root@server0 ~]# vgcreate myvg /dev/vdc1 /dev/vdc2

[root@server0 ~]# pvs #显示物理卷的信息
[root@server0 ~]# vgs #显示卷组的信息

2.创建逻辑卷 : lvcreate -n 逻辑卷的名字 -L 大小 卷组的名字

[root@server0 ~]# lvcreate -n vo -L 16G myvg

[root@server0 ~]# lvs #显示逻辑卷的信息
[root@server0 ~]# vgs #显示卷组的信息

3.使用逻辑卷

[root@server0 ~]# mkfs.ext4 /dev/myvg/vo 
[root@server0 ~]# blkid /dev/myvg/vo
[root@server0 ~]# mkdir /lvm

[root@server0 ~]# vim /etc/fstab

/dev/myvg/vo /lvm ext4 defaults 0 0

[root@server0 ~]# mount -a 
[root@server0 ~]# df -h

##############################################################

逻辑卷的扩大,支持线上操作

一、卷组有足够的剩余空间

1.空间的扩展

[root@server0 ~]# vgs
[root@server0 ~]# lvextend -L 18G /dev/myvg/vo 
[root@server0 ~]# lvs

2.文件系统的扩展

resize2fs : ext4文件系统扩展命令
xfs_growfs : xfs文件系统扩展命令

[root@server0 ~]# df -h
[root@server0 ~]# resize2fs /dev/myvg/vo 
[root@server0 ~]# df -h

二、卷组没有足够的剩余空间

1.扩展卷组空间

[root@server0 ~]# vgextend myvg /dev/vdc3
[root@server0 ~]# vgs

2.空间的扩展

[root@server0 ~]# vgs
[root@server0 ~]# lvextend -L 25G /dev/myvg/vo 
[root@server0 ~]# lvs

3.文件系统的扩展
resize2fs : ext4文件系统扩展命令
xfs_growfs : xfs文件系统扩展命令

[root@server0 ~]# df -h
[root@server0 ~]# resize2fs /dev/myvg/vo 
[root@server0 ~]# df -h

##################################################################

了解:逻辑卷的缩小,有风险

1.先缩减文件系统的大小,在缩减空间的大小

[root@server0 ~]# resize2fs /dev/myvg/vo 10G

[root@server0 ~]# umount /lvm/
[root@server0 ~]# resize2fs /dev/myvg/vo 10G

[root@server0 ~]# e2fsck -f /dev/myvg/vo
[root@server0 ~]# resize2fs /dev/myvg/vo 10G

[root@server0 ~]# lvreduce -L 10G /dev/myvg/vo 
WARNING: Reducing active logical volume to 10.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vo? [y/n]: y

[root@server0 ~]# df -h

ext4文件系统可以缩减

xfs文件系统不支持缩减

##################################################################

PE:卷组划分空间的单位

  • 创建卷组的时候设置PE大小
    • vgcreate -s PE大小 卷组名 空闲分区…
    • vgchange -s PE大小 卷组名
  • 创建逻辑卷的时候指定PE个数
    • lvcreate -l PE个数 -n 逻辑卷名 卷组名
[root@server0 ~]# vgdisplay myvg
[root@server0 ~]# vgchange -s 1M myvg

请划分一个逻辑卷名字lvtest01,大小为50个PE的总和

[root@server0 ~]# lvcreate -l 80 -n lvtest01 myvg

[root@server0 ~]# lvs

###################################################################

逻辑卷的删除

[root@server0 ~]# lvremove /dev/myvg/vo 
Logical volume myvg/vo contains a filesystem in use.

[root@server0 ~]# umount /lvm
[root@server0 ~]# lvremove /dev/myvg/vo 
Do you really want to remove active logical volume vo? [y/n]:y

[root@server0 ~]# lvs

[root@server0 ~]# vgremove myvg
[root@server0 ~]# vgs

[root@server0 ~]# pvremove /dev/vdc[1-3]
[root@server0 ~]# pvs

###############################################################

CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额

RAID10是RAID1+RAID0技术的一个“组合体”,RAID10技术需要至少4块硬盘来组建,其中先分别两两制作成RAID1磁盘阵列,以保证数据的安全性;然后再对两个RAID1磁盘阵列实施RAID0技术,进一步提高硬盘设备的读写速度。
当用户想要随着实际需求的变化调整硬盘分区大小时,会受到硬盘“灵活性”的限制,这时就需要用到另外一项非常普及的硬盘设备资源管理技术了,即LVM(逻辑卷管理器),LVM可以允许用户对硬盘资源进行动态调整。
废话不多说,下面我们就来模拟制作RAID10和LVM吧。

一、部署RAID10+备份盘

首先在虚拟机上添加5块新的虚拟硬盘,然后启动虚拟机。
未分类
使用fdisk -l命令,确认5块新硬盘是否都已被系统认到。
未分类
生产环境中用到的服务器一般都配备RAID阵列卡,而我们现在是用mdadm命令在Linux系统中创建和管理软件RAID磁盘阵列,它涉及的理论知识和操作过程与生产环境中的RAID阵列卡是一样的。

表1:mdadm命令的常用参数和作用
未分类

接下来,使用mdadm命令创建RAID10,名称为“/dev/md0”。
其中-C参数表示创建一个RAID阵列卡,-v显示创建过程,/dev/md0为创建的设备名称,-a yes表示自动创建设备文件,-n 4表示使用4块硬盘,-l 10表示RAID 10方案,-x 1表示有一块备份盘,最后跟上5块硬盘设备的名称。

mdadm -Cv /dev/md0 -a yes -n 4 -l 10 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf

未分类
查看/dev/md0磁盘阵列的详细信息

mdadm -D /dev/md0

未分类
创建2个分区,分别为/dev/md0p1和/dev/md0p2

fdisk /dev/md0

未分类

二、部署LVM逻辑卷

表2:常用的LVM命令

未分类

1、创建物理卷(PV)

pvcreate /dev/md0p1 /dev/md0p2

未分类
查看物理卷状态

pvdisplay

未分类

2、创建卷组(VG)

创建一个名为storage的卷组,并把上面的两个物理卷加入该卷组中。

vgcreate storage /dev/md0p1 /dev/md0p2

未分类
查看卷组状态

vgdisplay

未分类

3、创建逻辑卷(LV)

这里我们切割出两个逻辑卷,vo01和vo02,即/dev/storage/vo01和/dev/storage/vo02,大小分别为15G和10G。

lvcreate -n vo01 -L 15G storage
lvcreate -n vo02 -L 10G storage

未分类
查看逻辑卷状态

lvdisplay

未分类
把创建好的两个逻辑卷格式化成ext4。

mkfs.ext4 /dev/storage/vo01
mkfs.ext4 /dev/storage/vo02

未分类
未分类
创建两个目录,将逻辑卷挂载使用。

mkdir /data1
mkdir /data2
mount /dev/storage/vo01 /data1
mount /dev/storage/vo02 /data2

查看分区情况

df -h

未分类
写入到/etc/fstab里,开机自动挂载

echo "/dev/storage/vo01 /data1 ext4 defaults 0 0" >> /etc/fstab
echo "/dev/storage/vo02 /data2 ext4 defaults 0 0" >> /etc/fstab

未分类

4、调整逻辑卷大小,注:调整大小之前一定要先卸载,否则逻辑卷会出问题。

缩小逻辑卷容量步骤:1、卸载(umount),2、检查分区完整性(e2fsck),3、确认分区容量(resize2fs),4、减少分区容量(lvreduce)。
将/dev/storage/vo01减少5G

umount /dev/storage/vo01
umount /dev/storage/vo02
e2fsck -f /dev/storage/vo01
resize2fs /dev/storage/vo01 10G
lvreduce -L -5G /dev/storage/vo01

未分类
将/dev/storage/vo02增加10G
扩展逻辑卷容量步骤:1、卸载(umount),2、增加分区容量(lvextend),3、检查分区完整性(e2fsck),4、确认分区容量(resize2fs)。

lvextend -L +10G /dev/storage/vo02
e2fsck -f /dev/storage/vo02
resize2fs /dev/storage/vo02

未分类
重新挂载文件分区

mount /dev/storage/vo01 /data1
mount /dev/storage/vo02 /data2

5、扩展逻辑组容量

前面讲过如何调整逻辑卷容量,可是如果逻辑组的容量不够用了,该如何处理呢,现在我们就来往逻辑组里增加一块硬盘设备。
对于LVM来讲,不管设备是RAID、硬盘还是分区,它不会去管存储设备的底层架构和布局,即然如此,我们就添加一块硬盘来做测试。
首先关闭(shutdown)虚拟机,添加一块新的虚拟硬盘,然后启动虚拟机
未分类
确认新硬盘已经被系统识别

fdisk -l

未分类
加入新的物理卷(PV)

pvcreate /dev/sdg

未分类
把/dev/sdg加入到storage卷组中

vgextend storage /dev/sdg

未分类

6、制作逻辑卷快照

LVM还具备“快照卷”功能,该功能类似于虚拟机软件的快照功能。例如:可以对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷进行覆盖还原。LVM的快照卷功能有两个特点:
(1)快照卷的容量必须等同于逻辑卷的容量;
(2)快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除。
首先往/dev/data1下写入一个文件

echo "xuad to bad" > /data1/xuad.txt

未分类
使用-s参数生成一个快照卷,使用-L参数指定要创建快照的逻辑卷大小,-n参数指定快照卷名称,最后跟上逻辑卷的完整路径。

lvcreate -L 10G -s -n LVdata1 /dev/storage/vo01

未分类
查看快照卷信息

lvdisplay

未分类
在/dev/data1下创建一个1G的垃圾文件,然后再查看快照卷的状态,发现存储空间占用量上升了。
注:由于创建的文件容量太大,dd命令执行的时间会比较久,请耐心等待。

dd if=/dev/zero of=/data1/files.txt count=1 bs=1G

未分类
未分类
通过快照卷对逻辑卷进行还原操作,记得先卸载掉逻辑卷与目录的挂载。

umount /data1
lvconvert --merge /dev/storage/LVdata1

注:由于逻辑卷容量比较大,所以lvconvert命令执行的时间比较久,请耐心等待。
未分类
还原后快照卷会被自动删除掉,而且刚才创建的1G垃圾文件也被清除了。将/dev/storage/vo01挂载,然后检查检查垃圾文件是否已被清除。

mount /dev/storage/vo01 /data1

未分类

三、模拟损坏磁盘阵列及修复

将/dev/sdb标记为已损坏,然后查看RAID磁盘阵列的状态,发现备用盘已经自动替换上去并开始同步数据了。

mdadm /dev/md0 -f /dev/sdb
mdadm -D /dev/md0

未分类
假设我们又新购买了一块硬盘/dev/sdb,现在将新硬盘加入到RAID10磁盘阵列中,首先移除/dev/sdb,然后卸载两个逻辑卷,再然后使用-a参数检测一下就行了,最后别忘记挂载逻辑卷。

mdadm /dev/md0 -r /dev/sdb

发现/dev/sdb设备已经成功移除。
未分类

umount /data1
umount /data2
mdadm /dev/md0 -a /dev/sdb
mdadm -D /dev/md0

此时/dev/sdb已成为备用盘
未分类

mount /dev/storage/vo01 /data1
mount /dev/storage/vo02 /data2

未分类

四、quota磁盘配额

root管理员可以通过磁盘容量配额服务来限制某个用户或某个用户组针对特定目录可以使用的最大容量和最大文件个数,一旦达到这个最大值就不再允许继续使用。可以使用quota命令进行磁盘容量配额管理,从而限制用户的可用容量和所能创建的最大文件个数。quota命令分为软限制和硬限制两个功能。
(1)软限制:当达到软限制时会提示用户,但仍允许用户在限定的额度内继续使用。
(2)硬限制:当达到硬限制时会提示用户,且强制终止用户的操作。
编辑/dev/fstab配置文件,使/data1目录支持quota磁盘配额技术,我们这里对用户进行配额,所以只需要添加usrquota参数即可,而grpquota参数是针对用户组的。

vim /etc/fstab

注:ext文件系统使用的是usrquota和grpquota参数,xfs文件系统使用的是uquota参数。
未分类
卸载/data1,再重新挂载,给/data1增加其他人的写权限。

umount /data1
mount -a
chmod -Rf o+w /data1

未分类
在/data1目录下生成quota配置文件

quotacheck -cugm /data1/
ll /data1/ | grep quota

未分类
启动磁盘配额

quotaon /data1/

设置对用户xuad的磁盘配额限制

edquota -u xuad

注:第一个soft是磁盘容量大小软限制,第一个hard是磁盘容量大小硬限制,单位是KB;第二个soft是文件数量软限制,第二个hard是文件数量硬限制。
设置使用磁盘容量的软限制和硬限制分别是3M和8M,设置文件数量的软限制和硬限制分别是3个和5个。
未分类
现在切换到xuad用户,然后创建一个5M和10M的文件,进行测试。

su - xuad
dd if=/dev/zero of=/data1/files bs=5M count=1

发现虽然给了警告,但文件依然可以正常创建。
未分类

dd if=/dev/zero of=/data1/files bs=10M count=1

发现报错了,写入失败,达到了quota的限制,文件大小只有8M。
未分类
现在删除files文件,再来创建几个正常的文件进行测试

rm -f /data1/files

用touch命令创建文件,发现在创建到第四个文件时给出了警告,在创建第六个文件时给出了报错,第六个文件无法创建。
未分类

LVM的创建、扩容和缩减

一、创建LVM系统

1. 硬盘分区

首先我们需要为我们的虚拟机添加一个虚拟硬盘,过程略。

查看硬盘设备:

[root@localhost ~]# fdisk -l
...
Disk /dev/sdc: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 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: 0xa2c6e480

   Device Boot      Start         End      Blocks   Id  System
...

如上/dev/sdc是我们新添加的硬盘设备。
我们需要在/dev/sdc基础上创建分区并修改分区系统类型为8e:

[root@localhost ~]# fdisk /dev/sdc 

WARNING: DOS-compatible mode is deprecated. It is 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-1305, default 1):                     # 默认从第一个柱面开始划分
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): +5G   # 分区大小

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

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

Command (m for help): t                                    # 修改分区系统类型
Partition number (1-4): 1                                    # 选择要修改的分区号
Hex code (type L to list codes): 8e                    #  修改为LVM分区类型,可使用'L'查看所有可使用类型
Changed system type of partition 1 to 8e (Linux LVM)

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

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

Command (m for help): p                                   # 查看分区情况

Disk /dev/sdc: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 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: 0xa2c6e480

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1         654     5253223+  8e  Linux LVM
/dev/sdc2             655        1047     3156772+  8e  Linux LVM
/dev/sdc3            1048        1305     2072385   8e  Linux LVM

Command (m for help): w                                   # 保存分区表并退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# 

2. 创建物理卷

创建物理卷的命令为pvcreate,利用该命令将希望添加到卷组的所有分区或者硬盘创建为物理卷。

[root@localhost ~]# pvcreate /dev/sdc{1,2}             # 将/dev/sdc1和2创建为物理卷
  Physical volume "/dev/sdc1" successfully created
  Physical volume "/dev/sdc2" successfully created
[root@localhost ~]# pvs                                           # 查看物理卷信息
  PV         VG     Fmt  Attr PSize  PFree   
  /dev/sdc1         lvm2 ----  5.01g    5.01g
  /dev/sdc2         lvm2 ----  3.01g    3.01g
[root@localhost ~]# pvdisplay                                 # 查看物理卷详细信息
 ...
  "/dev/sdc1" is a new physical volume of "5.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc1
  VG Name               
  PV Size               5.01 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               jKHeSG-XYna-zFYi-9Kd9-bWRM-f1zY-Qs7FZZ

  "/dev/sdc2" is a new physical volume of "3.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc2
  VG Name               
  PV Size               3.01 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               WcKTKi-av0e-so5s-QVXB-yf7G-Tynz-9TQDJb

[root@localhost ~]# 

3. 创建卷组

创建卷组的命令为vgcreate,将使用pvcreate建立的物理卷创建为一个完整的卷组。

[root@localhost ~]# vgcreate myvg /dev/sdc{1,2}     # 创建卷组
  Volume group "myvg" successfully created
[root@localhost ~]# vgs                                            # 查看卷组信息
  VG     #PV #LV #SN Attr   VSize  VFree   
  myvg     2   0   0 wz--n-  8.02g    8.02g
[root@localhost ~]# vgdisplay myvg                         # 查看卷组详细信息
  --- Volume group ---
  VG Name               myvg
  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               8.02 GiB                                     # 卷组的大小,由上面两个分区决定
  PE Size               4.00 MiB                                     # PE大小可以在vgcreate命令中使用'-s'指定,默认为4M
  Total PE              2052
  Alloc PE / Size       0 / 0   
  Free  PE / Size       2052 / 8.02 GiB
  VG UUID               4aIItM-FyPx-GJ47-1A70-b8W4-EwfH-beFZrZ

[root@localhost ~]# pvdisplay                                   # 再次查看物理卷,跟上一次查看有所区别
  --- Physical volume ---
  PV Name               /dev/sdc1
  VG Name               myvg
  PV Size               5.01 GiB / not usable 2.10 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              1282
  Free PE               1282
  Allocated PE          0
  PV UUID               jKHeSG-XYna-zFYi-9Kd9-bWRM-f1zY-Qs7FZZ

  --- Physical volume ---
  PV Name               /dev/sdc2
  VG Name               myvg
  PV Size               3.01 GiB / not usable 2.79 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              770
  Free PE               770
  Allocated PE          0
  PV UUID               WcKTKi-av0e-so5s-QVXB-yf7G-Tynz-9TQDJb

[root@localhost ~]# 

4. 创建逻辑卷

创建逻辑卷的命令为lvcreate

[root@localhost ~]# lvcreate -L 6G -n mylv myvg
  Logical volume "mylv" created.
[root@localhost ~]#

使用方法:

lvcreate -L #G -n LV_NAME VG_NAME

参数解释:

  • -L: 指定逻辑卷大小,不可超过卷组大小
  • -n: 指定逻辑卷名称

5. 挂载文件系统

至此我们的逻辑卷就已创建完成,接下来我们就需要格式化分区并挂载使用啦。

[root@localhost ~]# mkfs.ext4 /dev/myvg/mylv      # 格式化分区
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
393216 inodes, 1572864 blocks
78643 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1610612736
48 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

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@localhost ~]# mount /dev/myvg/mylv /mnt/      # 挂载分区到/mnt目录下
[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
...
/dev/mapper/myvg-mylv
                      5.8G   12M  5.5G   1% /mnt
[root@localhost ~]# 

二、扩展逻辑卷

上一章我们介绍了如何创建LVM系统,并挂载使用。如果我们分配的空间不够用,那么就需要我们来扩展分区大小了。
接下来我们将/dev/sdc3分区也加入到卷组,并扩展逻辑卷空间。

[root@localhost ~]# pvcreate /dev/sdc3                 # 创建物理卷
  Physical volume "/dev/sdc3" successfully created
[root@localhost ~]# vgextend myvg /dev/sdc3      # 添加物理卷到卷组
  Volume group "myvg" successfully extended
[root@localhost ~]# pvs                                         # 查看物理卷信息
  PV         VG     Fmt  Attr PSize  PFree   
  /dev/sdb   datavg lvm2 a--u 20.00g 1020.00m
  /dev/sdc1  myvg   lvm2 a--u  5.01g       0 
  /dev/sdc2  myvg   lvm2 a--u  3.01g    2.02g
  /dev/sdc3  myvg   lvm2 a--u  1.97g    1.97g        # /dev/sdc3已加入myvg卷组
[root@localhost ~]# vgs                                        # 卷组信息
  VG     #PV #LV #SN Attr   VSize  VFree   
  datavg   1   1   0 wz--n- 20.00g 1020.00m
  myvg     3   1   0 wz--n-  9.99g    3.99g               # 卷组容量比之前扩大
[root@localhost ~]# lvextend -L 9G /dev/myvg/mylv    # 扩展逻辑卷容量到9G
  Size of logical volume myvg/mylv changed from 6.00 GiB (1536 extents) to 9.00 GiB (2304 extents).
  Logical volume mylv successfully resized.
[root@localhost ~]# lvs
  LV     VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  nsas01 datavg -wi-ao---- 19.00g                                                    
  mylv   myvg   -wi-a-----  9.00g                              # 逻辑卷容量成功扩展到9G
[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
...
/dev/mapper/myvg-mylv
                      5.8G   12M  5.5G   1% /mnt             # 但是分区空间还是初始大小
[root@localhost ~]# resize2fs -p /dev/myvg/mylv  # 改变分区大小为逻辑卷大小
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/mylv is mounted on /mnt; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/myvg/mylv to 2359296 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 2359296 blocks long.

[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
...
/dev/mapper/myvg-mylv
                      8.8G   14M  8.3G   1% /mnt           # 分区大小成功扩展到9G
[root@localhost ~]# 

三、缩减逻辑卷

注意事项:

  1. 缩减前需要先卸载挂载;
  2. 要确保缩减后的空间依然能够存储原有的所有数据;
  3. 缩减之前需要先强行检查文件,确保文件系统处于一致性状态。
[root@localhost ~]# umount /dev/myvg/mylv             # 卸载挂载分区
[root@localhost ~]# e2fsck -f /dev/myvg/mylv           # 强行检查文件系统
e2fsck 1.41.12 (17-May-2010)
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/myvg/mylv: 11/589824 files (0.0% non-contiguous), 73247/2359296 blocks
[root@localhost ~]# resize2fs /dev/myvg/mylv 8G    # 改变分区大小
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/myvg/mylv to 2097152 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 2097152 blocks long.

[root@localhost ~]# lvreduce -L 8G /dev/myvg/mylv  # 改变逻辑卷大小
  WARNING: Reducing active logical volume to 8.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce myvg/mylv? [y/n]: y
  Size of logical volume myvg/mylv changed from 9.00 GiB (2304 extents) to 8.00 GiB (2048 extents).
  Logical volume mylv successfully resized.
[root@localhost ~]# mount /dev/myvg/mylv /mnt/
[root@localhost ~]# df -h
...
/dev/mapper/myvg-mylv
                      7.8G   14M  7.4G   1% /mnt                 # 分区大小成功缩减为8G
[root@localhost ~]# 

四、从卷组移除物理卷

[root@localhost ~]# lvs
  LV     VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  nsas01 datavg -wi-ao---- 19.00g                                                    
  mylv   myvg   -wi-ao----  8.00g                                                    
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree   
  datavg   1   1   0 wz--n- 20.00g 1020.00m
  myvg     3   1   0 wz--n-  9.99g    1.99g
[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize  PFree   
  /dev/sdc1  myvg   lvm2 a--u  5.01g       0 
  /dev/sdc2  myvg   lvm2 a--u  3.01g   16.00m
  /dev/sdc3  myvg   lvm2 a--u  1.97g    1.97g
[root@localhost ~]# 

我们的目前状态:

  • 挂载分区空间为8G;
  • 逻辑卷(LV)空间大小为8G;
  • 卷组(VG)空间大小为9.99G,剩余1.99G;
  • 物理卷/dev/sdc3空间未使用。

那么我们是否可以将/dev/sdc3从卷组中移除出来呢?

[root@localhost ~]# pvmove /dev/sdc3              # 移动/dev/sdc3中数据到其他物理卷
  No data to move for myvg
[root@localhost ~]# vgreduce myvg /dev/sdc3  # 从myvg卷组中移除/dev/sdc3物理卷
  Removed "/dev/sdc3" from volume group "myvg"
[root@localhost ~]# pvremove /dev/sdc3           # 移除物理卷/dev/sdc3
  Labels on physical volume "/dev/sdc3" successfully wiped
[root@localhost ~]# pvs                                      # /dev/sdc3成功从卷组myvg中移除
  PV         VG     Fmt  Attr PSize  PFree   
  /dev/sdb   datavg lvm2 a--u 20.00g 1020.00m
  /dev/sdc1  myvg   lvm2 a--u  5.01g       0 
  /dev/sdc2  myvg   lvm2 a--u  3.01g   16.00m
[root@localhost ~]# vgs                                      # 卷组空间大小缩减了/dev/sdc3空间大小
  VG     #PV #LV #SN Attr   VSize  VFree   
  datavg   1   1   0 wz--n- 20.00g 1020.00m
  myvg     2   1   0 wz--n-  8.02g   16.00m
[root@localhost ~]# 

五、常用命令

  • 物理卷管理(PV)
pvcreate、pvdisplay、pvmove、pvremove、pvs
  • 卷组管理(VG)
vgcreate、vgdisplay、vgextend、vgreduce、vgremove、vgrename、vgs
  • 逻辑卷管理(LV)
lvcreate、lvdisplay、lvextend、lvreduce、lvremove、lvrename、lvs

详解Centos7扩展磁盘空间(LVM管理)

本文介绍了Centos7扩展磁盘空间(LVM管理),分享给大家,具体如下:

查看磁盘情况

# fdisk -l /dev/sda
Disk /dev/sda: 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 label type: dos
Disk identifier: 0x00063fa6
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 linux
/dev/sda2 1026048 20971519 9972736 8e Linux LVM
/dev/sda3 20971520 41943039 10485760 8e Linux LVM

现在,磁盘大小为 21.5 GB。磁盘占用情况为:

# df -h

Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 19G 8.1G 11G 44% /
devtmpfs 482M 0 482M 0% /dev
tmpfs 497M 88K 497M 1% /dev/shm
tmpfs 497M 7.0M 490M 2% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/sda1 497M 157M 341M 32% /boot
Share 103G 36G 67G 35% /media/sf_Share
tmpfs 100M 4.0K 100M 1% /run/user/42
tmpfs 100M 12K 100M 1% /run/user/0

试试看用 dd 命令创建一个大小为 1GB 的块文件:

# dd if=/dev/zero of=1.0G.img bs=1M count=1000
dd: writing `1.0G.img': No space left on device
1+0 records in
0+0 records out
8192 bytes (8.2 kB) copied, 0.00300509 s, 2.7 MB/s

提示磁盘空间不足,说明,虽然已给虚拟机分配了足够的空间,但是系统并不识别该空间。

下面调整虚拟机操作系统的文件系统,使之识别新增的空间

1、创建新的分区

# fdisk /dev/sda
n {new partition}
p {primary partition}
3 {partition number}
[这时会提示修改大小,选择默认直接回车即可]
t {change partition id}
3 {partition number}
8e {Linux LVM partition}
w

如果中间有设置大小之类的提示,就直接回车。

完成后,如果提示:
PS:经实际测试,无此提示,但还是要重启系统,看看是否已识别该磁盘空间。

WARNING: Re-reading the partition table failed with error 16: 设备或资源忙. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8)

就重启一下系统。

2、查看新增加的sda3是否标记为LVM,如果没有需要reboot
PS:经实际测试,sda3已经是LVM了,但系统还是不识别该磁盘空间。

3、调整LVM大小

查看Volume Group名称

# vgdisplay
--- Volume group ---
VG Name centos
System ID 
Format lvm2

4、为新分配的空间创建一个新的物理卷

#pvcreate /dev/sda3

5、使用新的物理卷来扩展 LVM 的 VolGroup

# vgextend centos /dev/sda3
No physical volume label read from /dev/sda3
Writing physical volume data to disk "/dev/sda3"
Physical volume "/dev/sda3" successfully created
Volume group "vg_aimin" successfully extended

6、扩展 LVM 的逻辑卷 centos-root

先查看逻辑卷:

# lvdisplay
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
# lvextend /dev/centos/root /dev/sda3

7、调整逻辑卷的大小

# xfs_growfs /dev/centos/root

PS:不知道是调整还是同步,经实际测试需要用xfs_growfs命令,而非resize2fs命令

8、查看结果

# lvscan
ACTIVE '/dev/centos/root' [18.46 GiB] inherit
ACTIVE '/dev/centos/swap' [1.00 GiB] inherit

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

LINXU | 在虚拟机里调整LVM逻辑卷的空间大小

lvresize命令

lvresize命令用于调整LVM逻辑卷的空间大小,可以增大空间和缩小空间。使用lvresize命令调整逻辑卷空间大小和缩小空间时需要谨慎,因为它有可能导致数据丢失。

语法

lvresize(选项)(参数)

选项

-L:指定逻辑卷的大小,单位为“kKmMgGtT”字节; 
-l:指定逻辑卷的大小(LE数)。

查看盘符位置

df -h

参数

逻辑卷:指定要删除的逻辑卷。

实例

使用lvresize命令调整最大的逻辑卷大小。在命令行中输入下面的命令:

[root@localhost ~]# lvresize -L +200M /dev/vg1000/lvol0 #将逻辑卷空间增加200M /dev/vg1000/lvol0为盘符位置

输出信息如下:

Extending logical volume lvol0 to 280.00 MB 
Logical volume lvol0 successfully resized

LVM之Cache加速

概述

我们知道LVM是管理本地磁盘,更好的提供块设备服务的机制;

在现实环境中,我们的机器通常都有几种不同类型的磁盘存在,高性能的磁盘容量低,容量大的磁盘性能差,那如何利用Linux系统的各种cache机制来提升LVM卷的性能呢?

存储磁盘分类

通常我们使用的存储磁盘有三种,分别对应不同的容量、性能、价格,有:SATA盘,SSD盘和PCIE-SSD;

他们三个的大致性能容量和价格如下表所示:

未分类

从上面可以看出,可以作为普通磁盘加速的磁盘有:SSD盘和PCIE-SSD,其中SSD盘是最常见和用的最多的,PCIE卡在超高性能需求场所有使用。

注:其实现在SSD/PCIE-SSD的每GB价格相差不大了,若对超高性能有需求,PCIE-SSD是个很好的选择;

Cache算法

通常我们使用高性能磁盘来加速低性能磁盘时,都会选择一种Linux内核支持的Cache算法,现在Linux内核支持的常用Cache算法有如下几种;

flashcache

flashcache 是 facebook 开源的 ssd 存储产品,它基于内核的 devicemapper 机制,允许将 ssd 设备映射为机械存储设备的缓存,堆叠成为一个虚拟设备供用户读写,从而在一定程度上兼顾 ssd 的高速与机械存储设备的高容量,更加经济高效地支撑线上业务。

flashcache 支持三种缓存策略:

  • 回写(Write Back):修改内容之后,并不立即写入后端设备
  • 写透(Write Through): 修改内容时写入后端设备,同时也更新前端设备中的缓存块
  • 环写(Write Around): 修改内容时,先写入后端设备,同时使前端设备中对应的缓存块失效

参考:

https://github.com/facebookarchive/flashcache

https://en.wikipedia.org/wiki/Flashcache

bcache

bcache是linux内核块设备层cache,类似于flashcache使用ssd作为hdd的缓存方案,相比于flashcache,bcache更加灵活,支持ssd作为多块hdd的共享缓存,并且还支持多块ssd(还未完善),能够在运行中动态增加,删除缓存设备和后端设备。

从3.10开始,bcache进入内核主线。bcache支持writeback、writethrough、writearoud三种策略,默认是wriththrough,可以动态修改,缓存替换方式支持lru、fifo和random三种。

参考:

https://bcache.evilpiepirate.org/

http://www.sysnote.org/2014/06/20/bcache-analysis/

dm-cache

作为linux内核的一部分,dm-cache采用device mapper机制允许用户建立混合卷。dm-cache可以采用一个或多个快速设备为后端慢速存储系统扮演缓存的角色。

dm-cache设计成由3个物理存储设备来混合成一个逻辑卷的形式。操作模式和缓存策略决定了缓存数据的性能。这三个物理设备分别为:

  • 原始设备:提供主要的慢速存储(通常是一个硬盘或者SAN)
  • 缓存设备:提供高速原始设备数据的缓存(通常是一个SSD)
  • 元数据设备:记录硬盘块在缓存中的位置,脏标志以及执行缓存策略所需的内部数据

dm-cache支持写回,写通和旁路三种模式。

参考:

https://en.wikipedia.org/wiki/Dm-cache

LVM加速策略

flashcache

基于flashcache的使用策略(SSD-SATA 1对1),我们有如下策略:

未分类

bcache

bcache可以用一块SSD盘做多个SATA盘的缓存,有如下策略:

未分类

LVM自带Cache策略

LVM自带Cache策略可以配置两个LV之间做缓存,有如下策略:

未分类

LVM Cache策略选择

现实中,考虑稳定性和可靠性,使用flashcache作为Cache策略的比较多。

但最近bcache也越来越得到大范围的使用,在某些测试报告中,其性能多数场景优于flashcache。