难以置信:新创建的分区会自动格式化为 vfat 或 ext4,并标记为“uefi-boot”或“cloudimg-rootfs”

难以置信:新创建的分区会自动格式化为 vfat 或 ext4,并标记为“uefi-boot”或“cloudimg-rootfs”

在 Linux 服务器上,我使用 PXE 启动加载 ubuntu bionic,然后在本地磁盘上创建分区,令人难以置信的事情发生了,无论我使用什么工具(sgdisk、parted)创建分区,新创建的分区都会自动

  • 如果较小则格式化为 vfat
  • 如果较小则标记为“uefi-boot”,如果较小则标记为“cloudimg-rootfs”
root@:server1~# sgdisk /dev/sda --zap-all && partprobe /dev/sda && lsblk /dev/sda
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda    8:0    0  1.8T  0 disk

root@server1:~# parted /dev/sda mklabel gpt mkpart P1 ext3 1MiB 8MiB
Information: You may need to update /etc/fstab.

root@server1:~# partprobe /dev/sda && udevadm settle && lsblk /dev/sda && sh -c 'blkid /dev/sda*'
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  1.8T  0 disk
└─sda1   8:1    0    7M  0 part
/dev/sda: PTUUID="f6e23816-0f58-4fa1-88a7-9663274d21b4" PTTYPE="gpt"
/dev/sda1: LABEL="uefi-boot" UUID="CF08-DFE8" TYPE="vfat" PARTLABEL="P1" PARTUUID="e5a560cd-4f40-4771-a219-771f3ed061a1"

看到uefi-boot最后一行了吗?

如果我使用 sgdisk,也是一样,

root@server1:~# sgdisk /dev/sda --zap-all && partprobe /dev/sda && lsblk /dev/sda
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda    8:0    0  1.8T  0 disk

root@server1:~# sgdisk /dev/sda --new=3:4080:10000
Creating new GPT entries.
Information: Moved requested sector from 4080 to 2048 in
order to align on 2048-sector boundaries.
The operation has completed successfully.

root@server1:~# partprobe /dev/sda && udevadm settle && lsblk /dev/sda && sh -c 'blkid /dev/sda*'
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  1.8T  0 disk
└─sda3   8:3    0  3.9M  0 part
/dev/sda: PTUUID="4e2442b2-632a-43d5-9bf4-01d2fd21ce00" PTTYPE="gpt"
/dev/sda3: LABEL="uefi-boot" UUID="CF08-DFE8" TYPE="vfat" PARTUUID="7f564a33-855e-468f-a69e-1467974bb8df"

分区的起始位置和结束位置很重要,如果我指定的大小相当大,那么它就会变成“cloudimg-rootfs”标签,哇!

root@server1:~# sgdisk /dev/sda --zap-all && partprobe /dev/sda && lsblk /dev/sda
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda    8:0    0  1.8T  0 disk

root@server1:~# sgdisk /dev/sda --new=3:1052672:3749640191
Creating new GPT entries.
The operation has completed successfully.

root@server1:~# partprobe /dev/sda && udevadm settle && lsblk /dev/sda && sh -c 'blkid /dev/sda*'
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  1.8T  0 disk
└─sda3   8:3    0  1.8T  0 part
/dev/sda: PTUUID="dd1266c5-e82b-4027-a423-94d7acd5b0d5" PTTYPE="gpt"
/dev/sda3: LABEL="cloudimg-rootfs" UUID="b000940e-c4fa-46d5-83bf-6cbef593300e" TYPE="ext4" PARTUUID="3b5806e1-3789-4caa-807f-8b9c7257009b"

我已经确认在正常的Linux机器上不存在这个问题。

也许是因为一些 udev 规则,仍在检查。

有人有这个问题吗?

编辑:对于任何想尝试的人,请运行

sgdisk /dev/sda --zap-all && partprobe /dev/sda && lsblk /dev/sda
sgdisk /dev/sda --new=3:4080:10000
partprobe /dev/sda && udevadm settle && lsblk /dev/sda && sh -c 'blkid /dev/sda*'

EDIT2:最初,我发现 grub_bios 分区已自动格式化为 vfat,从而导致问题。所以我做了上述测试。

root@server1:~# blkid
/dev/loop0: TYPE="squashfs"
/dev/sda1: LABEL="uefi-boot" UUID="4DC8-5F56" TYPE="vfat" PARTLABEL="bios_grub" PARTUUID="5d073c88-54aa-4b75-9eb8-baf62cde6cbd"
/dev/sda2: LABEL="uefi-boot" UUID="A224-71F4" TYPE="vfat" PARTLABEL="efi" PARTUUID="9a315cf9-413f-406b-8830-373630d7ebba"
/dev/sda3: LABEL="cloudimg-rootfs" UUID="0a5121c4-256d-4a87-96e4-8b7ec5b8a2d5" TYPE="ext4" PARTLABEL="root" PARTUUID="6786acc3-20b9-4f07-881a-5ddb1dd38f7a"

答案1

这似乎并不太令人惊讶...

我希望您已经在此磁盘上拥有这两个文件系统,并且您实际上看到了它们。

不要忘记,像parted/ sgdisk/这样的工具fdisk只会编辑分区表,而不会触及磁盘的其余部分...当你“删除“分区(或分区表),你实际上只是删除了位置和大小分区,而不是擦除文件系统。

您从来没有打电话给过家人mkfs.*,因此在这种情况下我不会期望为您创建文件系统。


例如,磁盘统计信息如下:

初始磁盘布局、分区表和两个分区/文件系统

运行sgdisk /dev/sda --zap-all,你实际上做的就是清除分区表:

-Z,--zap-全部

删除(破坏)GPT 和 MBR 数据结构,然后退出。此选项的工作方式与 -z 非常相似,但由于它会清除 MBR 和 GPT,因此如果您想在使用此选项后重新分区磁盘,则此选项更合适;如果您已经重新分区了磁盘,则此选项完全不合适。

分区表消失了,但是数据仍然在磁盘上。

没有分区表,但两个文件系统仍然存在

当您随后再次创建分区时,如果它恰好与现有数据一致,那么您将能够像以前一样访问文件系统:

parted /dev/sda mklabel gpt mkpart P1 ext3 1MiB 8MiB

新的分区表,其中一个分区与现有文件系统对齐

笔记:新分区可能比文件系统小,在这种情况下指纹识别可能有效,但您可能无法挂载文件系统,或者在访问内容时遇到错误。相同大小或更大的分区将始终能够访问文件系统。


在您的第二个示例中,请注意,您的操作没有按您希望的方式完成 - 具体来说,您请求的 4080 起始扇区是改为 2048保持一致性……即:这个分区实际上是在同一个地方正如您给出的第一个例子一样。

root@server1:~# sgdisk /dev/sda --new=3:4080:10000 --typecode=3:ef02
Creating new GPT entries.
Information: Moved requested sector from 4080 to 2048 in
order to align on 2048-sector boundaries.
The operation has completed successfully.

尝试擦除磁盘的前~100MiB,然后再次尝试您的步骤:

dd if=/dev/zero of=/dev/sda bs=1M count=100

答案2

文件系统已经存在。您仅创建了一个指向它的分区表条目。

同样,您sgdisk /dev/sda --zap-all实际上并没有删除任何数据——只是删除了指针。如果您的新分区与旧分区的起始扇区完全相同,那么您也会发现完全相同的数据。

(请注意,blkid 命令每次都会报告相同的“UUID=”)。

您需要wipefs --all /dev/sda?*在删除分区之前使用类似的方法;这实际上仍然不会删除数据,但至少会破坏文件系统(使其无法识别)。

相关内容