1-16-1 LVM管理和ssm存储管理器使用&磁盘配额

大纲:

1-1- LVM逻辑卷的管理

1-2- SSM管理工具的使用

1-3- 磁盘配额技巧

======================================

问题描述:

当我们需要在一个100G的磁盘中存储120G的数据时,空间不够用,这时我们应该怎么办?

一般方法时,重新分区或者是在购买一个大点磁盘

但是,在服务器中,这是不现实的,如果该磁盘上运行着非常重要的服务呢?!

传统磁盘管理的限制,因为其不能够进行动态的磁盘管理。

这时就用到了我们的LVM逻辑卷

LVM(Logical volume Manager)是逻辑卷管理的简称。

它是Linux环境下对磁盘分区进行管理的一种机制

现在不仅仅是Linux系统上可以使用LVM这种磁盘管理机制,

对于其它的类UNIX操作系统,以及windows操作系统都有类似与LVM这种磁盘管理软件。

LVM逻辑卷可以对磁盘的大小实现动态调整。

lvm 逻辑卷的原理它就是通过将底层的物理硬盘进行封装,然后以逻辑卷的形式呈现给上层应用。

当我们对磁盘进行操作时,实际上不是对分区进行操作,而是通过一个叫做逻辑卷的东西对其进行底层磁盘的操作

就是通过将底层的物理硬盘封装起来,然后以逻辑卷的方式呈现给上层应用。

在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,

其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。

image

PE(Physical Extend),我们的LVM磁盘管理中PE的默认大小是4M大小,其实PE就是我们逻辑卷管理的最基本单位

比如说我有一个400M的硬盘,那么在将其格式化成PV的时候,其实际就是将这块物理硬盘划分成了100个的PE,因为PE默认的大小就是4M

PV(Physical Volume),物理卷 ,作用就是用来装PE的,普通磁盘被分割成多个PE块,最终形成PV(物理卷)

VG即卷组 作用就是用来装PV的,我们可以把一个或者多个PV加到VG当中

LV(Logical Volume),所以第三步操作就是基于VG来创建我们最终要使用的LV。

逻辑卷组成:

普通磁盘或分区,通过命令其存储空间按照PE(Physical Extand)的大小被分各种n个PE块,

注:这里的PE就相当于raid磁盘阵列中的块大小,存储基本单位,PE默认大小为4M,可调整

最后形成理卷(PV—Physical Volume),

多个物理卷PV组成卷组(VG),最后通过卷组(VG)创建逻辑卷(LV)

1-1-2 LVM逻辑卷的管理

lvm常用的命令

功能            PV管理        VG管理         LV管理

scan 扫描        pvscan        vgscan         lvscan

create 创建      pvcreate     vgcreate      lvcreate

display显示      pvdisplay    vgdisplay     lvdisplay

remove 移除   pvremove    vgremove    lvremove

extend 扩展                        vgextend     lvextend

reduce减少                         vgreduce     lvreduce

注:PV不需要扩展和减少,当需要扩容或减少时,直接增减磁盘即可

实战:创建、并使用LVM逻辑卷

第一步:添加磁盘到虚拟机

image

第二步:对添加的磁盘进行分区(也可直接添加四个磁盘,组成卷组)

效果如图:

image

image

过程如下:

[root@localhost ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p):
Using default response p
Partition number (1-4, default 1):
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +1G
Partition 1 of type Linux and of size 1 GiB is set

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p):
Using default response p
Partition number (2-4, default 2):
First sector (2099200-41943039, default 2099200):
Using default value 2099200
Last sector, +sectors or +size{K,M,G} (2099200-41943039, default 41943039): +1G
Partition 2 of type Linux and of size 1 GiB is set

Command (m for help): n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p):
Using default response p
Partition number (3,4, default 3):
First sector (4196352-41943039, default 4196352):
Using default value 4196352
Last sector, +sectors or +size{K,M,G} (4196352-41943039, default 41943039): +1G
Partition 3 of type Linux and of size 1 GiB is set

Command (m for help): n
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
Select (default e):
Using default response e
Selected partition 4
First sector (6293504-41943039, default 6293504):
Using default value 6293504
Last sector, +sectors or +size{K,M,G} (6293504-41943039, default 41943039):
Using default value 41943039
Partition 4 of type Extended and of size 17 GiB is set

Command (m for help): p

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 label type: dos
Disk identifier: 0xa42d7e85

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux
/dev/sdb2         2099200     4196351     1048576   83  Linux
/dev/sdb3         4196352     6293503     1048576   83  Linux
/dev/sdb4         6293504    41943039    17824768    5  Extended

Command (m for help): n
All primary partitions are in use
Adding logical partition 5
First sector (6295552-41943039, default 6295552):
Using default value 6295552
Last sector, +sectors or +size{K,M,G} (6295552-41943039, default 41943039): +1G
Partition 5 of type Linux and of size 1 GiB is set

Command (m for help): p

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 label type: dos
Disk identifier: 0xa42d7e85

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux
/dev/sdb2         2099200     4196351     1048576   83  Linux
/dev/sdb3         4196352     6293503     1048576   83  Linux
/dev/sdb4         6293504    41943039    17824768    5  Extended
/dev/sdb5         6295552     8392703     1048576   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# ls /dev/sdb*
/dev/sdb  /dev/sdb1  /dev/sdb2  /dev/sdb3  /dev/sdb4  /dev/sdb5
[root@localhost ~]#

第三步:创建PV和VG

创建PV=pvcreate 设备名称 …..

创建VG=vgcreate 卷组名称 设备成员 ..

pvcreate /dev/sdb[1-3] /dev/sdb5

image

pvs  和pvscan不是一个命令

创建VG

vgcreate file /dev/sdb[1-3]

image

vgs  查看vg卷组信息

image

注:vgs 和vgscan不是一个命令!

[root@localhost ~]# vgs --help
  vgs: Display information about volume groups

vgs
    [--aligned]
    [--binary]
    [-a|--all]
    [--commandprofile ProfileName]
    [-d|--debug]
    [--foreign]
    [-h|--help]
    [--ignorelockingfailure]
    [--ignoreskippedcluster]
    [--nameprefixes]
    [--noheadings]
    [--nosuffix]
    [-o|--options [+]Field[,Field]]
    [-O|--sort [+|-]key1[,[+|-]key2[,...]]]
    [-P|--partial]
    [--readonly]
    [--rows]
    [-S|--select Selection]
    [--separator Separator]
    [--trustcache]
    [--unbuffered]
    [--units hHbBsSkKmMgGtTpPeE]
    [--unquoted]
    [-v|--verbose]
    [--version]
    [VolumeGroupName [VolumeGroupName...]]

[root@localhost ~]# vgscan --help
  vgscan: Search for all volume groups

vgscan     [--cache]
    [--commandprofile ProfileName]
    [-d|--debug]
    [-h|--help]
    [--ignorelockingfailure]
    [--mknodes]
    [-P|--partial]
    [-v|--verbose]
    [--version]

[root@localhost ~]#

第四步:创建LV

lvcreate -n 指定逻辑卷名称  -L 指定大小

lvcreate –n disk –L 1.5G  file

image

lvcreate帮助信息:

[root@localhost ~]# lvcreate --help
  lvcreate: Create a logical volume

lvcreate
    [-A|--autobackup {y|n}]
    [-a|--activate [a|e|l]{y|n}]
    [--addtag Tag]
    [--alloc AllocationPolicy]
    [-H|--cache
      [--cachemode {writeback|writethrough}]
      [--cachepolicy policy]
      [--cachesettings key=value]
    [--cachepool CachePoolLogicalVolume{Name|Path}]
    [-c|--chunksize ChunkSize]
    [-C|--contiguous {y|n}]
    [--commandprofile ProfileName]
    [-d|--debug]
    [-h|-?|--help]
    [--errorwhenfull {y|n}]
    [--ignoremonitoring]
    [--monitor {y|n}]
    [-i|--stripes Stripes [-I|--stripesize StripeSize]]
    [-k|--setactivationskip {y|n}]
    [-K|--ignoreactivationskip]
    {-l|--extents LogicalExtentsNumber[%{VG|PVS|FREE}] |
     -L|--size LogicalVolumeSize[bBsSkKmMgGtTpPeE]}
    [-M|--persistent {y|n}] [-j|--major major] [--minor minor]
    [--metadataprofile ProfileName]
    [-m|--mirrors Mirrors [--nosync]
      [{--mirrorlog {disk|core|mirrored}|--corelog}]]
    [-n|--name LogicalVolumeName]
    [--noudevsync]
    [-p|--permission {r|rw}]
    [--poolmetadatasize MetadataSize[bBsSkKmMgG]]
    [--poolmetadataspare {y|n}]]
    [--[raid]minrecoveryrate Rate]
    [--[raid]maxrecoveryrate Rate]
    [-r|--readahead {ReadAheadSectors|auto|none}]
    [-R|--regionsize MirrorLogRegionSize]
    [-T|--thin
      [--discards {ignore|nopassdown|passdown}]
    [--thinpool ThinPoolLogicalVolume{Name|Path}]
    [-t|--test]
    [--type VolumeType]
    [-v|--verbose]
    [-W|--wipesignatures {y|n}]
    [-Z|--zero {y|n}]
    [--version]
    VolumeGroupName [PhysicalVolumePath...]

lvcreate
    { {-s|--snapshot} OriginalLogicalVolume[Path] |
      [-s|--snapshot] VolumeGroupName[Path] -V|--virtualsize VirtualSize}
      {-H|--cache} VolumeGroupName[Path][/OriginalLogicalVolume]
      {-T|--thin} VolumeGroupName[Path][/PoolLogicalVolume]
                  -V|--virtualsize VirtualSize}
    [-A|--autobackup {y|n}]
    [--addtag Tag]
    [--alloc AllocationPolicy]
    [--cachepolicy Policy] [--cachesettings Key=Value]
    [-c|--chunksize]
    [-C|--contiguous {y|n}]
    [--commandprofile ProfileName]
    [-d|--debug]
    [--discards {ignore|nopassdown|passdown}]
    [-h|-?|--help]
    [--ignoremonitoring]
    [--monitor {y|n}]
    [-i|--stripes Stripes [-I|--stripesize StripeSize]]
    [-k|--setactivationskip {y|n}]
    [-K|--ignoreactivationskip]
    {-l|--extents LogicalExtentsNumber[%{VG|FREE|ORIGIN}] |
     -L|--size LogicalVolumeSize[bBsSkKmMgGtTpPeE]}
    [--poolmetadatasize MetadataVolumeSize[bBsSkKmMgG]]
    [-M|--persistent {y|n}] [-j|--major major] [--minor minor]
    [--metadataprofile ProfileName]
    [-n|--name LogicalVolumeName]
    [--noudevsync]
    [-p|--permission {r|rw}]
    [-r|--readahead ReadAheadSectors|auto|none]
    [-t|--test]
    [{--thinpool ThinPoolLogicalVolume[Path] |
      --cachepool CachePoolLogicalVolume[Path]}]
    [-v|--verbose]
    [--version]
    [PhysicalVolumePath...]

第六步:格式化、挂载并读写数据

mkfs.xfs /dev/file/disk

or

mkfs.xfs /dev/mapper/file-disk #格式化分区

df –h | grep /disk #检查挂载信息

lvs #lvscan查看lv卷信息

vgs #vgscan查看vg卷组信息

pvs #pvscan查看pv物理卷信息

image

写入数据,测试卷:

image

===========================================

实验:PE的大小更改

查看默认的PE大小为:4M,如图:

pvdisplay /dev/sdb1

image

新建一个分区/dev/sdb6

[root@localhost ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): n
All primary partitions are in use
Adding logical partition 6
First sector (8394752-41943039, default 8394752):
Using default value 8394752
Last sector, +sectors or +size{K,M,G} (8394752-41943039, default 41943039): +1G
Partition 6 of type Linux and of size 1 GiB is set

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
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)
Syncing disks.
[root@localhost ~]# ls /dev/sdb*
/dev/sdb  /dev/sdb1  /dev/sdb2  /dev/sdb3  /dev/sdb4  /dev/sdb5
[root@localhost ~]# partprobe  #更新分区表
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.
[root@localhost ~]# ls /dev/sdb*
/dev/sdb  /dev/sdb1  /dev/sdb2  /dev/sdb3  /dev/sdb4  /dev/sdb5  /dev/sdb6
[root@localhost ~]#

image

新建PV和VG,并设置PE大小

vgcreate vg02 /dev/sdb6 –s 1M  #设置PE块大小为1M

pvdisplay /dev/sdb6  #查看PE块大小

image

================================

实验:LV扩容

查看vg卷组中是否还有可用空间用于扩容   vgs

image

对disk逻辑卷增加500M空间 lvextend

lvextend –L +500M /dev/file/disk

image

使用df命令查看逻辑卷大小发现,容量没有变化。这时需要使用在线更新命令。

df –h | grep /disk #查看逻辑卷大小

xfs_growfs /dev/file/disk #RHEL7中,在线更新命令

RHEL6对文件系统进行扩容

[root@xuegod61 ~]# resize2fs /dev/Vg1/LV1

注意在:RHEL7对文件系统进行扩容

xfs_growfs   设备名称

image

============================================

实验:VG扩容  vgextend vgname pvname

创建PV物理卷

pvcreate /dev/sdb5

将其添加到VG卷组中

vgextend file /dev/sdb5

file 要拓展的卷组名

/dev/sdb5用来拓展的PV物理卷

image

=========================================================

实验:LVM减少容量

使用df –h 命令查看/disk磁盘使用情况,保证减少容量时,不会报错(保证不会丢失数据)

image

查看LVM逻辑卷可用空间

lvs

lvreduce –L 1G /dev/file/disk #减少逻辑卷1G容量

image

再次使用df –h | grep /disk命令查看磁盘容量

image

造成文件系统不能缩小的原因

RHEL7只能对LV动态的缩减,但是XFS不支持文件系统缩减

lvm支持在线缩减,但是ext4文件系统不支持在线缩减。

支持在线缩减的文件系统:btrfs

lvm支持在线缩小,但是ext4文件系统不支持在线缩小。btrfs支持在线缩小

Btrfs 简介

一直使用 ext2/3,ext 文件系统以其卓越的稳定性成为了事实上的 Linux 标准文件系统。

近年来 ext2/3 暴露出了一些扩展性问题,于是便催生了 ext4 。

ext4 的作者 Theodore Tso 也盛赞 btrfs 并认为 btrfs 将成为下一代 Linux 标准文件系统。

btrfs 的特性:拓展性、数据一致性、和多设备管理相关

第一是扩展性 (scalability) 相关的特性,btrfs 最重要的设计目标是应对大型机器对文件系统的扩展性要求。

其整体性能而不会随着系统容量的增加而降低。

第二是数据一致性 (data integrity) 相关的特性。

第三是和多设备管理相关的特性。 Btrfs 支持创建快照 (snapshot),和克隆 (clone) 。

=========================================================

======

实验:VG减少容量

我要把/dev/sdb1 移除

所在的VG=file

必须保障咱们的物理卷是否被使用

无法缩减一个有数据存在的pv

移除没有被占用的PV物理卷即可减少VG容量

pvs #查看卷组信息,查找没有被存储数据的PV物理卷

vgreduce file /dev/sdb5 #将PV物理卷移除

image

=========================================================

======

 

 

 

实验:LV删除方法

删除步骤相对于创建步骤正好是逆向的。

而且在删除之前必须先卸载对应lvm,否则会产生错误

故删除LV的方法如下:

1、卸载要删除的LVM

umount /disk

2、删除LVM逻辑

lvremove /dev/file/disk

3、删除VG卷组

vgremove file

4、删除PV物理卷

pvremove /dev/sdb[1-3]  /dev/sdb[5-6]

详情如下:

image

注:vgs、pvs、lvs和lvscan、pvscan、vgscan命令效果

image

==================================================

lvm快照

 

关于数据的备份

    冷备份:卸载掉文件系统,不能读不能写

    温备份:不卸载文件系统,能读取文件系统内容但是不能写

   热备份:不卸载文件系统,既能读取文件系统内容又能写入

实验:LVM逻辑卷快照创建

准备一个LVM逻辑卷,并格式化挂载

[root@localhost ~]# ls /dev/sdb*
/dev/sdb  /dev/sdb1  /dev/sdb2  /dev/sdb3  /dev/sdb4  /dev/sdb5  /dev/sdb6
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sda2  rhel lvm2 a--  12.00g 4.00m
[root@localhost ~]# pvcreate /dev/sdb[1-3]
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
  Physical volume "/dev/sdb3" successfully created
[root@localhost ~]# vgcreate file /dev/sdb[1-3]
  Volume group "file" successfully created
[root@localhost ~]# lvcreate -n disk -L 1.5G file
WARNING: xfs signature detected on /dev/file/disk at offset 0. Wipe it? [y/n]: y
  Wiping xfs signature on /dev/file/disk.
  Logical volume "disk" created.

[root@localhost ~]# mkfs.xfs /dev/file/disk
meta-data=/dev/file/disk         isize=256    agcount=4, agsize=98304 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=393216, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# mount /dev/file/disk /disk/
[root@localhost ~]# df -h | grep /disk
/dev/mapper/file-disk  1.5G   33M  1.5G   3% /disk

[root@localhost ~]# echo "hello world! " >> /disk/a.txt
[root@localhost ~]# cat /disk/a.txt
hello world!
[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree
  file   3   1   0 wz--n-  2.99g 1.49g
  rhel   1   2   0 wz--n- 12.00g 4.00m
[root@localhost ~]# lvcreate -s -n disk_back -L 500M /dev/file/disk
  Logical volume "disk_back" created.
[root@localhost ~]# lvs
  LV        VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  disk      file owi-aos---   1.50g                                                   
  disk_back file swi-a-s--- 500.00m      disk   0.00                                  
  root      rhel -wi-ao----  10.00g                                                   
  swap      rhel -wi-ao----   2.00g                                                   
[root@localhost ~]# umount /disk/
[root@localhost ~]# mount /dev/file/disk_back /disk/
c[root@localhost ~]# cd /disk/
[root@localhost disk]# ls
a.txt
[root@localhost disk]# cat a.txt
hello world!
image

首先准备一个LV

wps797D.tmp

因为步骤错误 你们可以直接执行这个步骤

wps797E.tmp

格式化并且挂载使用

wps797F.tmp

准备测试文件

wps7980.tmp

针对lv2创建一个300M快照

确保卷组是否有可用的空间

wps7981.tmp
lvcreate -s -n 快照名 -L 快照大小 创建快照的设备

快照其实也是一个逻辑卷

     快照只能对逻辑卷LVM进行备份,并且只能对同一个卷组的逻辑卷进行备份

wps7992.tmp

wps7993.tmp

使用快照

快照:

直接在快照的目录做操作,对原本的目录没有任何的影响

wps7994.tmp

恢复:

删除快照,重新挂载原本lv1

原文地址:https://www.cnblogs.com/xiaogan/p/5793419.html