LVM:是否可以扩展正在使用的分区?

LVM:是否可以扩展正在使用的分区?

我有一个存储数据库数据的磁盘。磁盘现在已满,我想向机器添加另一个磁盘。我听说通过 LVM 可以添加和扩展分区,所以我想知道是否可以通过添加新磁盘来扩展当前的完整磁盘(不会损坏其当前数据)?

答案1

LVM 可以轻松调整现有分区的大小并移动它们。但它们首先必须是 LVM 分区。由于您当前的分区不在 LVM 上,因此您必须手动执行操作。我的答案中的所有命令都需要以 root 身份执行。

准备新磁盘

  1. 创建 GPT 或 MBR 分区供 Linux 使用。使用整个磁盘,除非您想与其他操作系统共享该磁盘。我将称该分区为/dev/sdb1
  2. 制作/dev/sdb1LVM物理体积,即声明这部分磁盘用于LVM。

    pvcreate /dev/sdb1
    
  3. 创建LVM卷组包含该物理卷。所有 LVM 卷都是卷组的一部分。为该卷组选择一个名称,例如alex_os

    vgcreate alex_os /dev/sdb1
    
  4. 您现在有一些空间可供 LVM 使用。创建一个足够大的 LVM 逻辑卷以容纳您要在其上存储的数据。如果需要,您可以使用所有空间(除非您想为另一个文件系统或交换空间保留空间),但由于缩小文件系统比扩展它更困难,因此最好只使用您认为在文件系统中需要的空间。中期加上安全边际。为逻辑卷选择一个名称,例如root为您的根文件系统,或者db如果您要在其上存储数据库。

    lvcreate -L 40g -n root alex_os
    

接下来做什么取决于您是否要将操作系统分区移动到新磁盘,或者使用新磁盘作为额外存储。

使用新磁盘进行额外存储

  1. 在新磁盘上创建文件系统。

    mkfs.ext4 /dev/mapper/alex_os-root
    
  2. 注册新文件系统以供使用。为其选择一个安装点。这可以是现有目录或新目录。

    • 如果您想移动/var/lib/mysql到新磁盘,请将其作为安装点。首先将新文件系统挂载到临时位置,移动数据(确保执行此操作时文件未被使用!

      service mysql stop
      mount /dev/mapper/alex_os-db /mnt
      mv /var/lib/mysql/* /mnt
      mount --move /mnt /var/lib/mysql
      service mysql start
      

      最后编辑该文件,在第二列中/etc/fstab包含的行之后添加以下行:/

      /dev/mapper/alex_os-db /var/lib/mysql ext4 errors=remount,ro 0 2
      
    • 如果您不想将新磁盘绑定到特定服务,请将其安装到其他位置,例如,将以下行添加到第二列中/etc/fstab包含的行之后:/

      /dev/mapper/alex_os-db /media/data ext4 errors=remount,ro 0 2
      

      然后创建挂载点并挂载文件系统:

      mkdir /media/data
      mount /media/data
      

      您现在可以移动您想要放在那里的任何数据,并使用符号链接来自服务期望文件的位置。在移动文件时停止访问这些文件的任何服务!例如,要将 的内容移动/var/lib/mysql到新磁盘:

      service mysql stop
      mv /var/lib/mysql /media/data/
      ln -s /media/data/mysql /var/lib/mysql
      service mysql start
      

将系统转移到新盘

  1. 重新启动以挽救媒体(例如系统救援光盘)将数据复制到新磁盘。您无法从正在运行的系统进行复制,因为不可能获得一致的快照²。要复制数据,您有两种可能性:

    • 创建文件系统并复制文件,例如 ext4 文件系统:

      mkfs.ext4 /dev/mapper/alex_os-root
      mount /dev/mapper/alex_os-root /media/alex_os-root
      cp -a /media/sda1 /media/alex_os-root
      
    • 复制文件系统映像,然后将其展开以填充,例如对于 ext4 文件系统:

      cat /dev/sda1 >/dev/mapper/alex_os-root
      resize2fs /dev/mapper/alex_os-root
      
  2. 使新磁盘可启动。具体如何执行取决于您的发行版。您通常必须安装引导加载程序并重建 initramfs。例如,在 Ubuntu 上,您通常需要类似的东西

    chroot /media/alex_os-root
    update-initramfs
    update-grub
    grub-install /dev/sdb
    

1调整分区上文件系统的大小是另一回事;大多数现代文件系统支持在线扩展,但不支持在线收缩。
²技术上来说可能cp -a如果系统处于空闲状态,则可能会很幸运,但这会导致灾难;这可能会导致难以跟踪的延迟错误。 LVM 的优点之一是您可以使用它来拍摄一致的快照。某些文件系统(zfs、btrfs)有自己的快照功能,但 ext4 没有。

相关内容