Arch-Linux

無法為 Arch linux 創建可啟動(實時)USB 快閃記憶體

  • June 22, 2015

我創建了一個用於安裝 Arch 的可啟動 USB。我是通過以下方式做到的:

sudo dd if=/path_to_arch_.iso of=/dev/sdX

但是當我嘗試從這個 USB 快閃記憶體啟動時,我失敗了。沒有錯誤,它只是無法從它啟動。我最近從arch linux官方網站下載了iso文件,所以它應該是最新的。以前我能夠從 USB 快閃記憶體成功安裝 mint、elementary 和 ubuntu。

它阻止我以以下方式啟動:

選擇“從 USB 啟動”後,我看到黑屏 1 秒鐘,然後返回到必須選擇臨時啟動設備的菜單。當我再次這樣做時,故事又重複了。

可能是什麼原因?

所以我寫這篇文章就像我自己做的一樣。我剛剛下載了最新的 arch iso 並安裝了它:

du archlinux-2014.04.01-dual.iso
535M    archlinux-2014.04.01-dual.iso

mkdir -p /mnt/iso
mount ./arch*iso $_
mount: /dev/loop0 is write-protected, mounting read-only

ls $_/arch
boot  x86_64  checksum.i686.md5    pkglist.i686.txt
i686  aitab   checksum.x86_64.md5  pkglist.x86_64.txt

你不需要那裡的大部分。或者,最好說你可能只需要一半。這裡有兩個圖像 - 一個用於 32 位和 64 位機器:

ls $_/x86_64
root-image.fs.sfs

du $_
230M    /mnt/iso/arch/x86_64

如果你使用 Arch,我敢打賭你有一台 64 位的機器,所以sfs上面目錄中的圖像文件是你需要的大部分。儘管如此,如果它是一台 32 位機器,請繼續執行,但從這裡開始,將686文件替換為x86-64我要定位的文件。

mkdir -p /mnt/img
mount /mnt/iso/EFI/archiso/efiboot.img $_
cd $_ ; ls
EFI  loader

cd EFI ; ls
archiso  boot  shellx64_v1.efi  shellx64_v2.efi

ls ./*/*
./archiso/archiso.img  ./archiso/vmlinuz.efi  
./boot/HashTool.efi  ./boot/bootx64.efi  ./boot/loader.efi

因此,hybrid .iso圖像的工作原理是顛覆iso圖像標準並創建諸如假分區之類的東西。我對此不太了解,但是如果您有 UEFI 系統,則您需要的核心和 initramfs 映像都在efiboot.img文件中。事實上,一旦你從這裡取出你需要的東西,你只需要我已經指出的其他文件。所以,現在我將進入gdisk並準備我們的目標 efi 系統分區。這是一種蛋糕步行。

好的,我想我手邊沒有拇指驅動器,所以我將這樣做:

fallocate --l $((650*1024*1024)) /tmp/bootimage
losetup -f --show -P $_
/dev/loop2

您不想使用fallocate,或者losetup我只是向您展示我有利於全面披露。但是,否則,我正在做的就是你需要做的。例如,因為您可能在該磁碟上寫入了一些非常早的塊,所以我們需要清除它們:

dd ibs=4M count=1 if=/dev/zero of=/dev/loop2

現在我們進入gdisk. /dev/...用你的 USB 磁碟上的任何設備文件替換我的/dev/loop2

gdisk /dev/loop2
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
 MBR: not present
 BSD: not present
 APM: not present
 GPT: not present
Creating new GPT entries.Command (? for help): ?

當您打開時,gdisk您會看到類似上面的內容,然後點擊?菜單:

b       back up GPT data to a file
c       change a partition's name
d       delete a partition
i       show detailed information on a partition
l       list known partition types
n       add a new partition
o       create a new empty GUID partition table (GPT)
p       print the partition table
q       quit without saving changes
r       recovery and transformation options (experts only)
s       sort partitions
t       change a partition's type code
v       verify disk
w       write table to disk and exit
x       extra functionality (experts only)
?       print this menu
Command (? for help): o

我們需要一個新的空分區表。那就是o

你需要在這裡同意:

This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y

接下來我們需要一個分區。在以下提示中,您沒有看到輸入的密鑰,因為我只是點擊ENTER同意預設值:

Command (? for help): n
Partition number (1-128, default 1):
First sector (34-1331166, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-1331166, default = 1331166) or {+-}size{KMGTP}: 500M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): ef00

如果您點擊L上面的最後一個提示,您將獲得所有可用分區類型的列表,但您需要的是ef00efi 系統分區的類型。你幾乎完成了。

看看你的新分區,如果你喜歡它看起來寫出你的未決更改,請p跟進它:w

Command (? for help): p
Disk /dev/loop2: 1331200 sectors, 650.0 MiB
Logical sector size: 512 bytes
Disk identifier (GUID): E5D5A761-6AFA-48C6-9BA5-CED0DA2F62CA
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 1331166
Partitions will be aligned on 2048-sector boundaries
Total free space is 309180 sectors (151.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
  1            2048         1024000   499.0 MiB   EF00  EFI System

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/loop2.
The operation has completed successfully.

我假設你有一個引導載入程序,但你也可以在你的 USB 磁碟上放一個,這真的很容易。事實上,我將向您展示如何設置它,rEFInd它實際上是一個舊項目的複興,由編寫gdisk.

獲取refind.bin.*.zip您將在此處找到的文件,我們將其解壓縮到我們的磁碟,然後將拱形映像複製過來,我們就完成了。

實際上,我們肯定首先需要一個文件系統。很高興我在寫這篇文章時實際上正在這樣做——錯過這肯定會破壞交易。

mkfs.vfat -n ESP /dev/loop2
mkfs.fat 3.0.26 (2014-03-07)
Loop device does not match a floppy size, using default hd params

再次,忽略有關的東西loop並使用您自己的設備。-n命名分區。我喜歡用ESP.

好的,現在對於 rEFInd:

mkdir /tmp/refind
unzip ~/Downloads/refind-bin-0.7.9.zip -d $_  
...
$_/ref*/install.sh --usedefault /dev/loop2
Not running as root; attempting to elevate privileges via sudo....
Installing rEFInd on Linux....
UnmountEsp = 1
Copied rEFInd binary files
Copying sample configuration file as refind.conf; edit this file to configure
rEFInd.
Installation has completed successfully.
Unmounting install dir

mkdir -p /mnt/bootdisk
mount /dev/loop2 $_

mkdir /mnt/bootdisk/EFI/arch_linux
cp /mnt/img/EFI/archiso/* -t $_
cp -R /mnt/iso/arch/*64* $_
cp -R /mnt/iso/arch/aitab $_
ls -lR $_
/mnt/bootdisk/EFI/arch_linux:
total 23328
drwxr-xr-x 2 root root     4096 Apr 22 02:09 x86_64
-rwxr-xr-x 1 root root      228 Apr 22 02:09 aitab
-rwxr-xr-x 1 root root 19882780 Apr 22 02:08 archiso.img
-rwxr-xr-x 1 root root       99 Apr 22 02:09 checksum.x86_64.md5
-rwxr-xr-x 1 root root     5142 Apr 22 02:09 pkglist.x86_64.txt
-rwxr-xr-x 1 root root  3979248 Apr 22 02:08 vmlinuz.efi

/mnt/bootdisk/EFI/arch_linux/x86_64:
total 234812
-rwxr-xr-x 1 root root 240447488 Apr 22 02:09 root-image.fs.sfs

差不多就是這樣。您將需要設置rEFInd一些…

echo '"ArchISO" "archisolabel=ESP archisobasedir=/EFI/arch_linux \
   copytoram rootwait initrd=EFI\arch_linux\archiso.img"'\
   >$_/refind_linux.conf

那應該給你一個可引導的系統。請仔細閱讀主要內容 - 它refind.conf../BOOT評論非常好,而且本身也有很多文件。您還需要前往rodsbooks.com並閱讀那裡的文件。

最後一點。如果您將相同的東西放在系統硬碟的 EFI 系統分區上,您將始終可以訪問可引導的拱形實時光碟。

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