Clone Gentoo Liinux¶
警告
实践尚未成功,待更新
我的 MacBook Air 11” Late 2010 已经有十二年历史了,目前有一个比较异常的地方: 启动时键盘失效,准确地说,是无法使用 option
键来选择启动顺序,无法从U盘启动安装操作系统,也无法激活 macOS 恢复安装 。而且启动时候非常缓慢,启动时有时进入安全模式。我感觉是SSD磁盘坏掉了,所以采用 SATA硬盘(m.2转接)升级MacBook Air 2010 来尝试替换。
为了能够在新的SATA磁盘上先安装好Linux,我采用在 在MacBook Pro上安装Gentoo Linux ( MacBook Air 13” Mid 2013 上完成 ),然后外接U盘方式进行本文的Clone步骤。目标是完整安装好系统之后,将硬盘再安装到 MacBook Air 11” Late 2010 。
磁盘准备¶
将安装了 SATA (NGFF) SSD的U盘插入已经完成 在MacBook Pro上安装Gentoo Linux 的 MacBook Air 13” Mid 2013 ,检查 fdisk -l
输出可以看到这块空白的磁盘:
Disk /dev/sdc: 476.94 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: RTL9210B-CG
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 33553920 bytes
使用 parted分区工具 为这个空白磁盘分区,分区方式同 在MacBook Pro上安装Gentoo Linux :
# 初始化磁盘分区表
parted /dev/sdc mklabel gpt
# 创建第一个sdc1分区,用于EFI启动
parted -a optimal /dev/sdc mkpart ESP fat32 0% 256MB
parted /dev/sdc set 1 esp on
# 系统分区sdc2,分配21GB, XFS
parted -a optimal /dev/sdc mkpart primary xfs 256MB 21GB
parted /dev/sdc name 2 rootfs
# 完成后检查
parted /dev/sdc print
# 分区格式化
mkfs.vfat -F 32 /dev/sdc1
mkfs.xfs -f /dev/sdc2
警告
这里我遇到一个问题, 奥睿科(ORICO)M.2 NVMe/SATA双协议移动硬盘盒 中安装的SATA磁盘分区总是显示不能对齐,暂时没有找到原因。我怀疑是转接卡的芯片有特定配置导致的,等后续将SATA安装到主机后再验证
磁盘挂载¶
挂载文件系统
mkdir /mnt/gentoo
mount /dev/sdc2 /mnt/gentoo
mkdir /mnt/gentoo/boot
mount /dev/sdc1 /mnt/gentoo/boot
数据同步¶
由于本机已经完成Gentoo Linux安装,所以通过同步方式复制:
cd /
tar -cpzf gentoo.tar.gz --exclude=/gentoo.tar.gz --one-file-system /
tar -xpzf /gentoo.tar.gz -C /mnt/gentoo --numeric-owner
(cd /boot && tar cf - .)|(cd /mnt/gentoo/boot && tar xf -)
这里使用了 --one-file-system
参数,是为了不包含其他文件系统中的文件,否则会把复制目标的 /mnt
目录也复制进去,就会死循环。参考 通过tar备份和恢复Linux系统
修订配置¶
需要注意,每次格式化的磁盘UUID和PARTUUID是不同的,所以目标磁盘需要修订
执行
blkid
命令获取/dev/sdc
的磁盘 UUID 和 PARTUUID:
/dev/sdc2: UUID="6646bae2-8110-4401-bfca-3ab6bc61625b" BLOCK_SIZE="512" TYPE="xfs" PARTLABEL="rootfs" PARTUUID="58c8ad0f-0c2c-c640-ab45-3beb25828b7f"
/dev/sdc1: UUID="6DD1-FB72" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="cc71154b-84e1-cc45-b63b-42ed12ec6ffb"
修订
/dev/sdc
磁盘上的/etc/fstab
文件,此时根据磁盘挂载,应该修改/mnt/gentoo/etc/fstab
/dev/disk/by-uuid/6646bae2-8110-4401-bfca-3ab6bc61625b / xfs defaults,noatime 0 1
/dev/disk/by-uuid/6DD1-FB72 /boot vfat defaults,noatime 0 2
启动管理器¶
现在问题来了,怎么能够把要修复的 MacBook Air 11” Late 2010 启动盘指向我新clone的Gentoo Linux呢?
毕竟没法直接在 MacBook Air 11” Late 2010 运行类似 在MacBook Pro上安装Gentoo Linux 的 efibootmgr
我想到Gentoo Linux 的LiveCD是可以启动的(虽然启动时要按下 option
键才能选择GRUB启动管理器),那么我在这个磁盘上安装和配置 grub
能否让MacBook启动时找到一个启动盘呢?
chroot到 /dev/sdc
上的gentoo¶
挂载文件系统:
mount --types proc /proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev
mount --make-rslave /mnt/gentoo/dev
mount --bind /run /mnt/gentoo/run
mount --make-slave /mnt/gentoo/run
进入Gentoo新环境:
chroot /mnt/gentoo /bin/bash
source /etc/profile
export PS1="(chroot) ${PS1}"
安装Grub¶
先安装Grub软件,然后执行
grub-install
: 注意,对于EFI系统,需要确保 EFI 系统分区已经挂载好
emerge --ask --update --newuse --verbose sys-boot/grub
# 确保ESP分区已经挂载才能执行以下安装命令(我将 /dev/sdc1 挂载为 /boot 目录,并创建了 /boot/efi 子目录)
grub-install --target=x86_64-efi --efi-directory=/boot/efi
执行 grub-install --target=x86_64-efi --efi-directory=/boot/efi
命令之后,输出信息:
Installing for x86_64-efi platform.
Installation finished. No error reported.
此时检查 /boot/efi/
目录下会增加一个 EFI
子目录,并且包含 gentoo/
子目录,最终包含一个 grubx64.efi
文件:
# ls -lh /boot/efi/EFI/gentoo/
total 132K
-rwxr-xr-x 1 root root 132K Dec 18 22:27 grubx64.efi
这里我看来没有真正理解,上述 grub-install
会使得本机EFI配置变化,这反而使得 在MacBook Pro上安装Gentoo Linux 这台中间笔记本的启动破坏(我理解 grub-install
的EFI命令实际上是修改了efibootmgr的)。那么是不是需要使用传统的 grub-install /dev/sdc
呢,也就是将grub安装到磁盘的启动分区表
警告
我的实践还是失败,我准备过一段时间再来重试