我有一个存储数据库数据的磁盘。磁盘现在已满,我想向机器添加另一个磁盘。我听说通过 LVM 可以添加和扩展分区,所以我想知道是否可以通过添加新磁盘来扩展当前的完整磁盘(不会损坏其当前数据)?
答案1
LVM 可以轻松调整现有分区的大小并移动它们。但它们首先必须是 LVM 分区。由于您当前的分区不在 LVM 上,因此您必须手动执行操作。我的答案中的所有命令都需要以 root 身份执行。
准备新磁盘
- 创建 GPT 或 MBR 分区供 Linux 使用。使用整个磁盘,除非您想与其他操作系统共享该磁盘。我将称该分区为
/dev/sdb1
。 制作
/dev/sdb1
LVM物理体积,即声明这部分磁盘用于LVM。pvcreate /dev/sdb1
创建LVM卷组包含该物理卷。所有 LVM 卷都是卷组的一部分。为该卷组选择一个名称,例如
alex_os
。vgcreate alex_os /dev/sdb1
您现在有一些空间可供 LVM 使用。创建一个足够大的 LVM 逻辑卷以容纳您要在其上存储的数据。如果需要,您可以使用所有空间(除非您想为另一个文件系统或交换空间保留空间),但由于缩小文件系统比扩展它更困难,因此最好只使用您认为在文件系统中需要的空间。中期加上安全边际。为逻辑卷选择一个名称,例如
root
为您的根文件系统,或者db
如果您要在其上存储数据库。lvcreate -L 40g -n root alex_os
接下来做什么取决于您是否要将操作系统分区移动到新磁盘,或者使用新磁盘作为额外存储。
使用新磁盘进行额外存储
在新磁盘上创建文件系统。
mkfs.ext4 /dev/mapper/alex_os-root
注册新文件系统以供使用。为其选择一个安装点。这可以是现有目录或新目录。
如果您想移动
/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
将系统转移到新盘
重新启动以挽救媒体(例如系统救援光盘)将数据复制到新磁盘。您无法从正在运行的系统进行复制,因为不可能获得一致的快照²。要复制数据,您有两种可能性:
创建文件系统并复制文件,例如 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
使新磁盘可启动。具体如何执行取决于您的发行版。您通常必须安装引导加载程序并重建 initramfs。例如,在 Ubuntu 上,您通常需要类似的东西
chroot /media/alex_os-root update-initramfs update-grub grub-install /dev/sdb
1调整分区上文件系统的大小是另一回事;大多数现代文件系统支持在线扩展,但不支持在线收缩。
²技术上来说可能cp -a
如果系统处于空闲状态,则可能会很幸运,但这会导致灾难;这可能会导致难以跟踪的延迟错误。 LVM 的优点之一是您可以使用它来拍摄一致的快照。某些文件系统(zfs、btrfs)有自己的快照功能,但 ext4 没有。