diff --git a/roles/install_arch/tasks/main.yml b/roles/install_arch/tasks/main.yml
index 7fc9b62d1e919121f558c8ec868f4fa28d128ae1..1fbc0fc30380b30b6be1f70be84a72dc21bec1e0 100644
--- a/roles/install_arch/tasks/main.yml
+++ b/roles/install_arch/tasks/main.yml
@@ -35,7 +35,9 @@
       --align-end
       --clear
       --new=0:0:+1M --change-name=0:'BIOS boot partition' --typecode=0:ef02
+      {% if ansible_virtualization_role == 'host' %}
       --new=0:0:+512M --change-name=0:'EFI system partition' --typecode=0:ef00
+      {% endif %}
       --new=0:0:0 --change-name=0:root --typecode=0:8304
       {{ item }}
   with_items:
@@ -43,26 +45,33 @@
   register: sgdisk
   changed_when: "sgdisk.rc == 0"
 
-- name: Format the EFI system partition  # noqa no-changed-when
-  command: mkfs.fat -F 32 -S 4096 -n ESP {{ system_disks[0] }}{{ 'p2' if 'nvme' in system_disks[0] else '2' }}
+- name: Store root partition number for later steps
+  set_fact:
+    root_partno: "{{ '3' if ansible_virtualization_role == 'host' else '2' }}"
 
 - name: Partition and format the disks (btrfs RAID)  # noqa no-changed-when
-  command: mkfs.btrfs -f -L root -d {{ raid_level | default('raid1') }} -m {{ raid_level | default('raid1') }} -O no-holes {{ system_disks | map('regex_replace', '^(.*)$', '\g<1>p3' if 'nvme' in system_disks[0] else '\g<1>3') | join(' ') }}
+  command: mkfs.btrfs -f -L root -d {{ raid_level | default('raid1') }} -m {{ raid_level | default('raid1') }} -O no-holes {{ system_disks | map('regex_replace', '^(.*)$', '\g<1>p' ~ root_partno if 'nvme' in system_disks[0] else '\g<1>' ~ root_partno) | join(' ') }}
   when: filesystem == "btrfs" and system_disks | length >= 2
 
 - name: Partition and format the disks (btrfs single)  # noqa no-changed-when
-  command: mkfs.btrfs -f -L root -d single -m single -O no-holes {{ system_disks[0] }}{{ 'p3' if 'nvme' in system_disks[0] else '3' }}
+  command: mkfs.btrfs -f -L root -d single -m single -O no-holes {{ system_disks[0] }}{{ 'p' if 'nvme' in system_disks[0] }}{{ root_partno }}
   when: filesystem == "btrfs" and system_disks | length == 1
 
 - name: Mount the filesystem (btrfs)
-  mount: src="{{ system_disks[0] }}{{ 'p3' if 'nvme' in system_disks[0] else '3' }}" path=/mnt state=mounted fstype=btrfs opts="compress-force=zstd,space_cache=v2"
+  mount: src="{{ system_disks[0] }}{{ 'p' if 'nvme' in system_disks[0] }}{{ root_partno }}" path=/mnt state=mounted fstype=btrfs opts="compress-force=zstd,space_cache=v2"
   when: filesystem == "btrfs"
 
-- name: Create the efi mountpoint
-  file: path=/mnt/efi state=directory mode='0755'
+- name: Format and mount the EFI system partition
+  when: ansible_virtualization_role == 'host'
+  block:
+    - name: Format the EFI system partition  # noqa no-changed-when
+      command: mkfs.fat -F 32 -S 4096 -n ESP {{ system_disks[0] }}{{ 'p2' if 'nvme' in system_disks[0] else '2' }}
+
+    - name: Create the efi mountpoint
+      file: path=/mnt/efi state=directory mode='0755'
 
-- name: Mount the efi filesystem
-  mount: src="{{ system_disks[0] }}{{ 'p2' if 'nvme' in system_disks[0] else '2' }}" path=/mnt/efi state=mounted fstype=vfat
+    - name: Mount the efi filesystem
+      mount: src="{{ system_disks[0] }}{{ 'p2' if 'nvme' in system_disks[0] else '2' }}" path=/mnt/efi state=mounted fstype=vfat
 
 - name: Touch LOCK file on mountpoint
   file: path=/mnt/LOCK state=touch owner=root group=root mode=0644
@@ -120,7 +129,7 @@
   changed_when: "chroot_pacman_key_populate.rc == 0"
 
 - name: Install ucode update
-  when: ansible_virtualization_role == "host"
+  when: ansible_virtualization_role == 'host'
   block:
     - name: Install ucode update for Intel
       set_fact: ucode="intel-ucode"
@@ -183,6 +192,7 @@
     - "{{ system_disks }}"
   register: chroot_grub_install_uefi
   changed_when: "chroot_grub_install_uefi.rc == 0"
+  when: ansible_virtualization_role == 'host'
 
 - name: Configure grub
   command: chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg