Boot

使用 grub 從外部備份驅動器正確引導

  • November 30, 2018

編輯:我想我解決了我自己的問題——詳情見問題底部

/我有一個外部 USB 連接硬碟驅動器下所有文件的副本。為了測試這個備份是否有效,我正在嘗試從它啟動。然而,事實證明這比我預期的要困難一些。

  1. 在我假設是 BIOS 中,我選擇我的外部 HD 作為啟動設備。但是,無論我選擇此設備還是我常用的驅動器作為引導設備,都會顯示相同的 GRUB 菜單。無論我是否在外部 HD 上手動安裝了 GRUB,都會發生這種情況。所以我的問題是,GRUB 是從我的正常引導驅動器還是從外部驅動器載入的,這有關係嗎?
  • 我發現在我的外部驅動器上未安裝 GRUB 使用 GRUB 命令行時,外部驅動器顯示為(hd2,gpt1),但是在我在外部驅動器上安裝 GRUB 後,它出現為(hd0,gpt2).
  1. 也許我遇到的困難僅與我的第一個問題有關,但是當我在指定後啟動時linux /boot/vmlinuz-linux root=/dev/sda2,我總是遇到一些與指定為root未找到的驅動器有關的故障。即使我通過設備 uuid 指定 root 也會發生這種情況。我的問題是,我需要擔心
  • /etc/fstab? 這是我需要更改以確保找到根嗎?我是否更改/etc/fstab內部驅動器上的文件或外部驅動器上的文件是否重要。(我確實/etc/fstab在外部驅動器上進行了修改,以便將具有根分區 UUID 的驅動器掛載到/,但無濟於事)
  • 可能是因為是usb連接的外置高畫質,我需要做一些特別的事情嗎?我注意到在正常啟動時看到了錯誤usb 2-4: device descriptor read/64, error -71,但由於這對驅動器的功能沒有明顯影響,我忽略了它。這個錯誤也出現在兩個單獨的外部高畫質塢站上,所以我認為這不是硬體問題。

說明:

我使用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但都無濟於事——第一個是因為驅動器(hd0,gpt2)在 grub 中顯示,第二個是因為分區被標記為/dev/sdc2我正常啟動時的標籤。然而,這些都不起作用,並且都讓我進入了一個奇怪的命令行。我發現具有正確 UUID 的分區實際上是/dev/sdb2出於某種原因掛載到的!使用root=/dev/sdb2我啟動系統就好了。我認為我之前通過指定 UUID 進行引導的嘗試由於多種原因之一(未安裝 GRUB、UUID 中的拼寫錯誤等)而失敗。

這很虎頭蛇尾。我仍然對我最初遇到的問題感到好奇——即**1.**當多個驅動器安裝了 GRUB 時,如何確定使用哪個 GRUB?**2.**是否/etc/fstab在引導過程中發揮作用,還是無關緊要?- 我會獎勵這些問題的答案。

你的問題是root=/dev/sda2因為那正在做一個device name不是唯一的安裝。如果您只安裝了一個驅動器,那麼這通常會始終顯示為/dev/sda沒有問題。但是安裝第二個磁碟或任何其他出現的東西,因為/dev/sd?那時不能保證任何東西的順序,而且通常被sda移到的東西sdb……可能會很快變得混亂並失敗。

最好通過device-idby-uuid安裝,這將是唯一的。

在你下面/dev/disk/你會看到像這樣的文件夾

  • 按 ID/
  • 按標籤/
  • 旁路/
  • 通過-uuid/

例如,在by-id/您將看到以下連結

這是我/etc/fstab的坐騎by device-id給你一個想法,我刪除了額外的行以保持它的正確性。而且我使用 EFI 而不是 GRUB,但原理與 Grub 相同,只是更詳細{grand Unified boot loader 中的重要部分}:

/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

注意:這是我在 SLES 11.4 中看到的。而當我使用 EFI 時,您需要在 GRUB 或 GRUB2 中找到特定項目並進行修改。例如,這裡是我的/boot/efi/efi/SuSE/elilo.conf文件,請注意該root=部分。在您想要修改為by device-id或的 GRUB 中與此相對應的是什麼by uuid。並且不要忘記/etc/fstab通過獨特的方法修改為by-idor 或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-uuidby-label如果您設置分區標籤並相信它們是唯一的,您甚至可以使用。

引用自:https://unix.stackexchange.com/questions/483888