mdos/MBR 分区表

mdos/MBR 分区表

我希望将 Ubuntu 安装在 USB 上,这样我就可以将其插入(几乎)任何计算机并从中启动,并且可以(几乎)正常使用,就像它安装在那台计算机上一样。我还希望在 USB 上有一个数据分区,可供(几乎)任何计算机使用,主要用于存储一些便携式应用程序,以防万一。


有人告诉我,如果我在 BIOS 模式下安装 Ubuntu,我将无法从 UEFI 模式下的计算机启动,反之亦然。

因为我希望能够在任何计算机上启动,所以这是一个大问题。

就我的情况来说,我该怎么做才能在 BIOS 或 UEFI 模式下启动计算机?

我一直在寻找解决方案,但大多数都是针对与我不同的特定需求,因此很难从这些解决方案中提取最低要求以将其应用于我的问题。

有没有一个简单、“干净”并且非常通用的解决方案来解决这个问题?

我希望能够得到一些关于为什么特定解决方案是好的或者需要特定步骤的原因的解释。


我当前的设置:

  • USB记忆棒:SanDisk Ultra Fit (32 位)
  • 操作系统:Xubuntu 16.04 i386
  • 安装:完整安装(从使用 Rufus 构建的 Live USB)
  • 驱动程序:无专有
  • 文件系统:
    • 分区表:谷氨酰胺磷酸酶
      • 2:ESP,,/boot/efi128 Mio,FAT32,[启动,esp]
      • 3:动态血压,1.28 亿,HFS+
      • 4:苯二氮平,200 万,[bios_grub]
      • 5:掉期,5.12亿
      • 6:, /, 24 吉奥, ext4,defaults,errors=remount-ro,lazytime,commit=60
      • 1:数据,,/media/data~3.6 Gio,FAT32,defaults,lazytime,check=strict
    • 内存:
      • /tmp,tmpfs,defaults,nosuid,nodev,noexec,mode=1777
  • 交换:
    • vm.swappiness=5
    • 交换分区:512 Mio,用于紧急情况
    • 内存
    • 交换文件:
      • /var/swap/hib.swp:与 RAM 大小相同,用于休眠,由启动时的脚本生成
      • /var/swap/opt.swp:如果需要,由脚本生成
  • 过度配置:~5.6%
    • 内置:~1.2 Gio(显然)
    • 新增:5.12亿
  • 调度程序:deadline

答案1

注意:我在这里介绍手动操作方法。这有点复杂(并非不可能),但您可以精确控制您想要/需要的内容。如果您什么都不懂,也许使用 MultiSystem 之类的软件对您来说会是更好的解决方案。

有两种方法可以创建这样的 usb 密钥。您可以使用 mdos/MBR 分区表或 GPT 分区表。两者都有优点和缺点,我将首先尝试描述 mdos 版本,稍后有更多时间时可能会介绍 GPT 版本。

mdos/MBR 分区表

首先,确保备份所有数据。如果你不知道自己在做什么,这些操作可能会很危险,如果你操作不当,可能会抹掉你的硬盘,所以在输入命令之前一定要知道自己在做什么。

步骤 1:找到你的 USB 设备

使用命令

lsblk

找到您的 USB 设备的名称。例如,您可以运行lsblk,插入密钥,然后再次运行lsblk以查看发生了什么变化。出现的设备是您的密钥,并将注明/dev/sdX

步骤 2:创建分区

您可以使用任何您喜欢的程序:gparted,,fdiskcfdisk的命令行工具fdisk)...然后执行以下操作

  • 首先启动该程序(sudo gpartedsudo fdisk /dev/sdX取决于您选择的程序)
  • 然后重置您的设备以获得msdos分区表(在gparted“设备/创建新分区表”中,fdisk类型为o
  • 然后创建三个分区。第一个分区是 FAT32,它将是数据分区(它也可以是 NTFS、ext 或任何其他文件系统),第二个分区是 EFI 分区(基于 FAT),必须是可引导的,大小约为 150M,最后一个分区是带有 iso 的分区,必须是可引导的,并且是 FAT32(如果您使用 ext2,它将引导,但您将无法使用持久性)。以下是您希望在过程结束时得到的内容(请注意标志(图片中的 drapeau),它们很重要):

gparted 结果

如果你想用 创建它们fdisk,你应该有类似这样的内容:

$ sudo fdisk -l /dev/sdc
Disque /dev/sdc : 14,3 GiB, 15376000000 octets, 30031250 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x2d844503

Périphérique Amorçage    Début      Fin Secteurs Taille Id Type
/dev/sdc1                 2048 14682111 14680064     7G  b W95 FAT32
/dev/sdc2    *        14682112 14989311   307200   150M ef EFI (FAT-12/16/32)
/dev/sdc3    *        14989312 30031249 15041938   7,2G  b W95 FAT32

请按照下列步骤操作:

sudo fdisk /dev/sdX
o

n
p
1
<Enter>
+7G     # Or any size you want, just be sure to let arount 2G at the end of the device
t
b

n
p
2
<Enter>
+150M
t
ef

n
p
3
<Enter>
<Enter>
t
b

w

sudo mkfs.fat -F32 /dev/sdX1
sudo mkfs.vfat /dev/sdX2
sudo mkfs.fat -F32 /dev/sdX3

步骤 3:挂载分区

现在,把它们贴起来,在上面书写

mkdir /tmp/usb{2,3}
sudo mount /dev/sdX2 /tmp/usb2/
sudo mount /dev/sdX3 /tmp/usb3/

步骤 4:在两个分区(EFI 和非 EFI)上安装 grub

然后,你需要在两个分区上安装 grub。确保已经安装了 grub,然后运行:

sudo grub-install -v --no-floppy --boot-directory=/tmp/usb3 --target=i386-pc /dev/sdX
sudo grub-install -v --no-floppy --boot-directory=/tmp/usb2 --efi-directory=/tmp/usb2 --removable --target=x86_64-efi /dev/sdX

第五步:复制iso文件并配置grub

然后将 iso 文件复制到以下文件夹中:

sudo cp <your iso file> /tmp/usb3/linux-iso

并将 grub 配置放入两个 grub 配置中/tmp/usb2/grub/grub.cfg/tmp/usb3/grub/grub.cfg注意:根据您的 grub 版本,它可以是 grub2/grub.cfg)

insmod loopback
insmod iso9660

menuentry 'XUbuntu 16.04 "Xenial Xerus" - amd64' {
          set isofile="/linux-iso/xubuntu-16.04.1-desktop-amd64.iso"
          search --no-floppy --set -f $isofile
          loopback loop $isofile
          linux  (loop)/casper/vmlinuz.efi locale=fr_FR bootkbd=fr console-setup/layoutcode=fr iso-scan/filename=$isofile boot=casper file=/cdrom/preseed/ubuntu.seed noprompt ro quiet splash noeject --
          initrd (loop)/casper/initrd.lz
} 

注意:您应该编辑此文件以匹配好的 iso 文件,这里我们假设将文件放入/tmp/usb3/linux-iso/xubuntu-16.04.1-desktop-amd64.iso

重新启动,并在 UEFI 和非 UEFI 模式下尝试:它应该可以工作,但您还不应该有持久性!

步骤 6:添加单一持久性

添加持久性非常简单。方法是在第三个分区(实际上任何 FAT32 分区都可以)上创建一个casper-rw包含一些 ext2 文件系统的空文件。然后将其放置在 iso 文件的上方,这样如果系统被修改,文件casper-rw将记录这些修改。如果您只想记录主目录,请执行完全相同的步骤,但使用文件名home-rw而不是casper-rw(如果您只关心文档数据,并且希望避免后面解释的完全持久性问题,这可能会很有用)。最后,请注意,除了文件之外,您还可以在 ext2 中创建一个标签为casper-rw或的分区home-rw,这将产生完全相同的结果,只是您将能够进行超过 4Gb 的修改(FAT32 系统中的最大大小)。

要创建文件,只需运行:

sudo dd if=/dev/zero of=/mnt/usb3/casper-rw bs=1M count=512

(这里是512M,但是你可以将数据大小更改为最大4G)

并在文件中添加persistent以下行(修改这两个文件)。它应该看起来像这样:linux .../mnt/usb{2,3}/grub/grub.cfg

insmod loopback
insmod iso9660

menuentry 'XUbuntu persistent 16.04 "Xenial Xerus" - amd64' {
          set isofile="/linux-iso/xubuntu-16.04.1-desktop-amd64.iso"
          search --no-floppy --set -f $isofile
          loopback loop $isofile
          linux  (loop)/casper/vmlinuz.efi locale=fr_FR bootkbd=fr console-setup/layoutcode=fr iso-scan/filename=$isofile boot=casper persistent file=/cdrom/preseed/ubuntu.seed noprompt ro quiet splash noeject --
          initrd (loop)/casper/initrd.lz
}

现在重启:你应该有持久性了!你甚至可以像这样混合持久性和非持久性文件:

insmod loopback
insmod iso9660

menuentry 'XUbuntu 16.04 "Xenial Xerus" - amd64' {
          set isofile="/linux-iso/xubuntu-16.04.1-desktop-amd64.iso"
          search --no-floppy --set -f $isofile
          loopback loop $isofile
          linux  (loop)/casper/vmlinuz.efi locale=fr_FR bootkbd=fr console-setup/layoutcode=fr iso-scan/filename=$isofile boot=casper file=/cdrom/preseed/ubuntu.seed noprompt ro quiet splash noeject --
          initrd (loop)/casper/initrd.lz
}
menuentry 'XUbuntu persistent 16.04 "Xenial Xerus" - amd64' {
          set isofile="/linux-iso/xubuntu-16.04.1-desktop-amd64.iso"
          search --no-floppy --set -f $isofile
          loopback loop $isofile
          linux  (loop)/casper/vmlinuz.efi locale=fr_FR bootkbd=fr console-setup/layoutcode=fr iso-scan/filename=$isofile boot=casper persistent file=/cdrom/preseed/ubuntu.seed noprompt ro quiet splash noeject --
          initrd (loop)/casper/initrd.lz
}

多重持久性

目前,密钥中的所有操作系统都具有相同的持久性文件。如果是casper-rw共享的,则可能会破坏所有内容(一个操作系统中的数据与另一个操作系统中的数据无关)。要为每个系统设置一个持久性文件,非常简单,只需将文件放在给定文件夹中即可,例如persist/xubuntu

mkdir /mnt/usb3/persist/xubuntu/
sudo dd if=/dev/zero of=/mnt/usb3/persist/xubuntu/casper-rw bs=1M count=512

并添加persistent persistent-path=/persist/xubuntu文件grub.cfg

insmod loopback
insmod iso9660

menuentry 'XUbuntu persistent 16.04 "Xenial Xerus" - amd64' {
          set isofile="/linux-iso/xubuntu-16.04.1-desktop-amd64.iso"
          search --no-floppy --set -f $isofile
          loopback loop $isofile
          linux  (loop)/casper/vmlinuz.efi locale=fr_FR bootkbd=fr console-setup/layoutcode=fr iso-scan/filename=$isofile boot=casper persistent persistent-path=/persist/xubuntu file=/cdrom/preseed/ubuntu.seed noprompt ro quiet splash noeject --
          initrd (loop)/casper/initrd.lz
}

您还可以注意到,我没有找到casper-rw为每个操作系统设置一个分区的方法,因此我不知道如何为所有操作系统设置多个持久性和超过 4Gb 的持久性。如果有人有想法,我很乐意听听。也许分区安装可以暂时解决这个问题?

持久性的缺点

当您使用持久性时,您应该意识到升级可能很危险。如果修改触及内核,它确实可能会破坏您的系统,因此请避免进行过多的修改。此外,有时当您更换计算机时它不太合适,有些人解释说当互联网卡更换时他们失去了互联网。如果您想升级系统,您应该考虑将其直接安装在 usb 密钥上(就像 usb 密钥是磁盘一样),但如果您在需要已安装操作系统中未包含的专有软件的计算机上尝试密钥,则此方法可能会失败。如果有人有可以绕过这些缺点的解决方案,我将很高兴听到它。

来源

要配置 grub 以匹配其他系统或者如果您想使用 GPT 而不是 MBR,您可能会对以下链接感兴趣:

尽情享受吧,如果有问题请随时询问。

答案2

完全安装至 USB - BIOS/UEFI

姆库斯布为能够从 BIOS 和 UEFI 启动的完整安装 USB 驱动器奠定了良好的基础:

  • 使用韓國在安装程序 USB(2GB 或更大)上制作 Live 系统。

  • 使用韓國使用默认设置在目标 128GB USB 上创建持久系统,持久性约为 25GB(剩余的 NTFS 分区用作 Windows 可访问数据分区)。

在此处输入图片描述

  • mkusb 完成后,立即打开 GParted 并删除 sdx4(ISO9660 分区)并将 sdx5 扩展到恢复的空间,sdx 是目标驱动器的设备名称。

  • 如果需要,为 /home 创建一个额外的 ext4 分区 sdx6。

在此处输入图片描述

  • 在继续操作之前,拔下或移除硬盘(可选但推荐,在 UEFI 模式下强烈推荐)。

  • 启动安装程序驱动器,选择尝试。

  • 插入目标驱动器

  • 开始安装 Ubuntu...

  • 选择“其他”。

  • 选择 sdx5(在目标驱动器上),然后单击“更改”。

在此处输入图片描述

  • 选择使用为:ext4,格式和挂载点:/。

不要触碰任何其他分区(除非向 sdx6 添加 /home 分区)。

  • 选择 sdx5 作为引导加载程序安装设备

  • 完成安装。

  • 从 sdx5/boot/grub 剪切 grub.cfg 并粘贴到 sdx3/boot/grub,覆盖现有的 grub.cfg 文件。

  • 启动目标驱动器并运行 sudo update-grub 将所有驱动器添加到启动菜单。

  • 在 18.04 之前的安装中,不要安装任何专有驱动程序(例如 Nvidia)。

相关内容