一、LVM的工作原理
LVM(Logical Volume Manager)逻辑卷管理,是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。管理员利用LVM可以在磁盘不用重新分区的情况下动态调整文件系统的大小,并且利用LVM管理的文件系统可以跨越磁盘,当服务器添加了新的磁盘后,管理员不必将原有的文件移动到新的磁盘上,而是通过LVM可以直接扩展文件系统跨越磁盘。
它就是通过将底层的物理硬盘封装起来,然后以逻辑卷的方式呈现给上层应用。在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。
1、LVM常用术语
物理存储介质(The physical media):LVM存储介质可以是磁盘分区,整个磁盘,RAID阵列或SAN磁盘,设备必须初始化为LVM物理卷,才能与LVM结合使用
物理卷 PV(physical volume):物理卷就是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区,磁盘等)比较,却包含有与LVM相关的管理参数,创建物理卷它可以使用硬盘分区,也可以使用硬盘本身。
卷组 VG(Volume Group):一个LVM卷组由一个或多个物理卷组成
逻辑卷 LV(physical volume):LV建立在VG之上,可以在LV之上建立文件系统。
PE(physical extents):PV 物理卷中可以分配的最小存储单元,PE的大小是可以指定的,默认为4MB。
LE(logical extent):LV逻辑卷中可以分配的最小存储单元,在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
最小存储单位总结
名称 | 最小存储单位 |
硬盘 | 扇区(512字节) |
文件系统 | block(1K或4K) |
raid | chunk(512K) |
LVM | PE(4M) |
2、LVM主要元素构成:
总结:多个磁盘/分区/raid--》多个物理卷PV--》合成卷组VG--》从VG划出逻辑卷--》格式化LV挂载使用
3、LVM优点
1.使用卷组,使多个硬盘空间看起来像是一个大的硬盘
2.使用逻辑卷,可以跨多个硬盘空间的分区 sdb1 sdb2 sdc1 sdd2 sdf
3.在使用逻辑卷时,它可以在空间不足时动态调整它的大小
4.在调整逻辑卷大小时,不需要考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间
5.可以在线对LV,VG进行创建,删除,调整大小等操作,LVM上的文件系统也需要重新调整
6.允许创建快照,可以用来保存文件系统的备份
LVM时软件的卷管理方式,而RAID是磁盘管理 方法,对于重要的数据来说,使用RAID来保护物理磁盘不会因为故障而中断业务,再用LVM来实现对卷的良性的管理,更好的利用磁盘资源。
二、创建LVM
1、步骤:
1.物理磁盘被格式化为PV,(空间被划分为一个个的PE)
2.不同的PV加入到同一个VG中,(不同PV的PE全部进入到了VG的PE池内)
3.在VG中创建LV逻辑卷,基于PE创建,(组成LV的PE可能来自不同的物理磁盘)
4.LV直接可以格式化后挂载使用
5.LV的扩充缩减实际上就是增加或减少组成该LV的PE数量。其过程不会丢失原始数据
2、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 |
3、创建LVM
1.创建PV
添加一个sdd磁盘,创建4个主分区
设定分区类型ID:8e
pvcreate /dev/sdd{1,2,3,4}
[root@localhost ~]# fdisk /dev/sdd ########给sdd分4个主分区
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.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xa38e7e75.
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): +2G
Partition 1 of type Linux and of size 2 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 (4196352-41943039, default 4196352):
Using default value 4196352
Last sector, +sectors or +size{K,M,G} (4196352-41943039, default 41943039): +2G
Partition 2 of type Linux and of size 2 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 (8390656-41943039, default 8390656):
Using default value 8390656
Last sector, +sectors or +size{K,M,G} (8390656-41943039, default 41943039): +2G
Partition 3 of type Linux and of size 2 GiB is set
Command (m for help): n
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): p
Selected partition 4
First sector (12584960-41943039, default 12584960):
Using default value 12584960
Last sector, +sectors or +size{K,M,G} (12584960-41943039, default 41943039): +5G
Partition 4 of type Linux and of size 5 GiB is set
Command (m for help): p
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 label type: dos
Disk identifier: 0xa38e7e75
Device Boot Start End Blocks Id System
/dev/sdd1 2048 4196351 2097152 83 Linux
/dev/sdd2 4196352 8390655 2097152 83 Linux
/dev/sdd3 8390656 12584959 2097152 83 Linux
/dev/sdd4 12584960 23070719 5242880 83 Linux
Command (m for help): t ########把分区ID改为8e
Partition number (1-4, default 4):
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): t
Partition number (1-4, default 4): 3
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): t
Partition number (1-4, default 4): 2
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): t
Partition number (1-4, default 4): 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# pvcreate /dev/sdd{1,2,3,5} ####创建PV物理卷
Device /dev/sdd5 not found (or ignored by filtering).
Physical volume "/dev/sdd1" successfully created.
Physical volume "/dev/sdd2" successfully created.
Physical volume "/dev/sdd3" successfully created.
[root@localhost ~]# pvcreate /dev/sdd4
Physical volume "/dev/sdd4" successfully created.
2.创建VG
语法:vgcreate vg的名字 pv的名字
[root@localhost ~]# vgcreate vg02 /dev/sdd{1,2,3,4}
Volume group "vg02" successfully created
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name vg02
System ID
Format lvm2
Metadata Areas 4
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 4
Act PV 4
VG Size 10.98 GiB
PE Size 4.00 MiB
Total PE 2812
Alloc PE / Size 0 / 0
Free PE / Size 2812 / 10.98 GiB
VG UUID GNF22B-WjHn-gyFj-t6DB-Q3ao-A9bf-0OizoL
3.创建LV
lvcreate -n指定新逻辑卷名称 -L指定LV大小(M,G) -l指定LE数量(一个LE默认4M)
[root@localhost ~]# lvcreate -n lv02 -L +4G vg02
Logical volume "lv02" created.
[root@localhost ~]# lvcreate -n lv03 -l 1000 vg02
Logical volume "lv03" created.
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- 50.00g
swap centos -wi-ao---- 4.00g
lv01 vg01 -wi-a----- 1.00g
lv02 vg01 -wi-a----- 500.00m
lv02 vg02 -wi-a----- 4.00g
lv03 vg02 -wi-a----- <3.91g
4.格式化lv与挂载
[root@localhost ~]# ll /dev/vg02 ######lv逻辑卷的实际位置
total 0
lrwxrwxrwx. 1 root root 7 Sep 28 04:07 lv02 -> ../dm-4
lrwxrwxrwx. 1 root root 7 Sep 28 04:08 lv03 -> ../dm-5
[root@localhost ~]# mkfs.ext4 /dev/vg02/lv02 ####格式化lv02逻辑卷
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
262144 inodes, 1048576 blocks
52428 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1073741824
32 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
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
[root@localhost ~]# mount /dev/vg02/lv02 /mnt
######把lv02逻辑卷挂载到/mnt目录下
开机自动挂载逻辑卷lv02
echo “ UUID=a38ab985-868d-44c9-9347-5f491d8eaf63 /mnt ext4 defaults 0 0” >> /etc/fstab
4、扩展-----指定PE大小
参数 : -s
如果存储的数据都是大文件,可以把PE调大,读取速度快
[root@localhost ~]# vgcreate -s 16M vg04 /dev/sde
Physical volume "/dev/sde" successfully created.
Volume group "vg04" successfully created
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name vg04
System ID
Format lvm2
Metadata Areas 1
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 1
Act PV 1
VG Size 19.98 GiB
PE Size 16.00 MiB ####大小变成16M
Total PE 1279
Alloc PE / Size 0 / 0
Free PE / Size 1279 / 19.98 GiB
VG UUID tz8PBv-sENJ-GMzL-YSgh-pfa0-j87q-ybJCSa
三、LVM扩容
1、LV扩容
首先,确定是否有可用的扩容空间,因为空间是从VG里面创建的,并且LV不能跨VG扩容
扩容500M=========> -L +500M (在原有的基础上加500M)
扩容到500M========> -L 500M (把空间扩容到500M,原来有400M的话只增加100M)
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- 54.00g 4.00m
vg01 1 2 0 wz--n- <2.00g 520.00m
vg02 4 2 0 wz--n- 10.98g <3.08g
vg04 1 0 0 wz--n- 19.98g 19.98g
[root@localhost ~]# lvextend -L +500M /dev/vg02/lv02##给lv02加500M
Size of logical volume vg02/lv02 changed from 4.00 GiB (1024 extents) to <4.49 GiB (1149 extents).
Logical volume vg02/lv02 successfully resized.
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- 50.00g
swap centos -wi-ao---- 4.00g
lv01 vg01 -wi-a----- 1.00g
lv02 vg01 -wi-a----- 500.00m
lv02 vg02 -wi-ao---- <4.49g
[root@localhost ~]# df -hT /dev/mapper/vg02-lv02
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg02-lv02 ext4 3.9G 16M 3.6G 1% /mnt
注:这里lv扩容已经成功了,但是文件系统大小还是原来的,下面还要扩容文件系统
ext4文件系统扩容命令: resize2fs 逻辑卷名称
xfs文件系统扩容命令: xfs_growfs 挂载点
两者传递的参数不一样, xfs_growfs采用挂载点,resize2fs采用逻辑卷名称,两种命令不能互换使用。
[root@localhost ~]# resize2fs /dev/mapper/vg02-lv02
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/vg02-lv02 is mounted on /mnt; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mapper/vg02-lv02 is now 1176576 blocks long.
[root@localhost ~]# df -h /dev/mapper/vg02-lv02
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg02-lv02 4.3G 16M 4.1G 1% /mnt
方法3:使用lvextend命令中加参数 -r ,它支持多种不同的文件系统(包括ext4和xfs)
[root@localhost ~]# lvextend -L +500M -r /dev/vg02/lv02
Size of logical volume vg02/lv02 changed from <4.49 GiB (1149 extents) to <4.98 GiB (1274 extents).
Logical volume vg02/lv02 successfully resized.
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/vg02-lv02 is mounted on /mnt; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mapper/vg02-lv02 is now 1304576 blocks long.
[root@localhost ~]# df -h /dev/mapper/vg02-lv02
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg02-lv02 4.8G 16M 4.6G 1% /mnt
#直接把lv和文件系统一起扩容,一步到位
2、VG扩容
命令:vgextend vg卷组 要添加的物理卷
例:vg02卷组的空间不够用了,需要添加新的硬盘进来
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- 54.00g 4.00m
vg01 1 2 0 wz--n- <2.00g 520.00m
vg02 4 2 0 wz--n- 10.98g 2.10g
vg04 1 0 0 wz--n- 19.98g 19.98g
[root@localhost ~]# vgextend vg02 /dev/sdf
Physical volume "/dev/sdf" successfully created.
Volume group "vg02" successfully extended
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- 54.00g 4.00m
vg01 1 2 0 wz--n- <2.00g 520.00m
vg02 5 2 0 wz--n- 30.98g <22.10g
vg04 1 0 0 wz--n- 19.98g 19.98g
3、LV缩容
ext可以xfs无法缩减,缩减会影响业务。
1.解挂载
2.检查文件系统完整性
3.缩减文件系统
4.缩减逻辑卷上下一致
5.再挂载回去
四、磁盘配额
概述:
磁盘配额(Quota)就是 Linux 系统中用来限制特定的普通用户或用户组在指定的分区上占用的磁盘空间或文件个数的。
在此概念中,有以下几个重点需要注意:
- 磁盘配额限制的用户和用户组,只能是普通用户和用户组,也就是说超级用户 root 是不能做磁盘配额的
- 磁盘配额限制只能针对分区,而不能针对某个目录,换句话说,磁盘配额仅能针对文件系统进行限制,如果你的 /dev/sda5 是挂载在 /home 底下,那么,在 /home 下的所有目录都会受到磁盘配额的限制
- 我们可以限制用户占用的磁盘容量大小(block),当然也能限制用户允许占用的文件个数(inode)
磁盘配额要想正常使用,有以下几个前提条件:
- 内核必须支持磁盘配额
- 系统中必须安装了 Quota 工具。我们的 Linux 中默认安装了 Quoted 工具
- 要支持磁盘配额的分区必须开启磁盘配额功能。这项功能可以手动开启,不再是默认开启的
实际操作:
[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.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x18f8bfc9.
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):
Using default value 41943039
Partition 1 of type Linux and of size 20 GiB is set
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# mkfs.xfs /dev/sdb
mkfs.xfs: /dev/sdb appears to contain a partition table (dos).
mkfs.xfs: Use the -f option to force overwrite.
[root@localhost ~]# mkfs.xfs -f /dev/sdb
meta-data=/dev/sdb isize=512 agcount=4, agsize=1310720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=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 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 ~]# blkid /dev/sdb
/dev/sdb: UUID="6aa8dda1-824b-4f69-ada1-1bd5943daf7a" TYPE="xfs"
[root@localhost ~]# echo "UUID=6aa8dda1-824b-4f69-ada1-1bd5943daf7a /mnt xfs defaults,usrquota,grpquota 0 0" >> /etc/fstab
[root@localhost ~]# mount -a
[root@localhost ~]# mount | grep /dev/sdb
/dev/sdb on /mnt type xfs (rw,relatime,seclabel,attr2,inode64,usrquota,grpquota)
[root@localhost ~]# xfs_quota -x -c 'limit bsoft=100M bhard=200M isoft=20 ihard=50' zhangsan
xfs_quota: cannot setup path for mount zhangsan: No such file or directory
[root@localhost ~]# xfs_quota -x -c 'limit -u bsoft=100M bhard=200M isoft=20 ihard=50' /mnt/
xfs_quota: invalid user name: ihard=50
[root@localhost ~]# chmod 777 /mnt
[root@localhost ~]# ll -d /mnt/
drwxrwxrwx. 2 root root 6 Sep 28 06:59 /mnt/
[root@localhost ~]# xfs_quota -x -c 'report -abin'
User quota on /mnt (/dev/sdb)
Blocks Inodes
User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
---------- -------------------------------------------------- --------------------------------------------------
#0 0 0 0 00 [--------] 3 0 0 00 [--------]
Group quota on /mnt (/dev/sdb)
Blocks Inodes
Group ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
---------- -------------------------------------------------- --------------------------------------------------
#0 0 0 0 00 [--------] 3 0 0 00 [--------]
-x:表示启动专家模式,在当前模式下允许对配额系统进行修改的所有管理命令可用。
-c: 表示直接调用管理命令。
-u: 指定用户账号对象
-g: 指定组账号对象
bsoft: 设置磁盘容量的软限制数值(默认单位为KB)。
bhard:设置磁盘容量的硬限制数值(默认单位为KB)。
isoft:设置磁盘文件数的软限制数值。
ihard:设置磁盘文件数的硬限制数值。
标签:VG,default,vg02,dev,LVM,root,localhost From: https://blog.51cto.com/u_15768428/5720740