创建能够同时运行ChromeOS Flex、Windows和macOS等多个操作系统的多重启动环境

创建ChromeOS Flex和Windows或macOS等多启动环境。

首先

ChromeOS Flex无法支持与其他操作系统的多重引导,这是因为在安装时无法调整存储空间的使用量,会将现有操作系统的空间删除并全部分配给ChromeOS Flex。因此无法腾出空间来安装其他操作系统。

在这里,我们将使用一种技巧性的方法来解释如何在一台PC上建立ChromeOS Flex和其他操作系统的多启动环境。由于这仅仅是一种技巧性的方法,所以无法确定这种方法在未来是否可行,但目前应该没有问题。

然而,我并不推荐在ChromeOS Flex和其他操作系统之间进行多重启动环境。因为当在ChromeOS Flex的多重启动环境下更改Windows或macOS的分区时,会破坏ChromeOS Flex的分区表。实际上,在撰写本文时,我自己配置的PC在建立多重启动环境后也出现了破坏分区表的情况(稍后将介绍)。这并不是指责Windows或macOS的问题,而是因为ChromeOS Flex的分区表采用了稍微有些不同的结构。如果有分区表的备份,即使破坏了也可以修复,但如果打算继续使用本文介绍的多重启动环境,就需要及时处理故障的能力。

准备的目的

创建ChromeOS Flex的多重引导环境所需的材料如下:

    1. 支持UEFI的Windows PC或Mac(Intel CPU)主機

 

    1. ChromeOS Flex的安裝用USB記憶棒(8GB或以上)

 

    1. 如果是Windows PC,則需要Windows 10或11的安裝用USB記憶棒(8GB或以上);如果是Mac,則需要macOS的安裝用USB記憶棒(16GB或以上)

 

    1. Debian Live的啟動用USB記憶棒(2GB或以上)

 

    用於記錄的USB記憶棒(只需要大約100KB的可用空間即可)

即使不支持UEFI的计算机也可以在ChromeOS Flex上运行,但是由于ChromeOS Flex假设使用UEFI提供的引导选择器来切换启动其他操作系统,因此需要使用支持GPT(GUID分区表)的UEFI兼容计算机。Intel CPU的Mac支持UEFI,因此没有问题。无论是使用Windows PC还是Mac,安装ChromeOS Flex将删除现有数据,因此提前备份是必需的。此外,建议在Windows PC上制作恢复驱动器,以便在最坏的情况下将其恢复到出厂设置。

另外,在使用ChromeOS Flex之前,您需要确认目标PC能够正常运行。如果是ChromeOS Flex认证的型号,那就可以放心了,但如果不是的话,最好使用ChromeOS Flex的USB安装程序,仅使用安装用USB存储器进行操作确认。

请参考 “下载 Windows 10″、”下载 Windows 11″、”创建可启动的 macOS 安装程序” 来准备安装 Windows 和 macOS 所需的相应 USB 安装介质。

Debian提供的Debian Live启动USB存储器可用于使用Linux的sfdisk命令编辑分区表。Debian Live提供了各种镜像,但在本次用途中,由于不需要桌面环境,所以可以使用较小的standard版(debian-live-11.7.0-amd64-standard.iso,截至2023年5月)而无需担心。只要能够通过Linux启动USB存储器,启动Shell并使用sfdisk和编辑器等工具,就不必非使用Debian Live。

需要额外准备一个用于记录的USB存储设备。如果能将记录保存在Debian Live的USB存储设备中就足够了,但由于文件系统的原因无法进行写入操作。只需要保存几个分区表的文本文件,所以请准备一个价格适中的设备。

在这个工作中,使用安装用的USB记忆棒启动电脑以及对操作系统的安装需要相关知识。如果您不了解这些知识,请查阅手册、制造商的支持网站、视频等进行确认。

安装ChromeOS Flex

首先,安装ChromeOS Flex。在安装之前,除了像之前提到的备份现有数据和创建安装用的USB存储设备之外,在Windows电脑上还需要确认BIOS设置中是否启用了UEFI。即使是一些较旧的PC有UEFI兼容的BIOS,也可能存在禁用UEFI启动或优先选择传统BIOS启动的设置,因此必须将优先使用UEFI的设置进行更改。对于Mac电脑,没有需要预先准备的特别操作。

对于ChromeOS Flex的安装,只需要创建并启动USB安装程序,按照菜单的指示进行操作即可,没有什么难点。Google也提供了ChromeOS Flex安装指南,而且搜索可以找到很多安装相关的文章和视频。

通常情况下,您安装完后会启动并进行账户设置等操作,但设置可能会在之后的操作中被删除,您可能需要重新进行设置。然而,试验一些基本操作也是不错的选择。

保留可用区域以及替换用的EFI系统分区区域

正如我之前解释的那样,目前已经通过ChromeOS FLex的安装将所有内置存储空间分配给了ChromeOS Flex。这样一来,无法安装其他操作系统。因此,我们需要使用Debian Live环境来编辑分区表,减少ChromeOS Flex的使用空间,并腾出空间供Windows或macOS使用。

Debian Live的启动

在编辑分区表时,为了在apt中添加软件包,您需要先将计算机连接到互联网上,然后连接Debian Live的USB闪存驱动器以进行启动。我认为您也可以使用Wi-Fi进行互联网连接,但我没有尝试过。

当Debian Live启动时,会出现命令行的Shell,但如果使用较旧版本的Debian Live映像,则可能出现登录提示符。在这种情况下,请使用用户名为”user”和密码为”live”登录。

之后将用于记录的USB存储器连接到电脑。在这种情况下,会连接内置存储器、Debian Live的USB存储器和用于记录的USB存储器这三个存储设备,但在大多数情况下,在Debian环境下,存储设备的分配应该会如下所示。

ストレージとデバイス名の対応ストレージの種類デバイス名内蔵ストレージ/dev/sdaDebian LiveのUSBメモリ/dev/sdb記録用のUSBメモリ/dev/sdc

由于PC端的存储配置可能会与此表不同,请务必确认实际存储和设备名称的分配。后续的说明基于此分配假设,如果设备的分配不同,请适当调整阅读内容。

请在Debian Live中进行预先准备。

用sudo -i命令切换到root用户。

user@debian:~$ sudo -i
root@debian:~# 

因为要在设置过程中使用mkdosfs命令,所以我们将使用apt来安装dosfstools。

root@debian:~# apt update
.....(省略).....
root@debian:~# apt install dosfstools
.....(省略).....
root@debian:~# 

将记录用的USB存储器挂载到/mnt目录下,然后在其中进行cd操作。这样一来,就可以将命令的输出结果等保存到USB存储器中。

root@debian:~# mount /dev/sdc1 /mnt
root@debian:~# cd /mnt
root@debian:/mnt# 

ChromeOS Flex的奇特分区表

最初使用sfdisk –list命令来检查ChromeOS Flex的分区表,并将结果保存在名为p1-sda-list的文件中,以便稍后比较更改的内容。值得注意的是,本文所使用的PC的内置存储器为120GB的SSD。

root@debian:/mnt# sfdisk --list /dev/sda | tee p1-sda-list
Disk /dev/sda: 111.79 GiB, 120034123776 bytes, 234441648 sectors
Disk model: INTEL SSDSC2BW12
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: AC161E76-BF4B-924D-9C72-06CE3C6EABCF

Device        Start       End   Sectors   Size Type
/dev/sda1  17010688 234441599 217430912 103.7G Linux filesystem
/dev/sda2        69     32836     32768    16M ChromeOS kernel
/dev/sda3   8622080  17010687   8388608     4G ChromeOS root fs
/dev/sda4     32837     65604     32768    16M ChromeOS kernel
/dev/sda5    233472   8622079   8388608     4G ChromeOS root fs
/dev/sda6        65        65         1   512B ChromeOS kernel
/dev/sda7        66        66         1   512B ChromeOS root fs
/dev/sda8     69632    102399     32768    16M Linux filesystem
/dev/sda9        67        67         1   512B ChromeOS reserved
/dev/sda10       68        68         1   512B ChromeOS reserved
/dev/sda11       64        64         1   512B unknown
/dev/sda12   102400    233471    131072    64M EFI System

Partition table entries are not in disk order.
root@debian:/mnt#

在这里,Start和End各个数字表示存储的逻辑块地址(LBA),Sectors表示块数(扇区数),其中1块等于512字节。
以/dev/sda2为例,LBA的起始为69,最后为32836,块数为32768(=32836-69+1)。由于块数为32768,所以容量为32768×512÷1024÷1024=16,即16MB。

如果你见过分区表,你可能会感到不适,但在ChromeOS Flex中,有12个分区,并且分区表的索引(由/dev/sdaX中的X表示的数字)与存储上的物理顺序不一致。通常情况下,分区是按顺序从头开始分配的,因此可以通过sfdisk –list等命令查看,起始扇区的值会按照从小到大的顺序排列。但是不知道为什么,在ChromeOS Flex中,分区以离散的顺序排列。因此,也显示了”Partition table entries are not in disk order.”的消息。

ChromeOS Flex的分区表备份

这是由于分区索引和物理排序不匹配的问题,导致在安装Windows或macOS之后,ChromeOS Flex的分区表会受损。为了防备出现这种情况,我们在ChromeOS Flex安装后立即保存了分区表的备份。以下示例使用sfdisk –dump命令将分区表保存到名为p1-sda-dump的文件中。

root@debian:/mnt# sfdisk --dump /dev/sda | tee p1-sda-dump
label: gpt
label-id: AC161E76-BF4B-924D-9C72-06CE3C6EABCF
device: /dev/sda
unit: sectors
first-lba: 34
last-lba: 234441614
sector-size: 512

/dev/sda1 : start=    17010688, size=   217430912, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=08FD7E32-17D4-7341-934F-06FE44B1237F, name="STATE"
/dev/sda2 : start=          69, size=       32768, type=FE3A2A5D-4F32-41A7-B725-ACCC3285A309, uuid=A8FC6629-5055-A040-A9A5-415A8EA50C1B, name="KERN-A", attrs="GUID:48,56"
/dev/sda3 : start=     8622080, size=     8388608, type=3CB8E202-3B7E-47DD-8A3C-7FF2A13CFCEC, uuid=358D4F01-CDE0-5D4C-BB65-E91160A04FE2, name="ROOT-A"
/dev/sda4 : start=       32837, size=       32768, type=FE3A2A5D-4F32-41A7-B725-ACCC3285A309, uuid=9F96728D-96A8-6745-892D-91084EAF2481, name="KERN-B", attrs="GUID:49,56"
/dev/sda5 : start=      233472, size=     8388608, type=3CB8E202-3B7E-47DD-8A3C-7FF2A13CFCEC, uuid=1030FFBB-8B4C-5049-9B22-20878DC32FE7, name="ROOT-B"
/dev/sda6 : start=          65, size=           1, type=FE3A2A5D-4F32-41A7-B725-ACCC3285A309, uuid=3AB9CA80-136D-1641-B222-3C0BBEC2B66D, name="KERN-C", attrs="GUID:52,53,54,55"
/dev/sda7 : start=          66, size=           1, type=3CB8E202-3B7E-47DD-8A3C-7FF2A13CFCEC, uuid=170F4F46-6D5F-ED48-82EB-39FEEE521751, name="ROOT-C"
/dev/sda8 : start=       69632, size=       32768, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=9E8B7A51-B372-5B44-B4D4-EB4ABE5F77CF, name="OEM"
/dev/sda9 : start=          67, size=           1, type=2E0A753D-9E48-43B0-8337-B15192CB1B5E, uuid=32CF3879-ABD4-B74D-A864-7E734A2DB89E, name="reserved"
/dev/sda10 : start=          68, size=           1, type=2E0A753D-9E48-43B0-8337-B15192CB1B5E, uuid=7433F1DE-C8AF-7D42-8A58-996671E0753D, name="reserved"
/dev/sda11 : start=          64, size=           1, type=CAB6E88E-ABF3-4102-A07A-D4BB9BE3C1D3, uuid=C147F3D7-07F4-0048-97B5-B4DAC1DF7120, name="RWFW"
/dev/sda12 : start=      102400, size=      131072, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, uuid=FF81FED5-A756-3C44-9693-3E41EE823552, name="EFI-SYSTEM", attrs="LegacyBIOSBootable"
root@debian:/mnt# 

根据这个列表可以看出,GPT的每个分区条目都包含头部LBA、大小(记录的是分区的最后一个LBA)、表示分区类型的UUID(GUID)、分区特定的UUID、分区名称和属性。值得注意的是,GPT最多可以处理128个分区。

为Windows和macOS系统腾出可用空间。

以下是根据首次检查的 sfdisk –list /dev/sda 的分区表按照起始扇区的顺序重新排列,并添加分区顺序作为 ID 以进行解释的列表。

ID : Device        Start       End   Sectors   Size Type
 1 : /dev/sda6        65        65         1   512B ChromeOS kernel
 2 : /dev/sda7        66        66         1   512B ChromeOS root fs
 3 : /dev/sda9        67        67         1   512B ChromeOS reserved
 4 : /dev/sda2        69     32836     32768    16M ChromeOS kernel
 5 : /dev/sda11       64        64         1   512B unknown
 6 : /dev/sda10       68        68         1   512B ChromeOS reserved
 7 : /dev/sda4     32837     65604     32768    16M ChromeOS kernel
 8 : /dev/sda8     69632    102399     32768    16M Linux filesystem
 9 : /dev/sda12   102400    233471    131072    64M EFI System
10 : /dev/sda5    233472   8622079   8388608     4G ChromeOS root fs
11 : /dev/sda3   8622080  17010687   8388608     4G ChromeOS root fs
12 : /dev/sda1  17010688 234441599 217430912 103.7G Linux filesystem

由于现在所有的存储空间都已分配给了ChromeOS Flex,所以目前没有可用的空间来安装其他操作系统。因此,在这里最重要的是使用的最大空间的第12个Linux文件系统分区。该分区是用于ChromeOS Flex的用户数据,并且在分区索引中被分配给/dev/sda1,但物理位置实际上在最后(在后续说明中将省略/dev/)。如果能够缩小sda1的空间,剩余的部分就可以作为空闲空间,可以分配给其他操作系统。

实际上,对于sda1的文件系统来说,它是使用常见的Linux EXT4,经过调整大小并重新创建后,我们确认ChoromOS Flex可以正常启动。因此,我们将缩小sda1以便为其他操作系统留出空间。当然,在缩小和重新创建过程中,已写入的数据将会丢失,但由于此时并没有要保存的数据,所以这是没有问题的。这就是我之前提到的技巧。

更改EFI系统分区。

下一个重要的是位于第9个位置的sda12的EFI系统分区(ESP)。ESP保存着操作系统的引导程序和内核等。在ChromeOS Flex中,ESP被分配了64兆字节,并且在物理上它是第9个位置,但根据设备名称sda12所示,分区索引将是12,也就是最后一个。

经过测试,发现ChromeOS Flex的ESP设置存在两个问题。第一个问题在于分区大小,如果只使用ChromeOS Flex,64MB大小的分区应该没有问题,但如果尝试与Windows进行多重引导,可能会有点不足。实际安装了Windows的启动加载程序和所需文件后,剩余空间只有大约2.7MB。如果将来操作系统的更新等导致需要保存到ESP的文件增加或者某些文件的大小增加,就可能会导致容量不足。因此需要为未来做好准备,增加容量。

第二个问题是ChromeOS Flex才会出现的ESP分区索引与物理顺序不一致的问题,而macOS和Windows都需要ESP存储上的布局保持一致才能正常启动,否则会导致各种故障。

因此,我们将改变ESP分区的位置并增加其容量。由于在分区索引中,它是第12个并且是最后一个,所以我们要通过物理方式将其改变为第12个。虽然我们说是移动,但我们也会改变容量,因此我们首先会创建一个容量较大的ESP用的FAT分区(ESP的文件系统是FAT),然后将原来ESP的内容复制过去。

编辑分区表

在ChromeOS Flex中,首次编辑分区表是为了缩小用户数据分区,并在其空出的空间开头部分创建一个FAT分区,用于替换ESP。

首先,将之前保存的p1-sda-dump文件复制到另一个文件中。然后,为创建FAT分区准备一个UUID。

root@debian:/mnt# cp p1-sda-dump p2-sda-dump
root@debian:/mnt# uuidgen
f2b1b3fc-81da-4ef8-9494-32dd9c0b20a0
root@debian:/mnt#

接下来,使用文本编辑器对复制的p2-sda-dump进行编辑。原始的p1-sda-dump和编辑后的p2-sda-dump之间的差异如下所示。

root@debian:/mnt# vi p2-sda-dump
.....(省略).....
root@debian:/mnt# diff -U1 p1-sda-dump p2-sda-dump
--- p1-sda-dump 2023-04-08 22:51:03.041333000 +0900
+++ p2-sda-dump 2023-04-08 22:51:03.042949000 +0900
@@ -8,3 +8,3 @@

-/dev/sda1 : start=    17010688, size=   217430912, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=08FD7E32-17D4-7341-934F-06FE44B1237F, name="STATE"
+/dev/sda1 : start=    17010688, size=    33554432, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=08FD7E32-17D4-7341-934F-06FE44B1237F, name="STATE"
 /dev/sda2 : start=          69, size=       32768, type=FE3A2A5D-4F32-41A7-B725-ACCC3285A309, uuid=A8FC6629-5055-A040-A9A5-415A8EA50C1B, name="KERN-A", attrs="GUID:48,56"
@@ -20 +20,2 @@
 /dev/sda12 : start=      102400, size=      131072, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, uuid=FF81FED5-A756-3C44-9693-3E41EE823552, name="EFI-SYSTEM", attrs="LegacyBIOSBootable"
+/dev/sda13 : start=    50565120, size=      524288, type=EBD0A0A2-B9E5-4433-87C0-68B6B72699C7, uuid=f2b1b3fc-81da-4ef8-9494-32dd9c0b20a0, name="DOS"
root@debian:/mnt# 

sda1的变更只是简单地将分区大小减小,原本是100GB以上,所以将其更改为16GB,计算公式为16 * 2^30 / 512 = 33554432。视ChromeOS Flex的使用情况而定,需要分配多少容量是不同的,但对于作者来说,由于几乎不使用ChromeOS Flex的本地存储,16GB已经足够。通过减小sda1的大小,可以在其他操作系统上腾出大约87GB的可用空间。

首先,我们将在sda13上准备一个FAT分区用于替换ESP(ESP的文件系统为FAT16或FAT32)。由于sda13的起始位置在物理上位于sda1之后,所以将sda1的起始位置和大小相加得到 17010688 + 33554432 = 50565120。由于我们希望ESP的容量至少达到100MB左右,所以我们设置了256MB的容量作为保留空间。将sda13的分区类型指定为EBD0A0A2-B9E5-4433-87C0-68B6B72699C7,该类型表示一般的Windows数据分区,并将分区的UUID设置为之前准备的f2b1b3fc-81da-4ef8-9494-32dd9c0b20a0。分区的名称可以省略,但我们将其设为”DOS”。

如果准备使用新的分区,必须将起始位置和大小设置为8的倍数。在旧存储设备中,扇区大小为512字节,而现在的存储设备通常具有4096字节的扇区大小,并且为了与传统设备兼容,可以以512字节为单位进行访问。为了区分这一点,在存储设备上将扇区称为物理扇区,可以访问的扇区称为逻辑扇区,并且物理扇区大小除以逻辑扇区大小的值(即4096 / 512)为8。如果不是8的倍数,物理扇区和访问扇区之间的边界将不匹配,这会对性能产生负面影响。顺便提一下,本文中使用的SSD是比较旧的设备,因此物理扇区大小也与逻辑扇区相同,即512字节。

当你确认了p2-sda-dump的更改内容后,可以使用sfdisk命令将其写入存储设备中。

root@debian:/mnt# sfdisk /dev/sda < p2-sda-dump

更改后的分区表如下所示。

root@debian:/mnt# sfdisk --list /dev/sda | tee p2-sda-list
Disk /dev/sda: 111.79 GiB, 120034123776 bytes, 234441648 sectors
Disk model: INTEL SSDSC2BW12
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: AC161E76-BF4B-924D-9C72-06CE3C6EABCF

Device        Start      End  Sectors  Size Type
/dev/sda1  17010688 50565119 33554432   16G Linux filesystem
/dev/sda2        69    32836    32768   16M ChromeOS kernel
/dev/sda3   8622080 17010687  8388608    4G ChromeOS root fs
/dev/sda4     32837    65604    32768   16M ChromeOS kernel
/dev/sda5    233472  8622079  8388608    4G ChromeOS root fs
/dev/sda6        65       65        1  512B ChromeOS kernel
/dev/sda7        66       66        1  512B ChromeOS root fs
/dev/sda8     69632   102399    32768   16M Linux filesystem
/dev/sda9        67       67        1  512B ChromeOS reserved
/dev/sda10       68       68        1  512B ChromeOS reserved
/dev/sda11       64       64        1  512B unknown
/dev/sda12   102400   233471   131072   64M EFI System
/dev/sda13 50565120 51089407   524288  256M Microsoft basic data

Partition table entries are not in disk order.
root@debian:/mnt# 

接下来,我们将在sda1和sda13上创建文件系统。由于sda1是EXT4格式,所以我们将使用mkfs.ext4命令来完成。

root@debian:/mnt# mkfs.ext4 -L H-STAGE /dev/sda1
mke2fs 1.46.2 (28-Feb-2021)
/dev/sda1 contains a ext4 file system labelled 'H-STATE'
        last mounted on /mnt/stateful_partition on Fri Mar 17 04:05:56 2023
Proceed anyway? (y,N) y
Discarding device blocks: done
Creating filesystem with 4194304 4k blocks and 1048576 inodes
Filesystem UUID: 5e407efa-1a3a-41f7-9d04-b036bb893ff6
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

root@debian:/mnt#

因为sda13是用于ESP,所以要用FAT32格式创建。

root@debian:/mnt# mkdosfs -F 32 -n EFI-SYSTEM /dev/sda13
mkfs.fat 4.2 (2021-01-31)
root@debian:/mnt# 

替换现有的ESP

因为新的ESP已经准备好了,所以我们将sda12的内容复制到sda13。在这里,我们首先挂载双方的分区,然后使用tar命令进行复制,但也可以使用cp -r或其他方法。复制完成后,我们将卸载sda12和sda13。

root@debian:/mnt# mkdir /mnt/efi /mnt/dos
root@debian:/mnt# mount /dev/sda12 /mnt/efi
root@debian:/mnt# mount /dev/sda13 /mnt/dos
root@debian:/mnt# (cd /mnt/efi ; tar cf - * ) | (cd /mnt/dos ; tar xvf -)
efi/
efi/boot/
efi/boot/bootx64.efi
.....(省略).....
syslinux/ldlinux.c32
root@debian:/mnt# umount /mnt/dos
root@debian:/mnt# umount /mnt/efi

由于在sda13上准备了一个新的ESP,所以我们将删除现有的sda12,并将sda13的空间更改为sda12的ESP。然而,仅仅这样做会在原来sda12的空间(sda8和sda5之间,ID为9的空间)留下64MB的空闲空间。在Windows的安装过程中会创建一个16MB的预留分区,在这里留空会导致预留分区在sda8之后创建,而原本在逻辑上与分区索引和物理顺序中的12相匹配的ESP会在物理上变成第13个分区。所以为了消除原先sda12的空白区域,我们将sda8的空间扩展到sda5之前。

这次将p2-sda.dump复制到p3-sda-dump,然后对p3-sda-dump进行编辑。

root@debian:/mnt# cp p2-sda-dump p3-sda-dump
root@debian:/mnt# vi p3-sda-dump

编辑内容如下。

root@debian:/mnt# diff -U0 p2-sda-dump p3-sda-dump
--- p2-sda-dump 2023-04-08 22:51:03.042949000 +0900
+++ p3-sda-dump 2023-04-23 21:43:45.434028000 +0900
@@ -16 +16 @@
-/dev/sda8 : start=       69632, size=       32768, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=9E8B7A51-B372-5B44-B4D4-EB4ABE5F77CF, name="OEM"
+/dev/sda8 : start=       69632, size=      163840, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=9E8B7A51-B372-5B44-B4D4-EB4ABE5F77CF, name="OEM"
@@ -20,2 +20 @@
-/dev/sda12 : start=      102400, size=      131072, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, uuid=FF81FED5-A756-3C44-9693-3E41EE823552, name="EFI-SYSTEM", attrs="LegacyBIOSBootable"
-/dev/sda13 : start=    50565120, size=      524288, type=EBD0A0A2-B9E5-4433-87C0-68B6B72699C7, uuid=f2b1b3fc-81da-4ef8-9494-32dd9c0b20a0, name="DOS"
+/dev/sda12 : start=    50565120, size=      524288, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, uuid=FF81FED5-A756-3C44-9693-3E41EE823552, name="EFI-SYSTEM", attrs="LegacyBIOSBootable"
root@debian:/mnt#

sda8的大小从原先的16MB增加到了sda12的64MB的大小,现在为80MB(163840扇区)。sda12的type和uuid保持不变,只改变了sda13的start和size的值。然后,直接删除了sda13,因为它是多余的。

在Mac上,不要删除sda13,而是将其类型更改为APFS的GUID(7C3457EF-0000-11AA-AA11-00306543ECAC),名称更改为”Customer”(我认为更改不是必需的,但我还没有尝试)。另外,为使sda13位于sda12之后,需要将其start设置为sda12的size和start之和,并且在可容纳剩余空间范围内分配一个适当的值(例如大约50GB)。在安装macOS时,需要使用APFS对sda13进行格式化,但是由于格式化后sda13将包含剩余空间的全部,因此不需要设置确切的大小。

确认成功修改后,请再次使用sfdisk命令重新写入分区表。

root@debian:/mnt# sfdisk /dev/sda < p3-sda-dump
.....(省略).....
root@debian:/mnt#

更改后的分区表如下。

root@debian:/mnt# sfdisk --list /dev/sda | tee p3-sda-list
Disk /dev/sda: 111.79 GiB, 120034123776 bytes, 234441648 sectors
Disk model: INTEL SSDSC2BW12
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: AC161E76-BF4B-924D-9C72-06CE3C6EABCF

Device        Start      End  Sectors  Size Type
/dev/sda1  17010688 50565119 33554432   16G Linux filesystem
/dev/sda2        69    32836    32768   16M ChromeOS kernel
/dev/sda3   8622080 17010687  8388608    4G ChromeOS root fs
/dev/sda4     32837    65604    32768   16M ChromeOS kernel
/dev/sda5    233472  8622079  8388608    4G ChromeOS root fs
/dev/sda6        65       65        1  512B ChromeOS kernel
/dev/sda7        66       66        1  512B ChromeOS root fs
/dev/sda8     69632   233471   163840   80M Linux filesystem
/dev/sda9        67       67        1  512B ChromeOS reserved
/dev/sda10       68       68        1  512B ChromeOS reserved
/dev/sda11       64       64        1  512B unknown
/dev/sda12 50565120 51089407   524288  256M EFI System

Partition table entries are not in disk order.
root@debian:/mnt# 

在这种情况下,sda8的分区大小将大于实际使用的空间,但没有问题。

与最初保存的p1-sda-list相比,结果如下。

root@debian:/mnt# diff -U0 --ignore-space-change p1-sda-list p3-sda-list
--- p1-sda-list 2023-04-08 22:51:03.042130000 +0900
+++ p3-sda-list 2023-04-08 22:51:03.044934000 +0900
@@ -10 +10 @@
-/dev/sda1  17010688 234441599 217430912 103.7G Linux filesystem
+/dev/sda1  17010688 50565119 33554432   16G Linux filesystem
@@ -17 +17 @@
-/dev/sda8     69632    102399     32768    16M Linux filesystem
+/dev/sda8     69632   233471   163840   80M Linux filesystem
@@ -21 +21 @@
-/dev/sda12   102400    233471    131072    64M EFI System
+/dev/sda12 50565120 51089407   524288  256M EFI System

现在可以准备安装其他操作系统,如Windows或macOS了,所以请关闭电脑。请保留Debian Live的USB记忆棒和分区表备忘录的USB记忆棒,以备后续操作使用。

root@debian:/mnt# poweroff

当您打开PC电源后,您可以确认ChromeOS Flex启动。如果没有启动,您可能需要重新检查之前的步骤。您可能需要使用Debian Live进行修复,或者重新安装ChromeOS Flex。

安装Windows或macOS

这次我们将使用Windows或macOS安装用的USB闪存盘启动电脑,并安装目标操作系统。在安装过程中需要注意的是,不要破坏之前准备的ChromeOS Flex分区,将目标操作系统安装到适当的存储区域(例如,对于Windows,是空闲区域;对于Mac,是准备好的sda13分区)。其余步骤与通常的macOS和Windows安装并没有任何区别。

确认安装完成后操作系统能够正常运行。此时,已安装的操作系统(如Windows或macOS)可以启动,而ChromeOS Flex则无法启动。原因是正如前面所述,当安装Windows或macOS时,他们会更改分区表,从而导致ChromeOS Flex的分区表被覆盖。

修复 ChromeOS FLex 的分区表

使用Debian Live的USB记忆棒再次启动,修复无法启动的ChromeOS Flex分区表。启动Debian Live后,将之前记录的USB记忆棒挂载到/mnt目录下。请注意,不需要使用apt命令。

user@debian:~$ sudo -i
root@debian:~# mount /dev/sdc1 /mnt
root@debian:~# cd /mnt
root@debian:/mnt# 

我们使用sfdisk –list命令来确认无法启动的分区表的情况。

root@debian:/mnt# sfdisk --list /dev/sda | tee p4-sda-list
Disk /dev/sda: 111.79 GiB, 120034123776 bytes, 234441648 sectors
Disk model: INTEL SSDSC2BW12
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: AC161E76-BF4B-924D-9C72-06CE3C6EABCF

Device        Start       End   Sectors  Size Type
/dev/sda1        64        64         1  512B unknown
/dev/sda2        65        65         1  512B ChromeOS kernel
/dev/sda3        66        66         1  512B ChromeOS root fs
/dev/sda4        67        67         1  512B ChromeOS reserved
/dev/sda5        68        68         1  512B ChromeOS reserved
/dev/sda6        69     32836     32768   16M ChromeOS kernel
/dev/sda7     32837     65604     32768   16M ChromeOS kernel
/dev/sda8     69632    233471    163840   80M Linux filesystem
/dev/sda9    233472   8622079   8388608    4G ChromeOS root fs
/dev/sda10  8622080  17010687   8388608    4G ChromeOS root fs
/dev/sda11 17010688  50565119  33554432   16G Linux filesystem
/dev/sda12 50565120  51089407    524288  256M EFI System
/dev/sda13 51089408  51122175     32768   16M Microsoft reserved
/dev/sda14 51122176 234440703 183318528 87.4G Microsoft basic data

sda13和sda14是由Windows安装添加的分区,但也可能有新增的sda15分区。对于Mac来说,sda13在之前已经准备好,因此分区数量没有变化,但是sda13的大小(扇区数)应该已经改变了。

ChromeOS Flex安装时,查看从1到12的sda分区,sda12的分区索引和物理顺序已经匹配,所以没有变化。然而,从sda1到sda11的分区表在存储上按照物理顺序排列。看来在Windows和macOS中,当添加分区或修改分区表时会重新按照物理顺序排序。由于这样的排序,ChromeOS Flex将无法启动,因此需要将分区表的顺序修正回原始顺序。

首先使用sfdisk –dump命令将当前的分区表保存到p4-sda-dump中。

root@debian:/mnt# sfdisk --dump /dev/sda > p4-sda-dump

与之前保存的p3-sda-dump相比,尽管顺序发生了改变,但是可以看出分区的大小、类型和uuid信息没有改变。因此,将新添加的sda13、sda14(甚至sda15)的分区信息添加到p3-sda-dump中并反映到存储中,就可以修复ChromeOS Flex的分区表。

你可以使用下面的命令行创建修复分区表,无需使用编辑器。

root@debian:/mnt# cp p3-sda-dump p5-sda-dump
root@debian:/mnt# tail -n 2 p4-sda-dump >> p5-sda-dump

第二个tail -n参数应根据增加的分区数选择1、2、3等。对于Mac而言,因为事先准备了sda13,我们将用macOS安装后的行来替换sda13。如果p5-sda-dump的修复完成后,我们可以使用原始的p3-sda-dump和diff命令进行比较,以确认修改是否正确实施。

root@debian:/mnt# diff -U1  p3-sda-dump p5-sda-dump
--- p3-sda-dump 2023-04-26 12:30:22.078533000 +0900
+++ p5-sda-dump 2023-04-26 12:30:22.078899000 +0900
@@ -20 +20,3 @@
 /dev/sda12 : start=    50565120, size=      524288, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, uuid=FF81FED5-A756-3C44-9693-3E41EE823552, name="EFI-SYSTEM", attrs="LegacyBIOSBootable"
+/dev/sda13 : start=    51089408, size=       32768, type=E3C9E316-0B5C-4DB8-817D-F92DF00215AE, uuid=46FFCC48-8858-4FF6-BE06-E352C55E9FD1, name="Microsoft reserved partition", attrs="GUID:63"
+/dev/sda14 : start=    51122176, size=   183318528, type=EBD0A0A2-B9E5-4433-87C0-68B6B72699C7, uuid=2C6B3DFE-8DF4-4BF1-8C1F-01173A1042E1, name="Basic data partition"
root@debian:/mnt# 

如果没有问题,我们将在存储上应用修正后的分区表。

root@debian:/mnt# sfdisk /dev/sda < p5-sda-dump

此操作完成后,Chrome OS Flex与其他操作系统的多重引导环境设置已完成。未来如果在更改Windows或macOS分区时导致Chrome OS Flex分区损坏,请务必保留在过程中创建的p3-sda-dump以备不时之需。

启动画面的图像

让我们实际启动电脑吧。

如果是Windows个人电脑的情况下

如果使用Windows PC,在启动时选择UEFI BIOS的引导选择器,我认为可以选择”ChromeOS Flex”和”Windows Boot Manager”这样的选项。

boot-Windows.jpg

这台电脑上已经安装了FreeBSD和Debian GNU/Linux,可以切换使用四种不同的操作系统。

在Mac上的情况

如果是Mac的情况,按住Option键启动,就会显示下一个驱动器的选择界面,其中“EFI Boot”是ChromeOS Flex。

boot-macOS.jpg

在Mac上,您可以在选择启动操作系统时按住Control键并单击,以更改默认启动操作系统。

RTC的时间处理方式的不同

在macOS上没有问题,但是在将Windows和ChromeOS Flex组合使用时,不同于RTC(实时时钟,可以在计算机内部的BIOS中查看的时钟)时间处理的差异会成为一个问题。在ChromeOS Flex中,RTC的时间被视为UTC,而在Windows中,它被视为本地时间,即JST。因此,如果在使用ChromeOS Flex后启动Windows而不进行任何操作,时间会相差9小时。通过设置下面的注册表,您可以使Windows将RTC作为UTC处理,从而避免这个问题。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation]
"RealTimeIsUniversal"=dword:00000001

请非常慎重地操作注册表,因为修改注册表涉及风险,请务必小心。

多重引导环境设置完成后的分区表管理和修复

本文中安装的Windows版本是Windows 10,安装后增加了两个分区sda13和sda14。后来升级到Windows 11后,sda14的大小缩小了,并且添加了一个新的恢复分区sda15,同时分区表也被重写,导致无法启动ChromeOS Flex。为了修复这个问题,不得不使用之前保存的p3-sda-dump文件来修复分区,在使用Debian Live进行操作时进行了修复。我原本以为恢复分区是在安装Windows时自动创建的,但似乎并不总是这样。

如果Windows或macOS对分区进行更改,几乎可以肯定ChromeOS Flex的分区表会被破坏,所以需要格外注意。

另外,為了進行AB更新,在每次更新ChromeOS Flex時,分區表的屬性將被修改。儘管屬性更改只是進行了交換,意味著還原非最新備份的分區表只會變成稍舊的操作系統,但最好定期保存最新的分區表。如果您在同一台電腦上作為第三個作業系統安裝Debian或其他Linux環境,您可以輕鬆備份最新的分區表並在必要時進行修復。

最后

我以前使用ChromeOS Flex时的电脑很旧,所以在性能方面并不是非常舒适的环境。但这次使用Windows系统,这台电脑的性能足够实用,ChromeOS Flex也可以很顺畅地运行,而且没有多余的应用程序运行,所以操作也很轻快,启动和关闭速度也非常值得一提。

在能够舒适地使用Windows或macOS的电脑上,选择使用ChromeOS Flex似乎没有太多优势,但如果CPU性能还不错,而内存较少(大约4GB),可能选择ChromeOS Flex是一个最佳选择。

广告
将在 10 秒后关闭
bannerAds