Arch-Linux

Virtualbox VMDK 到可啟動 USB 棒無法正常工作

  • May 15, 2018

我使用 VirtualBox 設置了一個小型 Arch Linux 64 位 x86 機器。一切執行良好,安裝在 VMDK 格式的 8GB 大型虛擬硬碟上。

cfdisk 顯示我創建了兩個分區:

  • 類型:Primary,類型:Linux (ext4),可引導,第一個分區,大小:7.5G
  • 類型:Primary,類型:Swap,Solaris,可引導,第二個分區,大小:0.5G

我大量定制了 Arch Linux,現在想用它製作真正的可啟動媒體。

1. 如何在沒有復雜的 archiso 安裝過程的情況下創建可啟動媒體,而是直接使用我以某種方式創建的驅動器映像?

事實上,我已經嘗試過創建我的可啟動媒體。我使用 Ubuntu 將我的轉換os.vmdk/dev/sdc使用命令qemu-img convert os.vmdk -O raw /dev/sdc

完成後,我重新啟動到 PC 的啟動菜單,但 pendrive 沒有出現。我關閉了安全啟動並啟用了Legace Boot Support. 沒有任何幫助。因此,我進入了我的 Ubuntu 安裝的 Grub 命令行並輸入

set root=(hd1,msdos2) # hd1 is my usb stick, msdos1 is swap, msdos2 is bootable
configfile /boot/grub/grub.cfg # in order to load the usb's grub

2. 那時發生了一些奇怪的事情

  1. 我將記憶棒放入我的筆記型電腦 -> USB 2.0埠(我有一個 USB 3.0 記憶棒) -> 正在啟動… -> 圖形 Arch Linux 啟動畫面 -> 緊急外殼,說明類似Can't run fsck. Error: Can't find drive with UUID=...(但是,UUID 是絕對正確的。我在 Ubuntu 和 Arch 本身的 /etc/fstab 中更改了它!當我blkid在緊急外殼上執行此操作時,USB 驅動器根本不存在。相反,我在 /dev/sda 上獲得了我的內部 SSD。我什至沒有找到任何 USB驅動器 /dev/* 和 dmesg 也沒有任何狀態!)
  2. 我將記憶棒放入筆記型電腦 -> USB 3.0埠 -> grub 命令行未檢測到驅動器。只有hd0但沒有hd1。但是,我有時使用 bios 啟動菜單從通過 USB 3 連接的外部硬碟驅動器啟動。
  3. 我將記憶棒放入我的工作站 PC 上的 USB 3.0埠 -> 不在 BIOS 啟動菜單中,通過 grub 和configfile命令啟動 ->它啟動了,而它沒有在我筆記型電腦的 USB 3.0 埠上啟動-> 然後同樣的緊急情況外殼如1.
  4. 我將記憶棒放入我的工作站 PC 上的 USB 2.0埠 -> 通過 GRUB 啟動 ->它成功啟動,沒有任何問題。

我不知道該怎麼辦!?我基本上只是想從我現有的虛擬 Arch Linux 中製作一個鏡像,我可以通過簡單地複制它來傳輸到任何設備,而無需複雜的 Arch 安裝。

任何幫助表示讚賞。

**1.)**既然您已經對 U 盤進行了分區,為什麼不將真實文件系統的全部內容(省略任何tmpfs和其他基於 RAM 或完全虛擬的文件系統,如/dev/proc/sys複製到 U 盤ext4上的分區?

我認為qemu-img convert你所做的基本上就是這樣做的,但你可以跳過它。基本上,*沒有什麼神奇的:*如果您將作業系統的所有必要文件複製到正確的目錄層次結構中,無論複製如何完成,它將是一個有效的系統。一個不活躍的作業系統本質上只是一堆文件,你可以把它當成那樣。

唯一特殊的部分是舊版 BIOS 引導載入程序:它需要將數據寫入記憶棒上的特定塊位置,以便引導載入程序稍後可以找到它們。另一方面,UEFI 引導載入程序只是 FAT32 分區上具有特定路徑名的另一個文件。

**2.1.)**嘗試使用帶有 USB 2 的 Ubuntu 安裝(可能是 UEFI)的引導載入程序啟動:看起來引導載入程序成功載入了核心和 initramfs 文件並啟動了核心,但 initramfs 文件沒有所有必要的驅動程序來訪問 U 盤上的根文件系統。至少,您需要適當的 USB 控制器驅動程序、usb-storage驅動程序和ext4文件系統驅動程序及其依賴項。此外,由於 USB 控制器通常包含在晶片組中,因此核心版本需要足夠新以辨識晶片組,以便它知道晶片組中的特定 PCI ID 實際上是 USB 控制器。

**2.2.)**在 USB 3.0 埠中未檢測到 USB 記憶棒:除非通過 BIOS 啟動菜單實際請求,否則您的筆記型電腦韌體可能不包括 USB 3.0 支持?或者 USB2 和 USB3 控制器之間可能存在某種 USB2/USB3 切換開關,需要以某種方式翻轉?

**2.3.)**在桌面上,在 USB 3.0 埠中檢測到記憶棒,但啟動失敗,如 2.1:看起來您的桌面可能有更好的 USB 3.0 支持,但您遇到的問題與 2.1 基本相同:沒有 USB3 控制器和/或 initramfs 中的 USB 儲存驅動程序。

**2.4.)**有趣。您的筆記型電腦是否有特殊類型的 USB 2.0 控制器,而台式機使用標準ehci_hcd?看起來您的 initramfs 具有在您的台式機中訪問 USB 2.0 所需的所有驅動程序,但在您的筆記型電腦中卻沒有。或者您的筆記型電腦有一個非常新的晶片組並且核心無法在其中找到 USB 控制器?

2.1 和 2.3 中的問題可能會通過在 initramfs 文件中添加更多 USB 控制器驅動程序來解決,並確保您的核心足夠新以完全辨識筆記型電腦的晶片組。

2.2. 似乎是一個可能的韌體限制。在不知道系統的品牌和型號的情況下很難提供任何建議。

您實際上可能想要將一個小的 FAT32 分區添加到您的 USB 記憶棒中,並將 UEFI 版本的 GRUB 添加到它作為\EFI\BOOT\BOOTx64.efi. 這將使它在 UEFI 的意義上可以啟動。看來該棒目前只能在傳統 BIOS 意義上啟動。通過這種方式,您可以創建一個“混合”USB 記憶棒,它同時具有舊版和 UEFI 引導載入程序。

通常,舊版 BIOS 將完全隱藏任何韌體級 USB 儲存支持,除非在 BIOS 菜單中特別啟用它,以便提供最大的舊版兼容性,一直到 1986 年的原始 IBM PC/AT(盡可能) . UEFI 沒有這個負擔,預設情況下可能會為引導載入程序提供 USB 儲存支持。

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