web-dev-qa-db-ja.com

grub2を使用してルートファイルシステムのサイズを変更/縮小します(つまり、マウントする前)

コンテキスト:

  • いくつかのリモートdebian732ビットサーバー
  • sSH経由でのみアクセス可能
  • ディスクの半分以上が空です
  • サーバーごとに1つのディスクパーティション全体
  • 小さなメンテナンスウィンドウ、長時間ダウンすることはできません
  • ext4ファイルシステム
  • 注:VirtualBox VMを使用してソリューションを開発していますが、サーバーは真っ直ぐなベアメタルです。

目標: OSをdebian 9+に非破壊的にアップグレードします。理想的には、マシンは新しいOSで再起動するまで稼働し続ける必要があるためです。


したがって、サーバーごとに、次のことを行う予定です(他の提案を歓迎します)。

  1. 現在のdeb7rootfsをresize2fsでパーティションサイズの1/2より少し小さく縮小します
  2. パーティションを縮小して、ディスクの1/2をクリアします
  3. 新しく解放されたスペース(/、/ home、swap)をパーティション分割し、LVM2をインストールします
    (VG、LVなどを作成)およびDebian 9

私の問題は、resize2fsがマウント解除された場合にのみshrinkext4fsを実行できることです。したがって、GRUB2のブートロードシーケンス中に、initrdイメージまたはinitramfsを使用して、マウントされていない/ dev/sda1でresize2fsを呼び出すという考え方です。

静的なresize2fsバイナリとそれを呼び出す(そして他の検証などを行う)シェルスクリプトを含む独自のinitrdイメージを作成しましたが、grub.cfgファイルに正しいエントリを書き込んで作成しようとして問題が発生したようです。 initrdイメージをマウントし、マウントされていない/ dev/sda1でサイズ変更スクリプトを実行します。

だから私の質問は:

/ bin/resize.shスクリプトを含むカスタムinitrdイメージをロードして実行するには(/bin/resize.sh)、どのgrub.cfg menuentryを記述する必要がありますか?

2
Martin Vincent

(@ All:申し訳ありませんが、質問に答えるために戻ってこなかったことに気づきました。これまで以上に遅くなりました。ここにあります。)ありがとうございました Bob ところで。

だから、私の解決策は:

私は、大まかに次の手順でinitrdを使用して動作させることができました。

1.initrdイメージファイルを作成します(〜/ initrdで既存のファイルを解凍し、いくつかのファイルを追加します)そして次のように再圧縮します:

debian7-32bits:~/initrd# find . | cpio -o -H newc | gzip -9 > /boot/initrd.img-3.2.0-5-486-resize2fs

2。次のように/boot/grub/grub.cfgにエントリを作成します。

debian7-32bits:~/initrd# menuentry "run_once_resize_fs" { set root='(hd0,msdos1)'; insmod linux grub help kernel initrd; linux  /boot/vmlinuz-3.2.0-5-486; initrd /boot/initrd.img-3.2.0-5-486-resize2fs; } 

2。次のように/boot/grub/grub.cfgにエントリを作成します。

残念ながら、2年前の別の職場で、起動時にメニューエントリを呼び出すスクリプト(ステップ3.?)がありません。うまくいけば、これはまだ誰かを助けることができます。

0
Martin Vincent