root@catnux
← back to articles
<Linux>2026-07-0915 min

Install Arch From Another Linux (Live CD)

Install Arch Linux with Btrfs subvolumes directly from another Linux live CD — no need to burn a separate Arch ISO. Perfect when you already have a Kali or Ubuntu live USB handy.

This guide covers how to install Arch Linux using the Arch bootstrap tarball from any Linux live environment — in this case, Kali Linux. Why make a new bootable USB when you already have one? The process works the same from any distro's live CD.

We'll set up a clean Arch system on a Btrfs partition with proper subvolumes (@, @home, @log, @cache) for snapshot readiness.


Prerequisites

  • USB drive with Kali Linux (or any Linux live CD)
  • Target disk with at least 20 GB free space
  • UEFI system (adjustments needed for BIOS)
  • Internet connection (wired recommended for stability)

⚠️ All commands assume the target disk is /dev/sda. Double-check with lsblk and adjust accordingly.


Step 0: Boot from the Live CD

Insert your Kali (or any Linux) live USB and boot from it. Enter the UEFI/BIOS boot menu (usually F12, F2, or Del during POST) and select the USB drive.

Once the live environment loads, open a terminal. Verify internet connectivity:

bash
ping -c 3 google.com

Check the target disk:

bash
lsblk -f

You should see your internal disk (e.g. /dev/sda) and any partitions that may exist. If you're on Kali, you may need to start NetworkManager first:

bash
sudo systemctl start NetworkManager

Now we're ready to partition the disk.


Step 1: Partition the Disk

Identify your target disk:

bash
lsblk -f

Launch fdisk or cfdisk to partition:

bash
fdisk /dev/sda

Create the following layout for a UEFI system:

PartitionSizeType
/dev/sda1512 MBEFI System
/dev/sda24 GBSwap (optional)
/dev/sda3RestLinux root
bash
g   # create GPT partition table
n   # partition 1: +512M, type EF00 (EFI System)
n   # partition 2: +4G, type 8200 (Linux swap)
n   # partition 3: accept default for rest
w   # write and exit

Format the partitions:

bash
mkfs.fat -F32 /dev/sda1
mkswap /dev/sda2     # skip if no swap
mkfs.btrfs -L Arch /dev/sda3
swapon /dev/sda2     # skip if no swap

Step 2: Download and Prepare Arch Bootstrap

Since we're not booting from Arch ISO, we need the bootstrap tarball:

bash
cd /tmp
wget https://geo.mirror.pkgbuild.com/iso/latest/archlinux-bootstrap-x86_64.tar.zst

Extract it:

bash
tar --zstd -xf archlinux-bootstrap-x86_64.tar.zst --numeric-owner
mv root.x86_64 arch-bootstrap

Edit mirrorlist to enable a mirror:

bash
sed -i 's/^#Server/Server/' /tmp/arch-bootstrap/etc/pacman.d/mirrorlist

Bind-mount the bootstrap directory (pacman workaround):

bash
mount --bind /tmp/arch-bootstrap /tmp/arch-bootstrap
chmod 1777 /tmp/arch-bootstrap/tmp

Step 3: Enter the Bootstrap Chroot

bash
mkdir -p /tmp/arch-bootstrap/{proc,sys,dev,run}
cp /etc/resolv.conf /tmp/arch-bootstrap/etc/

mount -t proc proc /tmp/arch-bootstrap/proc
mount --rbind /sys /tmp/arch-bootstrap/sys
mount --rbind /dev /tmp/arch-bootstrap/dev
mount --rbind /run /tmp/arch-bootstrap/run

Now chroot in:

bash
chroot /tmp/arch-bootstrap /bin/bash

You should now see [root@arch-bootstrap /]#.


Step 4: Initialize Pacman

bash
pacman-key --init
pacman-key --populate archlinux
pacman -Syu arch-install-scripts --noconfirm

If you encounter could not determine cachedir mount point, run: mount --bind /tmp/arch-bootstrap /tmp/arch-bootstrap


Step 5: Create Btrfs Subvolumes

Still inside the chroot, mount the target partition:

bash
mount /dev/sda3 /mnt

Create subvolumes:

bash
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@log
btrfs subvolume create /mnt/@cache

Unmount:

bash
umount /mnt

Step 6: Mount Subvolumes Properly

Mount the root subvolume:

bash
mount -o compress=zstd:1,noatime,space_cache=v2,subvol=@ /dev/sda3 /mnt

Create mount points:

bash
mkdir -p /mnt/{home,var/log,var/cache,boot/efi}

Mount the other subvolumes:

bash
mount -o compress=zstd:1,noatime,space_cache=v2,subvol=@home /dev/sda3 /mnt/home
mount -o compress=zstd:1,noatime,space_cache=v2,subvol=@log /dev/sda3 /mnt/var/log
mount -o compress=zstd:1,noatime,space_cache=v2,subvol=@cache /dev/sda3 /mnt/var/cache

Mount the EFI partition:

bash
mount /dev/sda1 /mnt/boot/efi

Step 7: Install Base System

bash
pacstrap -K /mnt base linux linux-firmware base-devel btrfs-progs grub efibootmgr \
  nano sudo networkmanager

This will pull in the base Arch system, kernel, firmware, Btrfs tools, and the GRUB bootloader.


Step 8: Generate fstab

bash
genfstab -U /mnt >> /mnt/etc/fstab

Verify the fstab — make sure subvolume entries do NOT contain subvolid (only subvol=):

bash
cat /mnt/etc/fstab

If you see subvolid=, edit the file and remove it. Subvol IDs change after snapshots.


Step 9: Chroot into the New System

bash
arch-chroot /mnt

From here on, we're inside the actual Arch installation.


Step 10: System Configuration

Timezone

bash
ln -sf /usr/share/zoneinfo/Asia/Jakarta /etc/localtime
hwclock --systohc

Locale

bash
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
locale-gen
echo "LANG=en_US.UTF-8" > /etc/locale.conf

Hostname

bash
echo "archbox" > /etc/hostname

Add matching hosts entries:

bash
cat > /etc/hosts << EOF
127.0.0.1   localhost
::1         localhost
127.0.1.1   archbox.localdomain archbox
EOF

Root Password

bash
passwd

Create a User

bash
useradd -m -G wheel -s /bin/bash yourname
passwd yourname

Enable sudo:

bash
echo "%wheel ALL=(ALL:ALL) ALL" >> /etc/sudoers.d/wheel

Step 11: Enable NetworkManager

bash
systemctl enable NetworkManager

Step 12: Install GRUB Bootloader

bash
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg

For BIOS systems: grub-install --target=i386-pc /dev/sda


Step 13: Exit and Reboot

bash
exit               # exit chroot
umount -R /mnt
umount -R /tmp/arch-bootstrap/proc
umount -R /tmp/arch-bootstrap/sys
umount -R /tmp/arch-bootstrap/dev
umount -R /tmp/arch-bootstrap/run
reboot

Remove the live USB after power-off.


Step 14: First Boot & Verification

Login as your user and verify Btrfs subvolumes:

bash
sudo btrfs subvolume list /

You should see @, @home, @log, and @cache.

Check mount options:

bash
findmnt /

Make sure compression is active:

bash
sudo btrfs filesystem show /

Update the system:

bash
sudo pacman -Syu

Optional: Install Desktop Environment

If you want a GUI:

bash
sudo pacman -S xfce4 xfce4-goodies lightdm lightdm-gtk-greeter
sudo systemctl enable lightdm
reboot

Troubleshooting

error: could not determine cachedir mount point

The bootstrap chroot needs its own directory bind-mounted:

bash
mount --bind /tmp/arch-bootstrap /tmp/arch-bootstrap

GRUB install fails with "cannot find EFI directory"

Make sure /mnt/boot/efi exists and the EFI partition is mounted:

bash
mount /dev/sda1 /mnt/boot/efi

System doesn't boot after reboot

Boot back into the live CD, re-mount everything, and chroot to debug:

bash
mount -o compress=zstd:1,noatime,subvol=@ /dev/sda3 /mnt
arch-chroot /mnt
journalctl -xb

Check GRUB config with:

bash
cat /boot/grub/grub.cfg | grep "linux"

Make sure the kernel line includes rootflags=subvol=@ if missing.


Summary

You now have a lean Arch Linux installation on Btrfs with proper subvolumes — installed entirely from a Kali Linux live CD. The bootstrap method works for any Linux distro; just replace the wget URL with the latest bootstrap from archlinux.org/download/.

Next steps: install snapper + grub-btrfs for automatic pre/post-update snapshots and the ability to roll back a broken system from the GRUB menu.

catnuxpage: articles/install-arch-from-livecd/
up: 00:00:00