在使用parted创建分区时,我们经常遇到这样的命令:
parted /dev/sdb mkpart primary ext4 1MiB 100MiB
这引出了一个关键问题:为什么parted在创建分区时需要指定文件系统类型?这个参数与实际创建文件系统(如mkfs.ext4)有什么区别?
分区类型是一个元数据标识,存储在分区表中,用于描述该分区的预期用途。它是一个"提示"或"标签",告诉操作系统这个分区可能被用于什么目的。
常见的分区类型代码:
0x83
: Linux原生文件系统(ext2/3/4、xfs、btrfs等)0x07
: Microsoft兼容文件系统(NTFS、FAT32、exFAT)0x82
: Linux交换空间(swap)0x8e
: Linux LVM物理卷0xef
: EFI系统分区文件系统是实际的数据组织结构,负责管理文件、目录、权限、元数据等。它是构建在分区之上的逻辑层。
关键区别:
特性 | 分区类型 | 文件系统 |
---|---|---|
存储位置 | 分区表 | 分区内部 |
作用 | 标识和提示 | 实际数据管理 |
修改工具 | parted/fdisk | mkfs系列 |
是否必须 | 否 | 是(如需存储文件) |
当在parted中指定文件系统类型时,parted会自动选择合适的分区类型代码:
# parted mkpart命令的文件系统参数映射
ext2 → 0x83 (Linux)
ext3 → 0x83 (Linux)
ext4 → 0x83 (Linux)
ntfs → 0x07 (HPFS/NTFS/exFAT)
fat32 → 0x0b (W95 FAT32)
linux-swap → 0x82 (Linux swap)
这个参数主要是为了向后兼容旧的工具链:
在自动化脚本中,可以一次性完成"分区创建+类型标记",而不需要后续再用fdisk等工具修改分区类型。
让我们通过一个完整的例子来理解整个过程:
# 步骤1: 创建分区(指定文件系统类型参数)
sudo parted /dev/sdb mkpart primary ext4 1MiB 1GiB
# 此时:
# - 分区/dev/sdb1已创建
# - 分区类型自动设置为0x83 (Linux)
# - 但文件系统尚未创建!
# 步骤2: 实际创建文件系统(完全独立的步骤)
sudo mkfs.ext4 /dev/sdb1
# 步骤3: 验证
sudo parted /dev/sdb print # 查看分区类型
sudo blkid /dev/sdb1 # 查看实际文件系统类型
文件系统的创建确实是一个完全独立和正交的步骤。 这意味着:
blkid
、lsblk
等工具直接读取文件系统元数据,而不是依赖分区类型代码一个分区可以有一个类型。分区类型是一种提示,就像 "这个分区被指定用于某种功能"。许多分区类型与某些文件系统有关,尽管这种联系并不总是严格或明确的。你可以期望0x07类型的分区有一个微软兼容的文件系统(如FAT、NTFS或exFAT),0x83类型的分区有一个本地Linux文件系统(如ext2/3/4)。
文件系统的创建确实是一个完全独立和正交的步骤(你可以把任何文件系统放在你想放的地方--只是不要期望开箱就能工作)。
parted将分区定义为 "整个磁盘的一个部分"。它实际上不需要知道分区的类型(该参数是可选的)。然而,在使用中,如果分区类型没有正确地提示文件系统,那么文件系统的自动检测和此后的自动挂载可能无法正常工作。
分区是一块严格意义上的线性存储空间。它和它的变种创建了文件系统,所以你可以有你的实际目录树,你可以方便地将你的命名文件存储在其中。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。