LVM常规操作记录梳理(扩容/缩容/快照等)
基本介绍
Linux用户安装Linux 操作系统时遇到的一个最常见的难以决定的问题就是如何正确地给评估各分区大小,以分配合适的硬盘空间。随着 Linux的逻辑盘卷管理功能的出现,这些问题都迎刃而解,
lvm是逻辑盘卷管理(Logical Volume Manager)的简称,它是 Linux环境下对磁盘分区进行管理的一种机制, LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。
LVM基本术语
1)物理存储介质:这里指系统的存储设备:硬盘,如: /dev/hda、/dev/sda等等,是存储系统最低层的存储单元。
2)物理卷physical volume (PV )
物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如 RAID),是 LVM的基本存储逻辑块
3)卷组Volume Group (VG )
LVM卷组由一个或多个物理卷组成,但是更确切的说,它包含由这些物理卷提供的许多PE。
4)逻辑卷logical volume (LV )
这里是我们存储信息的地方,在逻辑卷之上可以建立文件系统 (比如/home或者 /usr等)。
5)PE(physical extent )
每一个物理卷被划分为称为 PE的基本单元,具有唯一编号的 PE是可以被 LVM寻址的最小单元。 PE的大小是可配置的,默认为 4MB。
具体操作
1)创建分区
[root@test-server ~]# fdisk -l #查看磁盘情况
[root@test-server ~]# fdisk /dev/sda #进入磁盘(可以依次按键p->n->e->回车->回车->w,即用此磁盘所有空闲空间创建分区)
Command (m for help): n #n 为添加一个分区, p查看分区
First cylinder (2898-10443, default 2898): #按Enter 键决定
Using default value 2898 #起始柱面选择默认值
Last cylinder or +size or +sizeM or +sizeK (289810443, default 10443): +2G # 给2G的大小
Command (m for help): t #更改分区类型
Partition number (1-5): 5 # 选着分区
Hex code (type L to list codes): l #分区类型列表
Hex code (type L to list codes):8e #将新添加的分区标注成 lvm
Command (m for help): p #查看分区表
/dev/sda5 2756 2999 1959898+ 8e Linux LVM
Command (m for help): w #保存
[root@test-server ~]# partprobe /dev/sda #系统识别分区(代替重启)
[root@test-server ~]# mkfs.ext4 /dev/sda5 #格式化新添加的分区
2)PV创建 ("yum install lvm2" 安装lvm的操作命令,如pvcreate)
[root@test-server ~]# pvcreate /dev/sda5 #创建pv
Writing physical volume data to disk "/dev/sda5"
Physical volume "/dev/sda5" successfully created
[root@test-server ~]# pvs #或pvdisplay,查看当前pv的信息
PV VG Fmt Attr PSize PFree
/dev/sda5 lvm2 a-- 1.87G 1.87G
3)VG创建
[root@test-server ~]# vgcreate vg0 /dev/sda5 #vg0 为当前vg的名
Volume group "vg0" successfully created
[root@test-server ~]# vgs #或vgdispaly,查看vg详细信息,会显示PE数
VG #PV #LV #SN Attr VSize VFree
vg0 1 0 0 wz--n- 1.87G 1.87G
4)LV创建(使用vgdisplay查看"Free PE"中可用的空间来制作LVM。比如这里查看到Free PE空间为500M,则最大只能使用500M来制作lvm)
# lvcreate -L +大小 -n lv_name vg_name (指定逻辑卷的大小,单位为"kKmMgGtT"字节)
# lvcreate -l +PE数 -n lv_name vg_name (或"lvcreate -l +百分比FREE -n lv_name vg_name"命令,即使用卷组剩余所有空间的百分比)
[root@test-server ~]# lvcreate -L +500M -n lv01 vg0
Logical volume "lv01" created
[root@test-server ~]# lvs #或lvdispaly,查看lv 的信息
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
lv01 vg0 -wi-a- 500.00M
You have mail in /var/spool/mail/root
[root@test-server ~]# mkfs.ext4 /dev/vg0/lv01 #格式化
5)挂载使用LVM
[root@test-server ~]# mkdir /mnt/lv01 #建立挂载目录
[root@test-server ~]# mount /dev/vg0/lv01 /mnt/lv01 #将制作的lvm挂载起来
[root@test-server ~]# df -h
[root@test-server ~]# touch /mnt/lv01/lv.file
[root@test-server ~]#ls /mnt/lv01
LVM的增大
比如原来lv大小500M ,现在要拉伸分区到 800M。
前提是vg0里面还有剩余空间(vgdispaly查看Free PE)。
先使用vgdisplay查看vg0组是否还有多余的空间.
[root@test-server ~]# vgdisplay
.......
Alloc PE / Size 1277 / 500M
Free PE / Size / 300M
VG UUID hYScku-I097-bxMg-iUKq-WKnd-gEfQ-1wn5nU
...................
======================================================
如没有剩余,需要vgextend扩建。比如创建一个分区/dev/sdb1
# pvcreate /dev/sdb1
# vgextend vg0 /dev/sdb1 扩容到vg0组里
# vgdisplay 查看vg0多余的空间
======================================================
[root@test-server ~]# lvextend -L +300M /dev/vg0/lv01 #使用 "-L +300M" 或是 "-l +490" 都可以
Logical volume lv01 successfully resized # 或者直接使用" lvextend -l +100%FREE /dev/vg0/lv0 "命令,即使用卷组剩余所有空间。
[root@test-server ~]# resize2fs /dev/vg0/lv01 #拉伸文件系统
[root@test-server ~]# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
lv01 vg0 -wi-ao 800.00M #大小变成了 800M
LVM的减小
[root@test-server ~]# umount /dev/vg0/lv01 #卸载逻辑卷 /dev/vg0/lv01,或者卸载/mnt/lv01目录也可以
[root@test-server ~]# df -h #查看
[root@test-server ~]# e2fsck -f /dev/vg0/lv01 #磁盘校验
[root@test-server ~]# resize2fs /dev/vg0/lv01 500M #回缩文件系统到 500M
[root@test-server ~]# lvreduce -L 500M /dev/vg0/lv01 #回缩分区到 500M
WARNING: Reducing active logical volume to 500.00 MB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv01? [y/n]: y
[root@test-server ~]# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
lv01 vg0 -wi-a- 500.00M #此时已变成500M大小
[root@test-server ~]# mount /dev/vg0/lv01 /mnt/lv01 #重新挂载分区
[root@test-server ~]# df -h #查看
[root@test-server ~]# ls /mnt/lv01 #查看文件
===========================================================
特别注意的是:
resize2fs命令 针对的是ext2、ext3、ext4文件系统。
xfs_growfs命令 针对的是xfs文件系统
===========================================================
LVM的系统快照
原理:系统快照(snapshot)是 lvm的另外一种重要的功能,快照就是将当时的数据记录下来,就好像照相记录一样,以后数据有任何改动,原数据会被移动到快照区,没有被改变的区域则由快照区与文件系统共享。
由于快照区和原本的 LV共享很多 PE,所以快照区与被快照的区域必须在同一个 VG上
操作:
以上面创建的 lv01为例
1)挂载lvm
[root@test-server ~]# mount /dev/vg0/lv01 /mnt/lv01
[root@test-server ~]# cd /mnt/lv01
[root@test-server lv01]# touch {a,b,c}{a,b,c}
[root@test-server lv01]# ls
aa ab ac ba bb bc ca cb cc lost+found lv.file restoresymtable
2)为lvm创建快照
[root@test-server lv01]# lvcreate -L 64M -s -n lv-backup /dev/vg0/lv01
Logical volume "lv-backup" created
3)挂载快照
[root@test-server lv01]# mkdir /mnt/lv-backup
[root@test-server mnt]# mount -o ro /dev/vg0/lv-backup /mnt/lv-backup/
4)备份快照
[root@test-server tmp]# dump -0u -f /tmp/lv-backup.dump /mnt/lv-backup/ #备份
DUMP: Date of this level 0 dump: Sun Nov 11 14:53:31 2012
DUMP: Dumping /dev/mapper/vg0-lv--backup (/mnt/lv-backup) to /tmp/lv-backup.dump
5)删除快照
[root@test-server tmp]# umount /mnt/lv-backup/
[root@test-server tmp]# lvremove /dev/vg0/lv-backup
Do you really want to remove active logical volume lv-backup? [y/n]: y
Logical volume "lv-backup" successfully removed
6)清空/dev/vg0/lv01下内容
[root@test-server tmp]# umount /mnt/lv01
[root@test-server tmp]# mkfs.ext3 /dev/vg0/lv01
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
7)恢复数据
[root@test-server tmp]# mount /dev/vg0/lv01 /mnt/lv01
[root@test-server tmp]# cd /mnt/lv01
[root@test-server lv01]# ls
lost+found
[root@test-server lv01]# restore -rf /tmp/lv-backup.dump #恢复
restore: ./lost+found: File exists
[root@test-server lv01]# ls #由于之前都删除了,所以这些都是改变的部分
aa ab ac ba bb bc ca cb cc lost+found lv.file restoresymtable
LVM的关闭 (删除)
[root@test-server ~]# umount /mnt/lv01
[root@test-server ~]# lvremove /dev/vg0/lv01 #删除lv
Do you really want to remove active logical volume lv01? [y/n]: y
Logical volume "lv01" successfully removed
[root@test-server ~]# vgchange -a n vg0 #使vg0不具有 active标志
0 logical volume(s) in volume group "vg0" now active
[root@test-server ~]# vgremove vg0 #删除vg
Volume group "vg0" successfully removed
[root@test-server ~]# pvremove /dev/sda5 #删除pv
Labels on physical volume "/dev/sda5" successfully wiped
#################### 贴一个虚拟机磁盘扩容实施记录 #######################
Linux服务器硬盘在线热扩容基本都是通过LVM方式实现的,所以服务器系统安装时,磁盘挂载最好选择LVM方式。我们目前采用的是XenServer虚拟化,随着业务数据的不断增加,发现部分虚拟机的/data分区空间不够用了,更闹心的是/data分区是独立分区,并不是LVM分区(这是由于XenServer虚拟化系统安装时没有选择LVM那一项,故虚机创建中选择磁盘属性时LVM选项无效)。
[root@uatdata-node01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda2 99G 6.9G 87G 8% /
tmpfs 7.8G 12K 7.8G 1% /dev/shm
/dev/xvda1 380M 66M 294M 19% /boot
/dev/xvda5 298G 258G 40G 88% /data 由上面可知,数据分区/data空间已经不多了,该服务器是hadoop数据节点,每天会产生大量的数据文件到/data下,故需要紧急扩容/data分区。
操作思路:
1)为这台虚拟机新添加一个磁盘,做成LVM逻辑卷/dev/vg0/lv0,挂载到/data_new 目录下。
2)将/data目录下的数据全部拷贝到/data_new目录下,通过rsync拷贝(-avpgolr保持文件属性不变)
3)umount卸载/data和/data_new。
4)重新挂载/dev/vg0/lv0到/data下(这样做是为了保证磁盘扩容后,原来的业务程序的数据目录结构不变),并删除/data_new目录。
5)将挂载到之前/data目录下的/dev/xvda5格式化,并在线热扩容到新的/dev/vg0/lv0逻辑卷内。 操作记录:
为虚拟机添加一块新的500G的磁盘
[root@uatdata-node01 ~]# fdisk -l
........
Disk /dev/xvdb: 536.9 GB, 536870912000 bytes
255 heads, 63 sectors/track, 65270 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: 0x54c845dd 做成lvm逻辑卷
[root@uatdata-node01 ~]# fdisk /dev/xvdb
........
分别输入:
p #查看分区情况
n #创建分区
p #创建逻辑分区
1 #选择分区序列号,即盘符为/dev/xvdb1
回车 #默认从扇区起点开始
回车 #默认磁盘所有空间
w #保存 [root@uatdata-node01 ~]# partprobe /dev/xvdb1 #或直接执行"partprobe",这一步为更新分区表,也可以不执行,或执行有报错可以忽略
[root@uatdata-node01 ~]# yum install -y lvm2 #安装lvm的工具 安装pv
[root@uatdata-node01 ~]# pvcreate /dev/xvdb1
[root@uatdata-node01 ~]# pvs 安装vg
[root@uatdata-node01 ~]# vgcreate vg0 /dev/xvdb1
[root@uatdata-node01 ~]# vgs 安装lv
[root@uatdata-node01 ~]# vgdisplay
.............
Free PE / Size 499876 / 499.99 GiB #先使用vgdisplay查看可以用以创建lvm的空间有多少,这里表示剩余空间为499.99G可用 [root@uatdata-node01 ~]# lvcreate -L +499.99G -n lv0 vg0
[root@uatdata-node01 ~]# lvs 格式化并挂载
[root@uatdata-node01 ~]# mkfs.ext4 /dev/vg0/lv0
[root@uatdata-node01 ~]# mkdir /data_new
[root@uatdata-node01 ~]# mount /dev/vg0/lv0 /data_new 拷贝数据
[root@uatdata-node01 ~]# rsync -avpgolr /data/ /data_new 卸载并重新挂载新增磁盘到/data目录下
[root@uatdata-node01 ~]# umount /data
[root@uatdata-node01 ~]# umount /data_new
[root@uatdata-node01 ~]# mount /dev/vg0/lv0 /data
[root@uatdata-node01 ~]# rm -rf /data_new 把之前挂载到/data目录下的/dev/xvda5分区格式化,并热扩容到新的/dev/vg0/lv0分区
[root@uatdata-node01 ~]# mkfs.ext4 /dev/xvda5
[root@uatdata-node01 ~]# pvcreate /dev/xvda5
[root@uatdata-node01 ~]# vgextent vg0 /dev/xvda5
[root@uatdata-node01 ~]# vgdisplay
..........
Free PE / Size 197898 / 198.5 GiB [root@uatdata-node01 ~]# lvextend -L +198.5G /dev/vg0/lv0
[root@uatdata-node01 ~]# resize2fs /dev/vg0/lv0 #拉伸文件系统
[root@uatdata-node01 ~]# lvs 最后查看下扩容后的/data盘的大小
[root@uatdata-node01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda2 99G 6.9G 87G 8% /
tmpfs 7.8G 12K 7.8G 1% /dev/shm
/dev/xvda1 380M 66M 294M 19% /boot
/dev/mapper/vg0-lv0 681G 138G 509G 22% /data
LVM常规操作记录梳理(扩容/缩容/快照等)的更多相关文章
- LVM划分磁盘及扩容缩容
lvm:logical volume monitor 逻辑卷管理器 作用: 采用lvm划分磁盘:磁盘空间不够时,方便扩展磁盘.物理卷加到卷组时被划分等大的pe,即pv是由众多pe构成.pe是卷组的最小 ...
- nginx缓存配置的操作记录梳理
web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,Web缓存服务器直接输 ...
- Centos6.8下编译安装LAMP的操作记录梳理
之前用的最多的web框架是LNMP,偶尔也会用到LAMP.接下来简单说下LAMP环境的部署记录,这里选择源码安装的方式: LAMP相关安装包下载地址:https://pan.baidu.com/s/1 ...
- map的自动扩容与手动缩容
map的自动扩容与手动缩容 首先还是提出问题:扩容和缩容有什么用?为什么需要扩容和缩容? 在想解答这个问题之前,首先还是需要了解一下go语言中的map go语言中的map与Java中的map实现还是有 ...
- docker微服务部署之:七、Rancher进行微服务扩容和缩容
docker微服务部署之:六.Rancher管理部署微服务 Rancher有两个特色用起来很方便,那就是扩容和缩容. 一.扩容前的准备工作 为了能直观的查看效果,需要修改下demo_article项目 ...
- k8s Pod 扩容和缩容
在生产环境下,在面临服务需要扩容的场景时,可以使用Deployment/RC的Scale机制来实现.Kubernetes支持对Pod的手动扩容和自动扩容. 手动扩容缩容 通过执行扩容命令,对某个dep ...
- Mycat节点扩缩容及高可用集群方案
数据迁移与扩容实践: 工具目前从 mycat1.6,准备工作:1.mycat 所在环境安装 mysql 客户端程序. 2.mycat 的 lib 目录下添加 mysql 的 jdbc 驱动包. 3.对 ...
- Netty 如何高效接收网络数据?一文聊透 ByteBuffer 动态自适应扩缩容机制
本系列Netty源码解析文章基于 4.1.56.Final版本,公众号:bin的技术小屋 前文回顾 在前边的系列文章中,我们从内核如何收发网络数据开始以一个C10K的问题作为主线详细从内核角度阐述了网 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十一)——一步一步教你如何撸Dapr之自动扩/缩容
上一篇我们讲到了dapr提供的bindings,通过绑定可以让我们的程序轻装上阵,在极端情况下几乎不需要集成任何sdk,仅需要通过httpclient+text.json即可完成对外部组件的调用,这样 ...
随机推荐
- 服务器较稳妥的磁盘阵列方案:RAID5+热备盘
最近公司这边要整个数据中心,但是我们这边磁盘阵列的方案选择方面需要做好万全的测试 内部测试的服务器当初损坏的磁盘1个做的raid5直接换个新磁盘做替换rebuild就行了 但是现在想的方法是5+1的方 ...
- Django知识补充
目录 一.文件上传 二.Models补充 三.Django总结 一.文件上传 1.通过form表单或者通过From类上传 views.py from django.shortcuts import r ...
- Kali Linux 初始化配置:Apache2 /SSH /FTP
Kali Linux是基于Debian的Linux发行版, 设计用于数字取证操作系统.Kali Linux预装了许多渗透测试软件,包括nmap .Wireshark .John the Ripper, ...
- orcale 把日期当做查询条件
根据日期查询范围 精确到天 select * from table where to_char( time,'yyyy mm dd ' ) <= '2000 01 01' select * ...
- bootstrap-datepicker default value
$('.selectDate').datepicker({ format : "yyyy/mm/dd", autoclose : true, startDate : new Dat ...
- Properties集合概述与存和取
Properties集合:(Map集合下的Hashtable集合下的一个子类) 特点: 1.集合中的键和值都是字符串 2.集合中的数据可以保存到流中,或者从流中获取 该集合通常用于操作以键值对形式存在 ...
- NOIP2018 AFO记
仿佛"距NOIP2018还剩30天"的倒计时还在昨天,没想到这一天来的这么快. 考前在机房嘻嘻哈哈打打闹闹,开玩笑说道"我要AFO了",心里暗暗发誓做好自己,不 ...
- WPFの操作文件浏览框几种方式
方式1: 使用win32控件OpenFileDialog Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog ...
- windows下安装ElasticSearch的Head插件
es5以上版本安装head需要安装node和grunt(之前的直接用plugin命令即可安装) (一)从地址:https://nodejs.org/en/download/ 下载相应系统的msi,双击 ...
- 1.4 Genymotion模拟器安装
如果你符合下述三种情况的话,你可以考虑安装一个Genymotion Android模拟器: 没有真机调试,只能用模拟器 嫌SDK内置的AVD启动速度,运行速度慢 电脑配置还可以,最好4G内存以上 如果 ...