IBM SmartCloud Enterprise 技巧: 配置 Linux Logical Volume Manager

配置 Linux LVM 和文件系统以容纳更大的物理卷产品

了解如何使用 Linux Logical Volume Manager(LVM)搭建一个 64 位的 Linux® 实例(从 Bronze 级产品开始),捕获一个私有映像并部署一个新实例作为另一个产品(Platinum 级),然后增大 LVM 卷和文件系统,以容纳新的物理卷。本文还将介绍如何使用 Linux LVM 类型的分区来跨物理卷配置和管理 LVM。

Mihai Criveti, IT 架构师, IBM

/developerworks/i/p-mcriveti.jpgMihai Criveti 是一名主要关注云计算和虚拟化的 IT 架构师。他的兴趣包括云计算、虚拟化、企业架构、SOA、中间件、数字取证以及 UNIX 系统。



2011 年 8 月 15 日

在本文中了解如何:

  • 使用 Linux Logical Volume Manager(LVM)搭建一个 64 位的 Linux 实例(一个 Bronze 级产品)。
  • 捕获一个私有映像并将其部署为一个新的 Platinum 级实例。
  • 增大 LVM 卷和文件系统,以容纳新的物理卷。
  • 使用 Linux LVM 类型的分区跨物理卷配置 LVM。

LVM 背景和测试场景

首先,为可能不熟悉 LVM 的读者介绍 LVM 的概念和测试场景。

LVM 概念:未知世界

Linux LVM 由物理卷(PV)、卷组(VG)和逻辑卷(LV)组成。

  • 物理卷:物理硬盘(HDD)、物理硬盘分区(例如 /dev/vdb1)。
  • 扩展:PV 被分为多个称为 PE(物理扩展)的块。逻辑扩展(LE)与 PE 一一对应,用于从物理到逻辑卷的映射。
  • 卷组:一个由聚合的物理卷组成的虚拟磁盘。VG 可以被逻辑分区为 LV。
  • 逻辑卷:充当一个虚拟磁盘分区。在创建完一个 VG 后,您可以在该 VG 中创建多个 LV。LV 可以用作原始块设备、交换设备,或者用于创建像磁盘分区一样(可挂载)的文件系统。
  • 文件系统:LV 可以用作原始设备或者交换设备,但更通常的是被 “格式化” 为某种受支持的文件系统,并挂载到确定的挂载点。在这个场景中,我将把 LV 格式化为一个 ext3 文件系统。
  • 分区表:您将使用一些工具(例如 fdisk、sfdisk 或者 cfdisk)来操作块设备分区表和创建 Linux LVM(8e)类型的分区。

在(已升级的)Platinum 实例上设置 LVM 的常见步骤如下图所示:

图 1. 图 1. Platinum 实例中的本地 VG 关系
Platinum 实例中的本地 VG 关系

该图描述了一个我们在 /dev/vdc 块设备上创建额外分区的场景。如果我们需要增大这个 PV,那么我们在 vdc: /dev/vdc1 上就只有一个 500GB 的分区。

还要注意的是,您并不仅限于 1 个 VG 或者 1 个 LV。在产品环境中,您可能会看到多个被用作文件系统、原始设备或者 Linux 交换分区的逻辑卷。

更仔细地看一下这个场景

IBM Cloud 中的一个常见场景是,将实例升级到一个更高的产品级别,例如 Platinum 级。这意味临时磁盘大小会发生改变。

本文中也使用了这样一个场景,即从 Bronze 64 升级到 Platinum 64。该流程包含以下几个步骤:

  • 配置一个 Bronze 级别的 64 位 Linux 实例(RHEL 5.5 或者 SLES 11 SP1)。
  • 配置 LVM 使其横跨多个空的块设备。
  • 捕获一个私有映像。
  • 从捕获的映像部署一个新实例作为 Platinum 实例。
  • 从 500GB 块设备和额外的 250GB 块设备(之前它是 350GB;150GB 未分配)的剩余空间创建一个新的 LVM 分区 — 这是备选 1。
  • 使用 pvresize 增加现有 PV 的大小,并向 VG 添加两个额外的 500GB 块设备(在分完区之后)。
  • 调整 LV 和文件系统的大小。

如果您直接从一个 Platinum 实例或者其他产品上开始,只需要对这些步骤稍加修改,以考虑到不同的块设备。

有关 LVM 能做什么以及使用 LVM 的好处等详细内容,请查看 LVM HOWTO 中 What is Logical Volume Management 一节。有关临时存储产品的概述,以及针对 IBM Cloud 中的每种实例大小,对 Linux 操作系统可用的虚拟磁盘设备的布局等详细信息,请参考 A basic understanding of ephemeral storage

表示法、约定和环境设置考虑因素

以下是本文中使用的表示法和约定,以及在设置环境时的考虑因素。

表示法和约定

  • root 用户在系统中执行的命令带有 root@host# 前缀。
  • 普通用户在系统中执行的命令带有 user@host $ 前缀。
  • 命令输出由一个换行与命令隔开,并向右缩进一个制表符(Tab)的距离(如下面的代码块所示):
root@host# 1st command - to be run as root
root@host# 2nd command - to be run as root (previous command has no output)

    output from 2nd command

user@host$ 3rd command - to be run as user

    output from 3rd command

环境设置和考虑因素
使用 sudo 来运行需要更高权限的命令(或者 sudo -s)。 不要使用 sudo bash ,因为这会保留 idcuser 环境设置。 示例:/usr/bin/sudo /usr/sbin/lvmdiskscan

这里要注意两个考虑因素:

  • 这些命令适用于 RHEL 5.5 和 SLES 11 SP1 映像。像 RHEL 5.4 等较旧的映像不支持 VirtIO 设备,并且使用 ATA 设备名称(例如 /dev/hda)。此外,默认情况下,遗留映像有一个不同的分区方案,并且在配置时会增加文件系统的大小。如果您希望在遗留映像上设置 LVM,请考虑这些不同之处。
  • 许多 LVM 命令支持一个测试标志(-t--test)、一个冗余级别标志(-v--verbose;重复 1 到 3 次以增加详细程度)和一个调试标志(-d--debug;重复 1 到 6 次以增加发送到日志文件和/或 syslog 的消息的详细程度)。阅读这些命令标志各自的手册页,了解它们会改变什么,然后再使用它们。下面是一段示例代码:
root@host# pvcreate -d -v -t /dev/vdc1
    Test mode: Metadata will NOT be updated.
    Set up physical volume for "/dev/vdc1" with 734002353 available sectors
    Zeroing start of device /dev/vdc1
    Physical volume "/dev/vdc1" successfully created
    Test mode: Wiping internal cache
    Wiping internal VG cache

在 SLES 中,LVM 工具的位置是 /sbin 下。在 RHEL 中是 /usr/sbin。利用相对路径调用它们时,您需要将这些位置添加到您的路径中:

user@host$ sudo -s
root@host# export PATH=$PATH:/sbin:/usr/sbin

我强烈建议您,在执行这些步骤之前备份您的数据。

本文将展示如何使用磁盘分区而不是原始块设备来配置 LVM:不建议使用原始块设备,因为会使升级和跟踪已用磁盘变得更加困难。

有多种执行该升级场景的方式。最简单的方式是在 Bronze 实例上备份您的数据,然后升级到一个 Platinum 实例,从头开始重新配置 LVM(包括创建一个新的文件系统),然后还原数据。

增大现有 LVM 是一个更快的方式,但是您仍然应该停下来备份数据。

下面来看如何配置父实例。


父实例配置

在配置父实例时,您应该会在实例上配置 LVM。如果您使用的不是 64 位 Bronze,那么需要对这些步骤作出相应的修改,以匹配该实例上可用的临时存储块设备。例如,在 32 位 Bronze 实例上,您只有一个 175GB 的块设备对 LVM 可用。因此,您不得不修改 vgcreate 命令,只使用分区 /dev/vdb1。

让我们从配置 64 位 Bronze 实例和配置 LVM 的步骤开始。

  1. 验证哪些块设备可用于创建物理卷。使用 dmesg; cat /proc/partitions 检查内核环缓冲区和分区,然后:
    1. 扫描块设备。您可以看到 2 个没有任何分区的磁盘:/dev/vdb、/dev/vdc。忽略 ram 磁盘。
      root@host# lvmdiskscan | grep -v ram
      
          /dev/vda1    [      101.94 MB]
          /dev/root    [       59.90 GB]
          /dev/vdb     [      500.00 GB]
          /dev/vdc     [      350.00 GB]
          /dev/vdd1    [        4.00 GB]
          5 disks
          16 partitions
          0 LVM physical volume whole disks
          0 LVM physical volumes
    2. 确认块设备不包含任何分区表。
      root@host# fdisk -l | grep partition
      
          Disk /dev/vdb doesn't contain a valid partition table
          Disk /dev/vdc doesn't contain a valid partition table
  2. 创建 Linux LVM 类型的分区,并将其初始化为 LVM 物理卷。
    1. 创建一个 fdisk 响应文件。第一次运行它时,需要手动在 fdisk 中运行。
      root@host# cat > fdisk.lvm.partitions << EOF
      
      n
      p
      1
      
      
      t
      8e
      w
      EOF
    2. 生成配置脚本,用于删除现有分区表、重新读取分区表、在块设备上创建一个 8e 分区 ID(Linux LVM)以及将 Linux LVM 分区初始化为 LVM 物理卷。

      由于您的映像上的存储配置可能不同,所以一定要理解这些步骤,必要时,在您的实例上手动执行并更正这些步骤。有关详细信息,请在您的实例上输入 man fdisk,以阅读 fdisk 手册页。

      下面的代码片段生成在未分配块设备上创建 Linux LVM 分区类型的步骤。确保这些磁盘都是您想要添加到 LVM 的适当磁盘。

      root@host# for i in $(fdisk -l 2>&1| awk '/valid/{print $2}')
      do 
      echo "# Partition and initialize LVM PV for device $i"
      echo dd if=/dev/zero of=$i bs=1024 count=1  # Clear partition table
      echo blockdev --rereadpt $i                 # Re-read partition table
      echo fdisk $i \< fdisk.lvm.partitions    # Create Linux LVM partition
      echo pvcreate ${i}1                         # Initialize Physical Volume
      echo -e "\n"
      done

      这是在 Bronze 实例上运行该脚本的结果:

          # Partition and initialize LVM PV for device /dev/vdb
          dd if=/dev/zero of=/dev/vdb bs=1024 count=1
          blockdev --rereadpt /dev/vdb
          fdisk /dev/vdb < fdisk.lvm.partitions
          pvcreate /dev/vdb1
          
          # Partition and initialize LVM PV for device /dev/vdc
          dd if=/dev/zero of=/dev/vdc bs=1024 count=1
          blockdev --rereadpt /dev/vdc
          fdisk /dev/vdc < fdisk.lvm.partitions
          pvcreate /dev/vdc1

      您必须根据您想要添加到 LVM 的磁盘,手动验证并运行这些生成的步骤。不要只是简单地将该结果剪切并粘贴到您的实例上。

    3. 验证您已经创建了 LVM 分区。
      root@host# fdisk -l  | grep LVM
      
          /dev/vdb1               1     1040253   524287480+  8e  Linux LVM
          /dev/vdc1               1      728177   367001176+  8e  Linux LVM
    4. 验证已经创建了 LVM 物理卷。
      root@host# lvmdiskscan | grep -v ram
      
          /dev/vda1    [      101.94 MB]
          /dev/root    [       59.90 GB]
          /dev/vdb1    [      500.00 GB] LVM physical volume
          /dev/vdc1    [      350.00 GB] LVM physical volume
          /dev/vdd1    [        4.00 GB]
          3 disks
          16 partitions
          0 LVM physical volume whole disks
          2 LVM physical volumes
  3. 创建一个新的卷组。
    1. 使用前一步中定义的物理卷和自动备份选项(-A)创建一个卷组(本例中叫做 localvg)。
      root@host# vgcreate -A y localvg /dev/vdb1 /dev/vdc1
      
          Volume group "localvg" successfully created
    2. 显示卷组属性。
      root@host# vgdisplay
      
          --- Volume group ---
          VG Name               localvg
          System ID
          Format                lvm2
          Metadata Areas        2
          Metadata Sequence No  1
          VG Access             read/write
          VG Status             resizable
          MAX LV                0
          Cur LV                0
          Open LV               0
          Max PV                0
          Cur PV                2
          Act PV                2
          VG Size               849.99 GB
          PE Size               4.00 MB
          Total PE              217598
          Alloc PE / Size       0 / 0
          Free  PE / Size       217598 / 849.99 GB
          VG UUID               8CeTcl-MxuP-NEzw-iMOj-nnhp-dbOG-jXFiBA
  4. 创建一个新的逻辑卷。
    1. 创建一个预期大小的新的线性逻辑卷。更多选项请查看 lvcreate 手册页,比如指定大小(-L 100GB) 或者 VG 的百分比(-l 20%VG)。
      root@host# lvcreate -A y -l 100%VG -n datalv localvg
      
          Logical volume "datalv" created
    2. 显示逻辑卷。
      root@host# lvdisplay -v
      
          Finding all logical volumes
          --- Logical volume ---
          LV Name                /dev/localvg/datalv
          VG Name                localvg
          LV UUID                5f6V7i-L9zy-9ugw-tqEr-6jza-cTpi-kBisYj
          LV Write Access        read/write
          LV Status              available
          # open                 0
          LV Size                849.99 GB
          Current LE             217598
          Segments               2
          Allocation             inherit
          Read ahead sectors     auto
          - currently set to     256
          Block device           252:0
  5. 创建并挂载新的文件系统。
    1. 为新的文件系统创建一个挂载点。
      root@host# mkdir /data
    2. 将逻辑卷格式化为 ext3。设备名列举在步骤 4b 中的 LV Name\ 下。 为它指定一个友好的标签(-L)。例如:swap1、“/datalv”
      root@host# mkfs.ext3 -L datalv /dev/localvg/datalv
                                      
          mke2fs 1.39 (29-May-2006)
          Filesystem label=datalv
          OS type: Linux
          Block size=4096 (log=2)
          Fragment size=4096 (log=2)
          111411200 inodes, 222820352 blocks
          11141017 blocks (5.00%) reserved for the super user
          First data block=0
          Maximum filesystem blocks=4294967296
          6800 block groups
          32768 blocks per group, 32768 fragments per group
          16384 inodes per group
          Superblock backups stored on blocks:
          32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
          4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
          102400000, 214990848
          
          Writing inode tables: done
          Creating journal (32768 blocks): done
          Writing superblocks and filesystem accounting information: done
          
          This filesystem will be automatically checked every 23 mounts or
          180 days, whichever comes first.  Use tune2fs -c or -i to override.

      您可能希望改变运行 fsck 的间隔。在大型文件系统上运行 fsck 会花费很长的时间。同样,数据恢复也要花费很长的时间。

    3. 创建一个 fstab 条目,以便它可以在系统启动时被自动挂载。在 /etc/fstab 中添加下面这一行。您可以使用任何文本编辑器,例如 vi
      /dev/localvg/datalv  /data        ext3    defaults        0 1

      或者,您也可以使用 echo 和管道:

      echo \
      "/dev/localvg/datalv  /data        ext3    defaults        0 1" \
      >> /etc/fstab

      如果您在最后一行使用了 1,请注意 fsck 可能需要花点时间遍历大型文件系统。此外,在重启机器之后,您也可以使用 LABEL=datalv。现在,我们使用 /dev/localvg/datalv。

    4. 挂载文件系统。
      root@host# mount /data
    5. 检查文件系统是否已经挂载。
      root@host# mount | grep data
      
          /dev/mapper/localvg-datalv on /data type ext3 (rw)
  6. 在 SLES 上配置 LVM 启动服务。这在 RHEL 上不是必需的
    1. 启动 LVM 启动服务。
      root@host# service boot.lvm start
      
          Waiting for udev to settle...
          Scanning for LVM volume groups...
          Reading all physical volumes.  This may take a while...
          Found volume group "localvg" using metadata type lvm2
          Activating LVM volume groups...
          1 logical volume(s) in volume group "localvg" now active
    2. 在启动时启用 LVM 服务。
      root@host# chkconfig --add boot.lvm; chkconfig boot.lvm on
      
          boot.lvm            0:off  1:off  2:off  3:off  4:off  5:off  6:off  B:on
  7. 验证并记录 LVM 设置。
    1. 列出所有的卷。
      root@host# vgdisplay --partial --verbose
      
          Partial mode. Incomplete volume groups will be activated read-only.
          Finding all volume groups
          Finding volume group "localvg"
          --- Volume group ---
          VG Name               localvg
          System ID
          Format                lvm2
          Metadata Areas        2
          Metadata Sequence No  2
          VG Access             read/write
          VG Status             resizable
          MAX LV                0
          Cur LV                1
          Open LV               1
          Max PV                0
          Cur PV                2
          Act PV                2
          VG Size               849.99 GB
          PE Size               4.00 MB
          Total PE              217598
          Alloc PE / Size       217598 / 849.99 GB
          Free  PE / Size       0 / 0
          VG UUID               8CeTcl-MxuP-NEzw-iMOj-nnhp-dbOG-jXFiBA
          
          --- Logical volume ---
          LV Name                /dev/localvg/datalv
          VG Name                localvg
          LV UUID                5f6V7i-L9zy-9ugw-tqEr-6jza-cTpi-kBisYj
          LV Write Access        read/write
          LV Status              available
          # open                 1
          LV Size                849.99 GB
          Current LE             217598
          Segments               2
          Allocation             inherit
          Read ahead sectors     auto
          - currently set to     256
          Block device           252:0
          
          --- Physical volumes ---
          PV Name               /dev/vdb1
          PV UUID               YpNILa-ZyLn-J4Tc-6gY2-mK9b-Rwqz-m4rZ36
          PV Status             allocatable
          Total PE / Free PE    127999 / 0
          
          PV Name               /dev/vdc1
          PV UUID               VJuNGc-sT0k-cJPG-5Ona-LrDr-wRNs-fNx7ls
          PV Status             allocatable
          Total PE / Free PE    89599 / 0
    2. 列出块设备 UUID。
      root@host# blkid -s UUID
      
          /dev/vda1: UUID="2156d173-9113-4157-a8f2-93140013d2a4"
          /dev/vda2: UUID="c72047bf-3508-46f0-939a-4cf505958b92"
          /dev/mapper/localvg-datalv: UUID="c033c8e1-0399-4ba4-9897-62d85cfa36bd"
  8. 进行一次快速的测试。
    1. 将一些文件写到磁盘中,然后验证您能够读取它们。例如,您可以为 home 目录创建一个备份拷贝,然后列出归档内容。您应该看到相同的结果。
      root@host# tar zcvvf /data/idcuser.tar.gz /home/idcuser
      root@host# tar ztvvf /data/idcuser.tar.gz
    2. 重启您的机器,然后测试文件系统已经挂载,您可以访问数据。
      root@host# reboot
      root@host# tar ztvvf /data/idcuser.tar.gz
    3. 此时,您也可以在 fstab 中使用 LABEL 表示法。
      LABEL=datalv  /data        ext3    defaults        0 1
    4. 通过手动卸载并挂载文件系统,重启并执行测试,来测试新的 LABEL 设备表示法。

子实例配置

在本节中,您将关注以下几点:

  • 捕获一个私有映像,并用它部署一个新的实例。
  • 验证子实例的 LVM 配置。
  • 增大子实例中的 LVM。
  • 在增大后重新验证 LVM 配置。

捕获一个私有映像;用它部署一个新的实例

比如说,使用 Bronze(或者 Silver 或者 Gold)一段时间之后,您希望升级到更高的产品。从您的实例上捕获一个私有映像,然后根据您捕获的映像部署一个新的实例,并选择希望的更高产品(在本例中为 Platinum)。(这样做最终会得到一个额外的存储空间,您可以将它添加到您的卷组中。)这会对您的应用程序造成一些影响,因为在捕获映像时需要断开实例的电源,并且由该映像部署的实例的主机名、IP 地址和存储配置都会与之前的不同。执行这一步时,应该把这些变更情况考虑进去。同样,在捕获私有映像之前,请先备份数据。

验证子实例 LVM 配置

要验证子实例 LVM 配置,请执行以下步骤:

  1. 验证 LVM 在新实例中仍可正常运行。首先,记录下 LVM 设置。
    1. 列出所有的卷。
      root@host# vgdisplay --partial --verbose
                                      
          Partial mode. Incomplete volume groups will be activated read-only.
          Finding all volume groups
          Finding volume group "localvg"
          --- Volume group ---
          VG Name               localvg
          System ID
          Format                lvm2
          Metadata Areas        2
          Metadata Sequence No  2
          VG Access             read/write
          VG Status             resizable
          MAX LV                0
          Cur LV                1
          Open LV               1
          Max PV                0
          Cur PV                2
          Act PV                2
          VG Size               849.99 GB
          PE Size               4.00 MB
          Total PE              217598
          Alloc PE / Size       217598 / 849.99 GB
          Free  PE / Size       0 / 0
          VG UUID               8CeTcl-MxuP-NEzw-iMOj-nnhp-dbOG-jXFiBA
          
          --- Logical volume ---
          LV Name                /dev/localvg/datalv
          VG Name                localvg
          LV UUID                5f6V7i-L9zy-9ugw-tqEr-6jza-cTpi-kBisYj
          LV Write Access        read/write
          LV Status              available
          # open                 1
          LV Size                849.99 GB
          Current LE             217598
          Segments               2
          Allocation             inherit
          Read ahead sectors     auto
          - currently set to     256
          Block device           252:0
          
          --- Physical volumes ---
          PV Name               /dev/vdb1
          PV UUID               YpNILa-ZyLn-J4Tc-6gY2-mK9b-Rwqz-m4rZ36
          PV Status             allocatable
          Total PE / Free PE    127999 / 0
          
          PV Name               /dev/vdc1
          PV UUID               VJuNGc-sT0k-cJPG-5Ona-LrDr-wRNs-fNx7ls
          PV Status             allocatable
          Total PE / Free PE    89599 / 0
    2. 列出块设备的 UUID。
      root@host# blkid -s UUID
                                      
          /dev/vda1: UUID="2156d173-9113-4157-a8f2-93140013d2a4"
          /dev/vda2: UUID="c72047bf-3508-46f0-939a-4cf505958b92"
          /dev/mapper/localvg-datalv: UUID="c033c8e1-0399-4ba4-9897-62d85cfa36bd"
  2. 执行一次快速的测试。
    1. 将一些文件写到磁盘中,然后验证您可以读取它们。例如,您可以为 home 目录创建一个备份拷贝,然后列出归档内容。您应该看到相同的结果。您还应该可以读取原来父映像上创建的文件。
      root@host# tar zcvvf /data/idcuser2.tar.gz /home/idcuser
      root@host# tar ztvvf /data/idcuser2.tar.gz
      root@host# tar ztvvf /data/idcuser.tar.gz
    2. 重启机器,然后测试文件系统已经挂载,您能够访问数据。
      root@host# reboot
      root@host# tar ztvvf /data/idcuser.tar.gz

增大子实例中的 LVM

要增大子实例中的 LVM,请执行以下步骤:

  1. 验证块设备可以用于创建物理卷。
    1. 扫描块设备。您可以看到两个没有任何分区的新磁盘:/dev/vdd 和 /dev/vde。您还可以看到 vdc1 分区只有 350GB;忽略 ram 磁盘。
      root@host# lvmdiskscan | grep -v ram
      
          /dev/localvg/datalv [      849.99 GB]
          /dev/vda1           [      101.94 MB]
          /dev/root           [       59.90 GB]
          /dev/vdb1           [      500.00 GB] LVM physical volume
          /dev/vdc1           [      350.00 GB] LVM physical volume
          /dev/vdd            [      500.00 GB]
          /dev/vde            [      500.00 GB]
          /dev/vdf1           [       15.99 GB]
          6 disks
          16 partitions
          0 LVM physical volume whole disks
          2 LVM physical volumes
    2. 确认块设备不包含任何分区表。
      root@host# fdisk -l | grep partition
      
          Disk /dev/vdd doesn't contain a valid partition table
          Disk /dev/vde doesn't contain a valid partition table
    3. 确认在 vdc 块设备上有用于另一分区的空间。
      root@host# fdisk -l /dev/vdc
      
          Disk /dev/vdc: 536.8 GB, 536870912000 bytes
          16 heads, 63 sectors/track, 1040253 cylinders
          Units = cylinders of 1008 * 512 = 516096 bytes
          
          Device Boot      Start         End      Blocks   Id  System
          /dev/vdc1               1      728177   367001176+  8e  Linux LVM
  2. 创建一些 Linux LVM 类型的分区,并将它们初始化为 LVM 物理卷。
    1. 验证 fdisk 响应文件
      root@host# cat fdisk.lvm.partitions
      
          n
          p
          1
          
          
          t
          8e
          w
    2. 生成配置脚本,用于删除现有分区表、重新读取分区表、在块设备上创建一个 8e 分区 ID (Linux LVM)以及将 Linux LVM 初始化为 LVM 物理卷。

      我建议您备份由 dd 删除的块。您可以进行 dd if=device of=backupfile bs=4096 count=1 这样的操作。详细内容请阅读 dd 手册页。也可以使用 sfdisk 来备份分区表。详细内容请查看手册页。

      root@host# for i in $(fdisk -l 2>&1 | awk '/valid/{print $2}')
      do 
      echo "# Partition and initialize LVM PV for device $i"
      echo dd if=/dev/zero of=$i bs=1024 count=1  # Clear partition table
      echo blockdev --rereadpt $i                 # Re-read partition table
      echo fdisk $i \< fdisk.lvm.partitions       # Create Linux LVM partition
      echo pvcreate ${i}1                         # Initialize Physical Volume
      echo -e "\n"
      done

      该脚本生成以下命令。确保您在运行前验证了这些命令。如果没有验证您使用的是正确的设备,那么可能会造成数据丢失。您应该看到两个被标记为不包含有效分区表的块设备。

          # Partition and initialize LVM PV for device /dev/vdd
          dd if=/dev/zero of=/dev/vdd bs=1024 count=1
          blockdev --rereadpt /dev/vdd
          fdisk /dev/vdd < fdisk.lvm.partitions
          pvcreate /dev/vdd1
          
          # Partition and initialize LVM PV for device /dev/vde
          dd if=/dev/zero of=/dev/vde bs=1024 count=1
          blockdev --rereadpt /dev/vde
          fdisk /dev/vde < fdisk.lvm.partitions
          pvcreate /dev/vde1
    3. 验证您已经创建了 LVM 分区。
      root@host# fdisk -l  | grep LVM
      
          /dev/vdb1               1     1040253   524287480+  8e  Linux LVM
          /dev/vdc1               1      728177   367001176+  8e  Linux LVM
          /dev/vdd1               1     1040253   524287480+  8e  Linux LVM
          /dev/vde1               1     1040253   524287480+  8e  Linux LVM
    4. 此时您有两个选项:
      1. 使用 pvresize 增大 350GB 分区。
      2. 创建一个新的物理卷。

      调整现有 PV 的大小更复杂一些,而且容易出错;需要执行以下步骤:

      • 卸载数据:umount/data
      • 停用 VG:vgchange -an localvg
      • 删除磁盘上旧的分区表,并使用相同的 Start 偏移量和默认(最大)End 创建一个新的分区表。
      • 增大分区:pvresize /dev/vdc1
      • 继续调整 LV 和 FS 大小的正常步骤(lvresizee2fsckresize2fs,等等)。

      如何调整现有 PV 的大小不属于本文范畴。如果您希望调整现有 PV 的大小,请确保已经备份了数据,并且很清楚即将要执行的操作。此外,还建议备份您的分区表(使用 dd)。

    5. 选项 1:调整现有 PV 的大小。

      出于为您着想,这里给出了调整现有 PV 大小的步骤。如果您选择采用这一选项,请确保您了解会带来的影响,并使用 debugverbosetest 标志测试您的命令,测试输出并具有数据的当前备份。

      如果您完成了选项 1,请直接跳到 验证 LVM 配置 一节。

      如果没有,请跳到下面的选项 2,在现有的 350GB 分区旁边创建另一个 150GB 的分区,然后使用它来扩展 VG。

      如果您使用的是 32 位 Linux 实例,您需要修改选项 1,将现有的 PV (/dev/vdb1) 从 175GB 增大到 375GB。记住 32 位映像上的块设备是不同的。在本文中运行的测试中,它是 /dev/vdb。我还跳过了在 32 位实例上执行 vgextend 的步骤,因为没给出其他块设备。

      root@host# umount /data
      root@host# vgchange -an localvg
      root@host# fdisk /dev/vdc
          Command (m for help): p
          
          Disk /dev/vdc: 536.8 GB, 536870912000 bytes
          16 heads, 63 sectors/track, 1040253 cylinders
          Units = cylinders of 1008 * 512 = 516096 bytes
          
          Device Boot      Start         End      Blocks   Id  System
          /dev/vdc1               1      728177   367001176+  8e  Linux LVM
          
          Command (m for help): d
          Selected partition 1
          
          Command (m for help): p
          
          Disk /dev/vdc: 536.8 GB, 536870912000 bytes
          16 heads, 63 sectors/track, 1040253 cylinders
          Units = cylinders of 1008 * 512 = 516096 bytes
          
          Device Boot      Start         End      Blocks   Id  System
          
          Command (m for help): n
          Command action
          e   extended
          p   primary partition (1-4)
          p
          Partition number (1-4): 1
          First cylinder (1-1040253, default 1):
          Using default value 1
          Last cylinder or +size or +sizeM or +sizeK (1-1040253, default 1040253):
          Using default value 1040253
          
          Command (m for help): p
          
          Disk /dev/vdc: 536.8 GB, 536870912000 bytes
          16 heads, 63 sectors/track, 1040253 cylinders
          Units = cylinders of 1008 * 512 = 516096 bytes
          
          Device Boot      Start         End      Blocks   Id  System
          /dev/vdc1               1     1040253   524287480+  83  Linux
          
          Command (m for help): w
          The partition table has been altered!
          
          Calling ioctl() to re-read partition table.
          Syncing disks.
      
      root@host# blockdev --rereadpt /dev/vdc
      root@host# partprobe
      root@host# pvresize /dev/vdc1
      root@host# vgextend localvg  /dev/vdd1 /dev/vde1
      root@host# lvresize -l 100%VG localvg/datalv
          Extending logical volume datalv to 1.95 TB
          Logical volume datalv successfully resized
      
      root@host# vgchange -ay localvg
      root@host# e2fsck -f /dev/localvg/datalv
      root@host# resize2fs /dev/localvg/datalv
          Resizing the filesystem on /dev/localvg/datalv to 524283904 (4k) blocks.
          The filesystem on /dev/localvg/datalv is now 524283904 blocks long.
      root@host# e2fsck -f /dev/localvg/datalv
      root@host# mount /data
      root@host# df -h | grep data
          /dev/mapper/localvg-datalv
          2.0T  199M  1.9T   1% /data
    6. 选项 2:在只包含一个 350GB 文件系统的块设备上创建另一个分区。在本例中是 /dev/vdc。确保您正在编辑正确的分区表。删除根磁盘分区表导致数据丢失。由于您映像上的存储配置可能会不同,所以您一定要理解这些步骤,必要时还要在您的实例上手动执行和纠正这些步骤。有关详细信息,请在您的实例中输入 man fdisk,阅读 fdisk 手册页。
      root@host# fdisk /dev/vdc
      
          The number of cylinders for this disk is set to 1040253.
          There is nothing wrong with that, but this is larger than 1024,
          and could in certain setups cause problems with:
          1) software that runs at boot time (e.g., old versions of LILO)
          2) booting and partitioning software from other OSs
          (e.g., DOS FDISK, OS/2 FDISK)
          
          Command (m for help): n
          Command action
          e   extended
          p   primary partition (1-4)
          p
          Partition number (1-4): 2
          First cylinder (728178-1040253, default 728178):
          Using default value 728178
          Last cylinder or +size or +sizeM or +sizeK 
          (728178-1040253, default 1040253):
          Using default value 1040253
          
          Command (m for help): t
          Partition number (1-4): 2
          Hex code (type L to list codes): 8e
          Changed system type of partition 2 to 8e (Linux LVM)
          
          Command (m for help): p
          
          Disk /dev/vdc: 536.8 GB, 536870912000 bytes
          16 heads, 63 sectors/track, 1040253 cylinders
          Units = cylinders of 1008 * 512 = 516096 bytes
          
          Device Boot      Start         End      Blocks   Id  System
          /dev/vdc1               1      728177   367001176+  8e  Linux LVM
          /dev/vdc2          728178     1040253   157286304   8e  Linux LVM
          Command (m for help): w
          
          The partition table has been altered!
          
          Calling ioctl() to re-read partition table.
          
          WARNING: Re-reading the partition table failed with error 16: 
          Device or resource busy.
          The kernel still uses the old table.
          The new table is used at the next reboot.
          Syncing disks.

      本例中 fdisk 的响应文件如下所示:

      n
      p
      2
      
      
      t
      2
      8e
      w
    7. 卸载分区,停用卷组,并重新读取分区表;然后激活 VG 并挂载 FS(或者重新启动)。
      root@host# umount /data                  # Umount the filesystem
      root@host# vgchange -an localvg          # Deactivate the volume group
      root@host# blockdev --rereadpt /dev/vdc  # Re-read the partition table
      # Inform OS of partition table changes:
      root@host# partprobe                     
      root@host# sleep 5;                      # Wait for partprobe to finish
      root@host# vgchange -ay localvg          # Activate the volume group
      root@host# mount /data                   # Mount the filesystem
    8. 在您之前创建的 150GB 分区上初始化新的物理卷。这也是 lvmdiskscan 表明为空的分区。
      root@host# pvcreate /dev/vdc2
      
          Physical volume "/dev/vdc2" successfully created
    9. 验证已经创建了 LVM 物理卷。现在,在 /dev/vdc2 条目旁边会显示有 LVM physical volume
      root@host# lvmdiskscan | grep -v ram
      
          /dev/localvg/datalv [      849.99 GB]
          /dev/vda1           [      101.94 MB]
          /dev/root           [       59.90 GB]
          /dev/vdb1           [      500.00 GB] LVM physical volume
          /dev/vdc1           [      350.00 GB] LVM physical volume
          /dev/vdc2           [      150.00 GB] LVM physical volume
          /dev/vdd1           [      500.00 GB] LVM physical volume
          /dev/vde1           [      500.00 GB] LVM physical volume
          /dev/vdf1           [       15.99 GB]
          4 disks
          17 partitions
          0 LVM physical volume whole disks
          4 LVM physical volumes
    10. 验证物理卷状态。您可以看到三个未使用在 localvg VG 中 PV。
      root@host# [root@vhost0498 ~]# pvs
      
          PV         VG      Fmt  Attr PSize   PFree
          /dev/vdb1  localvg lvm2 a-   500.00G      0
          /dev/vdc1  localvg lvm2 a-   350.00G      0
          /dev/vdc2          lvm2 --   150.00G 150.00G
          /dev/vdd1          lvm2 --   500.00G 500.00G
          /dev/vde1          lvm2 --   500.00G 500.00G
  3. 扩展卷组。
    1. 扩展 localvg 卷组,使其包含新的物理卷,如 pvs 列出的一样:
      root@host# vgextend localvg /dev/vdc2 /dev/vdd1 /dev/vde1
      
          Volume group "localvg" successfully extended
    2. 验证结果。您可以看到一个由所有列出的物理卷组成的 2TB VG。同样,现在 pvs 会列出 localvg 使用的所有 PV;您应该还有 1,150GB 的空闲空间。
      root@host# vgdisplay --partial --verbose
      
          Partial mode. Incomplete volume groups will be activated read-only.
          Finding all volume groups
          Finding volume group "localvg"
          --- Volume group ---
          VG Name               localvg
          System ID
          Format                lvm2
          Metadata Areas        5
          Metadata Sequence No  3
          VG Access             read/write
          VG Status             resizable
          MAX LV                0
          Cur LV                1
          Open LV               1
          Max PV                0
          Cur PV                5
          Act PV                5
          VG Size               1.95 TB
          PE Size               4.00 MB
          Total PE              511995
          Alloc PE / Size       217598 / 849.99 GB
          Free  PE / Size       294397 / 1.12 TB
          VG UUID               8CeTcl-MxuP-NEzw-iMOj-nnhp-dbOG-jXFiBA
          
          --- Logical volume ---
          LV Name                /dev/localvg/datalv
          VG Name                localvg
          LV UUID                5f6V7i-L9zy-9ugw-tqEr-6jza-cTpi-kBisYj
          LV Write Access        read/write
          LV Status              available
          # open                 1
          LV Size                849.99 GB
          Current LE             217598
          Segments               2
          Allocation             inherit
          Read ahead sectors     auto
          - currently set to     256
          Block device           252:0
          
          --- Physical volumes ---
          PV Name               /dev/vdb1
          PV UUID               YpNILa-ZyLn-J4Tc-6gY2-mK9b-Rwqz-m4rZ36
          PV Status             allocatable
          Total PE / Free PE    127999 / 0
          
          PV Name               /dev/vdc1
          PV UUID               VJuNGc-sT0k-cJPG-5Ona-LrDr-wRNs-fNx7ls
          PV Status             allocatable
          Total PE / Free PE    89599 / 0
          
          PV Name               /dev/vdc2
          PV UUID               cLdGD3-MVIp-sdA7-KGi3-RtBT-xJWI-gobVSl
          PV Status             allocatable
          Total PE / Free PE    38399 / 38399
          
          PV Name               /dev/vdd1
          PV UUID               wFyYax-NCn6-2egW-FiUc-3GTB-u77k-evVsc6
          PV Status             allocatable
          Total PE / Free PE    127999 / 127999
          
          PV Name               /dev/vde1
          PV UUID               ijAwMZ-3Qoc-RPoi-n9EK-vkcM-pd40-9LXlnC
          PV Status             allocatable
          Total PE / Free PE    127999 / 127999
    3. 增大逻辑卷(在本文中,会将其增大到 VG 的最大限度)。使用 -L 标志来指定大小。您还可以创建一个新的逻辑卷(推荐做法;记住,fsck 扫描非常大的文件系统会花费很长的时间)。
      root@host# lvresize -l 100%VG localvg/datalv
      
          Extending logical volume datalv to 1.95 TB
          Logical volume datalv successfully resized
    4. 验证结果。您应该有大约 2TB 的 LV。
      root@host# lvdisplay
      
          --- Logical volume ---
          LV Name                /dev/localvg/datalv
          VG Name                localvg
          LV UUID                5f6V7i-L9zy-9ugw-tqEr-6jza-cTpi-kBisYj
          LV Write Access        read/write
          LV Status              available
          # open                 1
          LV Size                1.95 TB
          Current LE             511995
          Segments               5
          Allocation             inherit
          Read ahead sectors     auto
          - currently set to     256
          Block device           252:0
  4. 增大文件系统。
    1. 通过卸载,运行 fsckresize2fs,来增大文件系统。
      root@host# df -h | grep data               # Verify FS size
      
          837G  201M  794G   1% /data
          
      root@host# umount /data                    # Umount the filesystem
      root@host# e2fsck -f /dev/localvg/datalv   # Run a filesystem check
          
          e2fsck 1.39 (29-May-2006)
          Pass 1: Checking inodes, blocks, and sizes
          Pass 2: Checking directory structure
          Pass 3: Checking directory connectivity
          Pass 4: Checking reference counts
          Pass 5: Checking group summary information
          /dev/localvg/datalv: 13/111411200 files (7.7% non-contiguous),
          3547488/222820352 blocks
          
      root@host# resize2fs /dev/localvg/datalv  # Grow filesystem to LV limits
      root@host# e2fsck -f /dev/localvg/datalv  # Run another FS check
      root@host# mount /data                    # Mount filesystem
      
          resize2fs 1.39 (29-May-2006)
          Resizing the filesystem on /dev/localvg/datalv to 524282880 (4k) blocks.
          The filesystem on /dev/localvg/datalv is now 524282880 blocks long.
    2. 验证新的文件系统大小。
      root@host# df -h | grep data
      
          /dev/mapper/localvg-datalv
          2.0T  199M  1.9T   1% /data

验证 LVM 配置

要验证 LVM 配置,请执行以下步骤:

  1. 执行测试。如果要进行更详细的测试,可以将文件系统填充至最大限度,或者使用一个文件系统基准。根据您的实例调整测试文件的大小。例如,在 32 位 Gold 实例上,只能使用一个 300GB 的测试文件(通过设置 count=307200)。
    root@host# tar zcvvf /data/idcuser3.tar.gz /home/idcuser
    root@host# tar ztvvf /data/idcuser3.tar.gz
    root@host# tar ztvvf /data/idcuser.tar.gz
    # Create a 800GB test file:
    root@host# nohup dd if=/dev/zero of=/data/800GBtestfile bs=1M \
        count=819200 > nohup.out 2>nohup.err &
    # Monitor file growth
    root@host# while :; do ls -lha /data/800GBtestfile ; sleep 10; done 
    
    -rw-r--r-- 1 root root 800G 2011-03-28 18:09 /data/800GBtestfile
  2. 验证 LVM 配置。
    root@host# vgdisplay --partial --verbose
    
        Partial mode. Incomplete volume groups will be activated read-only.
        Finding all volume groups
        Finding volume group "localvg"
        --- Volume group ---
        VG Name               localvg
        System ID
        Format                lvm2
        Metadata Areas        5
        Metadata Sequence No  4
        VG Access             read/write
        VG Status             resizable
        MAX LV                0
        Cur LV                1
        Open LV               1
        Max PV                0
        Cur PV                5
        Act PV                5
        VG Size               1.95 TB
        PE Size               4.00 MB
        Total PE              511995
        Alloc PE / Size       511995 / 1.95 TB
        Free  PE / Size       0 / 0
        VG UUID               8CeTcl-MxuP-NEzw-iMOj-nnhp-dbOG-jXFiBA
        
        --- Logical volume ---
        LV Name                /dev/localvg/datalv
        VG Name                localvg
        LV UUID                5f6V7i-L9zy-9ugw-tqEr-6jza-cTpi-kBisYj
        LV Write Access        read/write
        LV Status              available
        # open                 1
        LV Size                1.95 TB
        Current LE             511995
        Segments               5
        Allocation             inherit
        Read ahead sectors     auto
        - currently set to     256
        Block device           252:0
        
        --- Physical volumes ---
        PV Name               /dev/vdb1
        PV UUID               YpNILa-ZyLn-J4Tc-6gY2-mK9b-Rwqz-m4rZ36
        PV Status             allocatable
        Total PE / Free PE    127999 / 0
        
        PV Name               /dev/vdc1
        PV UUID               VJuNGc-sT0k-cJPG-5Ona-LrDr-wRNs-fNx7ls
        PV Status             allocatable
        Total PE / Free PE    89599 / 0
        
        PV Name               /dev/vdc2
        PV UUID               cLdGD3-MVIp-sdA7-KGi3-RtBT-xJWI-gobVSl
        PV Status             allocatable
        Total PE / Free PE    38399 / 0
        
        PV Name               /dev/vdd1
        PV UUID               wFyYax-NCn6-2egW-FiUc-3GTB-u77k-evVsc6
        PV Status             allocatable
        Total PE / Free PE    127999 / 0
        PV Name               /dev/vde1
        PV UUID               ijAwMZ-3Qoc-RPoi-n9EK-vkcM-pd40-9LXlnC
        PV Status             allocatable
        Total PE / Free PE    127999 / 0
  3. 重启以确保一切正常。
    1. 重启。
    2. 卸载、执行 fsck、挂载、测试读/写访问。

管理 LVM 的常用命令

现在,让我们来看看一些管理 LVM 的常用命令。

显示属性

  • 物理卷
    • pvdisplay - 显示一个物理卷的属性。
    • pvs - 报告有关物理卷的信息。
  • 卷组
    • vgdisplay - 显示卷组的属性。
    • vgs - 报告有关卷组的信息。
  • 逻辑卷
    • lvdisplay - 显示一个逻辑卷的属性。
    • lvs - 报告有关逻辑卷的信息。

检查元数据

  • pvck - 检查物理卷元数据。
  • vgck - 检查卷组元数据。

重命名 VG 和 LV

  • vgrename - 重命名一个卷组。
  • lvrename - 重命名一个逻辑卷。

调整磁盘或分区、LV、文件系统的大小

调整大小时要特别小心,尤其是缩小文件系统和逻辑卷时。

  • 小心任何拼写错误、文件系统调整大小工具中的 bug、LVM、大小参数标准(GiB 与 GB)之间的差异,甚至本文中的错误。
  • 使用统一单位的大小(例如 512 字节扇区)。
  • 为误差留有余地。
  • 使用 debugverbosetest 标志来测试 LVM 命令。
  • 在正式用于保存数据之前,测试您的新文件系统。
  • 手头具有一份最近的、经过测试的备份。
  • 确保您熟悉 LVM 和文件系统工具。先在一台拥有相似配置的测试机器上试用一下这些工具。

调整 LVM 和 ext2/3/4 文件系统大小的常用命令:

  • pvresize - 调整 LVM2 在使用的磁盘或分区的大小。
  • lvextend - 扩展一个逻辑卷的大小。
  • lvreduce - 缩小一个逻辑卷的大小。
  • lvresize - 调整一个逻辑卷的大小。
  • e2fsck - 检查 Linux ext2/ext3/ext4 文件系统。
  • resize2fs - 调整 ext2/ext3/ext4 文件系统的大小。

我在本文中已经演示了 lvresizee2fsckresize2fs 的使用。

如果您将 LV 缩小到比您调整到的文件系统还小,那么就会发生数据丢失(一下子的事情,并且不可逆)。您肯定不会希望发生这样的事。出于为您着想,这里演示了一个缩小 LV 的流程。

  • 卸载文件系统。
  • 运行文件系统检查。
  • 缩小文件系统。
  • 缩小 LV。

下面是一个例子,即缩小文件系统以及相关的 LV,以便为另一个 LV 腾出空间:

# Umount the FS
root@host# umount /data
# Check the FS
root@host# e2fsck -f /dev/localvg/datalv
# Shrink the FS first
root@host# resize2fs -p /dev/localvg/datalv 900G
# Shrink the LV to match the FS size
root@host# lvresize /dev/localvg/datalv --size 900G
# Check the FS
root@host# e2fsck -f /dev/localvg/datalv
# Create a new LV and FS
root@host# lvcreate -A y -L 500GB -n backuplv localvg
root@host# mkfs.ext3 -L backuplv /dev/localvg/backuplv
root@host# mkdir /backup; mount /dev/localvg/backuplv /backup
root@host# mount /data
root@host# df -h | egrep "backup|data"
    /dev/mapper/localvg-backuplv
        493G  198M  467G   1% /backup
    /dev/mapper/localvg-datalv
    886G   37G  823G   5% /data

以上只是一个例子:不要将其复制并粘贴到您的项目中,并期望保留您的数据。您可能还希望参考 LVM 文档的其他主题,例如从 VG 中删除 PV。

备份和还原 LVM 元数据

您可以备份和还原 LVM 元数据;默认情况下会备份到 /etc/lvm/backup。下面这些是用来管理 LVM 元数据备份/还原的命令:

  • vgcfgbackup - 备份卷组描述符区。
  • vgcfgrestore - 还原卷组描述符区。

制作 LVM 快照

有关使用快照的详细内容,请参考 LVM HOWTO 的 Taking a Backup Using Snapshots 一节。下面这些是用于制作快照的命令:

  • lvcreate - 在现有卷组中创建一个逻辑卷。这也使用 -s 标志创建 LV 快照。
  • lvconvert - 将逻辑卷从线性转换为镜像或者快照。

LVM 快照用来捕捉文件系统的一个静止状态。捕获快照时,会分配一个新的 LV 来记录对文件系统的改变。

如果快照卷已满,会丢弃快照(变得不可用)。您应该释放快照,让原有的 LV 回到在线状态。

快照卷应该比期望改变的总量大。

如果您按照原有 LV 的大小创建一个快照,那么它永远不会溢出。

快照通常用于获得一致的备份。

出于为您着想,这里给出了一个创建快照的常用流程:

# Make sure your filesystem is in a consistent state at this point.
# You may want to use something like "lsof | grep /data" or umount the filesystem, etc.

# Create the snapshot
root@host# lvcreate -L 50G -s -n dbbkp /dev/localvg/datalv

# Verify the snapshot
root@host# lvdisplay

# You can restart work on your original FS.

# Mount the snapshot
root@host# mkdir -p /mnt/localvg/dbbkp
root@host# mount /dev/localvg/dbbkp /mnt/localvg/dbbkp

# Perform your backup. While you're backing up,
# your database is already back up and running.
# Hopefully you have something better than:
root@host# cd /mnt/localvg/dbbkp; tar zcvpf ~/backup.tar.gz .

# Release the snapshot
root@host# umount /mnt/localvg/dbbkp
root@host# lvremove /dev/localvg/dbbkp
root@host# lvdisplay

不要试图使用 LVM 快照来代替正确的备份。它们会迅速占满磁盘空间。

还原磁盘 UUID 和 LVM 备份

在一些 LVM 元数据被破坏的情况下,您可能需要还原磁盘 UUID。记住,不管您计划如何还原 UUID,都应该有一个磁盘备份。如果我在数据恢复过程中在实际的生产系统上还原磁盘 UUID,我可能会花点时间,将 VG 中的块设备部分复制到外部存储等设备上(如果我手头没有最近的备份的话)。

出于为您着想,这里给出了还原磁盘 UUID 的流程。您应该适当修改并进行测试(使用 debugtestverbose 标志)。为了测试这种情况,我故意破坏了元数据,如下所示:root@host# pvchange -v -u $(uuidgen) /dev/vdb1 ,然后试图使用 /etc/lvm/backup 中备份文件中的 UUID 来还原它。在破坏元数据之后,pvscan 会报告 "Couldn't find device with uuid IffYl-9cfa-BYhZ-Wt5h-7UOi-YWLx-US8wJ3"。

  1. 验证元数据:
    root@host# vgck -dvvv
  2. 停用 VG:
    root@host# vgchange -an localvg
  3. 借助于 LVM 备份文件还原正确的磁盘 UUID。使用正确的 UUID。
    root@host# pvcreate -ff --restorefile /etc/lvm/backup/localvg \
        --uuid 1IffYl-9cfa-BYhZ-Wt5h-7UOi-YWLx-US8wJ3 /dev/vdb1
  4. 从备份还原配置:
    root@host# vgcfgrestore --file /etc/lvm/backup/localvg localvg
  5. 激活 VG。
    root@host# vgchange -ay localvg
  6. 运行文件系统检查,验证数据的完整性。

图形化工具 system-config-lvm 和 yast2

LVM 还可以使用图形化工具进行管理。关于如何使用 VNC 连接到您的实例,或者配置 SSH X11 不断同步您工作台的画面等详细内容,请参考用户指南。记住,默认情况下,防火墙会阻止 VNC 使用的端口;用户指南中有这方面的说明。在编写本文的时候使用的是 CC V1.4,该文档中这一节的名称是 “Connecting to your Linux instance with VNC”。

SuSE Linux 和 yast

通过 VNC 连接到您的实例,启动 yast2,切换到 System > Partitioner,并展开 System View 中的 Volume Management。您可以使用 YaST 2 Expert Partitioner 来创建、删除、扩展 VG 和 LV,创建文件系统,等等: yast2

图 2. 图 2. YaST 2 Expert Partitioner
YaST 2 Expert Partitioner

有关使用 YaST 2 Expert Partitioner 的更多详细信息,请参考 Novell SUSE Linux Enterprise Server Storage Administration Guide。

Red Hat Linux 和 system-config-lvm

在 Red Hat上,您可以使用 system-config-lvm 从图形界面执行 Logical Volume Management。

图 3. 图 3. 使用 system-config-lvm 执行 Red Hat Logical Volume Management
使用 system-config-lvm 执行 Red Hat Logical Volume Management

结束语

通过执行以上这些步骤,您现在可以使用您的 Linux 映像上的临时存储配置一个 LVM 了。我已经:

后续步骤:更多有关云的主题

在本系列有关云的文章中,IBM® SmartCloud Enterprise 的技术专家分享了他们有关如何在云中执行任务的知识。任务从极其简单的到比较复杂和困难的都有,因此所有技能级别的设计人员、开发人员和部署人员都可以学到相应的知识。通过学习这一系列的文章,您可以增加如下不同 IBM 云主题领域的技能:

  • 安装 IIS web 服务器。
  • 在云中使用命令行。
  • 使用 IBM 云来扩展您的企业网络。
  • 在 IBM 云中交付高可用性的应用程序。
  • 动态地为定制实例参数化云映像。
  • 发现 IBM 云配置的多种方法。

可以在 参考资源 中找到有关这些和更多主题的链接。

  • 提供了有关 LVM 组件及使用的背景内容;解释了本文中使用的表示法和如何设置我的测试环境。
  • 概述了用来说明从 Bronze 64 升级到 Platinum 64 实例所使用的流程。该流程包含以下一些知识:
    • 配置一个 Bronze 64 位 Linux 实例(RHEL 5.5 或者 SLES 11 SP1)。
    • 配置 LVM 横跨多个空的块设备。
    • 捕获私有映像。
    • 以捕获的映像部署一个新的实例,作为 Platinum 实例。
    • 从 500GB 块设备和额外的两个 250GB 块设备的剩余空间,创建一个新的 LVM 分区。
    • 使用 pvresize 增大现有 PV,并向 VG 添加两个额外的 500GB 块设备(在分完区之后),以此作为上一步的替代步骤。
    • 调整 LV 和文件系统的大小。
  • 介绍了在较低级别父映像中配置 LVM 的详细步骤。
  • 介绍了在升级后的子实例中配置 LVM 的详细步骤。包括
    • 捕获私有映像。
    • 从捕获的映像部署一个新的实例。
    • 验证子实例的 LVM 配置。
    • 增大子实例中的 LVM。
    • 在增大之后,对 LVM 配置进行 “冒烟测试”。
  • 交付了用来管理 LVM 的常用命令清单。
  • 并快速讨论了如何使用图形化命令 yast2(用于SLES)和 system-config-lvm(用于RHEL)来管理 LVM。

为了继续对该主题的探讨,您应该访问 developerWorks Linux 参考资料;更多有关 IBM SmartCloud Enterprise 的实际应用,请参考本文侧栏中提及的和本文参考资料中找到的主题。

参考资料

学习

获得产品和技术

  • 查看在 IBM SmartCloud Enterprise 上可用的 产品映像

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Cloud computing, Linux
ArticleID=752313
ArticleTitle=IBM SmartCloud Enterprise 技巧: 配置 Linux Logical Volume Manager
publish-date=08152011