Então, estou escrevendo isso como faço sozinho. Acabei de baixar o iso mais recente do arco e montá-lo:
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
Você não precisa mais disso lá em cima. Ou é melhor dizer que você provavelmente só precisa de metade disso. Há duas imagens aqui - uma para cada uma das máquinas de 32 e 64 bits:
ls $_/x86_64
root-image.fs.sfs
du $_
230M /mnt/iso/arch/x86_64
Estou disposto a apostar que você tem uma máquina de 64 bits se estiver usando o Arch e, portanto, o arquivo de imagem sfs
no diretório acima faz com que a maior parte do que você precisa. Ainda assim, se for uma máquina de 32 bits, basta seguir adiante, mas, a partir de agora, substitua os arquivos 686
do x86-64
que será segmentação.
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
Portanto, a imagem hybrid .iso
funciona subvertendo o padrão de imagem iso
e criando algo como uma partição falsa ou algo assim. Eu realmente não sei muito sobre isso, mas se você tem um sistema UEFI, o kernel e a imagem initramfs que você precisa estão no arquivo efiboot.img
. De fato, uma vez que você extraia o que você precisa daqui, você precisa de pouco mais do que o outro arquivo que eu já mostrei. Então, agora eu vou entrar em gdisk
e nós vamos preparar nossa partição de sistema de efi alvo. É uma espécie de caminhada de bolo.
OK, eu acho que não tenho um pen drive à mão, então vou fazer assim:
fallocate --l $((650*1024*1024)) /tmp/bootimage
losetup -f --show -P $_
/dev/loop2
Você não quer usar fallocate
ou losetup
. Só estou mostrando que sou do interesse da divulgação completa. Mas, do contrário, o que estou fazendo é o que você precisa fazer. Por exemplo, como você provavelmente escreveu alguns blocos iniciais desse disco, precisamos excluí-los:
dd ibs=4M count=1 if=/dev/zero of=/dev/loop2
Agora entramos em gdisk
. Substitua qualquer arquivo de dispositivo /dev/...
em que seu disco usb esteja em meu /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): ?
Quando você abrir gdisk
, verá algo parecido com o acima, vá em frente e clique em ?
no menu:
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
Precisamos de uma nova tabela de partições vazia. Isso é o
.
Você precisará concordar aqui:
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y
Em seguida, precisamos de uma partição. Nos prompts abaixo, em que você não vê a chave digitada, é porque acabei de acessar ENTER
para concordar com o padrão:
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
Se você pressionar L
no último prompt acima, você obterá uma lista de todos os tipos de partição disponíveis, mas o que você precisa é digitar ef00
para a partição do sistema efi. E você está quase terminando.
Dê uma olhada na sua nova partição com p
e, em seguida, siga com w
, se você gostar do que aparenta para escrever suas alterações pendentes:
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.
Eu suponho que você tenha um gerenciador de inicialização, mas você pode também colocar um no seu disco USB também, e isso é realmente fácil. Na verdade, mostrarei como configurá-lo com rEFInd
, que foi na verdade uma revitalização de um projeto antigo e escrito e mantido pelo mesmo cara que escreveu gdisk
.
Obtenha o refind.bin.*.zip
para encontrar aqui e vamos descompactá-lo com o nosso disco, em seguida, copie a imagem do arco e estamos a fazer.
Na verdade, definitivamente precisamos de um sistema de arquivos primeiro. Fico feliz que eu esteja realmente fazendo isso enquanto escrevo - faltando que teria sido um problema, com certeza.
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
Novamente, ignore o material sobre loop
e use seu próprio dispositivo. -n
nomeia a partição. Eu gosto de usar ESP
.
Ok, agora para 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
Isso quase faz isso. Você precisará configurar rEFInd
um pouco ...
echo '"ArchISO" "archisolabel=ESP archisobasedir=/EFI/arch_linux \
copytoram rootwait initrd=EFI\arch_linux\archiso.img"'\
>$_/refind_linux.conf
Isso deve fornecer um sistema inicializável. Por favor, olhe através do principal refind.conf
in ../BOOT
- é muito bem comentado e praticamente se documenta. Você também vai querer ir para rodsbooks.com e ler os documentos lá.
Uma última nota embora. Se você tivesse que colocar as mesmas coisas no disco rígido do seu sistema na partição do sistema EFI, você sempre teria acesso ao disco de boot do live arch.