在 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?*
在删除分区之前使用类似的方法;这实际上仍然不会删除数据,但至少会破坏文件系统(使其无法识别)。