LVM (Logic Volume Management,逻辑卷管理)

是传统商业Unix就带有的一项高级磁盘管理工具,异常强大。后来LVM移植到了Linux操作系统上,尽管不像原来Unix版本那么强大,但瘦死的骆驼比马大,LinuxLVM仍然非常强大,可以在生产运行系统上面直接在线扩展硬盘分区,可以把分区umount以后收缩分区大小,还可以在系统运行过程中把一个分区从一块硬盘搬到另一块硬盘上面去等等,简直就像变魔术,而且这一切都可以在一个繁忙运行的系统上面直接操作,不会对你的系统运行产生任何影响,很安全。 


还是拿JavaEye的网站服务器随便举个小例子吧。话说今天晚上我登录JavaEye网站服务器随便这么一查看磁盘使用状况: 

  1. df -h  


竟然发现/home分区的磁盘消耗的很快 

  1. Filesystem                Size  Used  Avail Use%   Mounted on  
  2. /dev/mapper/system-home    40G   32G    8G  80%    /home  



有点出乎意料,已经使用了80%,如果用光了,可就有点麻烦了,所以为了安全,把/home分区扩大5GB,多给它点硬盘空间,敲入两条shell命令 

  1. lvextend -L +5G /dev/system/home  
  2. resize_reiserfs -s +5G /dev/system/home   


先把逻辑卷扩大5GB,再把上面的reiserfs文件系统扩大5GB,前后耗时不超过3秒钟。再df -h查看一下: 

  1. Filesystem                Size  Used  Avail Use%   Mounted on  
  2. /dev/mapper/system-home    45G   32G    13G  71%    /home  



哈哈,/home立刻多了5GB,搞定收工,这是不是很像变戏法,我没停任何服务,没重起服务器,大家没有任何感觉,就一切搞定,说实话我也一直觉得LVMcool,所以我一直是LVM+Reiserfs的忠实拥趸。有兴趣学习LVM的同学可以下载后面的附件,这可是我珍藏多年的LVM秘籍! 


另外强烈推荐Daniel RobbinsIBM DW网站上面关于LVM的系列文章: 


通用线程: 学习 Linux LVM,第 1 部分 

通用线程:学习 Linux LVM,第 2部分 


另外,在大规模的生产系统上面,文件系统的管理是一个错综复杂的工作,如果你对这个方面的知识很感兴趣,你可以继续了解一下EVMS(Enterprise Volume Management System,企业级文件卷管理系统)EVMS Linux 下的所有存储技术提供了统一的、可扩展的、基于插件的 API。这意味着什么?它意味着由于 EVMS,您可以使用单个工具来对磁盘分区、创建 LVM 对象以及甚至创建 Linux 软件 RAID 卷。并且可以使用这一工具以强有力的方式合并这些技术。还是推荐看Daniel Robbins的文章: 



3.9 扩展LV 

为逻辑卷增加容量可用使用lvextend,即可以指定要增加的尺寸也可以指定扩容后的尺寸,如 

# lvextend -L12G /dev/testvg/testlv 

lvextend -- extending logical volume "/dev/testvg/testlv" to 12 GB 

lvextend -- doing automatic backup of volume group "testvg" 

lvextend -- logical volume "/dev/testvg/testlv" successfully extended 

将扩大逻辑卷testlv的容量为12GB 

# lvextend -L+1G /dev/testvg/testlv 

lvextend -- extending logical volume "/dev/testvg/testlv" to 13 GB 

lvextend -- doing automatic backup of volume group "testvg" 

lvextend -- logical volume "/dev/testvg/testlv" successfully extended 

将为LV testlv再增大容量1GB13GB 

LV扩容的一个前提是:LV所在的VG有足够的空闲存储空间可用。 

在为LV扩容之后,应同时为LV之上的文件系统扩容,使二者相匹配。对不同的文件系统有相对应的扩容方法。 

3.9.1 ext2/ext3 

除非内核已有ext2online 补丁,否则在改变ext2/ext3文件系统的大小时应卸载它: 

# umount /dev/testvg/testlv 

# resize2fs /dev/testvg/testlv 

# mount /dev/testvg/testlv /home 

这里假设testlv安装点为/home。在es2fsprogs-1.19或以上版本中包含resize2fs命令。 

LVM发行包中有一个称为e2fsadm的工具,它同时包含了lvextendresize2fs的功能,如: 

# e2fsadm -L+1G /dev/testvg/testlv 

等价于下面两条命令: 

# lvextend -L+1G /dev/testvg/testlv 

# resize2fs /dev/testvg/testlv 

但用户仍需首先卸载文件系统。 

3.9.2 reiserfs 

ext2不同,Reiserfs不必卸载文件系统,如: 

# resize_reiserfs -f /dev/testvg/testvl 

3.9.3  xfs 

SGI XFS文件系统必须在安装的情况下才可改变大小,并且要使用安装点而不是块设备,如: 

# xfs_growfs /home 

3.10 缩小LV 

逻辑卷可扩展同样也可缩小,但应在缩小LV之前首先减小文件系统,否则将可能导致数据丢失。 

3.10.1 ext2/ext3 

可以使用LVM的工具e2fsadm操作,如: 

# umount /home 

# e2fsadm -L-1G /dev/testvg/testvl 

# mount /home 

如果采用resize2fs,就必须知道缩少后卷的块数: 

# umount /home 

# resize2fs /dev/testvg/testvl 524288 

# lvreduce -L-1G /dev/testvg/testvl 

# mount /home 

3.10.2 reiserfs 

在缩小reiserfs时,应首先卸载它,如: 

# umount /home 

# resize_reiserfs -s-1G /dev/testvg/testvl 

# lvreduce -L-1G /dev/testvg/testvl 

# mount -treiserfs /dev/testvg/testvl /home 

3.10.3 xfs 

无法实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/383333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cpu中的MMU的作用

虚拟内存与物理内存之间的映射 用户空间映射到物理内存是独立的,提高安全性修改内存访问级别 (0是最高级)

Linux命令行与Shell脚本编程大全读书笔记

Linux内核4大主要功能: 内存管理 进程管理 设备管理 文件系统管理 Linux系统启动的进程和脚本管理 1./etc/inittab 管理系统开机时会自动启动的进程 2./etc/init.d 管理开机时启动或停止某个应用的脚本放在这个目录下,/etc/rcX.d目录在启动时&…

拷贝构造函数的总结

构造函数的分类及调用 按照参数分类 1.无参构造(默认构造) 2.有参构造按照类型分类 1.普通构造函数2.拷贝构造函数无参构造写法和调用 Person p1; 注意不能写Person (),因为编译器认为这个是函数声明有参构造函数写法 和调用 Person p2(10) 或者Per…

技术与技巧札记

Linux常用命令及技巧: (1)cat /proc/version 查看当前内核的版本 (2) 挂载nfs文件夹:需要先确认在/etc/exports文件,可以用于开发板挂载的文件夹 mount -o nolock 10.0.22.30:/root/sharednfs …

c++中new的总结(动态管理,malloc存在的问题,malloc与new的区别)

c中使用malloc出现的问题 程序员必须确定对象的长度malloc 返回一个(void *)指针 ,c不允许将(void*) 赋值给其它指针,必须强转malloc可能申请内存失败,所以必须判断返回值来保存内存分配成功用户在使用对象…

Linux中变量#,@,0,1,2,*,$$,$?的含义

$# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell脚本的第一个参数 $2 是传递给该shell脚本的第二个参数 $ 是传给脚本的所有参数的列表 $* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个 $$ 是脚本运行的当前…

Volatile的陷阱

最近写的关于在嵌入式开发中常遇到的关于volatile关键字使用的短文,都是些通用的技术,贴上来share。 对于volatile关键字,大部分的C语言教材都是一笔带过,并没有做太过深入的分析,所以这里简单整理了一些关于volatile的…

c++中静态成员变量和静态成员函数

静态成员变量 在一个类中,若将一个成员变量声明为static,这种成员成为静态成员变量,与一般的数据成员不同,无论建立了多少个对象,都只想有一个静态数据的拷贝,静态成员变量,属于某个类,所有对象…

单列模式(饿汉)

单例模式案例 目的&#xff1a;为了让类中只有一个实例&#xff0c;实例不需要自己释放将 默认构造 和 拷贝构造 私有化内部维护一个 对象的指针私有化唯一指针对外提供getinstance方法来访问这个指针保证类中只能实例化唯一 一个对象 主席案例 #include<iostream>usin…

Makefile札记

Makefile中: ? 的区别 在Makefile中我们经常看到 : ? 这几个赋值运算符&#xff0c;那么他们有什么区别呢&#xff1f;我们来做个简单的实验 新建一个Makefile&#xff0c;内容为&#xff1a; ifdef DEFINE_VRE VRE “Hello World!” else endif ifeq ($(OPT),define) VRE…

c++中this指针基本概念和使用

class Person { public:int m_A;//非静态成员变量&#xff0c;属于对象上void func(/*Person * this*/){}; //非静态成员函数 不属于对象身上static int m_B;//静态成员函数&#xff0c;不属于对象上static void fun2(){};//静态成员函数 &#xff0c;不属于对象身上//double …

通用Makefile实现

Makefile是Linux下程序开发的自动化编译工具&#xff0c;一个好的Makefile应该准确的识别编译目标与源文件的依赖关系&#xff0c;并且有着高效的编译效率&#xff0c;即每次重新make时只需要处理那些修改过的文件即可。Makefile拥有很多复杂的功能&#xff0c;这里不可能也没必…

c++中空指针访问成员函数

如果成员函数没有用到this &#xff0c;那么空指针可以直接访问 如果成员函数用到this 指针&#xff0c;就要注意&#xff0c;要判断是否为空&#xff0c;防止程序崩溃 #include<iostream>using namespace std;class Person{public:void show(){//没有 用到this指针&am…

从0开始python学习-35.allure报告企业定制

目录 1. 搭建allure环境 2. 生成报告 3. logo定制 4. 企业级报告内容或层级定制 5. allure局域网查看 1. 搭建allure环境 1.1 JDK&#xff0c;使用PyCharm 找到pycharm安装目录找到java.exe记下jbr目录的完整路径&#xff0c;eg: C:\Program Files\JetBrains\PyCharm Com…

grep 常用命令

这个--include选项,可以这样使用: grep -rn --include*.c --include*.h re . 可以指定多次, 如果真是上面的这种情况, 其实可以用 grep -rn --include*.[ch] re . 但是, 如果源文件中含有C源代码,上面的方法就不凑效了, 因为[]中只能放一个字符. grep -rn --include*.{cp…

c++中友元函数详解

友元 友元分为&#xff1a;友元函数和友元类 友元提供了一种突破封装的方式&#xff0c;有时提供了便利。但是友元会增加耦合度&#xff0c;破坏了封装&#xff0c;所以友元不宜多 用。 全局函数做友元函数 全局函数写到类中做声明 并且最前面写关键字 friend 友元函数可访问…

Linux时间函数札记

关于gmtime、gmtime_r、localtime、localtime_r 测试环境&#xff1a;vmware 7 Redhat5.5&#xff0c;系统时间使用UTC&#xff0c;时区为上海。 1、函数功能介绍 使用man gmtime或man localtime都可以的得到这几个函数的介绍。原型如下&#xff1a; struct tm *gmtime(const …

c++实现顺序表的相关操作

Myarray.h文件 #pragma once#include<iostream>using namespace std;class MyArray { public:MyArray();//默认构造 默认100容量MyArray(int capacity);MyArray(const MyArray& array);~MyArray();//尾插法void Push_Back(int val);//根据索引获取值int getData(int…

系统架构札记

什么是高内聚、低耦合&#xff1f; 起因&#xff1a;模块独立性指每个模块只完成系统要求的独立子功能&#xff0c;并且与其他模块的联系最少且接口简单&#xff0c;两个定性的度量标准――耦合性和内聚性。 耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一…

c++中运算符重载(加号运算,左移运算,前置后置++运算符,赋值运算,关系运算,函数运算)

运算符重载注意 重载的运算符要易读内置的数据类型的表达式的运算符是不可以改变的不要重载&& 和 | | 运算符&#xff0c;[]和->运算符只能通过成员函数进行重载<<和>>只能通过全局函数配合友元函数进行重载 加号运算符重载 如果想让自定义数据类型 进…