web-dev-qa-db-ja.com

grubを使用して外部バックアップドライブから適切に起動する

edit:私は自分の問題を解決したと思います-詳細については質問の下部を参照してください

USB接続された外付けハードドライブの/の下にあるすべてのファイルのコピーがあります。このバックアップが機能するかどうかをテストするために、私はそれから起動しようとしています。しかし、これは私が予想していたよりも少し難しいことを証明しています。

  1. 私が想定しているのはBIOSで、ブートデバイスとして外部HDを選択します。ただし、このデバイスを選択しても、通常のドライブをブートデバイスとして選択しても、同じGRUBメニューが表示されます。これは、手動で行って外部HDにGRUBをインストールしたかどうかに関係なく発生します。だから私の質問は、GRUBが私の通常のブートドライブまたは外部ドライブからロードされているのか、そしてそれは重要ですか?

    • 外付けドライブにGRUBをインストールせずにGRUBコマンドラインを使用すると、外付けドライブは(hd2,gpt1)と表示されましたが、外付けにGRUBをインストールした後ドライブ、それは(hd0,gpt2)として出てきました。
  2. おそらく私が抱えている問題は私の最初の質問に関連しているかもしれませんが、linux /boot/vmlinuz-linux root=/dev/sda2を指定して起動すると、rootとして指定されたドライブが見つからないことに関連して常にエラーが発生します。これは、デバイスuuidでルートを指定した場合でも発生します。私の質問は、私は心配する必要がありますか?

    • /etc/fstab?これは、ルートが確実に見つかるようにするために変更する必要があるものですか?また、内部ドライブまたは外部ドライブの/etc/fstabファイルを変更するかどうかは重要です。 (ルートパーティションのUUIDを持つドライブが/etc/fstabにマウントされるように、外部ドライブの/を変更しましたが、役に立ちませんでした)

    • USB接続の外部HDであるためか、何か特別なことをする必要がありますか?通常の起動中にエラーusb 2-4: device descriptor read/64, error -71が表示されることに気付きましたが、これはドライブの機能に明らかな影響を与えないため、無視しました。このエラーは、2つの別々の外部HDドックでも発生したため、ハードウェアの問題ではないと思います。


明確化:

Borg を使用して外部バックアップを作成しました。これにより、すべてのファイルのコピーが作成されます。 ddのようにディスク全体をコピーするわけではないので、たとえばgrubをインストールするときに、bios_grubフラグを使用してパーティションを手動で作成する必要があります。

起動しようとしているときにgrubで使用する正確なコマンドは

set root=(hd0,gpt2)
linux vmlinuz-linux root=/dev/sda2
initrd  initramfs-linux.img
boot

なんとか起動できました。

linux /boot/vmlinuz-linux root=/dev/sda2linux /boot/vmlinuz-linux root=/dev/sdc2の両方を試しましたが無駄でした。1つ目はドライブがgrubで(hd0,gpt2)として表示されていたため、2つ目は通常の起動時にパーティションに/dev/sdc2というラベルが付けられたためです。しかし、どちらも機能せず、どちらも私を奇妙なコマンドラインに落とし込みました。何らかの理由で、正しいUUIDを持つパーティションが実際に/dev/sdb2にマウントされていることを発見しました。 root=/dev/sdb2を使用して、システムを正常に起動しました。以前にUUIDを指定して起動しようとしたが、さまざまな理由(GRUBがインストールされていない、UUIDのタイプミスなど)のいずれかで失敗したと思います。

これはかなり反気候的です。私が持っていた元の質問、つまり1。で、どのGRUBが使用されるかがどのように決定されるかについてはまだ興味があります。 GRUBがインストールされている複数のドライブはありますか? 2。/etc/fstabは起動プロセスで役割を果たしますか、それとも無関係ですか? -そして、私はそれらの質問への回答に対して報奨金を授与します。

1
shimao

問題はroot=/dev/sda2です。これは、device nameによるマウントを実行しているためです。これは一意ではありませんです。ドライブが1つだけインストールされている場合、通常は常に/dev/sdaとして表示されるため、問題はありません。ただし、2番目のディスクまたは/dev/sd?として表示されるその他のものをインストールすると、順序が保証されず、多くの場合、sdasdbに移動します。 ...すぐに乱雑になり、失敗する可能性があります。

デバイスIDによるまたはidによるを介してマウントするのが最適です。これは一意になります。

/dev/disk/の下に次のようなフォルダが表示されます

  • by-id /
  • ラベル別/
  • バイパス/
  • by-uuid /

たとえば、by-id/の下に次のようなリンクが表示されます。

これが私の/etc/fstabをマウントするby device-idで、アイデアを提供します。余分な行を削除して、適切な位置に保ちます。そして、私はGRUBではなくEFIを使用しますが、原則はGrub {大統一ブートローダーの大部分}と同じです。

/dev/disk/by-id/scsi-35000cca070168a20-part2                    /           ext3    acl,user_xattr 1 1
/dev/disk/by-id/scsi-35000cca070168a20-part1                    /boot/efi   vfat    umask=0002,utf8=true 0 0
/dev/disk/by-id/scsi-36003048018e26e011d81ba1714e4c99f-part1    /data       xfs     defaults 1 0
/dev/disk/by-id/scsi-36003048018fa44011d57b61bbe1b8533-part1    /scratch    xfs     defaults 1 0
/dev/disk/by-id/scsi-36003048018e266011d81ba7e1afeadf6-part1    /bkup       xfs        defaults              1 2

注:これは、SLES11.4に表示されるものです。また、EFIを使用している間、GRUBまたはGRUB2またはGRUB2内の特定のアイテムを見つけて、変更する必要があります。ここにある例として、私の/boot/efi/efi/SuSE/elilo.confファイルがあります。root=の部分に注意してください。 。GRUB by device-idまたはby uuidに変更したい。そして、/etc/fstabをに変更することを忘れないでください。独自の方法でby-idまたはby-uuidも使用します。

# This file has been transformed by /sbin/elilo.
# Please do NOT edit here -- edit /etc/elilo.conf instead!
# Otherwise your changes will be lost e.g. during kernel-update.
#
# Modified by YaST2. Last modification on Mon Oct 15 11:04:42 EDT 2018
timeout = 80
##YaST - boot_efilabel = "SUSE Linux Enterprise Server 11 SP4"
default = SLES11_SP4_16
Prompt

image = vmlinuz-3.0.101-108.77-default
###Don't change this comment - YaST2 identifier: Original name: linux###
    label = SLES11_SP4_16
    append = "splash=verbose showopts                 "
    initrd = initrd-3.0.101-108.77-default
    root = /dev/disk/by-id/scsi-35000cca070168a20-part2

image = vmlinuz-3.0.101-108.77-default
###Don't change this comment - YaST2 identifier: Original name: failsafe###
    label = Failsafe_15
    append = "showopts ide=nodma apm=off noresume edd=off powersaved=off nohz=off highres=off processor.max_cstate=1 nomodeset x11failsafe                  "
    description = "Failsafe (3.0.101-108.77-default)"
    initrd = initrd-3.0.101-108.77-default
    root = /dev/disk/by-id/scsi-35000cca070168a20-part2

boot=/dev/sd?またはroot=/dev/sd?はどこにも必要ありません。ここで、?は任意の文字です。 /dev/disk/by-idまたは/dev/disk/by-uuidからディスクを参照します。パーティションラベルを設定し、それらが一意であると信頼していれば、by-labelを使用することもできます。

4
ron

これはあなたの質問に答えるはずです:

  • 一般に、使用されるGRUBは、BIOSによって最初に表示されるか、BIOSで最初に実行されるように選択されたディスク上にあるものです。ドライブのMBRは=にピオントするためです。 GRUBロードします。

  • / etc/fstabは、パーティションのマウントプロセスの自動化のみを担当します。カーテンケースでは、fstabを完全にバイパスできます。

1