使用 grub 從外部備份驅動器正確引導
編輯:我想我解決了我自己的問題——詳情見問題底部
/
我有一個外部 USB 連接硬碟驅動器下所有文件的副本。為了測試這個備份是否有效,我正在嘗試從它啟動。然而,事實證明這比我預期的要困難一些。
- 在我假設是 BIOS 中,我選擇我的外部 HD 作為啟動設備。但是,無論我選擇此設備還是我常用的驅動器作為引導設備,都會顯示相同的 GRUB 菜單。無論我是否在外部 HD 上手動安裝了 GRUB,都會發生這種情況。所以我的問題是,GRUB 是從我的正常引導驅動器還是從外部驅動器載入的,這有關係嗎?
- 我發現在我的外部驅動器上未安裝 GRUB 使用 GRUB 命令行時,外部驅動器顯示為
(hd2,gpt1)
,但是在我在外部驅動器上安裝 GRUB 後,它出現為(hd0,gpt2)
.
- 也許我遇到的困難僅與我的第一個問題有關,但是當我在指定後啟動時
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/sda2
,linux /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-id或by-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-id
or 或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
如果您設置分區標籤並相信它們是唯一的,您甚至可以使用。