如何在便携式外置硬盘上安装Ubuntu操作系统?

操作系统:Windows 7。我想在便携式外置硬盘USB 2.0上安装Linux Ubuntu。 我阅读了各种方法,但是对于矛盾的建议和方法感到困惑。实际上,在除了干净的个人电脑之外的任何设备上安装Ubuntu似乎比安装Windows要复杂得多。 我需要安装Ubuntu软件包+Python 2.7 + C编译器。我的外置硬盘已经部分填满,我需要保留所有文件。
Ubuntu能够完全运行在外置硬盘上,而不会写入任何Windows系统文件夹或注册表吗?
有人可以发布详细的指南,教我如何在外置硬盘上安装Ubuntu吗?

你的机器配置是什么?你的USB硬盘还有多少空间?你的芯片支持VT-x吗?我可以告诉你实际安装的步骤,但考虑到你对Ubuntu的需求很小,使用虚拟机可能更适合你。当然,安装虚拟机会写入注册表等。这台电脑是你自己的还是工作用的? - chaskes
这是我的笔记本电脑。Intel Core 2 Duo CPU T6670,内存3GB。不确定是否支持vt-x。外置硬盘有386GB可用空间。选择VMware Player还是VMware Workstation?可能适合使用Live CD,但我需要一个包含上述软件和Binwalk及其依赖的自定义版本。 - Lexx Luxx
你有vt-x。你需要进入BIOS并确保它已启用。在VMWare Player中使用虚拟机就可以了,它是免费的(Workstation则需要250美元)。给虚拟机分配1024 MB的内存(甚至可以考虑768 MB)。你的需求并不需要太多的空间。 - chaskes
在VMWare Player上运行Linux与从外部硬盘上运行Linux相比,有哪些优势和劣势? - Lexx Luxx
这两种解决方案都很简单,适合您的需求。对于初学者来说,首先使用VMWare Player可能更好,特别是如果您有专有的显卡。您以后可以转向完整安装。 - chaskes
6个回答

非常详细的回答超出了一个问题的范围,但以下是大致的概述。这很容易,但成功部分取决于您的计算机能否从外部硬盘引导启动。这取决于 BIOS。
在开始之前,请确保您的 BIOS 中有一个从 USB 硬盘引导的选项。
如果您只需要基本安装、Python 2.7 和 C 编译器,您可以将 Ubuntu 安装到相当小的分区上。我忘记了 Ubuntu 需要的最低磁盘空间,但大致约为 8 GB。我建议至少选择 10 GB 作为最低要求,并额外再加上 2-4 GB 如果您想要一个交换驱动器。
创建分区空间
在您的情况下,最好是在安装之前创建新的分区。您首先需要缩小外部硬盘上的现有分区。
我建议备份 USB 硬盘。但如果您有第二个硬盘,您可以直接安装在那个硬盘上。根据驱动器的使用情况,您可能无法完全备份它;但请至少备份任何重要文件。这只是一般的警告和预防措施,因为您的数据应该是安全的。
您有两种选择来缩小现有分区:
  1. 使用Windows分区管理器在管理工具中操作。我相信这些功能在Home Premium版本中是可用的。如果分区无法缩小到足够的大小,您可能需要删除文件以腾出空间。如果您有足够多的可用空间但仍然无法缩小足够,可以使用免费的碎片整理工具(如MyDefrag)来进行碎片整理并将文件移动到分区的起始位置。
  2. 使用Ubuntu安装媒体中的gparted。这可能是更简单的方法。

创建新分区

创建Ubuntu安装媒体并使用它启动计算机。选择“尝试Ubuntu”。

插入外部硬盘。启动程序gparted。如果您还没有在外部硬盘上缩小分区,请现在进行缩小。

大多数情况下,内部硬盘将显示为sda,外部硬盘将显示为sdb,但这并不保证。请确保您在gparted中查看的是正确的硬盘。

缩小分区会留下未分配的空间。利用这个空间创建一个新的分区。将其格式化为ext4。记下分区号码。这将用于/
你不需要交换分区,但如果想要一个,可以将新分区缩小到所需的大小(或者一开始就稍微小一点)。将该空间格式化为linux-swap
记下新分区的编号。 运行安装程序 从桌面上的图标或启动器上启动安装程序。当被询问如何安装时,选择:其他选项
这将启动安装程序中的分区工具。这与gparted不同,对于初学者来说可能有些令人生畏。
仔细选择新分区(仔细检查编号和驱动器),然后点击更改
按照对话框的指示进行操作:a. 使用ext4作为分区格式,b. 挂载到/,c. 格式化。
突出显示交换分区并点击“更改”。选择使用“linux-swap”,就这样。
非常重要:将引导加载程序的安装更改为USB硬盘。这很可能是“/dev/sdb”。这将防止您覆盖硬盘上的主引导记录。(如果您不小心这样做,可以轻松修复)。
仔细检查您的分区选择,然后点击“立即安装”。
就这样。要运行Ubuntu,请将USB插入计算机并启动。设置您的BIOS顺序,或者将USB硬盘移动到第一启动位置。USB上的引导菜单将显示Ubuntu(在外部驱动器上)和Windows(在内部驱动器上)。选择您想要的那个。如果没有插入USB,您将正常启动Windows。
Ubuntu默认安装了Python 2.7。要安装C编译器,请打开终端,并运行以下命令:
sudo apt-get install gcc

或者

sudo apt-get install build-essential

(如果您需要一些对C编程有帮助的附加程序)。
要在虚拟机中运行Ubuntu,可以在Windows中安装VirtualBox或VMWarePlayer。两者都是免费的。创建一个新的虚拟机,并使用安装介质将其安装到虚拟机中。但这次不用担心分区问题。选择“安装Ubuntu”到整个“虚拟”驱动器。这不会影响硬盘的其他部分。
如果你想将虚拟机放在外部硬盘上,请在创建虚拟机时覆盖默认位置,并将其放在外部硬盘上的文件夹中。
通过类似LiveUSBCreator的Windows程序创建具有持久性的安装介质也可以,但这种选项速度会很慢。

2Ubuntu 18.04的安装程序破坏了我的内部硬盘上的grub,尽管我按照这些说明选择将引导加载程序安装到USB硬盘。为了恢复,我需要运行boot repair - Communicative Algebra
1@CommunicativeAlgebra 在安装过程中,您可以通过在安装之前和期间断开内部驱动器来避免这个问题,这样引导加载程序的安装只会在外部驱动器上进行。 - mchid
@mchid 在安装过程中,我们如何断开内部驱动器的连接?能否请你详细解释一下。 - Porcupine
@Nikhil 这真的取决于你使用的电脑类型。无论如何,当接触任何内部计算机零件时,你应该确保自己接地。对于台式机,你只需在安装之前拔掉驱动器上的SATA电缆。安装完成后,你可以随时将SATA电缆重新插入驱动器。对于笔记本电脑,你需要将驱动器从电脑上拔下来,然后在安装完成后再次插回去。 - mchid
@Nikhil 如果是笔记本电脑,断开驱动器可能比使用引导修复工具恢复更麻烦,而且使用引导修复方法可能比拆开笔记本电脑更容易。 - mchid
安装了Ubuntu到我的外置SSD后,即使SSD没有插入,我的笔记本电脑也会启动到GRUB命令行界面。即使连接了SSD,我也直接进入了GRUB命令行界面。 - Conner Dassen

Ubuntu可以完全从外部硬盘运行,并且运行良好。我多年来一直使用Ubuntu这种方式,它不会影响Windows。在USB驱动器上安装没有什么特别之处。您只需连接USB驱动器,使用CD或U盘启动,并在选择安装位置时选择外部磁盘即可。
然而:
您需要对外部硬盘进行分区。我假设您的外部硬盘有一个带有NTFS文件系统的单个分区。最好的做法是将该分区缩小约20GB(这对于Ubuntu来说足够了),然后在那里创建新的分区。这并不像听起来那么困难(如果您想安装另一个Windows副本,您也必须担心分区)。
要么使用Windows的磁盘管理工具来缩小分区,要么使用Ubuntu Live模式下的GParted。前者更快,但限制您只能使用分区中最后一个已使用扇区之后的可用空间(即使您有大量的可用空间,这个值可能非常低)。使用后者可能非常慢,特别是如果分区很大,但可以提取大部分的可用空间。
在任何一种情况下,在获得空闲空间后,使用GParted在那里创建一个扩展分区,并在该扩展分区中创建一个ext4分区。将Ubuntu安装到此分区。选择外部硬盘作为GRUB(引导加载程序)安装的设备。
替代方法:如果你有一个随身U盘,可以使用UNetBootin、Universal USB Installer或类似工具创建一个带持久化功能的可启动Ubuntu驱动器。如果启用了持久性,当你在Live模式下进行设置和对Ubuntu进行其他更改时,重启后这些更改不会消失。这非常适合低使用频率的场景。你可以安装Python或其他任何东西,并熟悉Ubuntu,然后在感觉准备好时安装Ubuntu。请注意,在Live模式下进行的更改不会影响你所进行的任何安装。

12016年,Unetbootin、Universal和其他syslinux类型的安装程序无法在14.04及其后续版本的持久安装中正常工作。Grub2类型的安装程序在闪存驱动器上适用于持久分区,但似乎在USB硬盘驱动器上无法正常工作,即使有casper-rw文件或分区。 - C.S.Cameron
mkusb,https://help.ubuntu.com/community/mkusb,可以在带有USB或eSATA连接的外部盒子中的USB硬盘和SSD驱动器上创建一个持久化的可启动驱动器。但是原始发帖者想要保留目标驱动器中的所有当前文件,而mkusb将覆盖分区表并创建一个新的分区表。因此,除非这些数据被备份到另一个驱动器并在安装持久化的可启动系统后恢复,否则这不会是一个选项。 - sudodus

完整安装到USB

完整安装比持久安装更稳定和安全,但制作时间不如后者快。它们更擅长利用磁盘空间,因为不需要固定大小的casper-rw文件或分区。但是它们不适合用于安装Ubuntu。

以下是在16GB闪存驱动器上安装18.04的逐步说明,包括单独的Home分区和兼容Windows数据分区选项,安装到机械式外部驱动器类似:

  • 使用SDC、UNetbootin、mkusb等工具创建一个可启动的USB或DVD。
  • 关闭电脑并拔掉插头。(请参考底部注释)
  • 从硬盘上拔下电源线或从笔记本电脑上拔下硬盘。
  • 重新插上电源线。
  • 插入闪存驱动器。
  • 插入可启动的USB或DVD。
  • 启动电脑,USB/DVD应该会自动启动。
  • 选择语言。
  • 选择安装Ubuntu。
  • 选择键盘布局。
  • 选择“继续”。
  • 选择安装类型,并选择“在安装Ubuntu时下载更新”,以及选择“安装第三方软件…”(可选)。
  • 选择“继续”。
  • 在“安装类型”中选择“其他选项”。(现在可以在闪存驱动器上进行全盘加密)。
  • 选择“继续”。
  • 确认目标设备是否正确。
  • 选择“新建分区表”。
  • 在下拉菜单中点击“继续”。

(可选:为在Windows机器上使用的FAT32数据分区)

  • 点击"空闲空间"和"+"。
  • 将"大小..."设置为约2000 MB。
  • 选择"主分区"。
  • 位置 = "此空间的开头"。
  • "用作:" = "FAT32文件系统"。
  • "挂载点" = "/windows"。
  • 选择"确定"。

(非可选的根分区)

  • 点击"空闲空间",然后"+"。
  • 选择"主分区","大小..." = 4500到6000 MB,"此空间的开头",Ext4,和挂载点 = "/",然后确定。

(可选的家目录分区)

  • 点击"空闲空间",然后"+"。
  • 选择"主分区","新分区大小..." = 1000到6000 MB,此空间的开头,Ext2,和挂载点 = "/home",然后确定。

(可选的交换分区,允许休眠并在RAM满时释放内存)

  • 点击"空闲空间",然后点击"+"。
  • 选择"主要","新分区大小..."=剩余空间,(1000到2000兆字节,或与RAM相同大小),此空间的开始和"用作"="交换区",然后点击"确定"。

(重要)

  • 确认"引导加载程序安装设备"指向USB驱动器的根目录。如果已拔下硬盘,则默认应该是正确的。
  • 点击"立即安装"。
  • 选择您的位置。
  • 选择"继续"。
  • 输入您的姓名、计算机名称、用户名、密码,并选择是否自动登录或需要密码。
  • 选择"继续"。
  • 等待安装完成。
  • 关闭电脑并插入硬盘。
  • 重新安装电脑的外壳。
注意: 如果在分区后选择将grub安装到您要安装Ubuntu的USB驱动器的根目录(即sdb而不是sdb1),则可以省略禁用硬盘。请小心,许多人已经覆盖了HDD MBR,因为引导加载程序的默认位置是sda,内部驱动器的grub中的任何项目都将添加到USB的grub中。 稍后可以执行update-grub操作。

如果我购买一个64GB的USB驱动器并将Ubuntu完全安装在上面,我理解:它将允许我使用整个驱动器进行存储,它将是持久的,并且我可以在任何计算机上使用它来启动Ubuntu。这样理解对吗? - BruceWayne
1@BruceWayne:没错,只有持久安装才能安装Ubuntu,而完全安装则不能。我喜欢在Windows或Linux电脑上拥有一个可以用于存储数据的FAT32或NTFS分区。文件系统分区(/)和主目录分区(/home)位于对Windows不可见的ext4分区上。 - C.S.Cameron

我不认为五笔输入法完全支持这个,但是可以做到。我对你计划如何使用它并不完全确定。
过去,我曾经拔掉我的Windows设备,插入我的外部设备,然后通过外部设备(在很多情况下,也是唯一的驱动器)进行安装。Ubuntu会正确安装并将该驱动器视为“一个驱动器” - 没有特殊之处,就是外部的。
然后,我可以使用BIOS/uEFI选项,在重新连接我的Windows驱动器后选择我的首选启动设备,而不必处理双启动和GRUB。
还有其他方法可以实现,但我发现这是最简单的方法,对我的Windows系统风险绝对最小。

2我不想打开笔记本电脑并取出硬盘。 - Lexx Luxx
打开笔记本电脑并断开驱动器是最大的缺点。这个过程是不破坏Windows安装的最佳方法,因为使用grub引入了冲突。使用BIOS启动可以在Windows之前加载,因此没有启动冲突或Windows损坏。启动时,驱动器彼此不可见,所以除非在外部磁盘上选择引导,否则不需要grub。虽然这可能不是我在新的Windows机器上想做的事情,因为通过干预内部硬件暂时断开内部驱动器会违反保修条款。 - lewis

从预先构建的镜像文件安装Ubuntu。

这种方法可以创建一个可以在BIOS和UEFI计算机上引导的USB。

如果在Windows操作系统中操作:

USB驱动器应该能够在几乎所有现代X86-64计算机上启动。

enter image description here

感谢sudodus提供的图片文件。
在Windows上,可能需要先安装7Zip才能继续操作。Rufus和Etcher在处理.xz格式的镜像时会使用它:https://www.7-zip.org/a/7z1900-x64.exe 如果在Ubuntu上工作: 您可以使用mkusbDisksEtcher来刻录USB驱动器。如果使用mkusb,请选择“c”选项克隆iso文件...以将镜像写入磁盘。使用Disks或Etcher提取.xz格式的镜像可能需要P7zip软件。

C.S.Cameron,请你更新Rufus的链接到最新版本吗?最新版本是3.13,而不是3.11,并且3.12和3.13的发布实际上包含了与Ubuntu相关的重要错误修复。最好的选择是你可以指向https://rufus.ie,因为它始终包含了最新下载链接以及关于Rufus的本地化信息,这可能会引起OP的兴趣。或者,如果你想指向GitHub,请使用https://github.com/pbatard/rufus/releases,因为它避免了链接到可能已过时的版本。谢谢! - Akeo
@Akeo:是的,你说得对。而且最好不要让下载链接立即弹出来。人们更喜欢看到他们要下载的内容。谢谢。 - C.S.Cameron
非常感谢。谢谢!(附注:不知为何,每当我尝试@你的名字时,它都会被删除。很奇怪...) - Akeo
@Akeo:我认为这是因为我写了答案,对它的每个评论都没有使用“@”符号,所以都会直接发送给我。对问题的评论也是一样的情况。 - C.S.Cameron

在BIOS和UEFI中创建一个完整的Ubuntu 20.04安装到USB

以下步骤基于16GB目标驱动器,如果使用更大的驱动器,请进行相应调整。 看起来像是一个很长的列表,但实际上完成这些步骤不会超过十分钟。

  • 使用SDC、UNetbootin、mkusb、dd等工具创建一个Live USB或DVD(参见底部的注释1)。
  • 关闭电脑并拔掉插头。
  • 从硬盘上拔下电源线或从笔记本电脑上拔下硬盘(参见底部的注释2)。
  • 重新插上电脑的插头。
  • 插入并启动Live USB或Live DVD(最好是以BIOS模式启动)。
  • 选择语言并选择“尝试Ubuntu”。
  • 插入目标闪存驱动器。
  • 启动GParted。
  • 卸载任何已挂载的分区。
  • 选择“设备”选项卡,在目标驱动器上创建一个GPT分区表。
  • 在右侧创建一个3GB的NTFS或FAT32分区(可选的Linux/Windows数据分区,参见底部的注释3)。
  • 在左侧创建一个1MB的分区,并格式化为未格式化。
  • 在1MB分区旁边创建一个300MB的FAT32分区。
  • 在300MB分区旁边创建一个7GB的ext分区。
  • 在剩余空间中创建一个ext4分区(可选的/home分区)。
  • 应用所有操作。
  • 将1MB分区标记为bios_grub
  • 将300MB分区标记为boot,esp

Image of GParted

  • 开始安装Ubuntu。
  • 选择语言,点击“继续”。
  • 选择键盘布局,点击“继续”。
  • 选择无线网络,点击“继续”(可选)。
  • 选择安装偏好并选择“在安装Ubuntu时下载更新”(可选),选择“安装第三方软件…”,点击“继续”(可选)。
  • 如果询问已挂载的分区,请选择是,点击“继续”。
  • 不要在此安装方法中使用高级功能磁盘加密(请参阅底部的注释3)。
  • 在“安装类型”中选择“其他选项”,点击“继续”。
  • 在引导加载程序安装设备中选择目标驱动器。
  • 选择分区sdx4并点击更改,选择用作Ext4,选择格式化此分区,并将挂载点设置为“/”,然后点击确定。
  • 如果要求写入先前的更改,请点击继续。
  • 选择分区sdx5并点击更改,选择用作Ext4,选择格式化此分区,并将挂载点设置为“/home”,然后点击确定(可选)。
  • 点击立即安装。

Image of  Something else

  • 如果被询问,请确认要格式化的分区,然后点击“继续”。

  • 选择您的位置,点击“继续”。

  • 输入您的姓名、计算机名称、用户名、密码,并选择是否自动登录或需要密码。- 点击“继续”。

  • 等待安装完成。

  • 不要重新启动或拔出目标USB。

  • 从Ubuntu ISO文件中复制bootEFI文件夹到boot,esp分区sdx3。

  • 如果有任何权限问题等,请使用sudo -H nautilus打开Nautilus并尝试再次复制。

  • 将分区sdx4 /boot/grub/中的grub.cfg复制到分区sdx3 /boot/grub/中,覆盖grub.cfg文件。

  • 重新安装GRUB:

    sudo mount /dev/sdx3 /mnt
    sudo grub-install --boot-directory=/mnt/boot /dev/sdx

  • 关闭电脑并插入HDD。

  • 更换计算机的外壳。

注意1:启动ISO文件。

  • 如果您想让USB具有使用GRUB引导ISO文件的功能,请使用带有usb-pack-efi选项的mkusb创建启动驱动器。(这将用2.02替换GRUB 2.04)。
  • 或者,您可以在grub.cfg的第一个menuentry之前的任何位置放置rmmod tpm

注意2:移除硬盘。

  • 如果在分区后选择将grub安装到您要安装Ubuntu的USB驱动器的根目录(即sdx而不是sdx1),则可以省略在BIOS引导中禁用硬盘。请注意,许多人已经将HDD MBR覆盖为默认的引导加载程序位置为sda,内部驱动器的grub中的任何项目都将添加到USB的grub中。您稍后可以执行update-grub。如果您使用UEFI安装并保留了HDD插头,则fstab可能会使用HDD的UUID作为/boot/efi。在这种情况下,请在fstab中添加#或删除/boot/efi.UUID行。

注意3:苹果兼容性。

  • 如果您拥有苹果电脑,请将此分区设置为FAT32。

注意4:加密(可选)。

要创建全加密的BIOS/UEFI USB驱动器的方法,请参见:如何制作具有全磁盘加密功能的BIOS/UEFI闪存驱动器

@c-s-cameron 在保持内部硬盘完好的情况下,将grub安装到SD卡(sdb)的根目录是个好主意吗?在这之后,你能否在没有SD卡的情况下启动硬盘?例如,我在sda1上安装了Ubuntu 20.04,在sda2上安装了Ubuntu 22.04。但是我后来在sda2上安装了grub,并且两次都选择了sda(而不是sda1或sda2)作为grub的安装位置。结果是,如果你在sda1中更改grub菜单中的任何内容(例如登录到Ubuntu 20.04),它不会生效。你必须从最后一次安装的Ubuntu中进行更改,然后运行grub-update。外部SD卡是否也是同样的情况? - Khurshid Alam
@Khurshid Alam:请参见上面的注释2。 - C.S.Cameron
@c-s-cameron 我看到了你的留言。当你提到从 fstab 中删除 boot/efi 时,我猜你是指来自 SD 卡而不是硬盘的 fstab?如果是这样,那么应该用什么来替换它呢?那个在 SD 卡上创建的 300MB efi 分区需要在 fstab 中存在才能从 SD 卡启动。我只想从 USB 的 grub 中移除额外的硬盘分区。 - Khurshid Alam
打开SD卡上的/etc/,以root身份打开fstab。在/boot/efi.UUID行的开头添加。不要添加其他内容。我更喜欢从BIOS引导的完整安装USB,而不是UEFI。 - C.S.Cameron