常见的硬件设备及其文件名称
| 硬件设备 | 文件名称 |
|---|---|
| IDE设备 | /dev/hd[a-d] |
| SCSI/SATA/U盘 | /dev/sd[a-p] |
| 软驱 | /dev/fd[0-1] |
| 打印机 | /dev/lp[0-15] |
| 光驱 | /dev/cdrom |
| 鼠标 | /dev/mouse |
| 磁带机 | /dev/st0或/dev/ht0 |

fdisk命令
在Linux系统中,管理硬盘设备最常用的方法就当属fdisk命令了。fdisk命令用于管理磁盘分区,格式为“fdisk [磁盘名称]”,它提供了集添加、删除、转换分区等功能于一身的“一站式分区服务”。
fdisk命令中的参数以及作用
| 参数 | 作用 |
|---|---|
| m | 查看全部可用的参数 |
| n | 添加新的分区 |
| d | 删除某个分区信息 |
| l | 列出所有可用的分区类型 |
| t | 改变某个分区的类型 |
| p | 查看分区表信息 |
| w | 保存并退出 |
| q | 不保存直接退出 |
案例需求:
添加一块硬盘,需要将其分区,最终需要使用2G空间。
案例思路
增加一块20G硬盘
使用fdisk命令进行分区
格式化指定分区
创建一个空的目录作为挂载点
挂载使用
创建新的挂载点
挂载使用




#步骤:
#1. 增加硬盘
# 增加完硬盘记得重启系统
# lsblk 查看硬盘是否添加成功
[root@zuolaoshi ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 512M 0 part /boot
├─sda2 8:2 0 3.5G 0 part [SWAP]
└─sda3 8:3 0 36G 0 part /
sdb 8:16 0 20G 0 disk
sr0 11:0 1 4.4G 0 rom
[root@zuolaoshi ~]# fdisk -l /dev/sdb
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
2. 使用fdisk命令分区
[root@zuolaoshi ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.32.1)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
设备不包含可识别的分区表。
创建了一个磁盘标识符为 0x0c7799c3 的新 DOS 磁盘标签。
命令(输入 m 获取帮助):p
Disk /dev/sdb:20 GiB,21474836480 字节,41943040 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0c7799c3
命令(输入 m 获取帮助):n
分区类型
p 主分区 (0个主分区,0个扩展分区,4空闲)
e 扩展分区 (逻辑分区容器)
选择 (默认 p):p
分区号 (1-4, 默认 1): 1
第一个扇区 (2048-41943039, 默认 2048): 此处敲击回车
上个扇区,+sectors 或 +size{K,M,G,T,P} (2048-41943039, 默认 41943039): +1G
创建了一个新分区 1,类型为“Linux”,大小为 1 GiB。
命令(输入 m 获取帮助):p
Disk /dev/sdb:20 GiB,21474836480 字节,41943040 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x80e196f2
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sdb1 2048 2099199 2097152 1G 83 Linux
命令(输入 m 获取帮助):n
分区类型
p 主分区 (1个主分区,0个扩展分区,3空闲)
e 扩展分区 (逻辑分区容器)
选择 (默认 p):p
分区号 (2-4, 默认 2): 2
第一个扇区 (2099200-41943039, 默认 2099200): 此处敲击回车
上个扇区,+sectors 或 +size{K,M,G,T,P} (2099200-41943039, 默认 41943039): +1G
创建了一个新分区 2,类型为“Linux”,大小为 1 GiB。
命令(输入 m 获取帮助):p
Disk /dev/sdb:20 GiB,21474836480 字节,41943040 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x80e196f2
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sdb1 2048 2099199 2097152 1G 83 Linux
/dev/sdb2 2099200 4196351 2097152 1G 83 Linux
命令(输入 m 获取帮助):w
分区表已调整。
将调用 ioctl() 来重新读分区表。
正在同步磁盘。
3. 再次查看分区情况
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 512M 0 part /boot
├─sda2 8:2 0 3.5G 0 part [SWAP]
└─sda3 8:3 0 36G 0 part /
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 1G 0 part
└─sdb2 8:18 0 1G 0 part
sr0 11:0 1 4.4G 0 rom
4. 刷新分区表信息
[root@zuolaoshi ~]# partprobe /dev/sdb
5. 格式化分区
[root@zuolaoshi ~]# mkfs.xfs /dev/sdb1
[root@zuolaoshi ~]# mkfs.ext4 /dev/sdb2
6. 创建新的挂载点
[root@zuolaoshi ~]# mkdir /u01
[root@zuolaoshi ~]# mkdir /u02
7. 挂载使用
[root@zuolaoshi ~]# mount /dev/sdb1 /u01
[root@zuolaoshi ~]# mount /dev/sdb2 /u02
8. 查看使用情况
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 900M 0 900M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 9.6M 901M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sda3 36G 2.5G 34G 7% /
/dev/sda1 509M 138M 371M 28% /boot
tmpfs 182M 0 182M 0% /run/user/0
/dev/sdb1 1014M 33M 982M 4% /u01
/dev/sdb2 976M 2.6M 907M 1% /u02
SWAP(交换)分区是一种通过在硬盘中预先划分一定的空间,然后将把内存中暂时不常用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术,其设计目的是为了解决真实物理内存不足的问题。 但由于交换分区毕竟是通过硬盘设备读写数据的,速度肯定要比物理内存慢,所以只有当真实的物理内存耗尽后才会调用交换分区的资源。 交换分区的创建过程与前文讲到的挂载并使用存储设备的过程非常相似。 在对/dev/sdb存储设备进行分区操作前,有必要先说一下交换分区的划分建议:在生产环境中,交换分区的大小一般为真实物理内存的1.5~2倍,为了让大家更明显地感受交换分区空间的变化,这里取出一个大小为5GB的主分区作为交换分区资源。在分区创建完毕后保存并退出即可:
[root@zuolaoshi ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.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
Building a new DOS disklabel with disk identifier 0xb3d27ce1.
Command (m for help): n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): p
分区号 (3,4,默认 3):
First sector (4196352-41943039, default 4196352): 此处敲击回车
Using default value 4196352
Last sector, +sectors or +size{K,M,G} (4196352-41943039, default 41943039): +5G
Partition 2 of type Linux and of size 5 GiB is set
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 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
Disk label type: dos
Disk identifier: 0xb0ced57f
Device Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 14682111 5242880 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
使用SWAP分区专用的格式化命令mkswap,对新建的主分区进行格式化操作:
[root@zuolaoshi ~]# mkswap /dev/sdb3
Setting up swapspace version 1, size = 5242876 KiB
no label, UUID=2972f9cb-17f0-4113-84c6-c64b97c40c75
使用swapon命令把准备好的SWAP分区设备正式挂载到系统中。我们可以使用free -m命令查看交换分区的大小变化(由2047MB增加到7167MB):
[root@zuolaoshi ~]# free -m
total used free shared buffers cached
Mem: 1483 782 701 9 0 254
-/+ buffers/cache: 526 957
Swap: 2047 0 2047
[root@linuxprobe ~]# swapon /dev/sdb3
[root@linuxprobe ~]# free -m
total used free shared buffers cached
Mem: 1483 785 697 9 0 254
-/+ buffers/cache: 530 953
Swap: 7167 0 7167
为了能够让新的交换分区设备在重启后依然生效,需要按照下面的格式将相关信息写入到配置文件中,并记得保存:
[root@zuolaoshi ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed May 4 19:26:23 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=e7acdca9-177e-485e-acd1-63a7c14e7c44 / xfs defaults 0 0
UUID=a70d81c1-e12e-41bd-900c-436c77c5f1bd /boot xfs defaults 0 0
UUID=f108de69-644d-4a6a-80a5-8d5e73213060 swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
/dev/sdb1 /u01 xfs defaults 0 0
/dev/sdb2 /u02 ext4 defaults 0 0
/dev/sdb3 swap swap defaults 0 0
字段定义
/etc/fstab 文件包含了如下字段,通过空格或 Tab 分割:
<file system> <dir> <type> <options> <dump> <pass>
<file system> - 要挂载的分区或存储设备。
<dir> - <file system> 的挂载位置。
<type> - 要挂载设备伙食分区的文件系统类型,支持许多种不同的文件系统:ext2,ext3,ext4,reiserfs,xfs,jfs,smbfs,iso9660,vfat,ntfs,swap 及 auto。设置成 auto 类型,mount 命令会猜测使用的文件系统类型,对 CDROM 和 DVD 等移动设备是非常有用的。
<options> - 挂载时使用的参数,注意有些 mount 参数是特定文件系统才有的。一些比较常见的参数有:
> auto - 在启动时或键入了 mount -a 命令是自动挂载。
> noauto - 只在你的命令下被挂载。
> exec - 允许执行此分区的二进制文件。
> noexec - 不允许执行此文件系统上的二进制文件。
> ro - 以只读模式挂载文件系统。
> rw - 以读写模式挂载文件系统。
> user - 允许任意用户挂载此文件系统,若无显示定义,隐含启用 noexec,nosuid,nodev 参数。
> users - 允许所有 users 组中的用户挂载文件系统。
> nousers - 只能被 root 挂载。
> owner - 允许设备所有者挂载。
> sync - I/O 同步进行。
> async - I/O 异步进行。
> dev - 解析文件系统上的块特殊设备。
> nodev - 不解析文件系统上的块特殊设备。
> suid - 允许 suid 操作和设定 sgid 位。这一参数通常用于一些特殊任务,使一般用户运行程序临时提升权 限。
> nosuid - 禁止 suid 操作和设定 sgid 位。
> noatime - 不更新文件系统上 inode 访问记录,可以提升性能(参见 atime 参数)。
> nodiratime - 不更新文件系统上的目录 inode 访问记录,可以提升性能(参见 atime 参数)。
> relatime - 实时更新 inode access 记录。只有在记录中的访问时间早于当前访问才会被更新。(与 noatime 相似,但不会打断 mutt 或其他程序探测文件在上次访问后是否被修改的进程。),可以提升性能(参见 atime 参数)。
> flush - vfat 的选项,更频繁的刷新数据,复制对话框或进度条在全部数据都写入后才消失。
> defaults - 使用文件系统的默认挂载参数,例如 ext4 的默认参数为:rw,suid,dev,exec,auto, nouser,async。
<dump> - dump 工具通过它决定何时做备份,dump 会检查其内容,并用数字来决定是否对这个文件系统进行备份。允许的数字是 0 和 1。0 标识忽略,1 则进行备份。大部分的用户是没有安装 dump 的,对他们而言 <dump> 应设为 0。
<pass> - fsck 读取 <pass> 的数值来决定需要检查的文件系统的检查顺序。允许的数字是 0 ,1 和 2。根目录应当获得最高的优先权 1,其它所有需要被检查的设备设置为 2。0 表示设备不会被 fsck 所检查。
在Linux系统中存在硬链接和软连接两种文件。
硬链接(hard link):可以将它理解为一个“指向原始文件inode的指针”,系统不为它分配独立的inode和文件。所以,硬链接文件与原始文件其实是同一个文件,只是名字不同。我们每添加一个硬链接,该文件的inode连接数就会增加1;而且只有当该文件的inode连接数为0时,才算彻底将它删除。换言之,由于硬链接实际上是指向原文件inode的指针,因此即便原始文件被删除,依然可以通过硬链接文件来访问。需要注意的是,由于技术的局限性,我们不能跨分区对目录文件进行链接。
软链接(也称为符号链接[symbolic link]):仅仅包含所链接文件的路径名,因此能链接目录文件,也可以跨越文件系统进行链接。但是,当原始文件被删除后,链接文件也将失效,从这一点上来说与Windows系统中的“快捷方式”具有一样的性质。
ln命令
ln命令用于创建链接文件,格式为“ln [选项] 目标”。
| 参数 | 作用 |
|---|---|
| -s | 创建“符号链接”(如果不带-s参数,则默认创建硬链接) |
| -f | 强制创建文件或目录的链接 |
| -i | 覆盖前先询问 |
| -v | 显示创建链接的过程 |
[root@zuolaoshi ~]# echo "Welcome to zuolaoshi.cn" > readme.txt
[root@zuolaoshi ~]# ln -s readme.txt readit.txt
[root@zuolaoshi ~]# cat readme.txt
Welcome to zuolaoshi.com
[root@zuolaoshi ~]# cat readit.txt
Welcome to zuolaoshi.com
[root@zuolaoshi ~]# ls -l readme.txt
-rw-r--r-- 1 root root 26 Jan 11 00:08 readme.txt
[root@zuolaoshi ~]# rm -f readme.txt
[root@zuolaoshi ~]# cat readit.txt
cat: readit.txt: No such file or directory
接下来针对一个原始文件创建一个硬链接,即相当于针对原始文件的硬盘存储位置创建了一个指针,这样一来,新创建的这个硬链接就不再依赖于原始文件的名称等信息,也不会因为原始文件的删除而导致无法读取。同时可以看到创建硬链接后,原始文件的硬盘链接数量增加到了2。
[root@zuolaoshi ~]# echo "Welcome to zuolaoshi.cn" > readme.txt
[root@zuolaoshi ~]# ln readme.txt readit.txt
[root@zuolaoshi ~]# cat readme.txt
Welcome to zuolaoshi.cn
[root@zuolaoshi ~]# cat readit.txt
Welcome to zuolaoshi.cn
[root@zuolaoshi ~]# ls -l readme.txt
-rw-r--r-- 2 root root 26 Jan 11 00:13 readme.txt
[root@zuolaoshi ~]# rm -f readme.txt
[root@zuolaoshi ~]# cat readit.txt
Welcome to zuolaoshi.cn
Linux 下磁盘分区大于 2TB 必须放弃传统的 MBR 分区表,改用GPT 分区表才能支持。
- 核心原因:分区表的容量限制
- 传统的 MBR(Master Boot Record)分区表存在天然瓶颈,这是导致 2TB 限制的根本原因。
- MBR 的局限:MBR 分区表最多支持 4 个主分区,且单个磁盘容量上限为 2TB。这是由其 32 位寻址空间决定的,无法识别超过 2TB 的磁盘空间。
- GPT 的优势:GPT(GUID Partition Table)分区表采用 64 位寻址,理论上支持的磁盘容量可达 18EB(1EB=1024PB=1048576TB),完全满足大磁盘需求,同时还支持更多分区(最多 128 个主分区)。
gdisk(全称GPT fdisk)是Linux下专门用于管理GPT分区表的命令行工具,操作逻辑与传统的fdisk(用于MBR分区表)高度一致,适合习惯fdisk的用户快速上手。它专注于GPT分区的创建、删除、修改等操作,支持大容量磁盘(>2TB),并提供分区表检查和修复功能。
一、基本语法与启动
gdisk的核心用法是通过指定磁盘设备进入交互模式,语法如下:
gdisk [选项] 磁盘设备名
- 磁盘设备名:如
/dev/sdb(SATA/SCSI磁盘)、/dev/vdb(虚拟化磁盘)、/dev/nvme0n1(NVMe磁盘)等,需替换为实际目标磁盘(注意:避免误操作系统盘,通常是/dev/sda)。 - 常用选项:
-l(列出磁盘分区表信息,非交互模式),例如:
gdisk -l /dev/sdb # 查看/dev/sdb的GPT分区表信息
进入交互模式(最常用方式):
gdisk /dev/sdb # 直接对/dev/sdb进行GPT分区操作
进入后会显示类似如下提示,等待输入命令:
GPT fdisk (gdisk) version 1.0.8
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries.
Command (? for help): # 此处输入命令
二、核心交互命令详解
在gdisk交互模式中,输入命令后按回车执行,通过?可查看所有命令帮助。以下是最常用的核心命令:
| 命令 | 功能描述 | 操作示例 |
|---|---|---|
o |
创建新的GPT分区表(会清除磁盘所有现有分区和数据,谨慎使用) | 输入o后,确认提示输入Y,即可初始化GPT分区表 |
n |
新建分区 | 见下方详细步骤 |
p |
打印当前分区表信息(包括分区号、起始/结束扇区、大小、类型等) | 输入p,会显示所有分区的详细信息 |
d |
删除分区 | 输入d后,按提示输入要删除的分区号(如1),即可删除对应分区 |
t |
修改分区类型(通过分区类型代码指定) | 输入t→输入分区号→输入类型代码(如8200表示swap) |
w |
保存所有修改并退出(此操作会真正写入磁盘,生效修改) | 输入w后,确认提示输入Y,完成操作并退出 |
q |
放弃所有修改并退出(不保存任何操作) | 输入q,直接退出,所有未保存的修改会丢弃 |
重点命令:n(新建分区)详细步骤
创建分区是gdisk最核心的操作,输入n后需按提示依次设置4个参数,示例如下:
Command (? for help): n # 输入n,开始创建分区
Partition number (1-128, default 1): 1 # 分区号(1-128,默认按顺序分配,直接回车即可)
First sector (34-209715166, default = 2048) or {+-}size{KMGTP}: 2048 # 起始扇区(默认2048,建议保持,用于对齐)
Last sector (2048-209715166, default = 209715166) or {+-}size{KMGTP}: +5T # 结束扇区(指定分区大小,+5T表示5TB,直接回车用剩余空间)
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 8300 # 分区类型代码(默认8300,Linux文件系统,直接回车)
- 分区号:GPT最多支持128个主分区,默认从1开始递增,直接回车即可。
- 起始扇区:默认
2048(对齐到4KB扇区,提升磁盘性能),不建议修改(除非特殊需求)。 - 结束扇区:通过
+大小指定分区容量(单位支持K、M、G、T、P),例如+100G(100GB)、+2T(2TB);直接回车则占用磁盘剩余全部空间。 - 分区类型代码:通过十六进制代码指定分区用途(见下方“常用分区类型代码”),默认
8300(Linux文件系统)满足大多数场景。
三、常用分区类型代码
gdisk中分区类型通过十六进制代码标识,输入t命令后需指定对应代码。常见类型如下:
| 代码 | 分区类型描述 | 适用场景 |
|---|---|---|
8300 |
Linux filesystem | 通用Linux文件系统(ext4、XFS等) |
8200 |
Linux swap | 交换分区(swap) |
EF00 |
EFI system partition | UEFI启动的EFI系统分区 |
FD00 |
Linux RAID | 软RAID分区 |
8E00 |
Linux LVM | LVM逻辑卷管理分区 |
0700 |
Microsoft basic data | Windows NTFS/FAT分区 |
如需查看所有类型,在交互模式中输入L(大写)即可列出完整列表。
四、高级命令(恢复与维护)
gdisk提供了分区表检查和修复功能,通过r命令进入“恢复与转换”模式,适合处理分区表错误:
Command (? for help): r # 进入恢复模式
Recovery/transformation command (? for help): # 此处输入恢复命令
常用恢复命令:
- c:修改分区名称(方便识别,不影响功能);
- e:将MBR分区表转换为GPT(无损转换,需确保原MBR分区无冲突);
- v:验证分区表(检查是否有错误,如扇区重叠、未使用空间异常等);
- z:彻底清除磁盘所有分区表(比o更彻底,会擦除GPT备份区域)。
五、操作注意事项
- 数据备份:
o(创建新表)、d(删除分区)、w(保存修改)等操作会直接影响磁盘数据,操作前务必备份重要文件。 - 生效时机:所有操作仅在输入
w并确认后才会真正写入磁盘,q命令会放弃所有修改,可用于误操作时撤销。 - 刷新分区表:操作完成后,建议执行
partprobe或重启系统,让内核识别新分区:
partprobe /dev/sdb # 刷新/dev/sdb的分区表
- 磁盘对齐:起始扇区默认
2048(对应1MB对齐),是SSD、大容量机械盘的最佳实践,避免手动修改导致性能下降。 - 与fdisk的区别:
gdisk仅支持GPT分区表,fdisk主要支持MBR(部分新版本fdisk也支持GPT,但功能不如gdisk专注)。
通过上述命令,可完成GPT分区的创建、删除、修改等核心操作。gdisk的优势在于操作逻辑与fdisk一致,适合熟悉传统分区工具的用户快速迁移到GPT分区管理。