GNU/Linux >> Linux の 問題 >  >> Linux

LVM を使用して EXT4 ボリュームをオンラインで縮小することはできますか?

解決策 1:

メッセージが言ったように、成長しかできません オンラインの ext4 ファイルシステム。縮小したい場合は、まずアンマウントする必要があります。

ext4 ファイルシステムのメンテナーである Ted Ts'o によると:

<ブロック引用>

申し訳ありませんが、オンライン縮小はサポートされていません.

解決策 2:

コンソールのないリモート サーバーの場合は、再起動中に initramfs を使用してファイル システムを圧縮できます。 root をマウントする前に、resize2fs を initramfs に追加して実行する必要があります。

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 を実行します カーネル kernel-name の initramfs を更新する これは、ブートローダー (grub) でデフォルトとして設定されています。起動に失敗した場合 - 別の変更されていない正常なカーネル/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 に変更し、resize2fs /dev/sda1 を使用して fs をオンラインで最大に拡張します . 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 で動作する可能性は非常に高いですが、多少の調整は必要です。


Linux
  1. LVMを使用したLinuxでの論理ボリュームの作成

  2. 物理的なボリュームを縮小する方法は?

  3. RHEL / CentOS :LVM ボリュームを縮小する方法

  1. CentOS / RHEL :pvmove コマンドを使用してストレージ (LVM) を移行する方法

  2. CentOS / RHEL :LVM のボリューム グループ (VG) に物理ボリューム (PV) を追加する方法

  3. lvremove コマンドがエラー「LVM – 開いている論理ボリュームを削除できません」で失敗する

  1. Lum – Lvmとそれに含まれる物理ボリュームと論理ボリュームを使用してパーティションを拡張する方法は?

  2. Lvmパーティション/物理ボリューム>2tbを作成する方法は?

  3. CentOS インストールでのパーティションの作成 (標準パーティションと LVM 物理ボリューム)