My Thinkpad T480 won't boot anything Windows based but will boot anything FOSS

I’m having a weird issue with my Thinkpad T480. It has become a bigger FOSS zealot than I am!

TL;DR My Thinkpad will boot anything as long as it’s not Windows based. How do I fix the issue?

The T480 has a 2.5" slot than can take either a 2.5" SATA disk or an NVMe disk (with an adaptor), and it also has a second m.2 slot than can take a 2242 NVMe disk. Up until last week, I had Ubuntu installed to a 2.5" SSD, and Windows 10 installed to the 2242 NVMe disk. I then upgraded by hardware by adding another stick of RAM and replacing the 2.5" disk with a 2280 NVMe disk. I cloned my Ubuntu install over to the new 2280 disk and everything went pretty smoothly. I think I had to disable Secure Boot in order to boot the cloning software ISO but my memory is a bit fuzzy.

My T480 has two batteries, one detachable external battery and an internal battery that you can disabled in the BIOS… which is what I did before installing the new hardware. Since doing that, I’ve realised that the Windows install on the 2242 disk won’t boot. When I select the Windows entry in my Grub menu, the blue Windows logo shows on screen and either just the spinning dots appear, or the “Preparing Automatic Repairs” text appears alongside the spinning dots. They show for a few seconds before the T480 reboots.

What’s more… I’ve found that my T480 won’t boot Windows ISOs either. Or anything Windows based for that matter (such as Macrium Reflect) but any FOSS boot disc that I throw at it… from Debian to pfSense, boots up just fine. This means that any troubleshooting that requires booting into Safe Mode or anything beyond the moment where the blue Windows logo first appears is not possible for me.

I’ve tried changing all the relevant BIOS settings (Secure Boot on/off, UEFI only / UEFI and Legacy etc.). I’ve also updated the BIOS and reset it to factory defaults. I’ve removed the new stick of RAM. Tried booting up with the 2280 Ubuntu disk disconnected. I’ve tried booting Windows ISOs with the 2242 Windows disk disconnected. I’ve even tried connecting the 2242 Windows disk to my desktop and whilst I was able to image it using Debian’s “Disks” tool, I was not able to boot from it… I think the boot partition is damaged or something but that wouldn’t explain the T480 being unable to boot Windows ISOs. Oh, I’m also able to browse the 2242 Windows installation from my Ubuntu install, so I don’t think it’s a hardware issue. At least not one that affects the data partition.

There are only two things I haven’t tried. First is pressing the T480’s pinhole, hardware reset button (because I’m not entirely sure what it does), and second are the various options for clearing the “Keys” (Factory Key, Secure Boot Key, and Certificates) in the T480 BIOS menu because I don’t know what it does or whether it’d screw up my Ubuntu install too.

Has anyone else ever run into an issue like this?

What should my next course of action be?

Have you tried updating the system firmware? You should be able to do this from linux using “fwupdmgr refresh; fwupdmgr upgrade” (note: this requires having booted in UEFI mode). It should ask you to reboot, then start an updater through UEFI, and install the updates.

1 Like

One silly question - is the Windows 10 ISO up to date? I remember buying 960 EVO m.2 with the idea of moving win10 there, but struck a brick wall with similar symptoms. In the end, I left my current win10 installation on the existing ssd and never returned to the question. Also had a bucket of fun trying to copy the installed win10 ssd to m.2. No luck.

1 Like

Be sure that you’re using media setup for a UEFI install of Windows (create it using Rufus or the tool from Microsoft)

Also I have a T480 with a 7th gen i5, if you want to compare settings in the UEFI I’ll be happy to help with that.

I also had the same problem as you when I switched from an M.2 OEM sata SkHynix SSD to a 2TB intel 660p… the catch was that windows lacked the drivers for that SSD controller, I solved the issue by plugging in the new ssd via a usb-nvme box and running windows update… I did “Check for updates” and then installed all the “Optional Updates” and then I could see the SSD as as storage disk instead of an unknown device, after that I cloned the installation with clonezilla and it booted up just fine… I don’t think that it’s an answer to OP’s question but maybe that is the solution to your problem

2 Likes

Thanks. Looks like it could be the cause (at least for me).

I don’t think I did. I’ll add it to the list of things to try. Thanks.

The ISOs are a little bit old but they do boot on other systems. Strangely enough, if I try to boot a Win7 ISO on the T480, it appears to get further along in the boot process than the Win 10 ISOs… but it’s probably just a case of the Win 7 boot process being a little different.

I downloaded a fresh ISO last night and I’ll report back if it makes any difference.

One thing that I should just mention is that I’m not using a conventional USB device. Nor am I using an optical disc. I’m actually using my iODD 2531 external drive, which is a 2.5" enclosure that can emulate a virtual optical drive (or thumb drive). I’ve never had any issues with using it before, including on the T480 but I will dig up an actual thumb drive just to rule that option out.

I’ll be sure to double check. I’m pretty sure my ISOs will all be UEFI though. I either created them using Microsoft’s tool or I downloaded them direct from the Microsoft website… I’d be a little surprised if the default image they serve is still MBR only.

Thank you. I’ll certainly bare that in mind.

Make sure that you are running the iODD in CD mode and not Dual mode when installing Windows. The extra HDD it can present to the Windows installer can cause trouble under some circumstances during installation.

I think @HanSolo when you disable Secure Boot so your cloning software would run, the BIOS for your machine got corrupted. I would suggest that since @vynncentgm has a Thinkpad T480, I would use his BIOS setting as a guide. Remove your Linux drive. Reinstall Windows 10 on a separate drive. Once Windows 10 is set up the way you like, install your Linux drive and reinstall Ubuntu 22.04. Don’t use any cloning software. Make sure you install Ubuntu the same way you installed Windows, meaning if you installed Windows in legacy mode, you installed Ubuntu in legacy mode. If you installed Windows in UEFI mode, Ubuntu is installed the same way. Follow the directions I will post here. If you have any questions feel free to reach out.

Dual boot Windows and Ubuntu in separate hard drives.

Could you please elaborate on your reasoning?.. I just don’t understand why anything non-Windows will boot with all manner of settings in the BIOS, including Secure Boot being on or off, but Windows won’t. Surely if the BIOS was corrupt, it’d affect Linux too?

I can’t install Windows because the T480 won’t boot even the installation media.

I’ve just thought of a couple of things.

  1. I dug out the HDD that originally came with the T480, which is what I originally imaged to the 2242 NVMe disk to create the Windows install that has persisted to this day. I installed the HDD into the T480 today and tried to boot from it (in order to rule out the issue being with the 2242 or it’s boot partition). The original HDD does not boot. It acts the exact same way as the 2242 based install or any of my Windows ISOs.

  2. I tried to update the firmware as @cowphrase suggested but there’s currently a bug with fwupd which means that it’s unable to update the UEFI dbx. I don’t know anything about the UEFI dbx or the various other things related to it, secure booting, and the keys an certs stored in the BIOS but… could an out of date dbx be the cause of my issues?
    I have read that the update in question was pushed or instigated by Microsoft (which immediately makes me wary) and my install of Windows may have been fairly old… I wondered whether they blocked older versions of Windows from booting?

I have done some research, and if what I thought happened to the Windows drive when you turned off secure boot would also mess up your Linux drive, since that isn’t the case, forget my advice.

Okay it’s back to the manual way then (my old T480 updated just fine through fwupd, weird).

Download the firmware ISO from the site, then follow those instructions to create a bootable USB image.

https://www.cyberciti.biz/faq/update-lenovo-bios-from-linux-usb-stick-pen/

I was able to boot the ISO and get to the point of the update process where it told me that I’m using the latest version already. My BIOS is v1.45, which is the latest available according to the Lenovo website.

I’m really starting to wonder whether it’s an issue with the secure boot keys and the related options in the BIOS but I’m having a hard time finding any info on what would happen if I delete or clear them. My main concern is that I really want to avoid having to reinstall Ubuntu… at least for the next couple of weeks (for various reasons).

One more thing to cross off the list. I was also unable to boot a newly downloaded Windows ISO downloaded directly off the Microsoft website just a couple of days ago.

Are you running Ubuntu 20.04 by chance? Apparently that has an issue in its version of fwupd 22.04 ships a fixed version.

I am running 20.04 as it happens but I think there’s a typo in the rest of your comment because I don’t understand it.

I could try upgrading to 22.04, as I’m also unable to install the snap verions of fwupd and I think running 22.04 might help with that issue too but it’s not something I can do for a few weeks. Would it be a bad idea to try updating firmware when booted into a 22.04 live ISO?


Another tidbit… when I run fwupdmgr get-results, it gives me a numerical menu to select from. When I select any other device other than the ones for the IME and my system firmware, I get something like his-

failed to find 4bde70ba4e39b28f9eab1628f9dd6e6244c03027 in history database: No devices found

Or something like the following (note the “Success”)-

System Firmware:
  Device ID:            a45df35ac0e948ee180fe216a5f703f32dda163f
  Previous version:     0.1.36
  Update State:         Success
  Last modified:        2022-09-22 20:00
  GUID:                 dc7f0308-1ef8-4774-9ba5-89a58c4d731c
  Device Flags:         • Internal device
                        • Updatable
                        • System requires external power source
                        • Needs a reboot after installation
                        • Reported to remote server
                        • Cryptographic hash verification is available
                        • Device is usable for the duration of the update

But in the case of the UEFI dbx entry, this is what I get-

UEFI dbx:
  Device ID:            362301da643102b9f38477387e2193e57abaa590
  Previous version:     83
  Update State:         Failed
  Update Error:         failed to run update on reboot
  Last modified:        2022-09-22 20:06
  GUID:                 14503b3d-73ce-5d06-8137-77c68972a341
  Device Flags:         • Internal device
                        • Updatable
                        • Needs a reboot after installation
                        • Reported to remote server

I’m really tired though, so I’m calling it for tonight.

[EDIT] I guess I’m a filthy liar.

This is the partial output of fwupdmgr get-devices-

│ └─UEFI dbx:
│       Device ID:        362301da643102b9f38477387e2193e57abaa590
│       Summary:          UEFI revocation database
│       Current version:  267
│       Minimum Version:  267
│       Vendor:           UEFI:Linux Foundation
│       Install Duration: 1 second
│       GUIDs:            14503b3d-73ce-5d06-8137-77c68972a341
│                         5971a208-da00-5fce-b5f5-1234342f9cf7
│                         c6682ade-b5ec-57c4-b687-676351208742
│                         f8ba2887-9411-5c36-9cee-88995bb39731
│       Device Flags:     • Internal device
│                         • Updatable
│                         • Supported on remote server
│                         • Needs a reboot after installation
│                         • Only version upgrades are allowed

I meant to say that the github thread mentions 20.04 may have a broken fwupd, and that 22.04 ships a fixed version.

Unless you have a spare SSD to install 22.04 onto, it might be best to wait. A live CD may work, but most of the firmware updates require booting a special UEFI image that can install firmware updates. I’m not sure if a live cd can do that.

I’ve just tried installing 22.04 to a spare SSD but it looks like 22.04 also ships with fwupd 1.75. So I installed the new snap version and ran it using the fwupd.fwupdmgr format (running fwupdmgr alone complains about a version mismatch). It found the update for the dbx, from 77 → 217, it rebooted and then nothing. No update. Just the new 22.04 install booting.

I will try to elaborate on what I’m about to write at a later date… once my head isn’t spinning but basically I also tried the three options in the BIOS I was wondering about (Reset to Setup Mode, Restore Factory Keys, and Clear All Secure Boot Keys). It appears that the reset keys option resets the UEFI dbx to 77 but I’m not sure. All this is so bloody confusing… I feel like I’m playing whack-a-mole with issues at the moment.

The main takeaway though is that I’m still able to boot my 2280 Ubuntu 20.04 install but anything Windows based is no dice.

Oh, one more thing to add to the list. I also am unable to boot Hiren’s 15.2, yet another Windows based boot ISO that won’t feckin’ boot!

I’m gonna go and find a pillow to scream into.

Just thinking out loud here but I wonder whether it’s the new RAM stick?.. In my limited experience, Linux is more tolerant to RAM issues so perhaps it’s possible that the RAM passes Memtest86, boots anything FOSS but makes Windows shit the bed. I think I’m really grasping at straws at this point so going back to basics is a good idea right?

Yep, that’s the “verify your assumptions” part of troubleshooting.

Fwupd only works when installed in UEFI mode, but I’ll assume you’ve done that. Weird that it’s not working.

Not sure if it’s been mentioned, but Thinkpads have a hardware test mode - tried that?