CentOSを実行している仮想マシンがあります。
既存のCentOS VMに新しい仮想ディスクを接続し、新しく接続されたこのディスクにGRUBをインストールしようとしています。
後で新しく準備された起動可能なハードドライブとカスタムルートファイルシステムとカーネルを使用して、2番目の仮想マシンを起動します。
次の手順を試しました。
- 既存の稼働中のCentOSマシンに新しい仮想ディスクを接続します。
- 新しいパーティションが作成されます
fdisk /dev/sdb
。パーティションを分割する場合、オプションのデフォルトパーティションとパーティション番号1などのデフォルトオプションを選択しました。 - ディスクフォーマットを使用してください
mkfs.ext3 /dev/sdb1
。 - ディスクをにマウントします
/media/new_drive
。 - GRUBがインストールされました
grub-install /dev/sdb1 --root-directory=/media/new_drive/
。
その後、新しく準備されたハードドライブを持つ2番目の仮想マシンは起動しません。エラーが発生しますcould not read from the boot medium
。 MBRが更新されていないようですが、新しいドライブにgrub-install
GRUBがインストールされていることがわかります。/boot/grub
しかし、何よりも最悪のことは、既存のCentOS GRUBが破損していることです。 CentOS VMがハングし、黒い画面が表示され、唯一のテキストはGRUB
。
grub-install /dev/sdb1
sdb1のMBRを変更しないのはなぜですか?これが新しいドライブにGRUBをインストールする正しい方法ではありませんか?
答え1
私はgrub2の専門家ではありません(申し訳ありません)。しかし、grub-install行に追加すると、grubプロンプトで起動できるファイルが生成されるのを--skip-fs-probe
防ぐことができることがわかりました。/boot/grub/device.map
このパラメータがないと、grub-installはユーザーが言うようには実行しませんが、自分がユーザーよりもスマートで他のタスクを実行できると思います。
もう1つは、正しいgrubインストールを使用していることを確認することです(つまり、元のgrubではなくgrub2の場合)。 Centosの内部では問題ありませんが、SystemRecoveryCDを使用すると両方のバージョンが利用可能になりますgrub2-install
。
@wurtelが指摘したように、パーティションではなくドライブを指定する必要があります。 Grub2はディスクドライブ全体のセクタ0にインストールされます。この「スタブ」は起動時に実行されますが、次の起動手順のためにファイルをインストールするにはディスクの場所を知る必要があります。これがパラメータです。--root-directory
のための。 (私の考えでは。)
私は読んで、インターネット検索を介してgrub2バージョン1.99 ++では実際には機能しないman grub-install
ことがわかりました--root-directory
。しかし、私の経験ではうまくいきました。実際のブートディレクトリを使用し--boot-directory
て参照する必要があるため、以下が提供されます。
grub-install /dev/sdb --skip-fs-probe --boot-directory=/media/new_drive/boot
答え2
ブートパーティションとルートパーティション/boot
からなるDebianインストールを/
新しいドライブに移動してブート可能にする方法は次のとおりです。GNUグラップ:
パーティションの複製
- 使用GPartedライブCD、新しいドライブにブートパーティションとルートパーティションを作成します。
- GPartedのルートコンソールを使用して、古いブートパーティション(と仮定)
/dev/sda1
と新しいパーティション(/dev/sdb1
)をマウントします。mount /dev/sda1 /mnt/oldBoot && mount /dev/sdb1 /mnt/newBoot
- 古いブートパーティションから新しいブートパーティションにデータをコピーする:。
cp -afv /mnt/oldBoot /mnt/newBoot
:cp -afv
a
「アーカイブ」を意味し、以下を意味します。- リンクを逆参照しないでください。
- 再帰的コピー(例
-R
:) - すべての属性(タイムスタンプ、所有者、権限)を保持します。
f
:必須、既存のターゲットファイルを開くことができない場合は、削除してもう一度やり直してください。v
:進行中の作業を詳細に説明します。
cp
これにより、現在コピーされているファイルと進行状況を示す出力がコンソールに生成されます。- 古いルートパーティションのファイルをマウントし、新しいルートパーティションにコピーします。
- 安全のため:
umount /mnt/oldBoot && umount /mnt/newBoot
- 古いパーティションと新しいルートパーティションをマウントします(
/dev/sda2
AND仮定/dev/sdb2
)。mount /dev/sda2 /mnt/oldRoot && mount /dev/sdb2 /mnt/newRoot
- 古いルートパーティションのデータを新しいルートパーティションにコピーします。
cp -afv /mnt/oldRoot /mnt/newRoot
- 安全のため:
- 編集するファイルシステムテーブル起動時にマウントするパーティションを定義します(このタスクにはVimを使用します)。
vi /etc/fstab
ここでは、古いパーティションが参照されていることがわかります。新しいパーティションのUUIDを使用する
簡単にコピーして貼り付けるために、すべてのUUIDをfstabに一時的に挿入できます。
:r !blkid
新しいパーティションのUUIDにfstabのエントリを変更します。次のようにする必要があります。
# <file system> <mount point> <type> <options> <dump> <pass> # Root partition UUID=76fd1ffd-fb96-4ab4-be1a-42f8e9223983 / ext4 errors=remount-ro 0 1 # Boot partition UUID=e560e29e-8752-4b83-b1ee-4b86c0009f0b /boot ext2 defaults 0 2
blkid
以前に挿入したfstabから出力を削除する:r !blkid
GRUBのインストール
- GParted Live CDの仮想ファイルシステムをマウントします。
mount --bind /dev /mnt/newRoot/dev
mount --bind /proc /mnt/newRoot/proc
mount --bind /sys /mnt/newRoot/sys
- GParted live CDのGRUBユーティリティをルートパーティションで使用できるようにします。
mount --bind /usr/ /mnt/newRoot/usr
- GRUBは設定を次の場所に保存するため、ブートパーティションをルートパーティションにマウントします
/boot
。mount /dev/sdb1 /mnt/newRoot/boot
chroot /mnt/newRoot
新しいルートパーティションを一時的にファイルシステムのルートにするために使用されます。/boot/grub/grub.cfg
次のコマンドを使用して GRUB 構成ファイルを生成します。update-grub2
- 新しいドライブにGRUBを取り付けます
grub-install /dev/sdb
。ここではパーティション番号を指定できません。 - GParted ライブ CD のファイルシステムを返します。
exit
- パーティションをマウント解除します。
umount /mnt/newRoot/*
- シャットダウンマシン
- 複数のドライブが接続されている場合は、最新のドライブが起動順序で最初のものであることを確認してください。
- マシンを起動
このガイドラインは以下からインスピレーションを得ました。Oaktreepeak.comから取得した内容。
または与えることができます。クローン属同じ目標を達成しようとします。