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 withlsblkand 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:
ping -c 3 google.com
Check the target disk:
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:
sudo systemctl start NetworkManager
Now we're ready to partition the disk.
Step 1: Partition the Disk
Identify your target disk:
lsblk -f
Launch fdisk or cfdisk to partition:
fdisk /dev/sda
Create the following layout for a UEFI system:
| Partition | Size | Type |
|---|---|---|
/dev/sda1 | 512 MB | EFI System |
/dev/sda2 | 4 GB | Swap (optional) |
/dev/sda3 | Rest | Linux root |
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:
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:
cd /tmp
wget https://geo.mirror.pkgbuild.com/iso/latest/archlinux-bootstrap-x86_64.tar.zst
Extract it:
tar --zstd -xf archlinux-bootstrap-x86_64.tar.zst --numeric-owner
mv root.x86_64 arch-bootstrap
Edit mirrorlist to enable a mirror:
sed -i 's/^#Server/Server/' /tmp/arch-bootstrap/etc/pacman.d/mirrorlist
Bind-mount the bootstrap directory (pacman workaround):
mount --bind /tmp/arch-bootstrap /tmp/arch-bootstrap
chmod 1777 /tmp/arch-bootstrap/tmp
Step 3: Enter the Bootstrap Chroot
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:
chroot /tmp/arch-bootstrap /bin/bash
You should now see [root@arch-bootstrap /]#.
Step 4: Initialize Pacman
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:
mount /dev/sda3 /mnt
Create subvolumes:
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@log
btrfs subvolume create /mnt/@cache
Unmount:
umount /mnt
Step 6: Mount Subvolumes Properly
Mount the root subvolume:
mount -o compress=zstd:1,noatime,space_cache=v2,subvol=@ /dev/sda3 /mnt
Create mount points:
mkdir -p /mnt/{home,var/log,var/cache,boot/efi}
Mount the other subvolumes:
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:
mount /dev/sda1 /mnt/boot/efi
Step 7: Install Base System
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
genfstab -U /mnt >> /mnt/etc/fstab
Verify the fstab — make sure subvolume entries do NOT contain subvolid (only subvol=):
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
arch-chroot /mnt
From here on, we're inside the actual Arch installation.
Step 10: System Configuration
Timezone
ln -sf /usr/share/zoneinfo/Asia/Jakarta /etc/localtime
hwclock --systohc
Locale
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
locale-gen
echo "LANG=en_US.UTF-8" > /etc/locale.conf
Hostname
echo "archbox" > /etc/hostname
Add matching hosts entries:
cat > /etc/hosts << EOF
127.0.0.1 localhost
::1 localhost
127.0.1.1 archbox.localdomain archbox
EOF
Root Password
passwd
Create a User
useradd -m -G wheel -s /bin/bash yourname
passwd yourname
Enable sudo:
echo "%wheel ALL=(ALL:ALL) ALL" >> /etc/sudoers.d/wheel
Step 11: Enable NetworkManager
systemctl enable NetworkManager
Step 12: Install GRUB Bootloader
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
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:
sudo btrfs subvolume list /
You should see @, @home, @log, and @cache.
Check mount options:
findmnt /
Make sure compression is active:
sudo btrfs filesystem show /
Update the system:
sudo pacman -Syu
Optional: Install Desktop Environment
If you want a GUI:
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:
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:
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:
mount -o compress=zstd:1,noatime,subvol=@ /dev/sda3 /mnt
arch-chroot /mnt
journalctl -xb
Check GRUB config with:
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.