CentOSで仮想ボックスを実行しています。
既存のCentOSに新しい仮想ディスクを接続しましたVMそして、この新しく接続されたディスクにGRUBをインストールしようとしています。
後で、2番目のVMを、カスタムルートファイルシステムとカーネルを備えた新しく準備された起動可能なハードディスクで起動します。
私は次の手順を試しました:
fdisk /dev/sdb
を使用して新しいパーティションを作成しました。パーティション設定中に、プライマリパーティション、パーティション番号1、およびその他のデフォルトオプションを選択しました。mkfs.ext3 /dev/sdb1
を使用してディスクをフォーマットしました。/media/new_drive
にマウントしました。grub-install /dev/sdb1 --root-directory=/media/new_drive/
。この後、2番目のVM新しく準備されたハードディスクが起動しませんでした。エラーが発生しました:could not read from the boot medium
。grub-install
の後でMBRが更新されていないようです、しかし私はGRUB=が新しいドライブの/boot/grub
の下にインストールされていることを確認できます。
しかし、最悪なのは、既存のCentOS GRUBが破損していることです。CentOSVMがハングし、テキストがGRUB
のみの黒い画面が表示されます。
grub-install /dev/sdb1
がsdb1のMBRを変更しないのはなぜですか?これは新しいドライブにGRUBをインストールする正しい方法ではありませんか?
私はgrub2のエキスパートではありませんが(申し訳ありません)、grub-install行に--skip-fs-probe
を追加してみてください。これにより、grubプロンプトが起動して/boot/grub/device.map
が作成されないことがわかりました。このパラメーターgrub-installがないと、あなたが言うことをする代わりに、それはあなたより賢く、何か違うことをするかもしれないと思います。
もう1つは、正しいgrub-installを使用していることを確認することです(つまり、元のgrubではなく、grub2に対して)。 Centos内であれば問題ありませんが、SystemRecoveryCDでは両方のバージョンを使用できるため、grub2-install
を使用する必要があります。私は難しい方法を学びました...
@wurtelが指摘したように(kudos)、パーティションではなくドライブを指定する必要があります。 Grub2はディスクドライブ全体のセクター0にインストールされ、この「スタブ」が起動時に実行されますが、次の起動段階のためにファイルをインストールする必要があるディスク上の場所を知る必要があります。これが--root-directory
パラメータが使用されます。 (おもう。)
man grub-install
を読んでグーグルする--root-directory
は実際にはgrub2バージョン1.99 ++で使用するためのものではないようですが、私の経験では機能します。 --boot-directory
を使用して実際のブートディレクトリを参照することを想定しているため、次のようになります。
grub-install /dev/sdb --skip-fs-probe --boot-directory=/media/new_drive/boot
これは、ブートパーティション/boot
とルートパーティション/
で構成されるDebianインストールを新しいドライブに移動し、 GNU GRUB を使用してブート可能にした方法です。
/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
および/dev/sdb2
であると想定):mount /dev/sda2 /mnt/oldRoot && mount /dev/sdb2 /mnt/newRoot
cp -afv /mnt/oldRoot /mnt/newRoot
ブート時にマウントするパーティションを定義する filesystem table を編集します(そのためにVimを使用します):
vi /etc/fstab
:r !blkid
を使用すると、すべてのUUIDを一時的にfstabに挿入して、簡単にコピーして貼り付けることができます新しいパーティションの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
以前に:r !blkid
を使用して挿入したfstabからblkid
の出力を削除します
GPartedライブCDの仮想ファイルシステムをマウントします。
mount --bind /dev /mnt/newRoot/dev mount --bind /proc /mnt/newRoot/proc mount --bind /sys /mnt/newRoot/sys
GRUB GPartedライブCDのユーティリティをルートパーティションで利用できるようにします:mount --bind /usr/ /mnt/newRoot/usr
/boot
に保存するため、ブートパーティションをルートパーティションにマウントします:mount /dev/sdb1 /mnt/newRoot/boot
chroot /mnt/newRoot
を使用して、新しいルートパーティションを一時的にファイルシステムのルートにします/boot/grub/grub.cf
を使用してGRUB構成ファイルをupdate-grub2
に作成しますgrub-install /dev/sdb
。ここでパーティション番号を指定しないでくださいexit
umount /mnt/newRoot/*
これらの手順は those of oaktreepeak.com と zeasite.com に触発されています。
あるいは、 Clonezilla を使用して同じことを実現することもできます。