使用 fdisk 检查磁盘并创建新的 Linux 分区
在这一步中,你将学习如何检查可用磁盘及其分区表。然后,你将使用 fdisk 工具(一个强大的命令行工具)在辅助磁盘上创建一个新分区。在现实场景中,修改分区时必须极其小心,因为错误的操作可能导致数据丢失。在本实验中,我们将在专用的虚拟磁盘 /dev/sdb 上操作,以确保主操作系统磁盘(/dev/sda)不受影响。
首先,让我们概览一下连接到系统的所有块设备(磁盘和分区)。lsblk 命令可以提供清晰的树状视图。
lsblk
输出将显示可用的磁盘,包括你的主系统磁盘(vda)和一个代表本实验虚拟磁盘的回环设备(loop13)。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
...
loop13 7:13 0 2G 0 loop
vda 252:0 0 40G 0 disk
├─vda1 252:1 0 1M 0 part
├─vda2 252:2 0 200M 0 part /boot/efi
└─vda3 252:3 0 39.8G 0 part /
请注意,该回环设备(通过符号链接可作为 /dev/sdb 访问)是一个 2GB 的虚拟磁盘,目前还没有分区。现在,让我们使用 fdisk 更详细地查看 /dev/sdb 的分区表。-l 选项会列出指定设备的分区表然后退出。由于 fdisk 需要 root 权限才能检查磁盘级信息,因此必须使用 sudo。
sudo fdisk -l /dev/sdb
输出提供了有关磁盘的详细信息,包括其大小、扇区和标识符。由于目前还没有分区,底部的设备列表将为空。
Disk /dev/sdb: 2 GiB, 2147483648 bytes, 4194304 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
注意:如果这是第一次使用该磁盘,你可能会看到有关创建新 DOS 磁盘标签(disklabel)的消息。
接下来,你将以交互模式启动 fdisk 来创建一个新分区。此过程涉及一系列单字母命令。运行以下命令开始管理 /dev/sdb:
sudo fdisk /dev/sdb
你现在已进入 fdisk 工具内部,由 Command (m for help): 提示符指示。请仔细执行以下步骤:
- 创建新分区: 输入
n 并按回车。
- 选择分区类型: 系统会要求你选择分区类型(主分区或扩展分区)。默认是主分区(
p),这正是我们需要的。按回车接受默认值。
- 选择分区编号: 默认是
1,因为这是第一个分区。按回车接受。
- 指定起始扇区: 默认值是磁盘上第一个可用扇区。这几乎总是正确的选择。按回车接受默认值。
- 指定结束扇区或大小: 与其计算扇区,不如指定一个易读的大小。让我们创建一个 500MB 的分区。输入
+500M 并按回车。
- 打印内存中的分区表: 在保存之前,查看你的更改是一个好习惯。输入
p 并按回车查看新的分区布局。你应该能看到一个新设备 /dev/sdb1。
- 将更改写入磁盘: 你所做的更改目前仅在内存中。要将它们保存到磁盘的分区表,输入
w 并按回车。这将写入更改并退出 fdisk。
以下是交互过程的摘要:
Welcome to fdisk (util-linux 2.37.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x54041549.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-4194303, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-4194303, default 4194303): +500M
Created a new partition 1 of type 'Linux' and of size 500 MiB.
Command (m for help): p
Disk /dev/sdb: 2 GiB, 2147483648 bytes, 4194304 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x54041549
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 1026047 1024000 500M 83 Linux
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Invalid argument
The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or partx(8).
写入分区表后,你可能会注意到一条消息,指出内核无法立即重新读取分区表。在处理回环设备时,这是正常现象。partprobe 命令会请求操作系统内核重新读取分区表。
sudo partprobe
现在,再次运行 lsblk 验证系统是否识别了新分区。
lsblk /dev/sdb
输出应显示回环设备及其新分区。由于回环设备的设置,分区将显示为 loop13p1:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop13 7:13 0 2G 0 loop
└─loop13p1 259:0 0 500M 0 part
由于分区显示为 loop13p1,但实验需要 /dev/sdb1 才能正常工作,我们需要为该分区创建一个符号链接。首先,让我们识别实际的分区设备:
PARTITION_DEVICE=$(lsblk -lno NAME /dev/sdb | grep p1 | head -1)
echo "Partition device: /dev/$PARTITION_DEVICE"
现在为该分区创建符号链接:
sudo ln -s /dev/$PARTITION_DEVICE /dev/sdb1
验证 /dev/sdb1 现在是否可用:
lsblk /dev/sdb1
输出现在应显示该分区可通过 /dev/sdb1 访问:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop13p1 259:0 0 500M 0 part
你已成功在 /dev/sdb 上创建了一个新的 500MB Linux 分区,并使其可通过 /dev/sdb1 访问。