OpenC
OpenC
发布于 2024-09-07 / 52 阅读
0
0

fdisk的使用方法

fdisk 是一个功能强大的命令行工具,用于在 Linux 系统中操作磁盘分区表。它支持创建、删除、修改和查看磁盘分区,常用于手动配置硬盘。fdisk 适用于 MBR(主引导记录)和 GPT(GUID 分区表)分区格式的磁盘。本文将全面介绍 fdisk 的使用方法、常用选项、交互命令以及实际操作示例,帮助您深入理解并高效运用这一工具。


目录

  1. 什么是 fdisk
  2. 分区表类型概述
  3. fdisk 的安装与确认
  4. fdisk 命令的基本用法
  5. 常用选项详解
  6. fdisk 的交互命令
  7. 常见操作示例
  8. 操作前的准备与注意事项
  9. fdisk 与其他分区工具的比较
  10. 故障排查与解决方案
  11. 最佳实践与技巧
  12. 总结
  13. 附录:fdisk 命令快捷键与示例

1. 什么是 fdisk

fdisk 是一个用于操作 Linux 系统中磁盘分区表的命令行工具。它支持创建、删除、修改和查看磁盘分区,常用于手动配置硬盘。fdisk 适用于 MBR(主引导记录)和 GPT(GUID 分区表)分区格式的磁盘。通过 fdisk,用户可以灵活地管理硬盘分区,以满足不同的存储需求。

主要功能

  • 创建分区:根据需求划分磁盘空间,创建主分区、扩展分区和逻辑分区。
  • 删除分区:移除不再需要的分区,释放磁盘空间。
  • 修改分区:更改分区的类型、大小等属性。
  • 查看分区:列出磁盘的分区表信息,了解当前分区布局。

2. 分区表类型概述

在使用 fdisk 之前,了解磁盘的分区表类型至关重要。主要有两种分区表类型:MBR 和 GPT。

2.1 MBR(主引导记录)

特点

  • 历史悠久:MBR 是较早的分区表格式,广泛应用于传统的 BIOS 系统。
  • 限制
    • 最大分区数量:最多支持 4 个主分区,或 3 个主分区加一个扩展分区。
    • 最大磁盘容量:支持的最大磁盘容量为 2TB。
  • 兼容性:与旧版操作系统和 BIOS 固件兼容性更好。

适用场景

适用于容量较小、分区数量不多的磁盘,或在需要与旧系统兼容的情况下使用。

2.2 GPT(GUID 分区表)

特点

  • 现代化:GPT 是较新的分区表格式,设计用于替代 MBR,适应现代硬盘需求。
  • 优势
    • 分区数量:支持多达 128 个分区,远超 MBR。
    • 磁盘容量:支持超过 2TB 的大容量磁盘。
    • 冗余与备份:在磁盘头尾部存有备份分区表,提高数据安全性。
  • 兼容性:与 UEFI 固件配合使用,适用于现代操作系统。

适用场景

适用于大容量磁盘、需要创建多个分区或在 UEFI 系统中使用。


3. fdisk 的安装与确认

大多数 Linux 发行版默认安装了 fdisk 工具。您可以通过以下命令确认 fdisk 是否已安装:

which fdisk

如果已安装,该命令会返回 fdisk 的路径,例如 /sbin/fdisk

如果未安装,可以使用以下命令进行安装:

  • Debian/Ubuntu

    sudo apt-get update
    sudo apt-get install fdisk
    
  • CentOS/Fedora

    sudo yum install util-linux
    

    或者

    sudo dnf install util-linux
    

4. fdisk 命令的基本用法

fdisk 的基本语法如下:

fdisk [选项] <磁盘设备>

常见用法示例

操作 /dev/sda 磁盘:

sudo fdisk /dev/sda

常见磁盘设备名称

  • /dev/sda:第一个 SCSI 或 SATA 磁盘。
  • /dev/sdb:第二个 SCSI 或 SATA 磁盘。
  • /dev/nvme0n1:第一个 NVMe 磁盘。

注意:使用 fdisk 需要超级用户权限,因此通常需要在命令前加 sudo


5. 常用选项详解

fdisk 提供了多种选项,用于不同的操作场景。以下是一些常用选项的详细说明及示例。

5.1 -l:列出所有磁盘及其分区表信息

此选项用于显示系统中所有磁盘的分区表信息,包括每个磁盘的大小、分区数量、类型等。

命令示例

sudo fdisk -l

输出示例

Disk /dev/sda: 100 GB, 100000000000 bytes
255 heads, 63 sectors/track, 12158 cylinders, total 195312500 sectors
Units = sectors of 1 * 512 = 512 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    19531775     9764864   83  Linux
/dev/sda2        19531776    195312499    87890362   5  Extended

5.2 -u:以扇区为单位显示

默认情况下,fdisk 使用扇区(sectors)作为显示单位。通过 -u 选项,可以确保所有数值都以扇区为单位显示。

命令示例

sudo fdisk -lu /dev/sda

说明:在某些系统中,-u 选项可能已默认启用。

5.3 -n:非交互模式创建新分区

-n 选项允许在非交互模式下创建新分区,常用于脚本自动化操作。

命令示例

sudo fdisk -n /dev/sda

说明:需要结合其他选项和参数使用,具体操作较为复杂,通常建议使用交互模式。

5.4 -t:更改分区类型

-t 选项用于更改分区的文件系统类型。此选项适用于特定的设备和操作场景。

命令示例

sudo fdisk -t 83 /dev/sda1

说明:上例将 /dev/sda1 的分区类型更改为 83,表示 Linux 分区。

5.5 其他常用选项

  • -c:启用旧版兼容性(DOS兼容模式)。
  • -s:显示指定分区的大小。

示例

sudo fdisk -s /dev/sda1

说明:显示 /dev/sda1 分区的大小。


6. fdisk 的交互命令

在运行 fdisk 并指定磁盘设备后,会进入交互模式,显示一个提示符,等待用户输入命令。以下是常用的交互命令及其详细说明。

6.1 m:显示帮助菜单

输入 m 可以显示所有可用命令及其说明,帮助用户了解如何操作。

命令示例

Command (m for help): m

输出示例

Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the DOS compatibility flag
   d   delete a partition
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   h   show the help menu
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun partition table
   t   change a partition's system id
   u   toggle display of sectors and blocks
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

6.2 p:显示当前磁盘的分区表

使用 p 命令可以查看当前磁盘上已有的分区及其详细信息,包括分区号、起始扇区、结束扇区、大小、类型等。

命令示例

Command (m for help): p

输出示例

Disk /dev/sda: 100 GB, 100000000000 bytes
255 heads, 63 sectors/track, 12158 cylinders, total 195312500 sectors
Units = sectors of 1 * 512 = 512 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    19531775     9764864   83  Linux
/dev/sda2        19531776    195312499    87890362   5  Extended

6.3 n:创建新分区

使用 n 命令可以创建新分区。fdisk 会提示用户选择分区类型(主分区或扩展分区)、分区号、起始扇区和结束扇区。

命令示例

Command (m for help): n

交互示例

Command action
   e   extended
   p   primary partition

Select (default p): p
Partition number (1-4, default 2): 2
First sector (2048-195312499, default 19531776): 19531776
Last sector, +sectors or +size{K,M,G,T,P} (19531776-195312499, default 195312499): +10G

说明

  • 分区类型选择
    • p:创建主分区(primary partition)。
    • e:创建扩展分区(extended partition)。
  • 分区号:根据现有分区数量选择分区号,通常递增。
  • 起始扇区:建议使用默认值,确保分区对齐。
  • 结束扇区:可以指定具体扇区数或使用 +size 格式,如 +10G 表示分区大小为 10GB。

6.4 d:删除分区

使用 d 命令可以删除指定的分区。需要选择要删除的分区号。

命令示例

Command (m for help): d

交互示例

Partition number (1-4): 2

说明

  • 输入分区号后,fdisk 将删除该分区。
  • 删除分区不会删除分区内的数据,但删除后该数据将不再通过分区表访问。

6.5 t:更改分区类型

通过 t 命令可以更改某个分区的文件系统类型(类型 ID)。常用于设置分区用途,如 Linux 分区、Swap 分区等。

命令示例

Command (m for help): t

交互示例

Partition number (1-4): 1
Hex code (type L to list all codes): 82

说明

  • 分区号选择:输入要更改类型的分区号。
  • 类型 ID 输入:根据分区用途输入相应的十六进制代码,输入 L 可以列出所有支持的类型代码。

6.6 l:列出所有分区类型代码

使用 l 命令可以查看所有已知的分区类型代码及其描述,帮助用户选择正确的类型 ID。

命令示例

Command (m for help): l

输出示例

  0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
  1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec (FAT-
  2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
  3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden C: c6  DRDOS/sec (FAT-

说明

  • 列出的类型代码对应不同的文件系统和操作系统分区类型。
  • 选择合适的类型代码,可以确保分区在操作系统中的正确识别和使用。

6.7 w:保存分区表并退出

在完成分区操作后,输入 w 可以将更改写入磁盘并退出 fdisk

命令示例

Command (m for help): w

说明

  • 保存更改后,系统将根据新的分区表重新识别磁盘分区。
  • 此操作不可逆,请确保所有更改正确无误后再执行。

6.8 q:不保存退出

如果在操作过程中决定放弃所有更改,可以输入 q 退出 fdisk,不会保存任何更改。

命令示例

Command (m for help): q

说明

  • 所有未保存的更改将被撤销,磁盘分区保持原状。
  • 适用于误操作或决定取消分区更改的情况。

6.9 v:验证分区表

使用 v 命令可以检查当前分区表是否存在错误,帮助用户发现并修复潜在问题。

命令示例

Command (m for help): v

输出示例

Partition table entries are not in disk order!

说明

  • 如果存在错误,fdisk 会提示具体问题。
  • 根据提示,用户可以进一步调整分区表。

6.10 x:进入专家模式

x 命令用于进入专家模式,提供更高级的分区表操作功能,如手动修改分区的起始扇区、调整分区大小等。

命令示例

Command (m for help): x

说明

  • 专家模式下提供的命令较多,适用于高级用户和特定需求。
  • 操作需谨慎,避免误修改导致数据丢失。

7. 常见操作示例

以下是一些常见的 fdisk 操作示例,涵盖查看磁盘信息、创建分区、更改分区类型和删除分区等。

7.1 查看所有磁盘及其分区表

使用 -l 选项可以列出系统中所有磁盘及其分区信息,帮助用户了解当前磁盘布局。

命令示例

sudo fdisk -l

输出示例

Disk /dev/sda: 100 GB, 100000000000 bytes
255 heads, 63 sectors/track, 12158 cylinders, total 195312500 sectors
Units = sectors of 1 * 512 = 512 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    19531775     9764864   83  Linux
/dev/sda2        19531776    195312499    87890362   5  Extended

7.2 为 /dev/sdb 创建新分区

以下步骤演示如何使用 fdisk/dev/sdb 磁盘创建一个新的主分区。

步骤

  1. 启动 fdisk

    sudo fdisk /dev/sdb
    
  2. 输入 n 创建新分区

    Command (m for help): n
    
  3. 选择分区类型

    Partition type:
       p   primary (1 primary, 0 extended, 3 free)
       e   extended
    Select (default p): p
    
  4. 选择分区号

    Partition number (1-4, default 1): 1
    
  5. 指定起始扇区

    First sector (2048-195312499, default 2048): [按回车键选择默认]
    
  6. 指定结束扇区或分区大小

    Last sector, +sectors or +size{K,M,G,T,P} (2048-195312499, default 195312499): +20G
    
  7. 输入 w 保存更改并退出

    Command (m for help): w
    

结果

新创建的分区 /dev/sdb1 将有 20GB 大小,类型默认为 Linux 分区(ID 83)。

7.3 更改分区类型为 Linux Swap

/dev/sda2 分区类型更改为 Linux Swap(类型 ID 82)。

步骤

  1. 启动 fdisk

    sudo fdisk /dev/sda
    
  2. 输入 t 更改分区类型

    Command (m for help): t
    
  3. 选择分区号

    Partition number (1-4): 2
    
  4. 输入新的类型代码 82

    Hex code (type L to list all codes): 82
    
  5. 输入 w 保存更改并退出

    Command (m for help): w
    

结果

分区 /dev/sda2 的类型将被更改为 Linux Swap,适用于系统交换空间。

7.4 删除分区

删除 /dev/sdb1 分区。

步骤

  1. 启动 fdisk

    sudo fdisk /dev/sdb
    
  2. 输入 d 删除分区

    Command (m for help): d
    
  3. 选择分区号

    Partition number (1-4): 1
    
  4. 输入 w 保存更改并退出

    Command (m for help): w
    

结果

分区 /dev/sdb1 将被删除,释放出相应的磁盘空间。


8. 操作前的准备与注意事项

在使用 fdisk 进行磁盘分区操作前,务必做好以下准备和注意事项,以确保数据安全和操作顺利。

8.1 数据备份

  • 重要性:磁盘分区操作具有潜在风险,可能导致数据丢失。
  • 建议:在进行任何分区操作前,备份重要数据至外部存储设备或云端。

8.2 确认磁盘设备

  • 查看磁盘列表

    lsblk
    

    sudo fdisk -l
    
  • 确保选择正确的磁盘设备,避免误操作导致数据损失。

8.3 小心操作

  • 逐步执行:按照步骤谨慎操作,避免跳过关键步骤。
  • 验证更改:在保存更改前,仔细检查分区表,确保所有设置正确。
  • 了解命令含义:确保理解每个命令的作用,避免误用。

9. fdisk 与其他分区工具的比较

虽然 fdisk 是一个强大的分区工具,但在不同的使用场景下,其他工具可能更为适用。以下是 fdisk 与常见分区工具的比较。

fdisk vs parted

  • fdisk

    • 适用范围:主要用于 MBR 和 GPT 分区表,但在处理 GPT 时功能有限。
    • 交互性:交互式命令行工具,适合手动操作。
    • 优势:简单直观,适合基础分区操作。
  • parted

    • 适用范围:全面支持 GPT 分区表,适用于处理大容量磁盘。
    • 功能丰富:支持调整分区大小、移动分区等高级操作。
    • 脚本友好:支持命令行参数,适合自动化脚本。

选择建议

  • 基础分区操作:使用 fdisk
  • 高级分区管理:使用 parted

fdisk vs gdisk

  • gdisk
    • 专为 GPT 设计:全面支持 GPT 分区表,提供比 fdisk 更强大的 GPT 管理功能。
    • 用户界面:类似于 fdisk,但专注于 GPT。
    • 优势:适合需要高级 GPT 操作的用户。

选择建议

  • 处理 GPT 分区:优先使用 gdisk
  • 处理 MBR 分区:使用 fdisk

10. 故障排查与解决方案

在使用 fdisk 进行磁盘分区操作时,可能会遇到各种问题。以下是常见问题及其解决方案。

10.1 无法写入分区表

症状

  • 执行 w 命令后,fdisk 报错,无法保存分区表。

原因

  • 磁盘被挂载或正在使用,导致分区表无法修改。
  • 缺少超级用户权限。

解决方案

  1. 卸载磁盘

    • 确保磁盘上的所有分区都已卸载。
    sudo umount /dev/sda1
    
  2. 以超级用户权限运行

    • 使用 sudo 提升权限。
    sudo fdisk /dev/sda
    
  3. 关闭相关服务

    • 某些服务可能正在使用磁盘,需先停止这些服务。

10.2 分区创建后系统无法识别

症状

  • 创建新分区后,系统未能正确识别或挂载该分区。

原因

  • 分区表未刷新。
  • 文件系统未创建。
  • 内核未重新读取分区表。

解决方案

  1. 刷新分区表

    • 退出 fdisk 并重新运行,或使用 partprobe 刷新。
    sudo partprobe /dev/sda
    
  2. 创建文件系统

    • 在新分区上创建文件系统,如 ext4
    sudo mkfs.ext4 /dev/sda3
    
  3. 挂载分区

    • 创建挂载点并挂载分区。
    sudo mkdir /mnt/new_partition
    sudo mount /dev/sda3 /mnt/new_partition
    

10.3 fdisk 报错信息解析

常见报错及含义

  • "Device doesn't contain a valid partition table"

    • 磁盘没有分区表或分区表损坏。
    • 解决方案:使用 o 命令创建新的 DOS 分区表,或 g 创建 GPT 分区表。
  • "WARNING: Invalid 'start sector'"

    • 分区起始扇区不正确,可能与现有分区冲突。
    • 解决方案:重新指定正确的起始扇区,避免重叠。
  • "Error opening device: Permission denied"

    • 没有足够权限操作磁盘设备。
    • 解决方案:使用 sudo 提升权限。

11. 最佳实践与技巧

为了确保使用 fdisk 进行分区操作的安全性和高效性,以下是一些最佳实践与实用技巧。

11.1 使用标签(Labels)

为分区添加标签(label)可以方便识别和管理。

步骤

  1. 创建分区时指定标签

    Command (m for help): n
    [创建分区步骤]
    Command (m for help): t
    Partition number (1-4): 1
    Hex code (type L to list all codes): 83
    Command (m for help): c
    
  2. 在文件系统创建时使用标签

    • ext4

      sudo mkfs.ext4 -L mydata /dev/sda1
      
    • NTFS

      sudo mkfs.ntfs -f -L mydata /dev/sda1
      

说明

  • 标签可以在挂载时通过 /etc/fstab 使用,提升挂载点的可读性。

11.2 结合 lsblkblkid 使用

  • lsblk:列出所有块设备及其分区信息,提供分区树状图。

    lsblk
    
  • blkid:显示块设备的属性,如 UUID、标签和文件系统类型。

    sudo blkid
    

示例

lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 100G  0 disk 
├─sda1        8:1    0 10G   0 part /mnt/data
└─sda2        8:2    0 90G   0 part
sudo blkid
/dev/sda1: UUID="1234-5678" TYPE="ext4" PARTLABEL="Linux filesystem" PARTUUID="abcd-efgh"
/dev/sda2: UUID="8765-4321" TYPE="swap" PARTLABEL="Linux swap" PARTUUID="hgfedc-ba"

优势

  • 结合使用可以更全面地了解磁盘分区的状态和属性,便于后续操作。

11.3 自动化分区脚本

对于需要重复执行的分区任务,可以编写脚本自动化操作,减少手动输入错误。

示例脚本(创建一个新的分区并格式化为 ext4):

#!/bin/bash

DISK="/dev/sdb"
PART_NUM=1
START=2048
SIZE="+20G"
TYPE="83"

# 创建分区
echo -e "n\np\n$PART_NUM\n$START\n$SIZE\nt\n$PART_NUM\n$TYPE\nw" | sudo fdisk $DISK

# 等待分区表刷新
sudo partprobe $DISK

# 格式化分区
sudo mkfs.ext4 -L mydata ${DISK}${PART_NUM}

echo "分区已创建并格式化为 ext4"

说明

  • 使用 echofdisk 的交互命令,通过管道将命令传递给 fdisk,实现自动化操作。
  • 适用于批量部署和配置服务器环境。

注意

  • 务必确认磁盘设备,避免误操作导致数据丢失。
  • 脚本测试:在非生产环境中测试脚本,确保其行为符合预期。

12. 总结

fdisk 是一个强大且灵活的磁盘分区工具,广泛应用于 Linux 系统的磁盘管理中。通过本文的详细介绍,您已经了解了 fdisk 的基本用法、常用选项、交互命令及其实际操作示例。同时,掌握了分区表类型的区别、最佳实践以及故障排查技巧,能够更加安全高效地管理系统磁盘分区。

关键要点

  • 分区表类型:了解 MBR 和 GPT 的区别,选择适合的分区表类型。
  • 基本操作:掌握创建、删除、修改和查看分区的基本命令。
  • 交互命令:熟悉 fdisk 的交互式命令,灵活应用于各种操作场景。
  • 最佳实践:提前备份数据、确认磁盘设备、谨慎操作,确保数据安全。
  • 自动化与优化:结合其他工具和脚本,实现高效的分区管理。

通过不断的实践和应用,您将能够熟练运用 fdisk 完成各类磁盘分区任务,提升系统管理和维护的能力。


13. 附录:fdisk 命令快捷键与示例

以下是一些常用的 fdisk 交互命令快捷键及其示例,方便快速查阅和使用。

13.1 列出所有磁盘及其分区表

sudo fdisk -l

13.2 启动 fdisk 并操作指定磁盘

sudo fdisk /dev/sda

13.3 创建新的主分区

  1. 启动 fdisk

    sudo fdisk /dev/sda
    
  2. 输入 n

    Command (m for help): n
    
  3. 选择 p(主分区):

    Partition type:
       p   primary (1 primary, 0 extended, 3 free)
       e   extended
    Select (default p): p
    
  4. 输入分区号(如 3):

    Partition number (1-4, default 3): 3
    
  5. 使用默认起始扇区,指定大小(如 +5G):

    First sector (xxxx-xxxx, default xxxx): [按回车键]
    Last sector, +sectors or +size{K,M,G,T,P} (xxxx-xxxx, default xxxx): +5G
    
  6. 输入 w 保存并退出:

    Command (m for help): w
    

13.4 更改分区类型为 Windows NTFS

  1. 启动 fdisk

    sudo fdisk /dev/sda
    
  2. 输入 t

    Command (m for help): t
    
  3. 选择分区号(如 3):

    Partition number (1-4): 3
    
  4. 输入类型代码 7(HPFS/NTFS/exFAT):

    Hex code (type L to list all codes): 7
    
  5. 输入 w 保存并退出:

    Command (m for help): w
    

13.5 删除最后一个分区

  1. 启动 fdisk

    sudo fdisk /dev/sda
    
  2. 输入 d

    Command (m for help): d
    
  3. 输入分区号(如 3):

    Partition number (1-4): 3
    
  4. 输入 w 保存并退出:

    Command (m for help): w
    

注意:删除分区后,该分区上的所有数据将无法访问,务必确保数据已备份。

13.6 创建新的 GPT 分区表

  1. 启动 fdisk

    sudo fdisk /dev/sda
    
  2. 输入 g 创建新的 GPT 分区表:

    Command (m for help): g
    
  3. 输入 w 保存并退出:

    Command (m for help): w
    

说明:此操作将删除现有的 MBR 分区表,创建一个新的 GPT 分区表。

13.7 验证分区表

  1. 启动 fdisk

    sudo fdisk /dev/sda
    
  2. 输入 v 验证分区表:

    Command (m for help): v
    

输出示例

Disk /dev/sda: 100 GB, 100000000000 bytes
255 heads, 63 sectors/track, 12158 cylinders, total 195312500 sectors
Units = sectors of 1 * 512 = 512 bytes

Disklabel type: gpt
Disk identifier: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

Device         Start         End     Sectors     Size Type
/dev/sda1       2048     1050623     1048576   512M EFI System
/dev/sda2    1050624    195312499    194261876  92.9G Linux filesystem

说明

  • 如果分区表存在问题,fdisk 会提示具体错误信息。
  • 根据提示,用户可以进一步调整分区设置。

以上教程能够更全面、深入地理解和使用 fdisk 工具进行磁盘分区管理。请务必在操作前做好数据备份,谨慎执行每一步命令,以确保系统和数据的安全。


评论