cpy

LVM(逻辑卷管理)

倖福魔咒の 提交于 2021-01-09 05:17:57
一、LVM概念 LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。 LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上层服务的是以逻辑卷的方式。 LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果我们新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。 二、LVM术语 PV (Physical Volume)- 物理卷 物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘。 VG (Volumne Group)-卷组 卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中

基于STM32F429的内存管理

偶尔善良 提交于 2020-11-18 20:09:05
1.内存管理介绍    内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如 何高效,快速的分配,并且在适当的时候释放和回收内存资源。 内存管理的实现方法有很多种, 他们其实最终都是要实现 2 个函数: malloc 和 free ; malloc 函数用于内存申请, free 函数用于 内存释放。  从上图可以看出,分块式内存管理由内存池和内存管理表两部分组成。内存池被等分为 n 块,对应的内存管理表,大小也为 n ,内存管理表的每一个项对应内存池的一块内存。 内存管理表的项值代表的意义为:当该项值为 0 的时候,代表对应的内存块未被占用,当 该项值非零的时候,代表该项对应的内存块已经被占用,其数值则代表被连续占用的内存块数。 比如某项值为 10 ,那么说明包括本项对应的内存块在内,总共分配了 10 个内存块给外部的某 个指针。 内寸分配方向如图所示,是从顶  底的分配方向。即首先从最末端开始找空内存。当内存 管理刚初始化的时候,内存表全部清零,表示没有任何内存块被占用。 分配原理     当指针 p 调用 malloc 申请内存的时候,先判断 p 要分配的内存块数( m ),然后从第 n 项开 始 ,向下查找,直到找到 m 块连续的空内存块(即对应内存管理表项为 0 ),然后将这 m 个内 存管理表项的值都设置为 m (标记被占用),最后

逻辑卷管理(LVM)

余生颓废 提交于 2020-08-06 09:03:15
参考资料列表 本文部分资料参考自以下列表 https://www.ibm.com/developerworks/cn/linux/l-lvm2/ 比较详细地描述了Linux 逻辑卷的管理 https://linux.die.net/man/8/lvm Linux LVM2工具手册 本文将从以下几个方面介绍LVM 什么是逻辑卷 逻辑卷的结构 逻辑卷的管理 迁移逻辑卷到新的系统 删除逻辑卷 逻辑卷快照 什么是逻辑卷 逻辑卷管理(LVM)指系统将物理卷管理抽象到更高的层次,常常会形成更简单的管理模式。与物理磁盘和分区不同,逻辑卷展现给我们的是逻辑上的存储结构。LVM 可以将分区和磁盘聚合成一个 虚拟磁盘(virtual disk ),从而用小的存储空间组成一个统一的大空间。这个虚拟磁盘在 LVM 术语中称为 卷组(volume group) 。 将众多比较小的物理磁盘设备组织起来创建一个比单个磁盘本身还要大的文件系统,并不是LVM的唯一用途,它还可以 在磁盘列表中添加磁盘和分区,对现有的文件系统进行扩展。 用一个 160GB 磁盘替换两个 80GB 磁盘,而不需要让系统离线,也不需要在磁盘之间手工转移 。 当存储空间远大于我们所需要的空间的时候,我们可以将物理硬盘从磁盘列表中去掉,从而减少存储空间。 使用 快照(snapshot )执行一致的备份(本文后面会进一步讨论)

CentOS6虚拟机扩展磁盘空间—lvm

末鹿安然 提交于 2020-07-27 05:18:13
CentOS6虚拟机扩展磁盘空间—lvm 本实验基于CentOS 6.9,虚拟机有两块磁盘,/dev/sda作为系统盘,/dev/sdb原来是一块20G的磁盘,现在修改虚拟机的配置,扩展到40G。操作的是/dev/sdb 一、 我们在pv和vg都是20G的时候,在vg_1上创建两个lv lvcreate -L 5G -n lv_b1 vg_1 #创建一个5G的lv,名字叫lv_b1 [root@CentOS69 ~]# lvcreate -L 14.79G -n lv_b2 vg_1 #创建一个14.97G的lv_b2 Rounding up size to full physical extent 14.79 GiB Logical volume "lv_b2" created. [root@CentOS69 ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv_b1 vg_1 -wi-a----- 5.00g lv_b2 vg_1 -wi-a----- 14.79g 然后,创建两个目录,把这两个lv挂载 [root@CentOS69 ~]# mkdir /mount1 [root@CentOS69 ~]# mkdir /mount2 [root@CentOS69 ~]#

用 C 语言开发一门编程语言 — 跨平台

邮差的信 提交于 2020-04-07 13:36:51
目录 文章目录 目录 前文列表 实现跨平台的可移植性 前文列表 《 用 C 语言开发一门编程语言 — 交互式 Shell 》 实现跨平台的可移植性 使用预处理器来解决程序跨平台的可移植性(Portability)问题。 预处理器(CPP)也是一个程序,它在真正编译程序之前运行,所以称之为预处理或预编译器。预处理器的应用场景之一就是检测当前的代码在哪个操作系统中运行,从而来产生与平台相关的代码。而这也正是我们做可移植性工作时所需要的。 这里使用预处理器指令来判断,如果程序运行在 Windows 上,则伪造一个 readline 和 add_history 函数;而在其他操作系统上运行则直接使用 readline 函数库提供的函数。 # include <stdio.h> # include <stdlib.h> /* * 如果程序运行在 Windows 上,则伪造一个 readline 和 add_history 函数。 */ # ifdef _WIN32 # include <string.h> static char buffer [ 2048 ] ; char * readline ( char * prompt ) { fputs ( prompt , stdout ) ; fgets ( buffer , 2048 , stdin ) ; char * cpy =

用 C 语言开发一门编程语言 — 跨平台

守給你的承諾、 提交于 2020-04-07 10:15:31
目录 文章目录 目录 前文列表 实现跨平台的可移植性 前文列表 《 用 C 语言开发一门编程语言 — 交互式 Shell 》 实现跨平台的可移植性 使用预处理器来解决程序跨平台的可移植性(Portability)问题。 预处理器(CPP)也是一个程序,它在真正编译程序之前运行,所以称之为预处理或预编译器。预处理器的应用场景之一就是检测当前的代码在哪个操作系统中运行,从而来产生与平台相关的代码。而这也正是我们做可移植性工作时所需要的。 这里使用预处理器指令来判断,如果程序运行在 Windows 上,则伪造一个 readline 和 add_history 函数;而在其他操作系统上运行则直接使用 readline 函数库提供的函数。 # include <stdio.h> # include <stdlib.h> /* * 如果程序运行在 Windows 上,则伪造一个 readline 和 add_history 函数。 */ # ifdef _WIN32 # include <string.h> static char buffer [ 2048 ] ; char * readline ( char * prompt ) { fputs ( prompt , stdout ) ; fgets ( buffer , 2048 , stdin ) ; char * cpy =

GIT 子模块温习

雨燕双飞 提交于 2020-02-01 06:16:23
GIT 支持子模块,所谓 GIT 子模块,即某个项目需要管理的模块数目太多,而各个模块需要不同的人或团队维护,此时就需要在GIT中引入子模块。GIT 引入子模块后,其本身的上游代码提交历史依然可以保存下来,并且避免了在上游代码发生变更时本地的定制代码归并(Merge)困难。 新建带子模块的项目 PyDemo 我们举一个简单的例子说明上述问题:假设你开发了一个项目 PyDemo,PyDemo 项目中使用了Leveldb 的 Python 绑定 cpy-leveldb( https://github.com/forhappy/cpy-leveldb ),但是需要在定制 cpy-leveldb 的功能,此时你就需要在PyDemo 项目中新建一个子模块 cpy-leveldb,然后修改本地 cpy-leveldb的实现,此时 PyDemo 把它视作一个子模块,当你不在 cpy-leveldb 目录里时并不记录它的内容,取而代之的是,Git 将它记录成来自那个仓库的一个特殊的提交。当你在那个子目录里修改并提交时,子项目会通知那里的 HEAD 已经发生变更并记录你当前正在工作的那个提交 代码如下: forhappy@forhappy-lenovo:/tmp$ mkdir PyDemo forhappy@forhappy-lenovo:/tmp$ cd PyDemo/ forhappy

Day7 T1 直角三角形

为君一笑 提交于 2019-11-29 11:35:46
题目 二维平面坐标系中有N个点。从N个点选择3个点,问有多少选法使得这3个点形成直角三角形。 输入 第一行包含一个整数N(3 \(\leqslant\) N$\leqslant \(1500),表示点数。 接下来N行,每行包含两个用空格隔开的整数表示每个点的坐标,坐标值在\) -10^9$到 \(10^9\) 之间。每个点位置互不相同。 输出 输出直角三角形的数量。 样例 输入 输出 3 4 2 2 1 1 3 1 4 5 0 2 6 8 6 5 7 0 5 -1 1 -1 0 0 0 1 0 1 1 7 题解 固定一个点P,平移整个坐标系,使得P为原点。现在,对于每个点,首先确定其所在的象限,然后将其旋转k•90°(k∈Z),使其落在第一象限中。之后,按照过点的正比例函数的斜率k(纵坐标除以横坐标)对所有点进行排序。如果两个点斜率相同并且旋转之前在相邻的象限中,它们就能形成以P为直角顶点的直角三角形。排序后,对于每一组斜率相同的点,统计它们原来在每个象限的点的个数,并将相邻象限的点的数量相乘。时间复杂度为 \(O(N^2logN)\) 。(这就是为什么 \(O(N^3)\) 的暴力枚举在加一堆玄学优化后也能卡过:因为正解的时间复杂度也不低) #include<bits/stdc++.h> using namespace std; typedef long long ll; int