在安装Linux的时候,通常遇到的一个比较头痛的问题就是分区,到底每个区该分多少,用了一段时间之后,某个分区又不够用了,该怎么办?如果是普通的服务器,那一切都好说,大不了就关机重新划分分区嘛,但是对于有些关键的服务器,别说关机,就是停止服务都是不可忍受的。例如:一个虚拟主机服务提供商,本来给/home划了100G空间,在刚开始的第一年,一切都还好,空间够用,等到了第二年,开始搞促销,结果两个月之后,/home分区就只剩下1GB了,而且/var分区估计1个月后也要用完了,怎么办?有没有在不停止服务的前提下,就能动态增加硬盘空间的技术?有,这就是Linux下LVM技术的来历。

LVM全称为Logical Volume Management,它是Linux环境下对磁盘分区进行管理的一种机制,它通过在硬盘和分区上建立一个抽象的逻辑层,来屏蔽分区大小,磁盘空间给用户带来的困难。在LVM中,可以将多个磁盘分区组做成一个存储池,管理员可以在此存储池上随意创建逻辑卷组,再mount到相应的挂载点上去,从而达成动态增加磁盘空间的目的。例如上边的这个例子,当/home分区不够大时,可把磁盘的一部分空间mount到/home上去,这样的话,就可以实现零当机时间来调整磁盘了。

在开始LVM配置之前,先简述几个基本概念和术语:

1. 物理存储介质:

指的是物理的硬盘,在/dev目录下看到的sda,sdb,sdc,hda,hdb,hdc等。

2. 物理卷(Pisical Volume):

指的是物理硬盘上的分区或逻辑上与磁盘分区具有相同功能能的设备,是LVM的基本存储块,但和分区来比,却包含了与LVM管理相关的参数。这个就是前面讲的存储池。

3. 卷组(Volume Group):

LVM的卷组类似于物理硬盘,卷组上边可以建立多个虚拟的“分区”,LVM卷组由一个或多个物理卷组成。

4. 逻辑卷(Logical Volume):

LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷上边可以建立文件系统,用于mount到不同的挂载点,提升分区空间——这是真正跟用户打交道的部分。

5. PE (Physical Extent)

每一个物理卷被划分为一个个的基本存储单元,每一个PE都具有唯一的编址(这个东西类似于物理硬盘上的磁盘地址)。PE的大小默认为4MB。

6. LE(Logical Extent)

每一个逻辑卷也被划分为一个个的基本存储单元,每一个LE也具有一个唯一的编址。在同一个卷组中,LE和PE的大小是相等的。

综上所述,进行一个总结就是,一个或者多个物理硬盘上都可以划分出一个或者多个LVM分区,然后这些分区可以组成一个物理卷(PV),形成一个存储池。用户把这个存储池划分出来一个或者多个LV,挂载到不同的分区上去使用,这个就是LVM的基本原理,也是建立LVM的过程。

结合上边那个例子,如果要为/home和/var分区增加空间,则要有如下步骤:

1. 给服务器装上2块新硬盘

2. 把新硬盘进行分区,并标记为LVM分区

3. 把2块新硬盘上的LVM分区合并起来,组成一个新的物理卷(PV)

4. 把物理卷划分成两个逻辑卷(LV):名字分别是home和var

5. 在这两个逻辑卷上建立文件系统

6. 把这两个逻辑卷挂载到/home和/var上去

现在,开始进行LVM的实践,本文的例子在VMware中进行,磁盘空间只有8GB,和上边的例子不同。

在这台server中,安装了1块硬盘,其分区大小如下:

swap:   384M

/boot:100M

/home:2GB

/var:2GB

/:其余所有空间

现在,发现/home的空间不够了,/var也在告急,于是,我决定为这台Server安装LVM,扩充空间。

【第一步】

关闭虚拟机,增加两块硬盘,两块硬盘的大小均为8GB。由于这是虚拟机,没办法热插拔硬盘,所以只能关机,如果是实体服务器,具备热插拔硬盘接口的,自然就可以省去这一步

【第二步】

再次开机之后,可以在/dev目录下看到新增加的两块硬盘sdb和sdc,原来的那块是sda。

首先,先安装LVM管理软件:

  1. $sudo apt-get install lvm2

然后,查看一下当前系统中的硬盘:

  1. $sudo fdisk -l

可以看到当前系统中有3块硬盘了。

然后,对sdb进行分区:

  1. $sudo fdisk /dev/sdb

系统提示:

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel with disk identifier 0xc3a40868.

Changes will remain in memory only, until you decide to write them.

After that, of course, the previous content won’t be recoverable.

Warning: invalid flag 0×0000 of partition table 4 will be corrected by w(rite)

Warning: DOS-compatible mode is deprecated. It’s strongly recommended to switch off the mode (command ‘c’) and change display units to sectors (command ‘u’)

不管这个提示,现在开始,在Command(m for help):后输入n,这代表创建新分区

然后系统会提示:

e extend

p primary partition

e代表要创建的是扩展分区,p代表要创建的是主分区。这里输入p,创建主分区。

系统提示partition number(1-4):,我要把这块硬盘的全部空间都分配给/home,不做它用,所以只分1个区就够了,在此处输入1。

然后系统提示First cylinder (1-1044, default 1):默认从第一个柱面开始,这里直接回车就OK。

然后系统提示

Using default value 1

Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044)

这里是分区大小了,我打算把所有空间全部分配给这个分区,所以直接输入:1044,就把全部空间分配完了。

然后使用p命令,打印出来当前的分区情况。

Device                Boot     Start        End              Blocks              Id       System

/dev/sdb1                          1               1044         8385898+       83       Linux

然后,可以看到这个分区的类型是Linux,现在要把它改为LVM,使用t命令:

系统提示:Hex code (type L to list codes): ,然后输入L命令,查看所有的代码。在系统打印出来的这个表格中,可以看到Linux LVM对应的代码是8e,在这里输入8e,标记完成。这一步做完之后,这块硬盘就算是OK了,记得使用w命令保存。

然后用同样的方法,把/dev/sdc也做一遍。

【第三步】

现在,系统中有了两块新的硬盘:sdb和sdc,并且在上边都建立了LVM分区sdb1和sdc1,现在要做的,就是把这两块硬盘上的两个LVM分区,加入到物理卷(Physical Volume)中去。使用命令:

  1. $sudo pvcreate /dev/sdb1 /dev/sdc1

系统提示:

Physical volume “/dev/sdb1″ successfully created

Physical volume “/dev/sdc1″ successfully created

要删除某个分区也很简单,使用命令:

  1. $sudo pvremove /dev/sdb1

这条命令就可以把/dev/sdb1从物理卷中删除掉了。

创建之后,可以使用pvdisplay命令来查看物理卷的状态:

  1. $pvdisplay

【第四步】

物理卷(PV)创建完毕之后,就把这些分散在一个个的物理硬盘上的LVM分区组成了一个存储池。

现在开始创建逻辑卷组(Volume Group),这个逻辑层将屏蔽掉硬盘、分区,使用户透明地使用LVM功能管理磁盘,使用命令:

  1. $sudo vgcreate extspace /dev/sdb1 /dev/sdc1

系统提示:

Volume group “extspace” successfully created

这样就创建了一个名称为extspace的逻辑卷,创建完毕之后,可以在/dev目录下看到一个名为extspace的设备。

*注:如果已经存在了一个物理卷fileserver,把新的硬盘分区/dev/sdb1加入到该逻辑卷组,其命令是:

  1. $sudo vgextend fileserver /dev/sdb1

当创建了一个逻辑卷组extspace后,删除它的命令是:

  1. $sudo vgremove extspace

查看逻辑卷组的命令是:

  1. $sudo vgdisplay

  1. $sudo vgscan

【第五步】

逻辑卷组(VG)创建好了,现在在上边创建逻辑卷,我将要创建两个逻辑卷,一个叫home_ext,一个叫var_ext,望文生义,一个用来增加/home分区的空间,一个用于增加/var分区的空间。

使用命令:

  1. $sudo lvcreate --name home_ext --size 8G extspace
  2. $sudo lvcreate --name var_ext --size 8G extspace

这两条命令很简单,意思就是,在逻辑卷组(VG)上创建两个大小均为8GB的逻辑卷(LV),其名称分别为home_ext,var_ext

完成之后,系统会提示:

Logical volume “home_ext” created

Logical volume “var_ext” created

使用如下命令可以查看逻辑卷(LV)的情况:

  1. $sudo lvdisplay

系统的输出结果很容易看懂,分别是两个逻辑卷的参数。创建完毕之后,可以在/dev/extspace/下看到两个设备,分别叫home_ext和var_ext

如果要删除逻辑卷,同样很简单,使用命令:

  1. $sudo lvremove /dev/extspace/home_ext

这就删除掉了刚才创建的逻辑卷home_ext。

【第六步】

逻辑卷(LV)创建完毕之后,基本上工作就做完了90%,只需要往挂载点上mount就可以了,在mount之前,如果对逻辑卷的空间大小、名称不满意,还可以修改(当然可以使用删掉重建的办法),LVM提供了相应的命令:

  1. $sudo lvextend -L 10G /dev/extspace/home_ext

这条命令把名为home_ext的逻辑卷(LV)的空间大小增至10G(本例中无法增加,因为创建LVM分区的时候已经使用了所有磁盘空间了)

  1. $sudo lvreduce -L 4G /dev/extspace/home_ext

这条命令把home_ext的逻辑卷(LV)的空间大小缩减至4G

  1. $sudo lvrename extspace/home_ext home_ext1

这条命令把extspace卷组中的逻辑卷(LV)home_ext改名为home_ext1

【第七步】

接下来,就是要在逻辑卷上创建文件系统了,这个文件系统是要和挂载点的文件系统一致的,我没有尝试过在ext4文件系统上挂载FAT32是什么效果,反正我做的都是相同的文件系统。

首先,把home_ext做成ext4文件系统,我的/home分区是ext4的

  1. $sudo mkfs.ext4 /dev/extspace/home_ext

再把var_ext做成ext4文件系统,我的/var分区也是ext4的

  1. $sudo mkfs.ext4 /dev/extspace/var_ext

做好之后,就可以挂载逻辑卷了。

  1. $sudo mount /dev/extspace/home_ext /home
  2. $sudo mount /dev/extspace/var_ext /var

至此,空间不足的问题得以解决!

可以查看挂载的文件系统,使用df -h命令。

【第八步】

到第七步就完成了LVM的配置,但是考虑到服务器也会有重启的时候,而重启之后,这几个逻辑卷是不会自动挂载的,所以需要修改/etc/fstab文件(修改之前先保留一个备份):

  1. $sudo vi /etc/fstab

增加如下几行:

view plaincopy to clipboardprint?
  1. /dev/extspace/home_ext /home ext4 rw,noatime 0 0
  2. /dev/extspace/var_ext /var ext4 rw,noatime 0 0

重启验证,一切正常。

Ubuntu Server上的LVM配置相关推荐

  1. linux ubuntu安装 mono,在 Ubuntu Server 上安装配置 Mono 生产环境

    在 Ubuntu Server 上安装配置 Mono 生产环境 在 Ubuntu Server 上安装和配置 Apache2 + Mono 生产环境的记录. 服务器环境是 Ubuntu Server ...

  2. Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程)

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  3. Docker-Compose简介与Ubuntu Server 上安装Compose

    Compose简介 Compose是Docker官方的开源项目,负责对Docker容器集群的快速编排. Compose是定义和运行多个Docker容器的应用. 举例来说: 一个项目除了Tomcat容器 ...

  4. Ubuntu Server 下的网络配置

    Ubuntu Server 下的网络配置 七月 24th, 2008 Posted in 笔记 | 没有回响 检查网络配置 $ ifconfig 配置DHCP客户端 $ sudo vi /etc/ne ...

  5. ppa java 8_通过 ppa 在ubuntu server 上安装java 8

    第一步:使用ppa/源方式安装,安装ppa sudo add-apt-repository ppa:webupd8team/java sudo apt-get update 第二步:安装 oracle ...

  6. Ubuntu Server上如何安装Gi

    相信大家在学习Ubuntu系统的时候都接触过GI,但是并没有去深究,对于Ubuntu Server上如何安装Gi是不是很多人都还不会呢? 那么小编就为大家介绍Ubuntu Server上安装Gi的方法 ...

  7. Ubuntu Server 上在安装Nginx时执行./confgiure后提示:C compiler cc is not found

    场景 Ubuntu Server 16.04 LTS上怎样安装下载安装Nginx并启动: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detai ...

  8. ubuntu server 9.04下配置ftp服务和可读写samba服务

    这几天很忙,也没有更新博客,刚刚忙完,简单总结一下.最近公司在大批量的更换业务到linux下面去,所有的开发机换成了ubuntu 9.04 desktop版本,我们我负责装配8台左右,弄完哪些,下午开 ...

  9. Ubuntu Server 9.10下配置telnet服务心得

    最近心血来潮地安装了Ubuntu Server 9.10来尝鲜.顺便想在上面建个telnet服务,结果还真费了不少劲.究其原因主要是Ubuntu采用的是debian的那一套东西.第一次用还不太熟悉.另 ...

最新文章

  1. Visual Studio Code Go 插件文档翻译
  2. 全球链界科技发展大会_如何成为科技界的团队合作者
  3. HDU 4611 Balls Rearrangement 数学
  4. 家用笔记本电脑什么牌子好_家用什么牌子的吸尘器好?
  5. Windows上PHP扩展的实现,部署及应用
  6. bigint最大有多少位_一台 Java 服务器可以跑多少个线程?
  7. quartz定时器依赖_JAVA使用quartz添加定时任务,并依赖注入对象操作
  8. c# 模拟登陆 webbrowser 抓取_《VR+电力——更换绝缘子培训》已登陆Pico Neo 2
  9. 作者:连德富,男,电子科技大学讲师、教育大数据研究所副所长。
  10. Visual Studio Code 构建C/C++开发环境
  11. android中拷贝assets下的资源文件到SD卡中(可以超过1M)
  12. linux执行jmeter脚本解决响应数据为空
  13. 史陶比尔机器人的 LLI (Low Level Interface)
  14. 三极管来源,及NPN与PNP区别
  15. 游戏策划关于游戏概念和游戏原型设计
  16. stm32摄像头调试 | 串口传输照片数据 | 用python来设计上位机通信软件
  17. Matlab代码书写规范
  18. 什么都可以丢,唯独不能丢了你
  19. linux netgear usb,家用四槽位 NETGEAR ReadyNAS NV+评测
  20. ICCV 2019视频目标跟踪算法Pipeline集合

热门文章

  1. Net设计模式实例之建造者模式(Builder Pattern)(2)
  2. 使用C#中的ref关键字,用2个简单例子来说明
  3. html实体编码遇上js代码
  4. Spark RDD/Core 编程 API入门系列之动手实战和调试Spark文件操作、动手实战操作搜狗日志文件、搜狗日志文件深入实战(二)...
  5. java 二维码生成和解析
  6. Spring MVC那点事儿
  7. salt 基本组建之 grains,pillars(整理中)
  8. this.blur()
  9. 在同一台电脑上同时使用IE6和IE7
  10. 自定义全局按键修饰符