最近几年越来越多的开发者开始尝试在Mac设备上安装Linux双系统,特别是搭载Intel芯片的MacBook Pro。我自己的2019款MacBook Pro就成功运行着macOS Monterey和Ubuntu 22.04 LTS双系统,这要归功于rEFInd这个强大的引导管理器。
传统Mac设备使用Option键选择启动盘的方式有几个明显缺点:首先界面简陋,其次每次启动都需要手动干预,最重要的是对新硬件的支持有限。rEFInd完美解决了这些问题,它不仅能自动检测所有可启动的系统,还支持主题美化,更重要的是可以绕过T2安全芯片的限制。
我最初尝试用Ubuntu自带的GRUB引导,结果发现根本无法识别macOS分区。后来改用rEFInd后,启动问题迎刃而解。实测下来,rEFInd对新型Mac硬件的兼容性确实很稳,特别是处理T2芯片的安全启动问题时,比其他方案可靠得多。
在开始之前,建议先确认你的设备配置。我使用的是一台2019款16寸MacBook Pro,搭载Intel i9处理器和T2安全芯片。系统方面,macOS Monterey 12.6和Ubuntu 22.04.1 LTS都是最新稳定版本。
需要特别注意以下几点:
从Ubuntu官网下载22.04 LTS镜像后,在macOS下用以下命令制作启动盘:
bash复制diskutil list
diskutil unmountDisk /dev/diskX
sudo dd if=ubuntu-22.04.1-desktop-amd64.iso of=/dev/diskX bs=1m
这里要注意把X替换成你的实际磁盘编号。我刚开始用Etcher工具制作启动盘,结果安装时总是报错,改用dd命令后一次成功。建议在操作前先弹出所有其他外接存储设备,避免选错磁盘。
在磁盘工具中,我建议先压缩现有APFS容器而不是直接分区。我的1TB SSD是这样分配的:
实际操作时,先在macOS的磁盘工具中选择"分区",然后点击"+"号调整分区大小。这里有个坑要注意:APFS容器的大小调整可能需要几分钟到几小时不等,取决于数据量大小。
插入制作好的安装盘,重启按住Option键选择EFI Boot。进入安装界面后,关键步骤是:
我遇到过安装程序无法识别Mac键盘的问题,解决办法是在GRUB界面按'e'键编辑启动参数,在linux行末尾添加nomodeset。
回到macOS后,先关闭SIP保护:
csrutil disablebrew install refind安装完成后建议运行sudo refind-install --alldrivers,这样可以确保加载所有可能的驱动模块。我在T2芯片的机器上就因为没有加这个参数导致无法识别Ubuntu分区。
rEFInd的配置文件位于EFI分区的/EFI/refind/refind.conf。需要修改的几个关键参数:
code复制timeout 5
scan_all_linux_kernels true
also_scan_dirs boot,EFI/ubuntu
我建议把默认等待时间设为5秒,这样既不会太赶,也不会拖慢启动过程。scan_all_linux_kernels参数可以确保找到Ubuntu内核更新后的新镜像。
rEFInd支持多种主题,我个人最喜欢的是minimal主题:
bash复制cd /Volumes/ESP/EFI/refind
mkdir themes
git clone https://github.com/evanpurkhiser/rEFInd-minimal themes/minimal
然后在refind.conf中添加:
include themes/minimal/theme.conf
遇到最多的问题是启动时找不到图标或主题不生效,这通常是因为ESP分区挂载点不对。正确的挂载命令是:
bash复制sudo mkdir /Volumes/ESP
sudo mount -t msdos /dev/disk0s1 /Volumes/ESP
另一个常见问题是Ubuntu内核更新后启动项消失,这时需要重新运行sudo update-grub并检查also_scan_dirs设置是否正确。
之前创建的exFAT分区需要在Ubuntu下安装额外驱动:
bash复制sudo apt install exfat-fuse exfat-utils
建议把这个分区挂载到/media/shared,并在/etc/fstab中添加自动挂载配置:
code复制UUID=你的分区UUID /media/shared exfat defaults 0 0
Mac和Linux处理硬件时钟的方式不同,会导致双系统时间不一致。解决方法是在Ubuntu中执行:
bash复制timedatectl set-local-rtc 1 --adjust-system-clock
我在实际使用中发现,这个设置可能需要每次内核更新后重新应用。
MacBook在Linux下的电池续航通常较差,建议安装TLP:
bash复制sudo apt install tlp tlp-rdw
sudo systemctl enable tlp
对于带独立显卡的机型,需要特别注意显卡切换:
bash复制sudo apt install nvidia-driver-515
安装后记得在nvidia-settings中配置PRIME Profiles。我实测在Ubuntu 22.04下,NVIDIA驱动510版本对MacBook Pro的兼容性最好。
经过三个月的日常使用,这套双系统方案已经非常稳定。rEFInd的自动检测功能甚至能识别外接硬盘上的Linux系统,这在做系统维护时特别方便。唯一的小遗憾是MacBook的Touch Bar在Linux下功能有限,不过对于开发工作来说影响不大。