对现有分区进行分区以安装操作系统?

对现有分区进行分区以安装操作系统?

我正在尝试安装多个操作系统作为实验:我的磁盘已经分成 5 个分区,如下所示:

在此处输入图片描述

分区 2 包含 Linux mint 安装,分区 3 包含 Windows 操作系统,分区 4 包含数据。

我希望使用分区 5:(/dev/nvme0n1p5大小 = 50 GB,红色箭头)来安装 Arch Linux,根据我以前在单个分区的磁盘上的经验,通常使用以下 4 个分区完成:

  1. EFI 分区(我使用带有 gpt 分区方案的 uefi bios)(大小 = 512 MB)
  2. 根分区(大小 = 15 GB)
  3. 主分区(大小 = 32.5 GB)
  4. 交换分区(大小 = 2 GB)

fdisk因此,我尝试在实时 Arch Linux 环境中使用分区 5 上的实用程序进行上述设置: /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出现错误失败(我再次解释):“无效参数。内核需要在重新启动时重新读取分区表”并建议使用partprobepartx(我试过但没有帮助)。

从下面的消息可以明显看出,该分区肯定已经损坏:

在此处输入图片描述

我应该怎么做才能修复这个分区,然后我可以做些什么来将 Arch Linux 安装到上面提到的 4 个分区上的这个分区上?

答案1

以下是我的理解(有些细节可能有点不对)

问题1)您正在使用分区而不是磁盘上的 fdisk。结果,fdisk 似乎破坏了该分区上的文件系统。

/dev/nvme0n1p5分区/dev/nvme0n1是磁盘吗(我相信/dev/nvme0是控制器,但我们不关心这个)

问题 2)我很确定每个磁盘只能有一个 efi 分区,并且它必须位于磁盘的开始处并采用 fat32 格式 [编辑/更正:你可以在一个磁盘上拥有多个 efi 分区,但仍然不推荐这样做。你可能想要使用现有的 efi 分区(你仍然可以设置启动优先级...如果你正确设置了所有内容(挂载到 /boot/efi),grub 应该会为你处理 efi 设置,而不会扰乱你的其他安装。

你有两种前进的方式:

选项1(我认为对于现有的分区来说风险更大)- 您可以使用类似的工具parted来缩小第 5 个分区,然后在未使用的空间中创建更多分区...这会对磁盘空间产生一些开销,而且您运行的非常严格...此外,一旦这些分区上有数据,调整它们的大小也会很麻烦。

选项 2(受到推崇的),只需在分区 5 上重建文件系统,然后使用子卷作为根、交换和主目录(以及您需要的其他任何内容)

我建议将分区 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 来引用这些卷,如下所示:

UUID=782d3829-b893-283h-ade9-d9a34da2084682 /boot/efi      vfat    umask=0077 0 2
UUID=346b428-b632-440f-abc3-a3dcefs12379983 /              btrfs   subvol=/@,defaults,noatime,compress=zstd,discard=async,ss
d 0 0
UUID=346b428-b632-440f-abc3-a3dcefs12379983 /home          btrfs   subvol=/@home,defaults,noatime,compress=zstd,discard=asyn
c,ssd 0 0

您也需要为您的交换创建一个条目 - 请参阅此处的示例https://askubuntu.com/questions/1206157/can-i-have-a-swapfile-on-btrfs

答案2

要使用 Linux 中的任何设备,您需要相应的设备节点(部分看起来像文件的特殊文件系统对象)。在发现过程中,内核会解析新发现的设备上的一个分区表,并调用udev创建相应的设备节点/dev(过去,系统管理员管理静止的/dev并手动创建这些节点)。

问题是,它只在基础设备上解析一次分区表。它不期望在发现的分区中存在任何类似的结构,也不会解析它们。通过“对分区进行分区”,您可以创建必要的结构,但这些结构对任何人都没有用。你正在做的事情根本行不通,我想它永远不会奏效,因为实际上没有人需要它。

(此外,我怀疑是否可以手动为“子分区”创建任何节点,因为没有这样的主/次对,内核会将其解释为“分区内的分区”。)

它们仍然有一些有限的用途;我想到的一件事是,你可以将一个分区转发到虚拟机中,在那里它将被视为一个完整的磁盘,因此虚拟机中的操作系统将要解释这个结构。

所以,你问的这个问题毫无意义。但你似乎在磁盘上使用 GPT,它允许多达 128 个分区。这已经足够了。不要犹豫,只需在基础设备上创建额外的分区:fdisk /dev/nvme0n1

另外,您不需要创建额外的 ESP。您可以创建,但它不会被使用。您已经有一个,在磁盘的开头/dev/nvme0n1p1

相关内容