新しいドライブにGRUBをインストールする方法は?

新しいドライブにGRUBをインストールする方法は?

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-installGRUBがインストールされていることがわかります。/boot/grub

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

grub-install /dev/sdb1sdb1の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/sda2AND仮定/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は設定を次の場所に保存するため、ブートパーティションをルートパーティションにマウントします/bootmount /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から取得した内容

または与えることができます。クローン属同じ目標を達成しようとします。

関連情報