OS国产化改造中LVM卷迁移指导

2024-04-24 04:04

本文主要是介绍OS国产化改造中LVM卷迁移指导,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、前言

因OS改造涉及LVM卷,且vg卷包含磁盘数量较多,lv中数据较大(100T左右),因此要在OS改造中确保LVM卷信息完整不丢失,保证其上数据安全尤为重要。本文旨在探讨lvm信息存储及迁移,以指导完成OS改造及数据迁移提供参考。
在这里插入图片描述

相关资源:LVM管理、LVM配置说明

二、LVM信息存储

在这里插入图片描述

在每个LVM物理卷(PV)上都包含三个部分:LVM标签、元数据区域、数据区域。

1、LVM元数据信息存储在块设备上的前四个扇区(读入内存):LVM的卷组配置信息即元数据存储在VG中的每个PV的元数据区域,每个PV都维护一份相同的VG元数据副本,副本内容以ASCII.格式存储,核心元数据存储在ASCII中;新版已采用LVM2,兼容lvm1;PV创建时,它的label 默认会存在块设备磁盘上第2个512字节的扇区上;当然也可选择性地放置在前四个扇区中的任何一个上,因为扫描物理卷标签的LVM工具会检查前四个扇区,PV标签以字符串LABELONE开头。具体PV labei包含:PV的 UUID、块设备的字节大小、以NULL结尾的数据区域位置列表、以NULL结尾的元数据区域位置列表。
2、含多个PV的VG维护多份副本时低效的,我们在pvcreate命令中可以使用–metadatacopies 0指定创建pv时,不存储任何副本,选择0个副本可以更快应用配置更新;注意:设定后创建的PV是无法再更改副本数的;然而为了VG安全,在任何时候,每个卷组都应必须至少包含一个具有元数据区域的物理卷(除非配置了允许在文件系统中存储VG元数据的高级配置设置),建议PV创建时最少1个副本;元数据区域就是一个循环缓冲区,可以用–metadatasize指定元数据区域的大小,新的元数据被附加到旧的元数据上,然后指向其开始的指针被更新。
3、元数据位置存储包含2部分:偏移量和大小(以字节为单位)。标签中有大约15个位置的空间,但LVM工具目前使用3个位置:一个数据区域加上最多两个元数据区域。
4、VG的元数据:有关创建方式和时间的信息+VG的配置说明信息(VG的UUID和名称,元数据版本号(每当元数据更新时都会增加),读/写或可调整大小的配置类信息,pv和lv的数量和配置的信息,数据块大小(以传统512字节的扇区为单位,最新的为4K扇区,这里1extent=几个扇区),PV的无序列表比如UUID用于确认组成VG的块设备成员即pv的相关属性比如是否还可分配、到PV内第一个数据块起点的偏移量(以扇区为单位),lv的无序列表:吕段的有序列表,pv和lv的映射关系)
5、官方VG:myvg元数据内容示例:

# Generated by LVM2: Tue Jan 30 16:28:15 2007contents = "Text Format Volume Group"
version = 1description = "Created *before* executing 'lvextend -L+5G /dev/myvg/mylv /dev/sdc'"creation_host = "tng3-1"        # Linux tng3-1 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686
creation_time = 1170196095      # Tue Jan 30 16:28:15 2007myvg {id = "0zd3UT-wbYT-lDHq-lMPs-EjoE-0o18-wL28X4"seqno = 3status = ["RESIZEABLE", "READ", "WRITE"]extent_size = 8192              # 4 Megabytesmax_lv = 0max_pv = 0physical_volumes {pv0 {id = "ZBW5qW-dXF2-0bGw-ZCad-2RlV-phwu-1c1RFt"device = "/dev/sda"     # Hint onlystatus = ["ALLOCATABLE"]dev_size = 35964301     # 17.1491 Gigabytespe_start = 384pe_count = 4390 # 17.1484 Gigabytes}pv1 {id = "ZHEZJW-MR64-D3QM-Rv7V-Hxsa-zU24-wztY19"device = "/dev/sdb"     # Hint onlystatus = ["ALLOCATABLE"]dev_size = 35964301     # 17.1491 Gigabytespe_start = 384pe_count = 4390 # 17.1484 Gigabytes}pv2 {id = "wCoG4p-55Ui-9tbp-VTEA-jO6s-RAVx-UREW0G"device = "/dev/sdc"     # Hint onlystatus = ["ALLOCATABLE"]dev_size = 35964301     # 17.1491 Gigabytespe_start = 384pe_count = 4390 # 17.1484 Gigabytes}pv3 {id = "hGlUwi-zsBg-39FF-do88-pHxY-8XA2-9WKIiA"device = "/dev/sdd"     # Hint onlystatus = ["ALLOCATABLE"]dev_size = 35964301     # 17.1491 Gigabytespe_start = 384pe_count = 4390 # 17.1484 Gigabytes}}logical_volumes {mylv {id = "GhUYSF-qVM3-rzQo-a6D2-o0aV-LQet-Ur9OF9"status = ["READ", "WRITE", "VISIBLE"]segment_count = 2segment1 {start_extent = 0extent_count = 1280     # 5 Gigabytestype = "striped"stripe_count = 1        # linearstripes = ["pv0", 0]}segment2 {start_extent = 1280extent_count = 1280     # 5 Gigabytestype = "striped"stripe_count = 1        # linearstripes = ["pv1", 0]}}}
}

6、如果系统盘未采用lvm,数据盘lvm在OS改造中只需要做好/etc/lvm的备份(lvm元数据在文件系统上的副本),就可直接卸载挂载点后,对OS重装,系统重启可自动扫描PV元数据区域来获取当前lvm的信息,之后重新挂载即可。如果涉及跨主机迁移,请参考步骤3.

三、LVM迁移过程

针对跨主机迁移的LVM,这里借用LVM2工具集中的两个命令vgexport和vgimport:

1、关停使用LVM的服务;
2、备份存在文件系统中的VG元数据配置:/etc/lvm目录;或执行:vgcfgbackup -f <卷组名>-backup <卷组名>,对应恢复命令为:vgcfgrestore -f <卷组名>-backup;
3、卸载LV的挂载点
4、注销卷组在OS的信息:vgexport vg_name,该命令将VG转为 exported 状态(离线/不可用状态声明);从而确保VG和组成它的PV不可再用直到vgimport重新注册;这对于将VG 磁盘组安全迁移到另一个系统里是非常有用的。vgexport为VG提供了一层保护,防止LV被意外使用或还没准备好之前被自动化应用或系统使用,导致占用或数据写报错或丢失;vgexport时会等待VG中所有LV都处于inactive时才能成功,该命令会清楚VG的原有/当前系统ID,待迁移后,再新的主机系统里使用vgimport再重新注册满足新系统的新vg-ID;
5、重启和关闭源系统,或执行sync落盘;
6、迁移lvm的元数据到新的OS里释放,或将含有该数据得磁盘整体迁移到新的主机上;
7、vgimport重新注册vg,让新的主机获取到lvm信息;
8、激活vg:执行vgchang -ay vg_name,激活后lvs检查状态为available,其中vgchang -an是取消激活。
9、重新创建挂载点,挂载使用,并进入挂载目录,验证数据,待确认正常后,写入fstab文件即可。

四、附录

1)相关概念回顾

  • 物理区域-----PE(Physical Extent):物理区域是物理卷中可用于分配的最小存储单元,创建卷组的过程实际就是将物理卷所对应的设备空间分割成一个个具有唯一编号物理区域,物理区域的大小可根据实际情况在建立物理卷时指定。物理区域大小一旦确定将不能更改,同一卷组中的所有物理卷的物理区域大小需要一致。
  • 逻辑区域-----LE(Logical Extent):逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小,在同一个卷组中,LE和PE可以是一一对应的,也可以是一个LE对应多个PE,对应多个PE的时候又分为几种情况,一种是多个PE组成一个大的LE像RAID0一样,另一种是一个LE对应几份PE这几份PE互为镜像类似于RAID1,就是因为这个原因我们的LVM才可以创建支持RAID功能的LV。
  • 卷组描述区域-----(Volume Group Descriptor Area):卷组描述区域存在于每个物理卷中,用于描述物理卷本身、物理卷所属卷组、卷组中的逻辑卷及逻辑卷中物理区域的分配等所有信息,卷组描述区域是在使用pvcreate建立物理卷时建立的。
  • extend(区块):卷组中的每个卷都被分割成固定大小的小块,称为extents。extents的大小由卷组决定(组中的所有卷的extents大小相同)。物理卷上的extents称为physical extents,而逻辑卷的extents称为logical extents。逻辑卷仅仅是LVM在logical extents和physical extents之间维护的映射。鉴于这种映射关系,extents大小代表LVM可以分配的最小空间。LVM向上呈现的物理设备其logical extents是连续的,但真实情况对应的physical extents却可以是分散的。LVM可以复制和重新组织构成逻辑卷的physical extents,而不会对用户造成任何中断。通过在逻辑卷上添加或删除extents,也可以轻松扩展或收缩逻辑卷。
    在这里插入图片描述

2)LVM写入方式:

1、线性模式(linear)—将多个分区的空间接起来使用,如一个lv跨度了/dev/sda1和/dev/sda2两个分区,当存储数据的时候先写入到/dev/sda1,当其写满的时再使用/dev/sda2,这种方式下如果某个分区坏掉,则数据并不会完全损坏。

2、交错模式(triped)—将数据交错存储,如一个lv跨度了/dev/sda1和/dev/sda2,保存一个包含四个数据块大小的文件,第一个数据块保存在/dev/sda1,第二个数据块保存在/dev/sda2,第三个保存在/dev/sda1,依次类推。这种方式下若lv跨度了两个磁盘/dev/sda1和/dev/sdb1,此时性能会有提升,但要是追求这种性能最好使用硬件raid来实现。而且这种模式下若某个分区坏掉,数据会损坏。所以lvm默认存储模式是线性模式(linear)

注意事项:LVM最主要的用途是在实现一个可以弹性调整容量的文件系统上,而不是在新建一个以性能为主的磁盘上,所以我们应该利用的是LVM可以弹性管理整个分区大小的用途上,而不是着眼在性能上。因此,LVM默认的读写模式是线性模式。如果你使用triped模式,要注意,当任何一个分区出现故障,所有的数据都会损坏。所以不是很适合使用这种模式。

3)创建raid卷组

lvcreate --type raid1 -m 1 -L 1G -n raid1lv1 raidvg /dev/sdc1 /dev/sdb1 #--type用来指定RAID的级别;-m 用来指定镜像的数量,1表示源数据有一个镜像数据;raidvg卷组后面的两个物理卷用来指明,在这两个物理卷上创建源数据和镜像数据
#条带
lvcreate --type raid0  -L 1G -n raid0lv1 raidvg /dev/sdc1 /dev/sdb1  ##使用默认的条带的大小我们可以用--stripesize参数来制定条带的大小,默认stripesize 64.00 KiB.

这篇关于OS国产化改造中LVM卷迁移指导的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/930709

相关文章

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

SQL Server数据库迁移到MySQL的完整指南

《SQLServer数据库迁移到MySQL的完整指南》在企业应用开发中,数据库迁移是一个常见的需求,随着业务的发展,企业可能会从SQLServer转向MySQL,原因可能是成本、性能、跨平台兼容性等... 目录一、迁移前的准备工作1.1 确定迁移范围1.2 评估兼容性1.3 备份数据二、迁移工具的选择2.1

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

python中os.stat().st_size、os.path.getsize()获取文件大小

《python中os.stat().st_size、os.path.getsize()获取文件大小》本文介绍了使用os.stat()和os.path.getsize()函数获取文件大小,文中通过示例代... 目录一、os.stat().st_size二、os.path.getsize()三、函数封装一、os

理解分类器(linear)为什么可以做语义方向的指导?(解纠缠)

Attribute Manipulation(属性编辑)、disentanglement(解纠缠)常用的两种做法:线性探针和PCA_disentanglement和alignment-CSDN博客 在解纠缠的过程中,有一种非常简单的方法来引导G向某个方向进行生成,然后我们通过向不同的方向进行行走,那么就会得到这个属性上的图像。那么你利用多个方向进行生成,便得到了各种方向的图像,每个方向对应了很多

CentOs7上Mysql快速迁移脚本

因公司业务需要,对原来在/usr/local/mysql/data目录下的数据迁移到/data/local/mysql/mysqlData。 原因是系统盘太小,只有20G,几下就快满了。 参考过几篇文章,基于大神们的思路,我封装成了.sh脚本。 步骤如下: 1) 先修改好/etc/my.cnf,        ##[mysqld]       ##datadir=/data/loc

CentOS下mysql数据库data目录迁移

https://my.oschina.net/u/873762/blog/180388        公司新上线一个资讯网站,独立主机,raid5,lamp架构。由于资讯网是面向小行业,初步估计一两年内访问量压力不大,故,在做服务器系统搭建的时候,只是简单分出一个独立的data区作为数据库和网站程序的专区,其他按照linux的默认分区。apache,mysql,php均使用yum安装(也尝试

Linux Centos 迁移Mysql 数据位置

转自:http://www.tuicool.com/articles/zmqIn2 由于业务量增加导致安装在系统盘(20G)磁盘空间被占满了, 现在进行数据库的迁移. Mysql 是通过 yum 安装的. Centos6.5Mysql5.1 yum 安装的 mysql 服务 查看 mysql 的安装路径 执行查询 SQL show variables like

CSDN:OpenStack镜像制作教程指导(全)

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录,涉及基本环境准备、常见类型操作系统的镜像制作。 让你可以从零开始安装一个操作系统,并支持个性化制作OpenStack镜像。 CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows