This is not easy. Mostly followed Installation guide, on a Hyper-V v2 VM. Hyper-V v2 has EFI enabled, so follow corresponding instructions.

Disk partitioning and mounting

Requires two partitions, an EFI partition and a main partition. EFI partiion is a FAT32 partition. Used parted.

Follow UEFI/GPT example for parted:

(parted) mkpart ESP fat32 1MiB 513MiB
(parted) set 1 boot on
(parted) mkpart primary ext4 513MiB 100%
(parted) quit

See parted tips.

From console:

mkfs.ext4 /dev/sdxY
mkfs.fat -F32 /dev/sdxY

Then mount them:

mount /dev/sdxY /mnt          # this is the primary root
mkdir /mnt/boot
mount /dev/sdxY /mnt/boot     # this is the EFI partition

Install the base packages

pacstrap /mnt base

Note this must be done after mounting /mnt and /mnt/boot, as it installs essentials like vmlinux, initramfs, etc. into /mnt/boot.

Boot Loader

This is hard. I tried GRUB with EFI first, it failed on me 1. I then used systemd-boot which worked eventually.

Note: do all these before chroot to /mnt, otherwise you don't have the necessary executables.

First install binaries into EFI partition (/mnt/boot folder):

bootctl --path=esp install

Then add an entries to /mnt/boot/loader/entries, and configure /mnt/boot/loader/loader.conf to point to the new entry.

Add a new entry at /mnt/boot/loader/entries/arch.conf with content:

title          Arch Linux
linux          /vmlinuz-linux
initrd         /initramfs-linux.img
options        root=PARTUUID=14420948-2cea-4de7-b042-40f67c618660 rw

Replace the PARTUUID with the primary partition's GPT partition UUID. You can find it with blkid:

# blkid
/dev/sda1: UUID="xxxx-xxxx" TYPE="vfat" PARTUUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxx..."
/dev/sda2: UUID="333db32c-b91e-41da-86c7-801c88059660" TYPE="ext4" PARTUUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxx..."

Note: use PARTUUID, NOT UUID.

parted tips

Run parted with -a optimal so misalignment are warned. But I cannot get partitions to properly aligned and used "Ignore" when creating partitions 2.

  • at command line use fdisk -l to see all disks and partitions

  • use h <command> for help

  • use p or p all to list partitions and disks

  • use mklabel to make a new partition table for a disk - this destroyes old table. E.g., mklabel gpt to create a GPT partition table. mklabel msdos to create a msdos or (maybe) MBR partition table.

  • use mkpart to make new partition on a disk with partition table.

    • the start/end supports unit postfix, like MiB, MB, etc. A negative number counts from the end (-120MiB). Also percentage can be used (100%).
  • use resizepart to resize a partition

Note After running parted, you'll need to run mkfs.xxx to format the newly created partitions.


1: grub-install failed with: "error: failed to get canonical path of 'airootfs'"

2: per doc, use percentage notation so it auto-align for you