admin管理员组

文章数量:1597897

前言:本人试图在移动硬盘上安装ubuntu20.04(64位),并且希望ubuntu可以从移动硬盘上启动。
以下所有安装操作都是从U盘启动安装程序,安装系统到移动硬盘。U盘中事先写入了系统安装镜像。
本教程包含了正确实现上述目的的流程,以及本人之前所有失败尝试的总结,防止大家踩坑。

安装教程

1、系统条件

移动硬盘为GUID分区格式,BIOS启动系统的方式方式为UEFI。分区格式可以通过DiskGenius查看,启动方式在BIOS配置界面可以看到(进BIOS的方法因机器而异),不过近几年的新机器基本是UEFI启动。如果您的系统不是上述条件,请谨慎参考本教程。DiskGenius可以格式化分区表为GPT(注意实现备份好数据)。

2、准备

安装前,自行备份移动硬盘数据,因为安装时会清空所有磁盘数据。
另外准备一个U盘,U盘要有一个8GB左右的空闲分区。

安装Universal USB Installer和DiskGenius。

下载Ubuntu20.04LTS镜像,使用Universal USB Installer烧录到上述的U盘空闲分区。

最好先关闭windows的bitlocker,在windows的设置中查找"bitlocker"会找到关闭它的选项。

3、安装ubuntu

重启,在LOGO出现前按F12(我的Dell Inspiron7580是按这个键,其他机型自己查)进入BIOS界面。在System Configuration关闭RAID(否则安装程序会提示你回去关闭windows rst),在Drives选项只勾选移动硬盘和U盘启动盘的驱动(这样接下来安装时Ubuntu就不会清空其他硬盘);关闭Secure boot。

安装选项选erase disk。接下来等安装结束就好。安装结束后,会发现ubuntu只建了两个分区:硬盘最前面的512M空间建立为ESP分区,接下来所有空间是另一个分区,用于挂载根目录。所以网上各种ubuntu分区方法,至少对于ubuntu20.04并非必须。如果你的电脑物理内存<8G,或许有必要建一个swap分区。

4、之后怎么进入windows

重启,进入BIOS界面,开启RAID和Secure boot,Drives选项勾选所有驱动器。退出BIOS,电脑会再次重启,这次再按键进入BIOS。此时可能看不到"windows boot manager"这个启动项了,但会出现另一个启动项,其名称包含你本地硬盘某些设备信息,它大概率是原来的windows boot manager,选这个启动项,接下来大概率能进入windows。如果不确定,可以在BIOS设置的Boot sequence中,选中这个启动项然后点击下方的"View",如果这个启动项的路径是"EFI/Microsoft/"开头,那基本确定它就是windows boot manager。

接下来不用再改BIOS选项,ubuntu和windows都能正常启动(对ubuntu性能的影响未知)。默认启动顺序是ubuntu在前,可以在BIOS配置boot sequence来修改。不过,要是不插移动硬盘,那BIOS根本探测不到ubuntu启动项,所以会直接启动windows。

嫌ubuntu占了太多磁盘空间?那就用DiskGenius,选中ubuntu根目录挂载的那个分区,右键,“调整分区容量”,输入你希望的容量。接下来DiskGenius会检查分区的inode表和空闲块表,如果这一步DiskGenius提示“有已使用的未用inode”之类,就记下inode编号,如果没提示那接下来就能成功缩小这个分区。
如果上一步DiskGenius提示inode存在问题,就重启进入ubuntu,通过以下命令寻找有问题的inode对应哪些文件:

find / -inum inode_num

上述inode_num替换成之前我们记录的inode号。
操作时发现,有问题的inode对应的文件都在/var/log/journal下,这里面是系统日志文件(啥作用自己百度)。我把问题inode对应的日志文件都删了,然后重启进windows,用DiskGenius成功把ubuntu根目录分区容量改小。之后也能顺利运行ubuntu。

5、换源

之所以装ubuntu就是因为国内镜像站对它的支持比较好,可以下载一些老版本的软件包。

访问清华镜像站https://mirrors.tuna.tsinghua.edu/help/ubuntu,在页面中选择你的ubuntu版本,网站就会显示对应的镜像源列表。如果要装一些古早的软件,可以选择低版本ubuntu的镜像源。打开apt的镜像列表文件:

sudo gedit /etc/apt/sources.list

把刚刚在/help/ubuntu找到的镜像源列表复制粘贴到sources.list,里面旧有的镜像基本上可以不要了,或者可以先备份旧的sources.list。

ubuntu20自带的apt不支持https,所以先把sources.list的所有网址改成http开头,然后sudo apt-get update更新apt配置。

安装apt-transport-https并下载ca-certificates:

sudo apt install apt-transport-https ca-certificates

再将sources.list中的镜像源改成https,重新update。

一些坑

1、BIOS的RAID和Secure boot选项

RAID on和Secure boot同时开启时可以避免bitlocker,同时关闭会出现bitlocker。
Raid on时安装ubuntu会提示无法继续安装,要求重启并关闭“windows快速存储”,也就是BIOS里面的RAID选项。

2 从windows esp分区彻底删除ubuntu启动项

正确姿势

windows下用diskpart选中windows esp分区(sel disk 0, list vol, sel vol *, )然后分配盘符(assign letter=盘符),然后管理员身份打开记事本,记事本选择打开文件,就能访问刚刚挂载的esp分区,找到EFI文件夹,删除其中的ubuntu和Boot文件夹,最后解挂esp分区(remove letter=盘符)。
上述两个文件夹其实都有grub的可执行文件,通过DiskGenius把这两个文件夹拷贝出来,用ghidra反编译,你会发现Boot文件夹的bootx64.efi是windows平台可执行文件,其中还调用了grub函数。

错误姿势

在ubuntu中改fstab并更新grub,似乎会导致windows boot manager启动项消失。我的操作是拷贝(不是移动)ubuntu efi、改fstab,更新grub,然后发现windows boot manager从启动项中消失,esp分区的EFI/Boot/bootx64.efi会被BIOS识别为启动项,然而后者无法引导任何系统。

此后再通过启动盘进入linux系统,挂载windows esp分区(这个分区本来对应windows boot manager)并删除ubuntu文件夹,之后仍然找不到windows boot manager,导致无法起win,甚至无法起ubuntu。

用dell的重置出厂设置/重置到最新版windows都无法解决。用写入windows镜像的U盘启动,如果选恢复选项,仍无法启动。

如果用这个U盘重装win10系统,就能覆盖原来的esp分区,之后能正常启动windows。看来除非用windows启动盘,否则这些“重置”都不会改动esp分区。

3、"other options"安装选项相关

接下来的所有尝试都试图把ubuntu bootloader安装位置设为移动硬盘的某一分区,但是都失败了。这些尝试都导致grub安装到windows的esp分区,结果grub会优先于windows boot manager启动。结合所有尝试,我怀疑失败的原因是bootloader安装位置只能选择整个驱动器,比如grub-install /dev/sda,按上面教程安装时,安装程序就是把grub安装到sda。而本条目下所有的尝试都是grub-install /dev/sda1这种形式(而它们都失败了)。

3.1、安装时选择自定义分区,此时windows esp分区默认是选中的。

如果不改这个默认项,那么就算指定了新的分区为efi且在此安装bootloader,grub仍然会装入windows esp,并且就算在BIOS中下移ubuntu启动项,开机时仍然优先进grub,并且再次查看BIOS会发现ubuntu变回第一个启动项。

3.2、安装选项中bootloader安装位置的意义

之后会将grub安装到此处。安装程序执行grub-install --force “安装设备”。此处的“安装设备”是/dev/sda5这样的磁盘分区。

3.3、各种报错

如果设置新分区为FAT32并且挂载/boot,安装程序会提示FAT无法挂载/boot,并且推荐使用ext2等文件系统。

新分区设为主分区并且格式化为efi,则无法选择该分区安装bootloader。

以下三项操作,同时用2和3,安装程序会提示挂载冲突;同时用1和2并且不选中windows esp分区,安装程序会提示没有esp分区。

  1. /boot挂载于一个新分区
  2. /boot/efi挂载于一个新分区
  3. 设置某个新分区的文件系统为efi

用2,且不选中windows esp分区,则grub会提示3.2挂载/boot/efi的分区不是esp(/dev/sda1 is not a ESP partition: exiting)。安装完成后,启动时仍是grub最优先,进入ubuntu发现之前指定来挂载/boot/efi的分区没有任何文件,所以grub确实没装进这个分区。

用3,并且不选中windows esp分区,最后/boot/efi仍然挂载于windows esp分区,并且启动时优先进grub。

3.4、

事先用DiskGenius清空移动硬盘的所有分区,格式化分区表为guid,且不分配分区。安装时选择"other options",设三个逻辑分区:esp(文件系统为efi)、swap、根目录(文件系统ext4),且不选中windows esp分区,bootloader安装路径选上述新开辟的esp分区。

安装时信息显示"grub-install ran successfully",中途也没出现之前的is not a ESP partition: exiting。但安装结束重启时,如果启动项选ubuntu,戴尔support assist会优先执行、诊断硬件。诊断结果是"no bootable device"。事后用DiskGenius查看上述的efi分区,发现里面没有ubuntu文件夹(或许support assist发现这个esp分区没有启动引导文件,所以才说no bootable device),而windows esp分区出现了ubuntu文件夹。另外,查看ubuntu根目录分区的/etc/fstab发现/boot/efi挂载于windows esp分区。如果启动项选windows boot manager可以正常启动windows(起windows前注意开启RAID和Secure Boot)。

本文标签: 解决办法双系统UEFI