是否可以使用 LVM 在线缩小 EXT4 卷?

是否可以使用 LVM 在线缩小 EXT4 卷?

今天我在装有 OpenSUSE 12.3(内核 3.7)的机器上尝试了这个:

# resize2fs /dev/mapper/system-srv 2G
resize2fs 1.42.6 (21-Sep-2012)
Filesystem at /dev/mapper/system-srv is mounted on /srv; on-line resizing required
resize2fs: On-line shrinking not supported

/dev/mapper/system-srv是 EXT4 卷。

它真的不受支持吗或者我遗漏了什么?

答案1

正如消息所说,你只能生长在线安装 ext4 文件系统。如果要缩小文件系统,则需要先卸载它。

根据 ext4 文件系统维护者,Ted Ts'o:

抱歉,不支持在线收缩。

答案2

如果远程服务器没有控制台,您可以在重启时使用 initramfs 缩小文件系统。您需要将 resize2fs 添加到 initramfs 并在挂载 root 之前运行它。

Debian/Ubuntu 示例:

/etc/initramfs-tools/hooks/resizefs (可执行文件):

#!/bin/sh

set -e

PREREQS=""

prereqs() { echo "$PREREQS"; }

case $1 in
    prereqs)
        prereqs
        exit 0
    ;;
esac

. /usr/share/initramfs-tools/hook-functions

copy_exec /sbin/e2fsck
copy_exec /sbin/resize2fs
    
exit 0

/etc/initramfs-tools/scripts/local-premount/resizefs (可执行)

#!/bin/sh

set -e

PREREQS=""

prereqs() { echo "$PREREQS"; }

case "$1" in
    prereqs)
        prereqs
        exit 0
    ;;
esac

# simple device example
/sbin/e2fsck -yf /dev/sda1
/sbin/resize2fs /dev/sda1 5G # see size info below
/sbin/e2fsck -yf /dev/sda1

# complex device example
# activate md-raid containing FS/PV
#/sbin/mdadm -A /dev/md0
# activate VG containing FS
#/sbin/lvm vgchange -ay vg0
# resize
#/sbin/e2fsck -yf /dev/vg0/root # or /dev/md0
#/sbin/resize2fs /dev/vg0/root 5G
#/sbin/e2fsck -yf /dev/vg0/root

现在运行update-initramfs -u -k kernel-name以更新引导加载程序 (grub) 中设置为默认内核的 initramfs kernel-name。如果启动失败 - 您可以使用另一个未修改的健康内核/initramfs 进行启动。或者您可以使用它all来更新所有内核,但这样您就无法恢复了。

检查您的系统中没有任何自动增大文件系统的工具(例如 cloud-init - 注释resizefs/etc/cloud/cloud.cfg

重启。检查文件系统大小。删除 initramfs 脚本并update-intiramfs -u -k kernel-name再次运行。

现在,您可以使用parted resizepart/ mdadm --grow --size=/缩小底层设备lvresize -L。设备的大小应大于脚本中的文件系统大小。避免出错的最简单方法是:如果计划的设备大小为 6G。将脚本中的 fs 大小设置为 5G。调整 fs 大小后 - 将设备大小调整为 6G,然后使用 将 fs 增加到最大在线大小resize2fs /dev/sda1。现在您的 fs 完全适合您的设备。

对于 dracut (Fedora,CentOS) 使用相同的逻辑 (/usr/lib/dracut/modules.d)。

这对于加密或移动 rootfs 非常有用,因为新分区没有可用的空间。

答案3

是的,您可以缩小/移动/扩大根分区,而无需重新启动(也不是 livecd,也不是 usbkey):参考这个答案。虽然篇幅较长且有点冒险,但写得非常好,易于理解。

resize2fs 无法缩小在线ext4分区。当此限制应用于根分区时,您可能会认为无法避免重新启动主机以允许缩小分区root,这可能是您想要避免的事情。链接的过程将允许您卸载根分区而无需任何重新启动。因此,从这个角度来看,严格来说,这并不是在线的根据分区的安装状态调整大小,但是根据网络在线状态或主机的可达性,它仍然是在线调整大小。

当然,如果您只想扩大 ext4 分区,您应该坚持传统的工作resize2fs解决方案。

我链接的通用解决方案适用于任何类型的专用或 VPS 解决方案。

TLDR;此解决方案意味着pivot_roottmpfs可以umount安全地使用根分区并对其进行操作。完成后,您将pivot_root返回到新的根分区。

这允许对根文件系统进行几乎任何操作(移动它、更改文件系统、更改它的物理设备......)。

我个人曾使用过它,它在 debian 系统上也运行得很好,但该指南最初是在 2007 年为 redhat 编写的,我链接的答案已针对 CentOS7 进行了更新。它很可能可以在您的 OpenSUSE 上运行,尽管可能需要进行一些调整。

相关内容