Two Surface Go Devices Saved by Ubuntu: A Recovery Story (and the Pitfalls to Avoid)

Two Surface Go Devices Saved by Ubuntu: A Recovery Story (and the Pitfalls to Avoid)

Introduction

Over the past few days, I recovered two Microsoft Surface Go devices and gave them a second life with Ubuntu.

The goal was simple: turn two rarely used tablets into lightweight devices for web browsing, YouTube, Netflix, and basic productivity.

The reality turned out to be much more interesting.

One of the devices installed without any major issues. The other became a genuine forensic investigation involving UEFI firmware, GRUB, custom kernels, stubborn USB boot problems, and installations that initially seemed beyond recovery.

This article explains what happened, the mistakes that were made, how we diagnosed them, and how we ultimately recovered both devices.


The First Surface Go: When Simplicity Wins

Initial Situation

The first Surface Go had already been partially prepared for Ubuntu.

Several issues had emerged during previous attempts:

  • unreliable USB booting
  • incomplete installations
  • leftover partitions
  • errors during disk preparation

The breakthrough came by using:

  • Ubuntu 24.04 LTS
  • Balena Etcher to create the USB installer
  • a completely clean installation

During disk preparation, we verified that the internal eMMC had actually been wiped:

sudo fdisk -l /dev/mmcblk0

The disk showed a new GPT partition table with no leftover partitions.

A standard installation was then performed:

  • Interactive Installation
  • Default Selection
  • Erase Disk

Result

Ubuntu installed successfully.

After the first reboot:

  • Wi-Fi worked
  • the Surface keyboard was recognized
  • the touchscreen worked
  • the mouse worked

The only remaining steps were:

  • disconnecting and reconnecting the Type Cover
  • reconnecting to Wi-Fi
  • completing system updates

There was no need to use Linux-Surface.


The Second Surface Go 2: The “Cursed” Machine

The second device was much more complicated.

Initial Situation

Ubuntu was already installed.

A Linux-Surface kernel had later been installed.

After some testing and modifications:

  • GNOME no longer started
  • the system only booted into a TTY
  • USB booting appeared impossible
  • a previous shutdown involving premature removal of the USB drive had caused a kernel panic

The device appeared to be stuck.


First Mistake: Assuming USB Boot Was Broken

The initial assumption was simple:

“The Surface can’t see the USB drive.”

In reality, that wasn’t true.

Checking from Linux:

lsblk

clearly showed:

sda

which represented the USB drive.

The Surface firmware also displayed:

USB Storage

as the first boot device.

Therefore:

  • the USB drive was detected
  • the firmware recognized it
  • USB booting was enabled

The problem was elsewhere.


Analyzing the Surface Firmware

Checks performed in the UEFI firmware showed:

Security

Secure Boot:

Disabled

Boot Configuration

USB Storage
Windows Boot Manager
Internal Storage

USB was already in the first position.

Additionally:

Enable Boot from USB devices

was enabled.

The firmware was therefore configured correctly.


The False Lead

Even when forcing boot using:

Volume -

during startup, the system continued loading Ubuntu installed on the internal eMMC.

It looked like a USB issue.

In reality, it wasn’t.


Verifying the USB Drive Contents

By manually mounting the USB drive:

sudo mount /dev/sda1 /mnt/usb

we verified the presence of the installation files:

EFI
boot
casper
install
pool
ubuntu

and the EFI files:

find /mnt/usb -iname "*.efi"

Output:

bootx64.efi
grubx64.efi
mmx64.efi

The USB drive was valid.


The Decisive Discovery

Through GRUB, we entered the console:

grub>

and listed the available devices:

ls

Simplified output:

(hd0)
(hd0,gpt1)
(hd0,gpt2)
(hd0,gpt3)

(hd1)
(hd1,gpt1)
(hd1,gpt2)

At that point, we identified:

USB Drive

ls (hd0,gpt1)/

Output:

boot
casper
EFI
install
pool
ubuntu

Internal Disk

ls (hd1,gpt2)/

Output:

bin
boot
etc
home
usr
var

We had finally identified both devices.


Manually Booting the Live USB

Once the correct partition had been identified:

set root=(hd0,gpt1)

Load the kernel:

linux /casper/vmlinuz boot=casper ---

Load the initrd:

initrd /casper/initrd

Start the boot process:

boot

The Live USB started immediately.

This proved that:

  • the USB drive was valid
  • the firmware could see the USB drive
  • the problem was in the automatic boot process

Things NOT to Do

1. Install Linux-Surface Too Early

First, verify that standard Ubuntu is stable.

Installing custom kernels on a freshly configured machine makes troubleshooting significantly more difficult.


2. Remove Media During Shutdown

A kernel panic was likely caused by removing the USB drive before shutdown operations had completed.

Always wait until the system has fully powered off.


3. Wipe a Disk While Booted From It

When the root filesystem is:

/dev/mmcblk0p2

it is not possible to completely erase the disk.

You must first boot from an external environment.


4. Assume the Firmware Is the Problem

In our case:

  • firmware configuration was correct
  • Secure Boot settings were correct
  • boot order was correct

The issue was much more subtle.


Why Balena Etcher Helped

The images created with Balena Etcher proved more reliable on Surface devices than other tools used previously.

This does not mean other software is incorrect, but in our case Etcher produced the USB installer that ultimately enabled the recovery.


Final Result

Both Surface Go devices were successfully recovered.

Surface Go

  • Ubuntu 24.04 LTS
  • Touchscreen working
  • Wi-Fi working
  • Keyboard working
  • Updates completed

Surface Go 2

  • System recovered
  • GRUB access restored
  • USB boot manually forced
  • Ready for a clean reinstallation

The Moral of the Story

When a Surface appears unable to “see” a USB drive, the USB drive is often not the real problem.

Before reinstalling everything:

  1. verify the firmware configuration;
  2. verify that Secure Boot is configured correctly;
  3. verify that the USB drive is actually readable;
  4. use the GRUB console as a diagnostic tool.

In many cases, the device can be recovered without invasive procedures.

And above all: don’t trust your first assumption. When diagnosing boot problems, the real issue is almost always one layer deeper than it initially appears.

Categories: Linux | Tags: linux, surface, recovery