USB棒上的Ubuntu – 在BIOS和UEFI模式下启动
我想在U盘上安装Ubuntu,我可以插入(几乎)任何计算机并从中启动,并且我可以(几乎)正常使用,就像它安装在那台计算机上一样。 我还希望在它上面有一个数据分区,可以被(几乎)任何计算机使用,主要用于存储一些便携式应用程序,以防万一。
我被告知,如果我在BIOS模式下安装Ubuntu,我将无法在UEFI模式下从计算机启动,反之亦然。
因为我希望能够在任何计算机上启动,所以这是一个大问题。
在我的情况下,如何能够在BIOS或UEFI模式下在计算机上启动?
我一直在寻找解决方案,但大部分都是针对与我不同的特定需求,因此很难从这些解决方案中提取最低要求以将其应用于我的问题。
这个问题有一个简单,“干净”且非常通用的解决方案吗?
我很欣赏一些关于为什么特定解决方案是好的或需要特定步骤的原因的解释。
我目前的设置:
- USB记忆棒: SanDisk Ultra Fit(32 Go)
- 操作系统:Xubuntu 16.04 i386
- 安装:完全安装(来自使用Rufus构建的Live USB)
- 司机:没有专有
- 文件系统:
- 分区表: GPT
- 2: ESP ,
/boot/efi
,128 Mio,FAT32,[boot,esp] - 3: ABP ,128 Mio,HFS +
- 4: BBP ,2 Mio,[bios_grub]
- 5:交换,512 Mio
- 6: root ,
/
,24 Gio,ext4,defaults,errors=remount-ro,lazytime,commit=60
- 1: 数据 ,
/media/data
,~3.6 Gio,FAT32,defaults,lazytime,check=strict
- 2: ESP ,
- 内存:
-
/tmp
,tmpfs,defaults,nosuid,nodev,noexec,mode=1777
-
- 分区表: GPT
- 交换:
-
vm.swappiness=5
- 交换分区:512 Mio,用于紧急情况
- zRAM
- 交换文件:
-
/var/swap/hib.swp
:与RAM相同的大小,用于hibernate,由启动时的脚本生成 -
/var/swap/opt.swp
:如果需要,由脚本生成
-
-
- 过度供应:~5.6%
- 内置:~1.2 Gio(显然)
- 补充:512 Mio
- 调度员:
deadline
注意:这里我提出了手动方式。 这有点复杂(并非不可思议)但你可以准确控制你想要/需要的东西。 如果你什么都不懂,也许使用像MultiSystem这样的软件对你来说是更好的解决方案。
有两种方法可以创建这样的usb密钥。 您可以使用mdos / MBR分区表或GPT分区表。 两者都有优点和缺点,我将首先尝试描述mdos版本,稍后当我有更多时间时可能会进入GPT版本。
mdos / MBR分区表
首先,确保拥有所有数据备份。 如果您不知道自己做了什么,这些操作可能会很危险,如果您操作不当,可能会擦除硬盘驱动器,因此在键入命令之前一定要知道自己在做什么。
第1步:找到您的USB设备
使用该命令
lsblk
找到USB设备的名称。 例如,您可以运行lsblk
,插入密钥,再运行一次lsblk
以查看更改的内容。 出现的设备是您的密钥,并且会注意到/dev/sdX
。
第2步:创建分区
您可以使用任何您喜欢的程序: gparted
, fdisk
, cfdisk
( fdisk
的命令行工具)…然后执行以下操作
- 首先启动程序(
sudo gparted
或sudo fdisk /dev/sdX
具体取决于您选择的程序) - 然后重置您的设备以获得
msdos
分区表(在“设备/创建新分区表”中使用fdisk
类型o
进行gparted
。 - 然后创建三个分区。 第一个是在FAT32中,它将是数据分区(它也可以是NTFS,ext或任何其他文件系统),第二个是EFI分区(基于FAT)并且必须是可引导的并且大约150M,最后一个是具有iso的分区,并且必须是可启动的并且在FAT32中(如果使用ext2,如果将启动,但您将无法使用持久性)。 以下是您希望在流程结束时拥有的内容(请注意标记(图中的悬垂),它们很重要):
如果你想用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 +7G # Or any size you want, just be sure to let arount 2G at the end of the device t b n p 2 +150M t ef n p 3 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步:在两个分区上安装grub(EFI和非EFI)
然后,您需要在两个分区上安装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
步骤5:复制iso文件并配置grub
然后将iso文件复制到以下文件夹中:
sudo cp /tmp/usb3/linux-iso
并将grub配置放在两个grub配置/tmp/usb2/grub/grub.cfg
和/tmp/usb3/grub/grub.cfg
(注意:它可以是grub2 / grub.cfg,具体取决于你的grub版本)
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步:添加单个持久性
添加持久性非常容易。 我们的想法是在第3个分区(实际上任何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)
并在行linux ...
添加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
并在grub.cfg
文件中添加persistent persistent-path=/persist/xubuntu
:
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,您可能会对以下链接感兴趣:
- https://wiki.archlinux.org/index.php/Multiboot_USB_drive
- https://blog.garamotte.net/posts/2015/10/18/fr-one-usb-key-to-boot-them-all.html
- https://github.com/aguslr/multibootusb
享受,并毫不犹豫地询问您是否有疑问。