CentOSで実行されている仮想ボックスがあります。
既存のCentOSVMに新しい仮想ディスクを接続しました。この新しく接続されたディスクにGRUBをインストールしようとしています。
後で、カスタムルートファイルシステムとカーネルを備えた、新しく準備された起動可能なハードディスクを備えた2番目のVMを起動します。
I次の手順を試しました。
- 既存の動作中のCentOSマシンに新しい仮想ディスクを接続しました。
-
fdisk /dev/sdb
。パーティション分割中に、プライマリパーティション、パーティション番号1、およびその他のデフォルトオプションのオプションを選択しました。 -
mkfs.ext3 /dev/sdb1
でディスクをフォーマットしました。 - ディスクを
/media/new_drive
にマウントしました。 - インストールされたGRUB
grub-install /dev/sdb1 --root-directory=/media/new_drive/
。
この後、新しく準備されたハードディスクを備えた2番目のVMが起動しませんでした。エラーが発生しました:could not read from the boot medium
。 grub-install
の後でMBRが更新されていないようですが、新しいドライブの/boot/grub
の下にGRUBがインストールされているのがわかります。
しかし、最悪のことは、既存のCentOS GRUBが破損していることです。CentOSVMがハングし、テキストがGRUB
の黒い画面が表示されます。
理由grub-install /dev/sdb1
はsdb1のMBRを変更しませんか?これは、新しいドライブにGRUBをインストールする正しい方法ではありませんか?
コメント
回答
私はgrub2の専門家ではありません(申し訳ありません)が、
をgrub-install行に追加すると、/boot/grub/device.map
が作成されなくなり、grubプロンプトが起動する可能性があることがわかりました。これがないと、パラメータgrub-installは、あなたが言うことをする代わりに、あなたよりも賢いと思い、何か違うことをするかもしれません。
もう1つのことは、正しいgrub-installを使用していることを確認することです( grub2であり、元のgrubではありません。Centos内にいるが、SystemRecoveryCDを使用している場合、これは問題ではありません。したがって、grub2-install
を使用する必要があります。私は難しい方法を学びました…
@wurtelが指摘したように(kudos)、パーティションではなくドライブを指定する必要があります。 Grub2はディスクドライブ全体のセクター0にインストールされ、この「スタブ」は起動時に実行されるものですが、起動の次の段階のためにファイルをインストールする必要があるディスク上の場所を知る必要があります-これは
パラメータは用です。 (私は思います。)
man grub-install
を読んでグーグルすると、--root-directory
は実際には使用するためのものではないことがわかりますgrub2バージョン1.99 ++ですが、私の経験では機能します。 --boot-directory
を使用し、実際のブートディレクトリを参照することを目的としているため、次のようになります。
grub-install /dev/sdb --skip-fs-probe --boot-directory=/media/new_drive/boot
コメント
- 最初の試みは、
grub-install /dev/sdb
のパーティション分割とフォーマットを行わなかったのですが、エラーが発生しました。後で、パーティション化されフォーマットされたディスクで試しました。フォーマットされたディスクでは、常に/ dev / sdb1を使用していましたが、-skip-fs-probe - @Renjithに沿って試します。ルートディレクトリは、 grub-installを実行すると、マウントされたマウントポイントになるため、パーティションを新しいドライブにマウントする必要があります。
/mnt/sys2
で、grub-install行で--root-directory=/mnt/sys2
を指定します。 'は直感に反しますが(私が思う多くのグラブのもののように)、'はどのように機能するかです。 - 回答を多少編集しました…
- 現在、私は0.97を使用していますが、これは–skip-fs-probeをサポートしていません' 。しかしそれなしでそれは働いた。 sdb1は間違いでした。
- 問題が解決したことをうれしく思います。それは、新しい'光沢のある' grub2。 ' RedHatがgrub2に移行するのが非常に遅いことに気づきませんでした。 CentOS 7はgrub2を使用しますが、CentOS 6(およびそれ以前)はgrubを使用します。
回答
これは、ブートパーティションとルートパーティション/
を新しいドライブに追加し、 GNU GRUB を使用して起動できるようにしました。
パーティションのクローン化
- 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
- 古いルートパーティションと新しいルートパーティションをマウントします(および):
mount /dev/sda2 /mnt/oldRoot && mount /dev/sdb2 /mnt/newRoot
- データをコピーします古いルートパーティションから新しいルートパーティションへのa:
cp -afv /mnt/oldRoot /mnt/newRoot
- 安全のために:
- ブート時にマウントされるパーティションを定義するファイルシステムテーブル(そのためにVimを使用します):
-
vi /etc/fstab
-
古いパーティションがここで参照されていることに気付くでしょう。代わりに、新しいパーティションのUUIDを使用してください
-
:r !blkid
を使用すると、すべてのUUIDを一時的にfstabに挿入して、コピーと貼り付けを簡単に行うことができます。 p> -
新しいパーティションの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`
- 挿入したfstabから
blkid
の出力を削除します以前の:r !blkid
- 挿入したfstabから
-
GRUBのインストール
-
GPartedライブCDの仮想ファイルシステムをマウントします:
mount --bind /dev /mnt/newRoot/dev mount --bind /proc /mnt/newRoot/proc mount --bind /sys /mnt/newRoot/sys
-
作成しますルートパーティションで利用可能なGPartedライブCDのGRUBユーティリティ:
mount --bind /usr/ /mnt/newRoot/usr
-
GRUB以降、ブートパーティションをルートパーティションにマウントします。構成を
/boot
に保存します:mount /dev/sdb1 /mnt/newRoot/boot
-
新しいルートパーティションを一時的にファイルシステムのルートにする
-
/boot/grub/grub.cfg
update-grub2
-
新しいドライブにGRUBをインストールします:
grub-install /dev/sdb
。ここでパーティション番号を指定しないでください -
GPartedライブCDのファイルシステムに戻ります:
exit
-
パーティションのマウント解除:
umount /mnt/newRoot/*
-
シャットダウンマシン
-
複数のドライブが接続されている場合は、新しいドライブが起動順序の最初に来ることを確認してください
-
マシンを起動します
これらの手順は、 oaktreepeak.comの手順に触発されています。
または、クローンジラ同じことを達成しようとします。
/dev/sdb1
は正しくありませんBIOSがMBRを検索する場合、/dev/sdb
内の'、つまりディスクの最初のセクターです。grub-install /dev/sdb --root-directory=/media/new_drive/
を使用する必要があるということですか