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 mediumgrub-installの後でMBRが更新されていないようですが、新しいドライブの/boot/grubの下にGRUBがインストールされているのがわかります。

しかし、最悪のことは、既存のCentOS GRUBが破損していることです。CentOSVMがハングし、テキストがGRUBの黒い画面が表示されます。

理由grub-install /dev/sdb1はsdb1のMBRを変更しませんか?これは、新しいドライブにGRUBをインストールする正しい方法ではありませんか?

コメント

  • /dev/sdb1は正しくありませんBIOSがMBRを検索する場合、/dev/sdb内の'、つまりディスクの最初のセクターです。
  • sdb1の代わりにgrub-install /dev/sdb --root-directory=/media/new_drive/を使用する必要があるということですか
  • はい、まさに@wurtelの意味です
  • はい。 'その場所に適切なルートファイルシステムを配置したと仮定します('マウントと実行中のgrubの間にその手順が記載されているのはわかりません-インストール)。
  • / dev / sdbを試してみます、ええ、'ルートファイルシステムを配置するまで到達しませんでした。最初に表示しようと思いました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/newBootcp -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のエントリを変更します。次のようになります。

       `# <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
  • 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の手順に触発されています。

    または、クローンジラ同じことを達成しようとします。