lvm分析之快照
来源:互联网 发布:混响软件 编辑:程序博客网 时间:2024/05/17 07:23
1.
1.
1.1. 用户态实现
对lv1创建一个快照卷时,有前面章节可知会创建多个dm设备,如下图所示:
以上几个设备的创建过程如下:
1. 创建snap_lv1,其类型为linear,分配其存储空间,与磁盘映射关系如上图所示;
2. 创建lv1-real,其类型为linear,其映射的磁盘空间和lv1原有的映射一致;
3. 更改lv1的类型为origin,此时lv1被标记为只读,并且把io操作都重定向到lv1-real设备;
4. 创建snap_lv1-cow,其类型为linear,将其映射到snap_lv1分配的磁盘空间上,也即是和snap_lv1的映射一致;
5. 更改snap_lv1的类型为snapshot,此时将会创建一个lv1原有磁盘空间的写时复制的表格,并且将lv1-real和snap_lv1-cow绑定,因为以后更改lv1的内容将会保存到snap_lv1-cow中,而未修改的内容仍然在lv1-real中,这两者一起构成了snap_lv1,即是snap_lv1的映射范围为两者的和。
当然在做以上工作之前需要先冻结lv1,完成以上动作之后,元数据将被更新,同时lv1将被激活,io将正常进行。
1.2. 内核态实现
在内核态主要涉及dm下的linear、snapshot-origin、shnapshot几个target的驱动。
其中最重要的几个函数就是ctr和map的实现,下面简单介绍以上三个target的ctr和map实现。
linear_ctr:将设备添加到dm_table的设备列表中,并记录在该设备上的起始位置。
linear_map:更改bio的设备,并将bio的偏移量加上该线性卷在物理设备上的起始偏移量,然后重新提交bio,由真正的设备驱动来处理。
origin_ctr:这个很简单,将real设备保存起来,方便后续的io重定向。
origin_map:重新映射io,如果是读io,直接重定向到real设备,如果是写io,则需查找保存shanshot的设备,并获取标记写时复制的表格,在其中查询是否本次io位于范围之内,如果该io地址范围内已经发生过一次写时复制,则直接重定向到real设备,如果还没有,则将本次io缓存起来,同时开启kcopy内核线程,从real设备上拷贝本次io地址范围内的数据到snap cow设备上,完成之后再将缓存的io重定向到real设备。
snapshot_ctr:在snap cow设备的前8k上建立写时复制的映射表,并建立real设备和snap cow设备的映射关系。
snapshot_map:如果为读io,且io对应地址没有发生写时复制,则从重定向到real设备,否则重定向到snap cow设备;如果为写io,则直接写入到snap cow设备,禁止写时复制。
- lvm分析之快照
- lvm分析之简介
- lvm分析之命令
- lvm 快照相关测试
- Linux LVM快照功能
- 使用LVM快照备份MYSQL
- LVM快照(snapshot)备份
- 使用LVM快照备份MySQL
- lvm快照方式进行备份
- MySQL 使用lvm 快照备份
- LVM快照备份与恢复
- 基于LVM快照mysql备份
- LVM快照备份恢复mysql
- [实验]通过lvm快照进行热备
- mysql数据库基于LVM快照的备份
- lvm逻辑卷和设备的快照
- lvm卷管理和快照卷
- 百度快照特色分析
- wireshark过滤语法总结
- 基于STM32的USB枚举过程学习笔记
- jQuery 集合 搜索操作(父辈元素搜索、同辈元素搜索、子元素搜索)
- 判断 ListView是否需要滑动显示,以及最低端 或者 最顶端
- c# 对象克隆
- lvm分析之快照
- Java开发牛人十大必备网站
- 不安装oracle服务端,使用PL/SQL连接数据库
- android PendingIntent.getBroadcast 之坑
- mongodb php增删改查基本操作
- android跨进程事件注入(程序模拟用户输入)
- 释放 HTML5 <audio> 的力量
- 分治算法复杂度计算----算法导论 主定理应用讲解
- .NetMVC与EXT4使用json进行前后台交互