📖 本文由 Batocera 官方 Wiki 翻译整理,内容可能随版本更新而变化。
打造双系统:让 Batocera 与现有系统共存(Dual boot Batocera)
通常情况下,我们最推荐的做法是将 Batocera 安装在 USB 闪存盘或移动硬盘上。当你想玩游戏时,只需在电脑启动时通过 BIOS 启动菜单(BIOS boot selection menu) 选择该设备即可。这种方式不仅操作简单,而且互不干扰,你甚至可以将电脑内置硬盘里的 ROM 游戏镜像、BIOS 文件和存档直接挂载到 Batocera 中使用。
生活化类比:这就像是给电脑准备了一张“游戏房专用门卡”(USB 盘)。平时你还是在客厅工作(原有系统),想玩游戏时,插上卡推门就进了游戏房,互不打扰。
然而,如果你追求极致,希望将 Batocera 直接安装在内置主硬盘上,与现有的系统(如 Windows)并排排坐,那么请仔细阅读本指南。
【特别注意】:安全第一,备份先行
在进行以下任何操作之前,请务必备份你的重要数据!因为调整分区大小、更换 引导加载程序(Boot loaders) 等操作具有一定的风险,稍有不慎可能会导致你的存储设备无法正常启动或数据丢失。
如果你觉得这些风险听起来有点“吓人”,那么最稳妥的选择依然是:把 Batocera 刷入 USB 闪存盘使用。
核心原理:更换引导器
在标准的单系统模式下,Batocera 使用的是 Syslinux 进行引导。这个引导器非常“专一”,它被设计为只启动 Batocera 这一种系统。
因此,为了实现双系统自由切换,我们需要弃用 Syslinux,改为使用功能更强大的 GRUB。GRUB 就像是一个功能丰富的“前台大厅”,在 BIOS 加载完毕后,它会弹出一个菜单,让你选择是进入 Batocera 还是进入原本的系统。
如果你决定将 Batocera 安装在硬盘上,有一个进阶技巧建议尝试:将 Batocera 的分区名称重命名为一个唯一的标签,比如 BATOPC。
这样做的好处是,当你修改后续提到的 grub.cfg 配置文件时,将 label=BATOCERA 改为 label=BATOPC。这能有效避免冲突——否则,当你插上另一个装有 Batocera 的 USB 闪存盘时,电脑可能会因为两个分区都叫“BATOCERA”而感到困惑,总是优先启动硬盘上的系统。
实现 Batocera 与 Windows 双系统共存
方法一:自动安装(推荐)
如果你更喜欢看着视频动手,可以参考 Pleilleur 的双系统指南(其实不需要特意准备备用 U 盘,直接下载 boot.tar.xz 文件即可):[Pleilleur’s Choice #1 Dualboot Windows 10 and Batocera]
【注意】:本指南假设你的 Windows 是从 EFI 分区(EFI partition) 启动的。如果你的电脑不是这种模式,或者你并不确定,请自行承担操作风险。
第一步:准备硬盘分区
你需要对硬盘进行“手术”,重新规划空间。
- 第一步:创建系统分区。在 Windows 分区之后,紧接着划分出一个 8 GB 大小的 FAT32 格式 分区。
- 第二步:创建用户数据分区。紧跟在上面那个 8 GB 分区之后,划分出 用户数据(Userdata) 分区,格式可以任选 Batocera 支持的类型。
生活化类比:这就像是在你原本的“大平层”(Windows 硬盘)旁边加盖了两间小屋。一间是小小的“门厅”(8 GB 分区),用来放启动系统的钥匙;另一间是大的“储物间”(用户数据分区),用来放你的游戏、存档和 BIOS 固件。
【提示】:虽然你可以让 Batocera 直接把文件存在 Windows 分区里,但这需要极其复杂的手动设置。对于初次尝试的“新手”来说,我们强烈不建议这么做。
第二步:部署 Batocera 启动文件
现在你需要把 Batocera 的“系统组件”搬进刚才准备好的 8 GB 小房间里。
- 第一步:解压文件
下载最新版的 Batoceraboot.tar.xz压缩包,并使用 7-zip 等工具将其解压。 - 第二步:拷贝内容
将解压出来的所有文件和文件夹直接复制到那个 FAT32 分区(FAT32 partition) 的根目录下。完成后,该分区的目录结构看起来应该是这样的:
D:\(你的 FAT32 分区盘符)
├─ boot\
├─ EFI\
├─ tools\
└─ Batocera-boot.conf
第三步:使用 GRUB 接管 Windows 启动管理器
为了让电脑开机时能出现选择菜单,我们需要安装一个名为 Grub2Win 的工具。
【注意】:防病毒软件可能会针对该软件发出警告(误报)。由于我们要修改启动管理器(Boot manager),这涉及到系统底层权限,如果操作不当确实可能导致 Windows 无法进入,所以杀毒软件会比较敏感。请选择“允许”或“信任”以继续。
- 第一步:运行安装程序
解压 Grub2Win 的 ZIP 压缩包,运行setup.exe。 - 第二步:下载必要组件
按照提示,允许 Grub2Win 为你的系统下载最新的 EFI 软件包(EFI package)。 - 第三步:确认安装目标
确保目标驱动器是系统默认启动的那个盘(通常是C:),然后点击 Setup。 - 第四步:完成初步设置
安装完成后,点击 Return To The Setup Menu。你可以根据需要勾选“删除安装文件(Delete setup files)”,然后点击 Close The Setup Program。 - 第五步:添加 Batocera 启动项
Grub2Win 会自动扫描已安装的系统,但遗憾的是它认不出 Batocera。- 点击窗口中下方的 Manage Boot Menu(管理启动菜单)。
- 点击窗口顶部的 Add New Entry(添加新条目)。
- 在“Type(类型)”下拉菜单中,选择 Custom code(自定义代码)。
生活化类比:这就像是在你家大门上装一个“多功能可视对讲机”。原本进门只能进客厅(Windows),现在装了这个对讲机,它会问你:“请问您是要去客厅,还是去侧卧的游戏室(Batocera)?”由于游戏室是新盖的,对讲机还不认识,所以我们需要手动给它输一段“开门暗号”(自定义代码)。
第四步:手动配置“开门暗号”
现在我们需要在 Grub2Win 中为 Batocera 编写专属的启动逻辑。
-
第一步:设置基本信息
在配置界面中,将“Title(标题)”命名为 Batocera,你可以根据喜好将它放在任意的“Menu Slot(菜单槽位)”中。同时,将“Pause Seconds(暂停秒数)”减少到 0。 -
第二步:编写启动脚本
点击 Edit Custom Code(编辑自定义代码)。此时系统会弹出默认的文本编辑器(通常是记事本),请根据你下载的 Batocera 版本,将对应的代码粘贴进去并保存文件。
生活化类比:这就像是在给对讲机录入详细的“寻路指南”。我们要告诉电脑:“去那个叫 EFI 的走廊,找到那个名为 bootx64.efi 的管家,让他带我进入游戏世界。”
请根据版本选择对应代码:
如果你使用的是 Batocera v39 及更高版本:
set efibootmgr=/EFI/Batocera/bootx64.efi
getpartition file $efibootmgr root
if [ ! -z $reviewpause ] ; then
echo GNU Grub will load the Batocera EFI Boot Manager at disk address $root
g2wsleep
fi
echo GNU Grub is now loading the Batocera EFI Boot Manager
chainloader $efibootmgr
savelast 1 'Batocera'
如果你使用的是 Batocera v38 及更低版本:
set efibootmgr=/EFI/BOOT/bootx64.efi
getpartition file $efibootmgr root
if [ ! -z $reviewpause ] ; then
echo GNU Grub will load the Batocera EFI Boot Manager at disk address $root
g2wsleep
fi
echo GNU Grub is now loading the Batocera EFI Boot Manager
chainloader $efibootmgr
savelast 1 'Batocera'
【注意】:请务必核对好版本号,路径微小的差异(如 /EFI/Batocera/ 与 /EFI/BOOT/)都会导致系统无法正常敲开 Batocera 的大门。
【提示】:Pleillear 在其 Google Drive 链接中保留了一份该文件的更新版本。如果本页面很久没有更新,你可以去那里寻找。但请特别注意:该链接中的文件目前尚未适配 v39 版本,如果你使用的是 v39,需要手动将代码中的 set efibootmgr=/EFI/BOOT/bootx64.efi 修改为 set efibootmgr=/EFI/Batocera/bootx64.efi。
第五步:验证并应用配置
代码写好后,我们需要让工具进行最后的审核并“实装”到电脑上。
- 第一步:关闭编辑器
关闭你刚才用来粘贴代码的记事本窗口。 - 第二步:自动纠错
Grub2Win 会自动扫描你刚才写的代码。如果没有报错,请依次点击 OK,然后再点一次 OK。 - 第三步:最终确认
检查列表中的 Batocera 条目是否显示正确,位置是否符合你的心意。确认无误后,点击 Apply(应用)。 - 第四步:个性化美化(可选)
你可以进行一些“装修”操作,比如点击预览图来更换背景。另外,建议将 Grub 等待超时(Grub timeout) 从 30 秒缩短到 10 秒,这样开机速度更快。完成后点击 OK。 - 第五步:执行安装
Grub2Win 会正式将启动菜单写入硬盘。如果看到一片绿色,就说明一切顺利。点击 Close(关闭)。
生活化类比:这就像是所有的装修方案已经审核通过,施工队(Grub2Win)正式进场施工。看到满屏的绿色提示,就意味着你的“双系统大厅”已经装修完毕。
- 第六步:重启测试
最后,点击重启电脑。在等待屏幕亮起时,可以为你喜欢的任何神灵或幸运符祈祷,祝愿一切运转正常!
其他进阶方案:使用 rEFInd 实现双系统
如果你是在 MacOS 或其他基于 UEFI(统一可扩展固件接口) 的 x86_64 系统上进行操作,也可以选择使用 rEFInd 作为你的系统引导器来实现双系统共存。
虽然 Windows 有时会对其他操作系统不太友好(比如更新时抹除它们的引导程序,或在无预警下清除主引导记录),但 Mac 系统在这方面可能更加“排外”。请务必牢记这一点,在折腾 Mac 的引导程序之前,一定要准备好一个绝对可靠的系统备份恢复方案。
【注意】:如果你是在所谓的“黑苹果(Hackintosh)”环境下操作,通常会比在正统 Mac 硬件上更安全一些。
使用 rEFInd 引导双系统
在安装 rEFInd 引导管理器(rEFInd Boot Manager) 之前,请务必先仔细阅读并理解其官方文档。如果掉以轻心,且事先没准备好系统刷机工具,很可能会导致系统彻底无法启动。正如 rEFInd 作者所言:“注意:我仍将 rEFInd 视为测试版(Beta)软件!即便如此,它在目前大多数系统上依然是可用的。”
生活化类比:安装 rEFInd 就像是给你的老爷车换装了一套高性能但还在试用期的电子换挡系统。它很酷、很好用,但在上路前,你最好先确认你会手动修车,或者准备好了备用车。
操作步骤:
-
第一步:安装与验证
安装 rEFInd 并重启电脑,检查系统是否能正常进入引导界面且原系统是否还能启动。 -
第二步:检查自动识别
如果运气好的话,rEFInd 可能会自动识别出 Batocera(虽然名字可能比较普通);如果它没能自动认出来,我们就需要手动帮它一把。 -
第三步:手动添加启动项
如果需要手动配置,请打开refind.conf配置文件,将以下代码粘贴进去:
menuentry "Batocera" {
icon EFI/boot/icons/os_linux.png
loader /boot/linux
initrd /boot/initrd.gz
options "label=Batocera console=tty3 quiet loglevel=0 vt.global_cursor_default=0"
}
【提示】:这段代码告诉了 rEFInd 到哪里去找 Batocera 的内核文件、启动图标以及启动时需要加载的各种参数。配置完成后保存重启,你的 Batocera 应该就会出现在启动菜单里了。
实现 Batocera 与其他 Linux 发行版的双系统共存
这里我们将介绍如何让 Batocera 与 Ubuntu 或 Linux Mint 等流行发行版在同一台电脑上“和平共处”。
Ubuntu Linux 方案
第一步:安装 Ubuntu 主系统
按照你习惯的方式安装 Ubuntu。
【注意】:在分区时,请务必预留出一块未分配的空白空间(Unpartitioned space),用于后续安放 Batocera 及其用户数据。
第二步:准备 Batocera 专属分区
在 Ubuntu 分区之后,我们需要紧接着创建两个连续的新分区:
- 第一个分区:类型设为 FAT32,名称(Label)填入 Batocera。
- 第二个分区:类型设为 EXT4。
生活化类比:这就像是在 Ubuntu 的“大主卧”旁边加盖两个功能房。第一个 FAT32 分区是“玄关”(启动分区),第二个 EXT4 分区是“储物间”(存放游戏和数据)。
- 操作指引:
- 第一步:创建上述两个分区,确保第二个分区紧跟在第一个分区之后。
- 第二步:下载 Batocera 的
boot.tar.xz压缩包。 - 第三步:将压缩包解压,并把其中的内容全部拷贝到名为 Batocera 的 FAT32 分区中。
第三步:配置 Ubuntu 的 GRUB 引导
我们需要修改 Ubuntu 的启动菜单,让它能看到新邻居 Batocera。
-
第一步:创建配置文件
进入 Ubuntu 系统,新建一个名为/etc/grub.d/50_batocera的文件,并写入以下内容:
#!/bin/bashcat << EOF
menuentry "Batocera.Linux" {
search --set=root --label Batocera
linux /boot/linux label=Batocera console=tty3 quiet loglevel=0 vt.global_cursor_default=0
initrd /boot/initrd.gz
}
EOF
-
第二步:赋予执行权限
打开终端(Terminal),运行以下命令:
sudo chmod +x /etc/grub.d/50_batocera
-
第三步:更新引导菜单
运行以下命令让设置生效:
sudo update-grub
-
第四步:重启
现在重启电脑,你应该就能在启动菜单里看到 Batocera.Linux 的选项了!
完成上述设置后,现在每次启动电脑时,你都会看到一个 GRUB 启动菜单(GRUB menu),可以让你自由选择是进入 Batocera 还是 Ubuntu。
【提示】:如果你使用的是旧版 Ubuntu,可能需要借助 GRUB 定制器(grub-customizer) 工具来完成上述操作。更多信息可以参考本页面的早期版本。
如果你觉得上述方法不适用,也可以尝试参考下文针对 Linux Mint 的方案。
Linux Mint / MX Linux 方案
对于 Linux Mint 19.03 等其他发行版,可以使用以下方法。此方法同样适用于 MX Linux(在本节中,所有提到 Linux Mint 的地方均同样适用于 MX Linux)。
第一步:安装 Linux Mint 主系统
按照你喜欢的方式安装 Linux Mint。
【注意】:别忘了在硬盘上预留出足够的未分配空间(Unpartitioned space),用来安放 Batocera 及其用户数据。
第二步:准备 Batocera 专属分区
在硬盘上依次创建两个紧邻的分区:
- 第一个分区:类型为 FAT32,名称(Label)命名为 Batocera。
- 第二个分区:类型为 EXT4。这个分区必须紧跟在第一个 Batocera 分区之后。
生活化类比:这就像是在书架上开辟一个新专区。你需要先放一个“索引夹”(FAT32 启动分区)指引方向,紧接着放一个大“储物箱”(EXT4 数据分区)来装书。它们必须紧挨着,系统才能顺藤摸瓜找到东西。
- 具体操作:
- 分区:手动创建上述两个分区。
- 拷贝系统:下载 Batocera 的
boot.tar.xz压缩包,解压并将其内容全部放入名为 Batocera 的 FAT32 分区中。
【注意】:由于我们是手动设置的分区,建议你编辑该分区下的 Batocera-boot.conf 文件,删除其中的 自动调整大小标志(autoresize flag)。如果保留该标志且硬盘没有多余的空闲空间,可能会干扰系统的正常启动。
第三步:配置 GRUB 引导程序
接下来的操作将让 Linux Mint 的引导菜单识别出 Batocera。
- 第一步:创建引导脚本
你需要创建一个名为/etc/grub.d/15_batocera的文件,并将下面的代码保存进去。这段脚本的作用是自动寻找名为“Batocera”的分区并获取它的 通用唯一识别码(UUID),从而实现精准引导。
! /bin/sh
BATOCERA_UUID=$(lsblk –fs –noheadings –pairs -o TYPE,LABEL,UUID |
grep -E ‘^TYPE=”part” LABEL=”Batocera” UUID=”[^”]“$’ |
sed -e s+’^TYPE=”part” LABEL=”Batocera” UUID=”([^”])”$’+’\1’+ | head -1)
if test -n “${BATOCERA_UUID}”
then
echo “Image Batocera found on ${BATOCERA_UUID}” >&2
cat <<EOF
menuentry “Batocera.Linux” {
insmod fat
search –no-floppy –fs-uuid –set=root ${BATOCERA_UUID}
linux /boot/linux label=Batocera console=tty3 quiet loglevel=0 vt.global_cursor_default=0
initrd /boot/initrd.gz
}
EOF
fi
【提示】:如果你想偷个懒,也可以直接在终端输入下面这行命令来自动下载该文件:
sudo wget 'https://wiki.batocera.org/_export/code/dual_boot_ubuntu_batocera.linux?codeblock=4' -O /etc/grub.d/15_batocera
- 第二步:赋予权限并更新引导
文件准备好后,依次运行以下两条命令。这就像是给新写的“说明书”盖上执行公章,并让系统重新读一遍说明书:
sudo chmod a+x /etc/grub.d/15_batocera
sudo update-grub
如果一切顺利,你在运行过程中会看到类似这样的输出:
[...]
Image Batocera found on 3377-44C4
[...]
- 第三步:重启电脑
大功告成!现在重启你的电脑。
生活化类比:现在的引导菜单就像是餐厅的“双拼菜单”,开机时你可以优雅地勾选是要享用 Linux Mint 这道主菜,还是切换到 Batocera 这个游戏甜点。
重启后,你将看到 GRUB 启动菜单(GRUB menu),在这里你可以自由选择进入 Batocera 或是 Linux Mint。
使用 Ventoy 启动(Ventoy)
从技术角度来看,这并不算是严格意义上的“双系统”,更像是将一个已经下载好的系统镜像直接挂载到你现有的硬盘文件系统里运行。
这种方法最大的好处是更新镜像非常方便,但其实 Batocera 本身就自带了更新工具。不过,对于那些无法联网、只能靠其他设备下载更新,或者是那些怎么都没法用常规方式启动的“顽固”电脑来说,Ventoy 是个非常有用的救星。
生活化类比:这就像是你不需要在大房子里专门装修一间游戏室,而是直接拎着一个装满游戏机的“多功能手提箱”(镜像文件)进去。你想玩的时候打开箱子(启动镜像)就行,箱子里的东西和外面的房间相对独立。
【注意】:关于存储空间的限制
默认情况下,Batocera 的镜像在第一次启动扩展前,用户数据分区(Userdata partition) 只有区区 512MB。显然,这点空间连塞牙缝都不够。
由于 Ventoy 将镜像文件当作一个“虚拟硬盘”来使用,直接启动官方原始镜像会导致它无法在第一次启动时自动扩展超过 512MB。要解决这个“空间危机”,你有两个选择:
- 方案 A:仅挂载 Batocera 的启动分区,让它把紧随其后的物理分区识别为用户数据分区。
- 方案 B(推荐):在正式使用前,手动给镜像文件“扩容”。
扩容操作步骤:
请运行以下命令(将 # 替换为你想要的总容量数值,单位为 GB,这个容量包含了启动分区和数据分区):
-
第一步:调整镜像文件大小
qemu-img resize Batocera.img +#G
-
第二步:关联镜像到回环设备
sudo losetup --find --show Batocera.img
通过这两步,你就手动撑大了这个“手提箱”的容量,可以放心地存入大量游戏和存档了。
随后,你需要使用 Gparted 分区编辑器(Gparted) 或类似的工具来手动手动扩充用户数据分区的空间。
{{:ventoy_mount.png|}}
如果你更习惯使用命令行来操作 Gparted,可以输入:
gparted /dev/loop *
使用自动化脚本扩容
如果你不想一步步手动操作,也可以使用下面的脚本。它会自动为 Batocera 镜像文件添加指定的大小,并让 SHARE 用户数据分区(SHARE partition) 自动“长胖”,填满新增的所有空间。
生活化类比:这就像是给你的“虚拟硬盘”打气,脚本不仅会自动加宽外壳,还会把里面的隔间也一并撑大,省去了你拿着小榔头一点点敲扩大的麻烦。
【注意】:该脚本已在 Ubuntu 24.04.1 LTS(配合 e2fsprogs 1.47.0)上通过测试。在旧版本的 Linux 上可能无法正常工作,因为目前的 Batocera 镜像(v41 及以上版本)使用了较新的 ext4 文件系统特性(ext4 features),旧版的工具包可能识别不了。
!/bin/bash
Batocera-ventoy-resize.sh 20240921 n2qz/maximumentropy
扩展 Batocera 安装镜像文件,以便在 Ventoy 启动时有足够的 SHARE 存储空间。
在 Ubuntu 24.04.1 LTS 与 e2fsprogs 1.47.0 环境下测试通过。
由于 v41+ 版本的镜像使用了较新的 ext4 特性,旧版 Linux 可能无法运行。
err () {
exitcode=$?
echo "... 运行出错,错误代码 $exitcode,行号 ${BASH_LINENO[0]},执行命令为: $BASH_COMMAND"
exit $exitcode
}
trap err ERR
growsize="$1"
inputimage="$2"
outputimage="$3"
检查输入参数是否完整且合法
if [ -z "${growsize}" -o -z "${inputimage}" -o "${inputimage}" = "${outputimage}" -o "${outputimage}" != "$(basename "${outputimage}" .gz)" ]
then
此脚本能帮你自动处理镜像文件的扩容工作。如果脚本运行不符合预期,它会显示如下的正确使用说明:
用法: $0 [增加的大小] [原始镜像文件.gz] [输出镜像文件名]
示例: $0 32G Batocera.img ventoy.img
脚本背后的操作流程
脚本在后台会自动执行以下几个关键步骤,你可以通过它的逻辑了解它是如何工作的:
-
第一步:准备镜像文件
脚本会先检查你输入的是原始镜像还是压缩包。如果是压缩包(.gz),它会先进行解压;如果是普通镜像,则直接将其复制并重命名为新的文件名。 -
第二步:扩大物理文件体积
使用truncate命令,像“拉面”一样直接给镜像文件增加你指定的容量(例如增加 32GB)。 -
第三步:建立回环设备连接
通过 回环设备(Loopback device) 将镜像文件模拟成一个真实的物理硬盘,并扫描其中的分区。 -
第四步:修复分区表结构
由于文件变大了,原本位于文件末尾的 GPT 分区表(GUID Partition Table) 会变得位置不对。脚本会调用sgdisk命令,把分区表“挪”到新的文件末尾。 -
第五步:扩展 SHARE 分区
- 调整边界:使用
parted工具,将代表用户数据的 SHARE 分区(通常是第 2 分区)直接扩充到文件的 100% 结尾处。 - 安全检查:在正式扩容前,运行
fsck命令对分区进行健康检查,确保没有文件系统错误。 - 刷新文件系统:最后执行
resize2fs,让文件系统感知到分区已经变大,从而真正释放这些新空间供你使用。
- 调整边界:使用
生活化类比:这就像是你先买了一块更大的地(扩充文件体积),然后把原本的围墙拆了重盖(修复分区表),最后告诉里面的租客(文件系统):“你的屋子已经变宽敞了,现在可以随便摆家具了(扩容生效)。”
脚本运行完毕后,它还会再次显示 SHARE 分区 的剩余空间,让你一眼看到“扩容成功”的硕果。
-
第六步:检查可用空间并清理
脚本会最后一次读取分区的 空闲数据块(Free blocks),并在屏幕上展示扩容后的结果。确认无误后,它会断开 回环设备(Loopback device) 与镜像文件的连接。
sudo dumpe2fs "${sharepartdev}" | grep '^Free blocks'
echo "... 正在断开回环设备 ${lodev}"
sudo losetup -d "${lodev}"
echo "... 操作成功完成!"
生活化类比:这就好比装修师傅在完工后,先帮你打扫干净屋子,最后交给你一把新钥匙,并告诉你:“活儿干完了,东西都撤了,您请进!”
总结
现在你已经通过脚本完成了镜像的扩容,只需将生成的这个新镜像文件拷贝到 Ventoy 设备中,就可以尽情享受拥有海量存储空间的 Batocera 游戏世界了。
原文: 双系统安装Ubuntu+Batocera • 翻译: DIY8 Bot



暂无评论内容