EFI / UEFI problem. No boot after deployment.

  • Hi, I hope someone can help me. I have been trying to solve a problem by myself but I haven't succeed. I have created a Image (Win 10) for deployment. Original computer is Lenovo P700 Workstation in EFI mode. Image is syspreped and works well as I have deployed it to similar computers.

    The problem arises when I try to deploy to certain model of computer. In this case is a Lenovo Thinkstation E30. This computer is older and does not support UEFI PXE boot, so I have used the ISO boot method. Deployment goes well but after rebooting, the computer does not find any bootable OS.

    I can solve the problem manually executing recboot /fixboot from a Windows Recovery Console but, of course, I want to avoid this if possible.

    Attached is the deployment log. There is a bunch of partitions warnings but I don't think they are relevant. I think the problem is in the EFI table updating, but I don't know how to solve it.

    I have tried with another image created in the same model of computer but the result is the same.

    Thanks in advance!

  • I would also lean towards the EFI NVRAM but from the log it appears it was updated correctly. After you fix the machine with recboot can you boot to the client console and post the new output of the nvram, lets see if anything was changed?
    [code]mount -t efivarfs none /sys/firmware/efi/efivars
    efibootmgr -v[/code]

  • Also, if possible do you still have the upload log for this image, can you attach it?

  • I came across an interesting post that claims, some older efi firmware will actually look for a specific description on a boot entry, such as Windows Boot Manager in order to boot. This doesn't make sense to me, but it's worth trying because CloneDeploy does not use the original description when updating the NVRAM.
    In cd_push there should be two lines matching
    [code]efibootmgr -c -d $hard_drive -p "$(parse_json "$current_partition" .Number)" -L "$(parse_json "$current_partition" .EfiBootLoader)" -l "$(parse_json "$current_partition" .EfiBootLoader)" 2>>$CLIENT_LOG[/code]

    trying updating them to
    [code]efibootmgr -c -d $hard_drive -p "$(parse_json "$current_partition" .Number)" -L "Windows Boot Manager" -l "$(parse_json "$current_partition" .EfiBootLoader)" 2>>$CLIENT_LOG[/code]

    and try the deploy again.

    Here is the post I found.

  • Yep! The label/description did the trick. I had noticed this already and tried to change it but apparently one can not modify the label of an already created entry. Shame that I didn't pursued this further but yesterday after the debugging I was a little exhausted and did't think with clarity 🙂

    What I did now was to delete the Windows entry (the one that works) and recreated myself manually with the correct label. And it worked like a charm.

    Just for reference and for others, there is a "typo" in the code you gave me. The correct one is:
    [code]efibootmgr -c -d $hard_drive -p "$(parse_json "$current_partition" .Number)" -L "Windows Boot Manager" -l "$(parse_json "$current_partition" .EfiBootLoader)" 2>>$CLIENT_LOG[/code]

    Thanks a lot!

  • Sounds good, I guess should implement something to capture the original label in the next version. That is definitely a poorly implemented EFI firmware. I have also updated the typo in my original post.