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


47

今日、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ボリュームです。

それは本当にサポートされていないのですか、何か不足していますか?

回答:


68

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

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

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


12
それは残念です...
アリシア

5
downvoteとは何ですか?
マイケルハンプトン

16
@MichaelHampton-メッセンジャーを撃つバカ?:D
ティンク

2
それは10年前です。これはまだ実装されていますか?
デュアン

@duaneいいえ。ありません。それもありそうもない。
マイケルハンプトン

17

はい、再起動せずにルートパーティションを縮小/移動/拡張できます(livecdもusbkeyもありません):この回答を参照してください。非常に長く、少し危険ですが、非常によく書かれており、簡単に理解できます。

resize2fs オンラインext4パーティションを縮小できません。この制限をルートパーティションに適用すると、ホストの再起動を避けてrootパーティションを縮小することを避けられないと考えるようになる場合があります。リンクされたプロセスにより、再起動せずにルートパーティションをアンマウントできます。したがって、この観点では、パーティションのマウント状態に関する厳密なオンラインサイズ変更ではありませんが、ネットワークのオンラインステータスまたはホストの到達可能性に関するオンラインサイズ変更のままです。

もちろん、ext4パーティションのみを拡張する場合は、従来の実用的なresize2fsソリューションに固執する必要があります。

リンクした一般的なソリューションは、たとえば、あらゆるタイプの専用ソリューションまたはVPSソリューションで機能します。

TLDR; この溶液を、意味pivot_rootするtmpfsことができますので、umountそれで安全にルートパーティションがライブやフィドル。完了したらpivot_root、新しいルートパーティションに戻ります。

これにより、ルートファイルシステムでのほとんどの操作が可能になります(移動、ファイルシステムの変更、物理デバイスの変更など)。

私はこれを個人的に使用しましたが、debianシステムでも非常にうまく機能しますが、ガイドは当初2007年にredhat向けに書かれ、リンクした回答はCentOS7用に更新されました。OpenSUSEで動作する可能性は非常に高いですが、おそらくある程度の適応があります。


4
これは、「オンライン成長」との比較に関して「オンライン」ではありません。すべてのサービスが停止している必要があり、ルートファイルシステムにアクセスできなくなります。このコメントのlivecdまたはinitramfs / rdshellアプローチとこれを対比する価値があるかもしれません。人々がこれに混乱するのは嫌だ。
ブライアンクリスマン

2
@BrianChrismanこれは確かに明確化に値する落とし穴であり、私の投稿で編集をカバーしたことを願っています。フィードバックに感謝します。
vaab

参照したソリューションで気に入っているのは、「ほぼオンライン」であることです。小さなスクリプトとツールをdracutコマンドにエンコードして、この特定のことを行い、kexecからinitramfsを起動しました。これが何らかの形でプロセスを通してsshセッションを開いたままにしておくことができれば、それが最善でしょう。sshdと必要なファイルを使用して偽のルートを構築し、別のポートで別のsshdを起動し(別のポートでssh'dしているため)、システムのロボトマイズを続行する前に別のポートにsshして接続を確認できると思います。
ブライアンクリスマン

13

ケースがコンソールなしのリモートサーバーの場合、再起動中に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

/sbin/e2fsck -yf /dev/sda1
/sbin/resize2fs /dev/sda1 5G
/sbin/e2fsck -yf /dev/sda1

ここで、update-initramfsを実行し、再起動し、サイズを確認し、これらのスクリプトを削除して、update-intiramfsを再度実行します。

dracut(Fedora、CentOS)の場合、同じロジック(/usr/lib/dracut/modules.d)を使用します。

これは、rootfsの暗号化または移動に非常に便利で、新しいパーティションに使用可能な空きスペースがありません。


2
これは魅力のように機能します。-uオプションを指定してupdate-initramfsを実行する必要があることに注意してください。
ディオミディススピネリス

クール。私の場合、私もする必要がありましたupdate-grub
ヴォイチェフカチュマレク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.