我正在尝试安装多个操作系统作为实验:我的磁盘已经分区为 5 个分区,如下所示:
分区 2 包含 Linux mint 安装,而分区 3 包含 Windows 操作系统,分区 4 包含数据。
我希望使用分区 5:(/dev/nvme0n1p5
大小 = 50 GB,红色箭头)来安装 Arch Linux,根据我之前在具有单个分区的磁盘上的经验,通常使用以下 4 个分区完成:
- EFI 分区(我正在使用带有 gpt 分区方案的 uefi bios)(大小 = 512 MB)
- 根分区(大小 = 15 GB)
- 主分区(大小 = 32.5 GB)
- 交换分区(大小 = 2 GB)
fdisk
因此,我使用分区 5 上的实用程序在实时 Arch Linux 环境中尝试了上述设置: /dev/nvme0n1p5
. 当我在 中打印p
分区表fdisk
时,得到以下结果(我在解释,因为我无法在实时环境中截图):
Partition Size Type
/dev/nvme0n1p5p1 512 MiB Linux Filesystem
/dev/nvme0n1p5p2 15 GiB Linux Filesystem
/dev/nvme0n1p5p3 32.5 GiB Linux Filesystem
/dev/nvme0n1p5p4 2 GiB Linux Filesystem
然而,在写作时,fdisk
失败并出现错误(我再次解释):“无效的参数。内核需要在重新启动时重新读取分区表”并建议使用partprobe
or partx
(我尝试过但没有帮助)。
从下面的消息中可以明显看出,我肯定损坏了分区:
我应该怎么做才能修复这个分区,然后,我现在可以做些什么来将 Arch Linux 安装到这个分区上,上面提到的 4 个分区?
以下是我的理解(有些细节可能有点不对)
问题 1)您在分区而不是磁盘上使用 fdisk。因此,fdisk 似乎已经为您破坏了该分区上的文件系统。
/dev/nvme0n1p5
是分区/dev/nvme0n1
是磁盘(我相信/dev/nvme0
是控制器,但我们不在乎)问题 2)我很确定每个磁盘只能有一个 efi 分区,它必须位于磁盘的开头并采用 fat32 格式 [编辑/更正:您可以在一个磁盘上有多个 efi 分区,但仍然没有推荐的]。您可能希望使用现有的 efi 分区(您仍然可以设置引导优先级...如果您正确设置了所有内容(安装到 /boot/efi),grub 应该为您处理 efi 设置,而不会影响您的其他安装。
你有两种前进的方式:
选项 1 (恕我直言,现有分区的风险更大) - 您可以使用诸如
parted
缩小第 5 个分区之类的工具,然后在未使用的空间中创建更多分区......这会在磁盘空间中产生一些开销,并且您正在运行一个非常紧张的船是......此外,一旦这些分区上有数据,调整这些分区的大小将是一件痛苦的事情。选项 2 (推荐),只需在分区 5 上重新制作文件系统,然后将子卷用于 root、swap 和 home(以及您需要的任何其他内容)
我建议将分区 5 格式化为 btrfs(所有命令可能都需要 sudo):
mkfs.btrfs -f /dev/nvme0n1p5
然后使用 btrfs 创建子卷(ext4/lvm 是您可以查看的替代方案):
挂载你的分区:
mkdir /mnt/brtfs
mount /dev/nvme0n1p5 /mnt/btrfs
然后创建子卷:
btrfs subvolume create /mnt/btrfs/@
为 root 创建一个新的挂载btrfs subvolume create /mnt/btrfs/@swap
交换btrfs subvolume create /mnt/btrfs/@home
家用警告:不要在 btrfs 分区的根目录中存储子卷以外的任何内容
注意:这
@
只是提醒您它的子卷的约定-您可以随意称呼它们,但这样做会提醒您不要违反上述黄金法则根据您的设置,您可能需要卸载根 btrfs 分区并重新安装以在文件系统中正确嵌套卷,但对于您的设置,您应该能够将 efi 分区安装在 /mnt/btrfs/@/boot/efi 并从那里(最后看到交换)
安装基本系统后,您可以设置新的 fstab 以引用这些卷,如下所示:
您还需要一个交换条目 - 请参见此处以获取示例https://askubuntu.com/questions/1206157/can-i-have-a-swapfile-on-btrfs
要在 Linux 中使用任何设备,您需要相应的设备节点(特殊的文件系统对象,部分看起来像文件)。在发现过程中,内核解析新找到的设备上的分区表并调用
udev
在其中创建相应的设备节点/dev
(过去,系统管理员管理静态/dev
并手动创建这些节点)。问题是,它只在基本设备上解析一次分区表。它不期望在发现的分区中有任何类似的结构,也不解析它们。通过“对分区进行分区”,您可以创建必要的结构,但这些结构不适合任何人。你正在做的事情根本行不通,我想它永远行不通,因为实际上没有人需要它。
(我也怀疑是否可以手动为“子分区”创建任何节点,因为没有这样的主要/次要对被内核解释为“分区内的分区”。)
它们的用途仍然有限;我想到的一件事是,您可以将分区转发到虚拟机中,在那里它将被视为整个磁盘,因此 VM 中的操作系统将解释此结构。
所以,你问的问题是没有意义的。但是您似乎在磁盘上使用 GPT,它允许多达 128 个分区。这已经足够了。不要犹豫,只需在基本设备上创建额外的分区:
fdisk /dev/nvme0n1
.此外,您不需要创建额外的 ESP。你可以,但它不会被使用。您已经有一个,在磁盘的开头,
/dev/nvme0n1p1
.