今天我在装有 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
答案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_root
您tmpfs
可以umount
安全地使用根分区并对其进行操作。完成后,您将pivot_root
返回到新的根分区。
这允许对根文件系统进行几乎任何操作(移动它、更改文件系统、更改它的物理设备......)。
我个人曾使用过它,它在 debian 系统上也运行得很好,但该指南最初是在 2007 年为 redhat 编写的,我链接的答案已针对 CentOS7 进行了更新。它很可能可以在您的 OpenSUSE 上运行,尽管可能需要进行一些调整。