我想做一些类似的事情
sudo fdisk /dev/sdb # create 2 partitions
sudo fdisk /dev/sdb1 # create 2 more
并最终得到类似的东西
[daffy@daffydesk ~]$ lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 27.8G 0 disk
└─sdb1 8:17 0 13.9G 0 part
└─sdb1p1 8:17 0 6.9G 0 part
└─sdb1p2 8:17 0 7.0G 0 part
└─sdb2 8:17 0 13.9G 0 part
这在理论上可能吗?
答案1
不,这是不可能的,因为操作系统不是这样解释分区和分区表的。这是因为这种方法根本不是很好,而且它也打破了关于分区结构的假设。
如果你只是想要更多的分区(按任意创建顺序)比 1983(!)MBR 方案允许的要多,您只需使用 GPT(只有 20 年,不到 40 年历史),它由现代固件本机支持(至少从 2010 年开始)。如果有更好的、到处受支持的替代方案,那么改变过时的方案是没有意义的²。
如果您确实想要划分块设备内的空间,设备映射器和 LVM 就是为此而设计的工具。因此,对于该用例,将 MBR 分区表放入 MBR 分区也是没有意义的。
这实际上有用的一种情况是,如果您想要获取一个分区并将其用作虚拟机的完整驱动器的映像。然后,您只需使用您提到的环回设备方法即可。 lsblk 是否将事物显示为分层并不重要,这只是一个显示事物。然而,实际上,人们也不会这样做。他们只使用驻留在普通文件系统(典型桌面使用)或块存储上的映像文件,通过 LVM 或网络存储(CEPH,...)进入。
1 在正确的 MBR 分区上的固定位置有一个卷引导记录,这会与您将 MBR 分区表放在那里发生冲突。然而,现代操作系统并不关心 VBR……但它们也不支持回溯 37 年前为 2MB 大小的硬盘设计的分区方案。
² 还有一点有趣的是,完全为特定硬件设计的东西(1983 年的 IBM PC)仍然是通用的分区方案全部平台,无论是具有 TB 磁盘的 x86_64 还是具有 4MB 闪存的 MIPS 路由器。