是否可以使用 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 卷。它真的不受支持還是我錯過了什麼?
正如消息所說,您只能線上增長ext4 文件系統。如果你想縮小它,你需要先解除安裝它。
根據 ext4 文件系統維護者Ted Ts’o 的說法:
抱歉,不支持線上縮容。
如果情況是沒有控制台的遠端伺服器,您可以在重新啟動時使用 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
以更新核心的 initramfs,該核心kernel-name
在引導載入程序 (grub) 中設置為預設值。如果啟動失敗 - 您可以使用另一個未修改的健康核心/initramfs 啟動。或者您可以使用all
更新所有核心,但是您無法返回。檢查您的系統中是否沒有任何自動增長文件系統的工具(例如 cloud-init - comment
resizefs
in/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 非常有用,因為新分區沒有可用空間。