Before you start setting up a Pop!_OS dual-boot system, you are strongly advised to study the System76 documentation on dual-booting to understand better what steps are necessary. It's essential that you do because if you make a mistake, you could lose years of personal files. Take your time and read through the guide* for Dual Booting With Windows. Regardless of experience level, everyone should read the guide, as Pop!_OS does things a little differently than most Linux distributions. There's also a separate guide for Dual Booting with Linux. Additionally, it's crucial that you make a backup of your important files, or create a system image before you attempt any changes to the partition scheme.
* EDIT: At time of writing the doc was different. Now there is the new guide. See this thread. This article will help with an existing Windows installation, whereas the new method makes this obsolete by forcing Windows to install in UEFI mode and share the BIOS EFI menu.
In a traditional UEFI dual-boot scenario, both operating systems share an EFI partition out of the box. Pop keeps the actual Linux kernel in the EFI partition, which results in the standard Windows EFI partition being too small for both. If you followed the System76 dual-boot guide and made a 512MB EFI partition for Pop's bootloader, you now have two EFI partitions on the drive. Without user intervention, the BIOS UEFI boot manager will show both Windows and Pop!_OS, but Systemd-boot will show only Pop. For Systemd-boot to show Windows, you will need to move or copy the Windows bootloader to the newly created Pop!_OS EFI partition and configure Systemd-boot to suit your needs.
For experienced Linux enthusiasts that would be a simple instruction, but to someone new to Linux or inexperienced at manipulating boot parameters, it sounds a little intimidating. I'm not ashamed to admit I would have drawn a complete blank at that instruction at the beginning of my Linux journey. I'm going to simplify the process in this three-step-guide for beginners. I'll combine both GUI and CLI (command-line interface) instruction to provide the most comfortable and safe method possible. If you're unfamiliar or uncomfortable with using a terminal, skip to the GUI-based section for the copying portion of the guide. If you're new to Linux, I suggest that learning a little CLI will go a long way in Pop!_OS; it can make accomplishing many mundane tasks easier than a GUI!
Step One: Determine the name and location, or mount-point, of your Windows and Pop!_OS EFI partitions and then ensure they are both mounted;
Run "Disks", the default disk utility tool in Pop!_OS. You'll see two EFI partitions, the Pop EFI partition which is about 500MB and mounted at
For the sake of interest, the method to find the correct information in a terminal is to run
Step Two: Copy the information and place it where it needs to go.
Using CLI; (For GUI see below)
In the following command, I'm going to annotate the 'Windows EFI mount point' as
##NOTE: For me,
Now ensure Pop!_OS is the default kernel in
Congats! You've dual-booted Pop!_OS correctly. See step 3 to add a timer to the boot menu - optional.
Using GUI;
If you're not comfortable with a terminal yet, here's that last step performed in the file manager Nautilus, AKA Files, but you will need an instance with administrative privileges. This can be accomplished a couple ways, but being a beginner's guide I want to give you the safest way(*). Open Terminal and type
(*) EDIT: Nautilus encountered a bug in gvfs after this was written. You could try to fix it - see here. Or just use
##Note: For me the
Now ensure Pop!_OS is the default kernel in
Congats! You've dual-booted Pop!_OS correctly.
Step Three: Add a timer - optional.
Some users are happy to hold a key during boot to choose the OS they want to use. It is, however, a simple matter to add a timer to Pop's boot menu so you can select using your arrow keys. For the timer, you'll need to edit
* EDIT: At time of writing the doc was different. Now there is the new guide. See this thread. This article will help with an existing Windows installation, whereas the new method makes this obsolete by forcing Windows to install in UEFI mode and share the BIOS EFI menu.
In a traditional UEFI dual-boot scenario, both operating systems share an EFI partition out of the box. Pop keeps the actual Linux kernel in the EFI partition, which results in the standard Windows EFI partition being too small for both. If you followed the System76 dual-boot guide and made a 512MB EFI partition for Pop's bootloader, you now have two EFI partitions on the drive. Without user intervention, the BIOS UEFI boot manager will show both Windows and Pop!_OS, but Systemd-boot will show only Pop. For Systemd-boot to show Windows, you will need to move or copy the Windows bootloader to the newly created Pop!_OS EFI partition and configure Systemd-boot to suit your needs.
For experienced Linux enthusiasts that would be a simple instruction, but to someone new to Linux or inexperienced at manipulating boot parameters, it sounds a little intimidating. I'm not ashamed to admit I would have drawn a complete blank at that instruction at the beginning of my Linux journey. I'm going to simplify the process in this three-step-guide for beginners. I'll combine both GUI and CLI (command-line interface) instruction to provide the most comfortable and safe method possible. If you're unfamiliar or uncomfortable with using a terminal, skip to the GUI-based section for the copying portion of the guide. If you're new to Linux, I suggest that learning a little CLI will go a long way in Pop!_OS; it can make accomplishing many mundane tasks easier than a GUI!
Step One: Determine the name and location, or mount-point, of your Windows and Pop!_OS EFI partitions and then ensure they are both mounted;
Run "Disks", the default disk utility tool in Pop!_OS. You'll see two EFI partitions, the Pop EFI partition which is about 500MB and mounted at
/boot/efi
, and the one for Windows which should be only 100MB. The Pop one is already mounted, mount the Windows one as well. You can do this by selecting it and then clicking the arrow found on the far left of the bottom toolbar. Now remember the Mount point information for the Windows EFI. It should be something like /media/<username>/<UUID>
, but you When you mount the Windows EFI a volume will appear in the left pane of Files at the same mount point as in Disks. This is the location of the /EFI/Microsoft
folder.Below is the Windows EFI mounted in Disks and the subsequent volume appearing in the left pane of Files.
For the sake of interest, the method to find the correct information in a terminal is to run
lsblk -o NAME,FSTYPE,FSSIZE,MOUNTPOINT
. In the output, you will see some vfat
entries under the FSTYPE
column. Pop's EFI is mounted at /boot/efi
and will be around 500MB in size. The Windows EFI will be only 100MB or thereabout.Below is terminal displaying the output of the lsblk command and the following copy command.
Step Two: Copy the information and place it where it needs to go.
Using CLI; (For GUI see below)
In the following command, I'm going to annotate the 'Windows EFI mount point' as
<wemp>
as a placeholder. All you need to do is substitute your actual information in the placeholder. What we are going to do is "copy" the Microsoft folder into Pop's EFI folder.sudo cp -r /<wemp>/EFI/Microsoft /boot/efi/EFI
##NOTE: For me,
<wemp>
is /media/dualpop/02BD-41A4
. See picture above for clarity.Now ensure Pop!_OS is the default kernel in
/boot/efi/loader/loader.conf
, then reboot
to verify everything is working.Congats! You've dual-booted Pop!_OS correctly. See step 3 to add a timer to the boot menu - optional.
Using GUI;
Below are the commands to open Nautilus, AKA Files, with administrative privileges on the relevant folders.
If you're not comfortable with a terminal yet, here's that last step performed in the file manager Nautilus, AKA Files, but you will need an instance with administrative privileges. This can be accomplished a couple ways, but being a beginner's guide I want to give you the safest way(*). Open Terminal and type
nautilus admin:///boot/efi
. A window will appear to enter your password, do so (maybe twice) and Nautilus will open right where you need to be. You will see Pop's EFI folder. Also In Terminal type nautilus admin:///media/<username>/<UUID>/EFI
to locate the 'Microsoft' folder. Simply right-click and copy it, then paste it in Pop's EFI folder.(*) EDIT: Nautilus encountered a bug in gvfs after this was written. You could try to fix it - see here. Or just use
sudo nautilus
for a whole administrative window - be careful and close it when finished!##Note: For me the
<username>
is /dualpop
and the <UUID>
is /02BD-41A4
. (see pictures)Now ensure Pop!_OS is the default kernel in
/boot/efi/loader/loader.conf
, then close the terminal with administrative privileges and reboot to make sure everything is working.Congats! You've dual-booted Pop!_OS correctly.
Below are the commands to safely open the Nautilus Folders with root privileges.
Step Three: Add a timer - optional.
Some users are happy to hold a key during boot to choose the OS they want to use. It is, however, a simple matter to add a timer to Pop's boot menu so you can select using your arrow keys. For the timer, you'll need to edit
/boot/efi/loader/loader.conf
. Use sudo nano /boot/efi/loader/loader.conf
. Add a new line under the default Pop_OS-current
line with timeout 5
(or however long you want), then save with ctrl + s
and exit with ctrl + x
. You can use whichever editor you want, but Nano is beginner friendly and pre-installed in Pop. Last thing is to Reboot and you should be all set to go!Below is Nano with the timeout command in the correct place.
Last edited: