简介: 在本文中,Daniel 和我们一起分享了他将 cvs.gentoo.org 的 /home 文件系统转换成 LVM 逻辑卷的经历。在转换之后,当 cvs.gentoo.org 的 /home 分区实时动态地进行大小调整,而无需重新引导、卸装 /home,甚至无需降低到运行级别 1 时,我们将会看到 LVM 的种种优点。所有进程在没有任何中断的情况下继续工作。Daniel 对转换的逐步详细介绍将对那些有兴趣在他们自己的机器上执行类似转换的人有所帮助。

在 我前一篇 LVM 文章 中,我解释了 LVM 背后的概念。现在该是发挥 LVM 作用的时候了。在本文中,我将在官方 Gentoo Linux web/cvs/email 服务器 -- cvs.gentoo.org -- 上设置 LVM。尽管 cvs.gentoo.org 只有一个硬盘,但灵活性很强的 LVM 仍然令人难以置信地提供了比标准静态分区方法好得多的改进。我将为您介绍 LVM 转换过程的的所有步骤,这样,如果您有兴趣,可以在自己的机器上执行类似的转换。

在开始之前有一个告诫。因为实现 LVM 是对系统进行的一项重要的变动(包括创建新分区和其它一些潜在的冒险操作),所以在开始这一过程之前备份整个系统 不失为 一个好主意。如果您不想进行备份,我希望您能使用一台没有什么重要数据的测试机器 :) 应该说我在转换到 LVM 时并没有遇到任何问题,但最好做好准备以防万一。

那么,让我们继续。在开始转换过程之前,我对 cvs.gentoo.org 进行了升级,让它使用下列软件包。在我执行 LVM 转换的时候,这些是当时的最新版本(请参阅本文稍后部分的 参考资料):

  • Linux 内核 2.4.1-ac19
  • LVM 0.9.1_beta5
  • reiserfs-utils 3.6.25

现在轮到硬盘驱动器了。cvs.gentoo.org 有一个不错的新的 IBM 45 GB 硬盘驱动器;不过,当我在 cvs 上安装 Gentoo Linux 时,我只对驱动器中的 10 GB 进行了分区,而将余下的 35 GB 留作“将来的分区”使用。这些是在不使用 LVM 时耍的一点小计谋 -- 将部分驱动器保留不分区是一种为今后的扩充作准备的简单但有效的方式。不过,如果使用 LVM,会有更好的方法。

空间问题

在过去的几个星期中,我注意到我的根 ReiserFS 分区在被缓慢地填满,这可以从下面的 "df" 输出中看出:

Filesystem           1k-blocks      Used Available Use% Mounted on /dev/hda3              9765200   6989312   2775888  72% / tmpfs                   269052         0    269052   0% /dev/shm 

现在,72% 被占满的根分区并不构成什么危机,但也决不是一种良好的状况。ReiserFS 和许多其它文件系统一样,随着它越来越满而开始逐渐减慢速度,在根文件系统被完全填满、文件系统的性能遭到重创之前,这只是时间问题。

我决定在硬盘驱动器的结尾处使用 LVM,从 35 GB 的当前未分区空间中创建新逻辑卷来解决这一问题。然后,我会在这个卷上创建一个文件系统,并将 /dev/hda3 的大部分内容转移到其中。

如果您考虑在自己的机器上进行类似的转换,首先需要做的就是在根文件系统上找一个合适的部分转移到逻辑卷上。对我来说,选择很容易 -- 我的 /home 树占用了大约 5.7 GB。通过将 /home 转移到它自己的 LVM 逻辑卷,我的根文件系统处于大约 20% 容量的位置。因为大多数新数据被添加到 /home,所以我的根文件系统很可能也停留在大约 20% 容量的位置 -- 一种非常健康的状态。

回页首

解决方案的开始

在开始转换之前,首先在硬盘驱动器的结尾处对未使用的空间进行分区。我使用 cfdisk 创建了一个 35 GB 的分区 (/dev/hda5),然后将分区的分区类型设置成 "8E"(正规 LVM 分区类型)。在这一更改后,我进行了重新引导以强制重新读取分区表。在重新引导后,我的分区表如下:

# sfdisk -l Disk /dev/hda: 89355 cylinders, 16 heads, 63 sectors/track Units = cylinders of 516096 bytes, blocks of 1024 bytes, counting from 0    Device Boot Start     End   #cyls   #blocks   Id  System /dev/hda1   *      0+    247     248-   124960+  83  Linux /dev/hda2        248     743     496    249984   82  Linux swap /dev/hda3        744   20119   19376   9765504   83  Linux /dev/hda4      20120   89354   69235  34894440    5  Extended /dev/hda5      20120+  89354   69235- 34894408+  8e  Linux LVM 

既然有了空的 35 GB 的分区,我就准备为 LVM 初始化它。以下是过程 -- 首先,我将 35 GB 初始化成 物理卷;然后,使用这个物理卷创建一个 卷组 ,最后,在卷组上分配一些范围,创建将包含新文件系统并存放当前 /home 中所有文件的 逻辑卷

为开始这个过程,我使用 pvcreate 命令将 /dev/hda5 初始化成物理卷:

# pvcreate /dev/hda5 pvcreate -- physical volume "/dev/hda5" successfully created 

pvcreate 在 /dev/hda5 上设置一个特殊的“记帐”区域,称作 VGDA(“卷组描述符区域”)。LVM 使用该区域来记录物理范围是如何分配的,以及其它一些操作。

下一步是创建卷组并向该卷组添加 /dev/hda5。卷组将充当范围池(许多存储块)。创建卷组之后,创建所需数量的逻辑卷。我决定将卷组称为 "main":

# vgcreate main /dev/hda5 vgcreate -- INFO: using default physical extent size 4 MB vgcreate -- INFO: maximum logical volume size is 255.99 Gigabyte vgcreate -- doing automatic backup of volume group "main" vgcreate -- volume group "main" successfully created and activated    

vgcreate 命令执行几个操作。除了创建 "main" 卷组以外,它还设置 /dev/hda5,使它使用 4 MB 的范围,4 GB 是缺省范围大小。这意味着在卷组上创建的所有逻辑卷都可以以 4 MB 为增量单位来进行扩充或缩减。

由于内核限制的原因,范围大小决定了逻辑卷的最大大小。您可以从上面的输出中看出,4 MB 的范围大小决定了逻辑卷大小限制为 256 GB,如果您向卷组添加几个高容量驱动器,这是很容易达到的逻辑卷组大小。如果每一个卷最后都大于 256 GB,我建议您在运行 vgcreate 时指定更大一些的范围大小。范围的大小可以是从 8 KB 到 512 MB 之间的任何值,并且必须总是 2 的倍数。通过将范围大小增加到 4 MB 以上,最大的物理卷大小将相应地增加到最大为 1 Petabyte(尽管当今现实世界中,x86 系统上的大小限制是 2 Terabytes)。例如,如果希望使用 32 MB 的范围创建卷组,我会输入:

# vgcreate -s 32M main /dev/hda5 

32 MB 是个合适的范围大小,因为 32 MB 的颗粒度仍然便于管理,并将引导的最大逻辑卷大小增加到 2 TB。创建卷组之后,可以通过输入 "vgdisplay" 来查看其信息:

# vgdisplay --- Volume group --- VG Name               main VG Access             read/write VG Status             available/resizable VG #                  0 MAX LV                256 Cur LV                0 Open LV               0 MAX LV Size           255.99 GB Max PV                256 Cur PV                1 Act PV                1 VG Size               33.28 GB PE Size               4 MB Total PE              8519 Alloc PE / Size       0 / 0 Free  PE / Size       8519 / 33.28 GB VG UUID               2qC2H2-iA8s-qW6F-cwXx-JVIh-I6VC-VVCGmn 

既然有了自己的卷组,我准备创建逻辑卷。我决定在最初时将它的大小设置为 8 GB,并称它作 "lv_home":

# lvcreate -L8G -nlv_home main lvcreate -- doing automatic backup of "main" lvcreate -- logical volume "/dev/main/lv_home" successfully created  

然后,在逻辑卷上创建文件系统:

# mkreiserfs /dev/main/lv_home        <----------- MKREISERFSv2 ----------->        Block size 4096 bytes    Block count 2097152    Used blocks 8275            Journal - 8192 blocks (18-8209), journal header is in block 8210                    Bitmaps: 17, 32768, 65536, 98304, 131072, 163840,                     196608, 229376, 262144, 294912, 327680, 360448,                     393216, 425984, 458752, 491520, 524288, 557056,                     589824, 622592, 655360, 688128, 720896, 753664,                    786432, 819200, 851968, 884736, 917504, 950272,                    983040, 1015808, 1048576, 1081344, 1114112,                    1146880, 1179648, 1212416, 1245184, 1277952,                    1310720, 1343488, 1376256, 1409024, 1441792,                    1474560, 1507328, 1540096, 1572864, 1605632,                    1638400, 1671168, 1703936, 1736704, 1769472,                    1802240, 1835008, 1867776, 1900544, 1933312,                    1966080, 1998848, 2031616, 2064384     Root block 8211 Hash function "r5" ATTENTION: ALL DATA WILL BE LOST ON '/dev/main/lv_home'! (y/n)y journal size 8192 (from 18) Initializing journal - 0%....20%....40%....60%....80%....100% Syncing..done.

既然创建了文件系统,我就可以在 /mnt/newhome 上安装它:

# mkdir /mnt/newhome # mount /dev/main/lv_home /mnt/newhome # df Filesystem           1k-blocks      Used Available Use% Mounted on /dev/hda3              9765200   6989840   2775360  72% / tmpfs                   291388         0    291388   0% /dev/shm /dev/main/lv_home      8388348     32840   8355508   1% /mnt/newhome 

您可以从上面看出,我几乎准备复制 /home 中的所有数据。 在开始之前,我把系统降低到运行级别 1 以确保在复制 /home 中的文件时,没有用户或进程能够访问或修改它们:

# init 1 

然后,开始复制文件:

# cp -avx /home/* /mnt/newhome 

复制操作需要大约 10 分钟的时间完成。然后,我将原始 /home 备份成 /home.old,这只是为在复制过程中有任何错误而准备的。创建一个新的安装点,然后在 /home 上重新安装新 home:

# cd / # mv home home.old # mkdir home # umount /mnt/newhome # mount /dev/main/lv_home /home 

然后,应该设置服务器以使我的新 /home 分区可以在每次启动机器时使用。首先修改 /etc/fstab 以使它包括新的 /home 项:

# /etc/fstab: static file system information. # # fs                mountpoint       type         opts          dump/pass /dev/hda3           /                reiserfs     defaults      1 1 /dev/main/lv_home   /home            reiserfs     defaults      2 2 /dev/hda2           none             swap         sw            0 0 /dev/hda1           /boot            reiserfs     noauto        0 0 /dev/cdrom          /mnt/cdrom       iso9660      noauto,ro     0 0 proc                /proc            proc         defaults      0 0 none                /dev/pts         devpts       mode=620      0 0 tmpfs               /dev/shm         tmpfs        defaults      0 0 

然后,我对初始化脚本进行了一些小小改动。我修改了 "checkroot" 启动脚本,使以下命令可以在根分区重新安装读/写后立即运行:

/sbin/vgscan /sbin/vgchange -a y 

接下来,我修改了在关机时运行的文件系统卸装脚本,使以下命令在卸装了所有文件系统 立即运行:

/sbin/vgchange -a n 

完成了这些步骤后,我重新引导了机器,让我高兴的是一切都工作正常。在接下去的一天左右的时间里完全没有问题,随后我删除了 /home.old 以释放根文件系统上的一些空间。太棒了!到 LVM 的转换成功了。

回页首

LVM 的优点

虽然到 LVM 的转换有些痛苦,但一旦转换完成之后,管理文件系统就变得非常简单。例如,我决定重新调整新的 /home 逻辑卷大小,向文件系统结尾添加大约 2 GB 的空间。首先,我向 "lv_home" 逻辑卷添加了额外的容量,然后使用 resize_reiserfs 实用程序来扩充文件系统,使它可以使用额外的容量。以下是执行所有这些操作的两个命令:

# lvextend -L+2G /dev/main/lv_home # resize_reiserfs -f /dev/main/lv_home 

在大约一秒钟的时间里,我将 /home 文件系统扩大了 2 GB;令人惊奇的是,我不需要重新引导、降低到运行级别 1,甚至不需要卸装 /home 来执行大小调整。一切都照常工作。是不是很了不起?下面是我的文件系统的当前状态:

# df Filesystem           1k-blocks      Used Available Use% Mounted on /dev/hda3              9765200   1413340   8351860  15% / /dev/main/lv_home     10485436   5609836   4875600  54% /home 

您可以看出 LVM 的确可以让管理员的工作轻松许多。我希望在今后能将根文件系统的其它部分转移到 LVM,最终甚至将我的根文件系统转换成 LVM 逻辑卷。下面的参考资料可以帮助您了解有关 LVM 的更多知识。

*************************************

原文地址:http://www.ibm.com/developerworks/cn/linux/filesystem/lvm/lvm-2/


相关文章推荐


★【引用】mkswap 把一个分区格式化成为swap交换区


Linux部分精彩文章推荐

★Linux系统初学者的常见问题解决集结

★Linux挂载U盘

★linux 下的挂载

★redhat和ubuntu系统下挂载ntfs文件系统的方法(转载)

★疯狂挂载:Linux连接常用外部设备的方法

★ubuntu 重装系统备份数据   ubuntu安装kde桌面

★ubuntu全局配置文件

★ubuntu安装rpm的方法

★ubuntu设置全攻略

★Linux 常用C函数说明-文件权限控制篇

★rpm deb命令集合

★rc.local自启动学习

★init.d,rc.d详解 Linux运行时详解

★linux下tar gz bz2 tgz z等众多压缩文件的解压方法

★tar命令用法详述

★使用tar进行磁带备份的命令汇总

★LINUX:解压问题tar: Child returned status 1

★Linux系统服务自启动设置_Tomcat

★Linux操作系统下SSH默认22端口修改方法

★Linux启动级别:init 0,1,2,3,4,5,6

★linux服务开机启动和运行级别

★linux服务自动启动功能

★新手学堂:Linux操作系统的启动步骤说明

★xinit启动X Window System过程初探

★构建小型Linux跟文件系统镜像(Ext2 或 Ext3)

★linux内核源码目录结构

★简述 Linux 文件系统的目录结构

★Linux目录结构及解释

★Linux 内核源代码的结构

★linux文件系统的目录结构

★linux 端口 操作

★Linux操作系统下软件的安装与卸载

★vim 实用的经验

★网络管理:超级详细Tcpdump 的用法

★Linux系统下网卡网络配置基础

★用vsFTPd自架Linux网络安装服务器,以及Redhat局域网安装的解决办法

★网络管理:超级详细Tcpdump 的用法

★[转]tcpdump 教程 用法 使用

★Linux下telnet配置

★linux 任务计划 cron

★YUM 库的安装

★Linux环境变量的设置和查看方法

★Linux命令速查手册

★关于linux系统中命令的使用详解

★简单而常用的shell 命令

★rpm常用命令集合

★[常用命令]diff

★vi指令大全

★LINUX/UNIX vi全屏幕编辑器

★Linux操作系统Ifconfig命令详细解析

★linux top命令详解

★chmod命令使用详解

★Linux主要shell命令详解

★linux ps命令使用详解

★Linux下设置和修改IP

★Linux中find用法整理

★Fedora 中的 Yum 命令详解

★rpm常用命令集合

★Linux cat 命令用法

★chmod命令详细用法

★linux redhat命令大全

★Linux操作系统下/etc/hosts文件

★LINUX PATH环境变量

★如何安装无签名认证的rpm包

★LINUX关于休眠、待机和睡眠的问题

★initrd.img处理

★Linux字符集的修改方法

★Awk学习笔记

★shell取得文件行数6法

★正则表达式

★shell中单引号、双引号、反引号、反斜杠的使用

★Linux开机过程(转)

★LINUX中注销其他已登陆帐户

★学习 Linux LVM

★shell 中的参数替换

mkswap 把一个分区格式化成为swap交换区

★rsh的配置

修复GRUB

★Linux自动注销登录的帐户

★linux下的/dev/shm/  以及与swap目录的区别

★Redhat Linux配置远程桌面

★Linux截图工具import使用说明

★Linux、UNIX下磁带机的管理和使用

★Linux 磁带机备份完全攻略

★gnome桌面环境 kde桌面环境的区别

★linux i18n修改,中文版英文版体现

★linux命令-locale字符显示

★linux命令-locale字符显示

★RedHat 8.0软件包组--桌面类

★让英文版的LINUX 支持中文显示

★Linux  shell内核使用

★在RedHat Enterprise Linux 上Oracle 9i的安装配置与调优

★Linux下安装mysql后无法启动的解决方法

★百度最全的LINUX和Redhat学习教程下载帖大全

★Redhat linux 安装 gcc编译器,Gcc源码包,rpm包安装方法!

★RHCE题库

★Redhat Enterprise Linux 6 正式版已经发布!

★VMWare虚拟机安装RedHat Linux全过程

学习 Linux LVM相关推荐

  1. 通用线程: 学习 Linux LVM

    为什么80%的码农都做不了架构师?>>>    通用线程: 学习 Linux LVM "逻辑卷管理"为存储器管理带来的魔力 Daniel Robbins ( dr ...

  2. Linux LVM学习总结——扩展卷组VG

    Linux服务器由于应用变更或需求的缘故,有可能出现分区空间不足的情况,此时往往需要进行扩容(要增加分区的空间),而采用LVM的好处就是可以在不需停机的情况下可以方便地调整各个分区大小.如下所示,分区 ...

  3. 学习 Linux,101: 引导系统

    2019独角兽企业重金招聘Python工程师标准>>> 系列文章: http://www.ibm.com/developerworks/cn/views/linux/libraryv ...

  4. linux查看lvm命令,linux lvm常用命令总结

    linux LVM 1 创建 .删除思路创建:Linux分区---物理卷---卷组---逻辑卷删除:逻辑卷---卷组----物理卷---Linux分区 2 linux分区 linux中我们通常使用fd ...

  5. linux lvm 磁盘管理

    附加:lvm 这是一个新系统,依然debian 6.0.6,走起 我在装系统的时候手动进行了分区(之前都是自动分区并配置lvm,感觉不怎么合适),三个主分区:/boot,/,/swap 预留了30G的 ...

  6. Android逻辑卷管理LVM,LINUX——LVM逻辑卷管理

    LVM: logical volumes manager LVM逻辑卷部署 物理卷->卷组->逻辑卷 第一步:关机添加磁盘:两个磁盘可以构成一个磁盘组. 第二步:查看磁盘 # ls /de ...

  7. 学习 Linux,101: 引导程序

    概述 在本文中,学习如何为一个 Linux 系统设计一个磁盘分区布局.您将学习: 为独立的分区或磁盘分配文件系统和交换空间: 根据系统的预定用途调整设计: 确保系统能够启动. 本文讨论 PC 引导过程 ...

  8. 忠告初学者学习Linux系统的8点建议

    忠告初学者学习Linux系统的8点建议 新手或者说即将要入坑的小伙伴们,常常在QQ群或者在Linux论坛问一些问题,不过,其中大多数的问题都是很基础的.例如:如何给添加的用户归属用户组,复制整个文件到 ...

  9. 总结六条对我们学习Linux系统有用的忠告

    接触linux需要的是端正自己的态度,这个玩意可不是一天两天就能拿得下的.学习个基础,能装系统.能装常见服务.能编译.能配置存储空间.能配置系统参数.能简单查看系统负载等基本够用.但这些只保证能做机房 ...

最新文章

  1. 数据中台已成气候!大数据架构师如何站上风口?
  2. 第11章:Shell编程
  3. Android 界面布局之RelativeLayout
  4. 34tomcat设置默认页面
  5. vue 实现文件下载
  6. JavaSE基础——异常、File文件类
  7. HDU 2841 容斥 或 反演
  8. 阿里巴巴Java开发手册(黄山版)2022.2.3发布
  9. python做考勤表_考勤表下载免费后怎么制作?
  10. 给摩托罗拉C1200数字对讲机写频
  11. win10安装小爱同学 UWP
  12. php网站做分享到朋友圈,PHP实现微信分享朋友圈
  13. U盘安装CentOS 7.0图文详解教程
  14. excel转pdf的在线免费转换技巧,超实用
  15. linux(centos)du命令查看文件或目录的大小
  16. 从“女秘书PK陆纯初”看职位描述的重要性
  17. 数值计算与计算机应用杂志,数值计算与计算机应用杂志
  18. python3多线程传参_python多线程 怎么传送多个参数
  19. 数学建模 比赛日程安排问题 答案及程序代码
  20. Tesseract-OCR 字库训练

热门文章

  1. 程序员都该懂的 UML 规范!
  2. 微软“作死”Windows
  3. 一夜刷屏的「猜画小歌」遭到反编译,内部还暗藏哪些玄机?
  4. 从15000个Python开源项目中精选TOP30,GitHub平均star为3707,赶紧收藏!
  5. 【JVM 2,最经典的HashMap图文详解
  6. 第 14 章 程序员常用 10 种算法
  7. python long函数_python函数
  8. java面向对象笔试_Java面向对象笔试题.doc
  9. 去黑边_Vegas pro 17导入的素材有黑边咋进行去除的3种方法
  10. atlas mysql怎么连接_Atlas安装配置教程 Atlas怎么安装配置