标签:
大纲:
1-1- LVM逻辑卷的管理
1-2- SSM管理工具的使用
1-3- 磁盘配额技巧
======================================
问题描述:
当我们需要在一个100G的磁盘中存储120G的数据时,空间不够用,这时我们应该怎么办?
一般方法时,重新分区或者是在购买一个大点磁盘
但是,在服务器中,这是不现实的,如果该磁盘上运行着非常重要的服务呢?!
传统磁盘管理的限制,因为其不能够进行动态的磁盘管理。
这时就用到了我们的LVM逻辑卷
LVM(Logical volume Manager)是逻辑卷管理的简称。
它是Linux环境下对磁盘分区进行管理的一种机制。
现在不仅仅是Linux系统上可以使用LVM这种磁盘管理机制,
对于其它的类UNIX操作系统,以及windows操作系统都有类似与LVM这种磁盘管理软件。
LVM逻辑卷可以对磁盘的大小实现动态调整。
lvm 逻辑卷的原理:它就是通过将底层的物理硬盘进行封装,然后以逻辑卷的形式呈现给上层应用。
当我们对磁盘进行操作时,实际上不是对分区进行操作,而是通过一个叫做逻辑卷的东西对其进行底层磁盘的操作
就是通过将底层的物理硬盘封装起来,然后以逻辑卷的方式呈现给上层应用。
在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,
其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。
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逻辑卷
第一步:添加磁盘到虚拟机
第二步:对添加的磁盘进行分区(也可直接添加四个磁盘,组成卷组)
效果如图:
过程如下:
[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
pvs 和pvscan不是一个命令
创建VG
vgcreate file /dev/sdb[1-3]
vgs 查看vg卷组信息
注: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
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物理卷信息
写入数据,测试卷:
===========================================
实验:PE的大小更改
查看默认的PE大小为:4M,如图:
pvdisplay /dev/sdb1
新建一个分区/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 ~]#
新建PV和VG,并设置PE大小
vgcreate vg02 /dev/sdb6 –s 1M #设置PE块大小为1M
pvdisplay /dev/sdb6 #查看PE块大小
================================
实验:LV扩容
查看vg卷组中是否还有可用空间用于扩容 vgs
对disk逻辑卷增加500M空间 lvextend
lvextend –L +500M /dev/file/disk
使用df命令查看逻辑卷大小发现,容量没有变化。这时需要使用在线更新命令。
df –h | grep /disk #查看逻辑卷大小
xfs_growfs /dev/file/disk #RHEL7中,在线更新命令
RHEL6对文件系统进行扩容
[root@xuegod61 ~]# resize2fs /dev/Vg1/LV1
注意在:RHEL7对文件系统进行扩容
xfs_growfs 设备名称
============================================
实验:VG扩容 vgextend vgname pvname
创建PV物理卷
pvcreate /dev/sdb5
将其添加到VG卷组中
vgextend file /dev/sdb5
file 要拓展的卷组名
/dev/sdb5用来拓展的PV物理卷
=========================================================
实验:LVM减少容量
使用df –h 命令查看/disk磁盘使用情况,保证减少容量时,不会报错(保证不会丢失数据)
查看LVM逻辑卷可用空间
lvs
lvreduce –L 1G /dev/file/disk #减少逻辑卷1G容量
再次使用df –h | grep /disk命令查看磁盘容量
造成文件系统不能缩小的原因
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物理卷移除
=========================================================
======
实验: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]
详情如下:
注:vgs、pvs、lvs和lvscan、pvscan、vgscan命令效果
==================================================
lvm快照 关于数据的备份 冷备份:卸载掉文件系统,不能读不能写 温备份:不卸载文件系统,能读取文件系统内容但是不能写 热备份:不卸载文件系统,既能读取文件系统内容又能写入 实验:LVM逻辑卷快照创建 准备一个LVM逻辑卷,并格式化挂载 [root@localhost ~]# ls /dev/sdb* [root@localhost ~]# mkfs.xfs /dev/file/disk [root@localhost ~]# echo "hello world! " >> /disk/a.txt 首先准备一个LV 因为步骤错误 你们可以直接执行这个步骤 格式化并且挂载使用 准备测试文件 针对lv2创建一个300M快照 确保卷组是否有可用的空间 快照其实也是一个逻辑卷 快照只能对逻辑卷LVM进行备份,并且只能对同一个卷组的逻辑卷进行备份 使用快照 快照: 直接在快照的目录做操作,对原本的目录没有任何的影响 恢复: 删除快照,重新挂载原本lv1
/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.
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 ~]# 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!
lvcreate -s -n 快照名 -L 快照大小 创建快照的设备
标签:
原文地址:http://www.cnblogs.com/xiaogan/p/5793419.html