Linux 磁盘相关命令汇总

1,282 阅读11分钟

常见命令和使用流程

  • fdisk/gdisk 磁盘分区
  • mkfs 分区格式化
  • mount 分区挂载到文件系统上
  • df 查看文件系统和分区的情况
  • lsblk 用于列出块设备信息

fdisk

fdisk 是一个在 Linux 系统中用于磁盘分区的工具,主要用于对磁盘进行分区、调整分区大小、查看分区信息等操作。以下是关于 fdisk 命令的详细解析:

1. 基本语法

bash复制

fdisk [选项] [设备]
  • 选项:用于指定操作模式或特定功能。
  • 设备:通常是磁盘设备文件,如 /dev/sda/dev/sdb 等。

2. 常用选项

  • -l:列出所有磁盘的分区信息。

    bash复制

    fdisk -l
    

    该命令会显示所有磁盘的分区情况,包括分区大小、分区类型、挂载点等信息。

  • -u:指定分区大小的单位(默认为扇区)。

    bash复制

    fdisk -u <设备>
    

    常用的单位有 sectors(扇区)、cylinders(柱面)等。

  • -w:指定分区表的文件名。

    bash复制

    fdisk -w <文件名>
    

    可以将分区表保存到指定文件中,便于后续操作。

3. 交互模式

fdisk 的主要功能是通过交互模式完成的。运行 fdisk 命令后,会进入交互式界面,用户可以通过输入特定的指令来操作分区。

进入交互模式

bash复制

fdisk /dev/sdX

/dev/sdX 替换为实际的磁盘设备名称。

交互模式中的常用指令
  • m:显示帮助菜单。

    • 在交互模式下输入 m,会显示所有可用的命令及其说明。
  • p:打印当前分区表。

    • 显示当前磁盘的分区信息,包括分区编号、起始扇区、结束扇区、分区类型等。
  • n:创建新分区。

    • 输入 n 后,会提示用户选择分区类型(主分区或逻辑分区),并指定分区的起始扇区和结束扇区。
    • 主分区:最多可以创建 4 个主分区。
    • 扩展分区:用于创建逻辑分区,一个磁盘只能有一个扩展分区。
    • 逻辑分区:在扩展分区中创建的分区。
  • d:删除分区。

    • 输入 d 后,会提示用户输入要删除的分区编号。
  • t:更改分区类型。

    • 输入 t 后,输入分区编号,然后选择新的分区类型(如 83 表示 Linux 分区,82 表示 Linux 交换分区等)。
  • w:写入分区表并退出。

    • 将修改后的分区表写入磁盘,并退出 fdisk
  • q:退出而不保存更改。

    • 如果不想保存对分区表的修改,可以输入 q 退出。

gdisk

gdisk 是一个用于管理 GPT(GUID 分区表)分区的命令行工具,它比传统的 fdisk 更适合大容量磁盘和现代分区需求。以下是 gdisk 命令的使用方法和功能详解:

查看分区信息

bash复制

sudo gdisk -l /dev/sdX
  • 如果磁盘是 GPT 格式,会显示分区的详细信息,包括分区号、起始扇区、结束扇区、分区类型等。
  • 如果磁盘是 MBR 格式,gdisk 会提示是否将其转换为 GPT 格式。
进入交互模式

bash复制

sudo gdisk /dev/sdX

进入交互模式后,可以通过以下命令进行操作:

  • p:打印分区表,显示当前磁盘的分区信息。
  • n:创建新分区,需要指定分区号、起始扇区、结束扇区或分区大小(如 +10G 表示 10GB)。
  • d:删除分区,输入分区编号即可删除。
  • t:更改分区类型,输入分区编号和新的分区类型代码(如 8300 表示 Linux 文件系统,8200 表示 Linux 交换分区)。
  • w:写入更改并退出。
  • q:退出而不保存更改。
  • x:进入高级模式,提供更多高级功能。
  • i:显示分区的详细信息。
将 MBR 转换为 GPT

如果磁盘是 MBR 格式,gdisk 会提示是否将其转换为 GPT 格式。输入 w 并回车即可完成转换。

示例用法

创建新分区
  1. 进入交互模式:

    bash复制

    sudo gdisk /dev/sdX
    
  2. 输入 n 创建新分区。

  3. 按提示选择分区号、起始扇区、结束扇区或分区大小(如 +10G)。

  4. 选择分区类型(默认为 8300,表示 Linux 文件系统)。

  5. 输入 w 保存并退出。

删除分区
  1. 进入交互模式:

    bash复制

    sudo gdisk /dev/sdX
    
  2. 输入 d 删除分区。

  3. 输入要删除的分区编号。

  4. 输入 w 保存并退出。

更改分区类型
  1. 进入交互模式:

    bash复制

    sudo gdisk /dev/sdX
    
  2. 输入 t 更改分区类型。

  3. 输入分区编号和新的分区类型代码(如 8300 表示 Linux 文件系统,EF00 表示 EFI 系统分区)。

  4. 输入 w 保存并退出。

mkfs命令

mkfs(make file system)是 Linux 系统中用于在存储设备(如硬盘分区、USB 驱动器等)上创建文件系统的命令。它是一个前端工具,会根据指定的文件系统类型调用相应的工具来格式化设备。

基本语法

bash复制

mkfs [选项] [-t 文件系统类型] [设备文件] [块数]

常用选项

  • -t <文件系统类型> :指定要创建的文件系统类型,如 ext4xfsbtrfsvfat 等。
  • -c:在创建文件系统之前检查设备上的坏块。
  • -f:强制创建文件系统,即使目标设备上已存在文件系统。
  • -L <标签> :为文件系统设置标签。
  • -m <百分比> :设置为 root 用户保留的空间百分比(默认为 5%)。
  • -v:显示详细信息。
  • -V:显示版本信息。

支持的文件系统类型

  • ext2:较旧的文件系统,支持最大 4TB 分区。
  • ext3:在 ext2 的基础上增加了日志功能。
  • ext4:最新的扩展文件系统,支持更大的文件和卷大小。
  • xfs:高性能的日志式文件系统,适合大容量存储。
  • btrfs:现代的复制文件系统,支持快照和数据校验。
  • vfat:用于兼容 Windows FAT32 文件系统。
  • ntfs:用于兼容 Windows NTFS 文件系统。

使用示例

格式化为 ext4 文件系统

bash复制

sudo mkfs -t ext4 /dev/sdb1

或者直接使用:

bash复制

sudo mkfs.ext4 /dev/sdb1
检查坏块并格式化

bash复制

sudo mkfs -t ext4 -c /dev/sdb1
为文件系统设置标签

bash复制

sudo mkfs -t ext4 -L MyData /dev/sdb1
格式化为 FAT32 文件系统

bash复制

sudo mkfs.vfat -F 32 /dev/sdb1
格式化为 NTFS 文件系统

bash复制

sudo mkfs.ntfs /dev/sdb1

mount

mount 是 Linux 系统中用于挂载文件系统的命令。它将存储设备(如硬盘分区、USB 驱动器、光盘等)或网络文件系统(如 NFS)挂载到指定的目录(挂载点),使其可以被访问。以下是关于 mount 命令的详细解析。 mount 命令的详细解析。


1. 基本语法

bash复制

mount [选项] [设备] [挂载点]
  • 设备:要挂载的存储设备或文件系统,例如 /dev/sda1/dev/cdrom 或网络路径。
  • 挂载点:一个已经存在的目录,设备将被挂载到此目录下。

2. 常用选项

  • -a:挂载 /etc/fstab 文件中定义的所有文件系统。

    bash复制

    sudo mount -a
    

    此选项常用于系统启动时自动挂载所有配置的文件系统。

  • -t <文件系统类型> :指定文件系统类型(如 ext4ntfsvfat 等)。

    bash复制

    sudo mount -t ntfs /dev/sdb1 /mnt
    
  • -o <挂载选项> :指定挂载选项,如 ro(只读)、rw(读写)、noexec(不允许执行文件)等。

    bash复制

    sudo mount -o ro /dev/sda1 /mnt
    
  • -L <标签> :通过文件系统的标签挂载。

    bash复制

    sudo mount -L MyData /mnt
    
  • -U <UUID> :通过文件系统的 UUID 挂载。

    bash复制

    sudo mount -U 1234-5678 /mnt
    

3. 常见用法

挂载本地分区

bash复制

sudo mount /dev/sda1 /mnt

/dev/sda1 分区挂载到 /mnt 目录。

挂载 USB 驱动器

bash复制

sudo mount /dev/sdb1 /media/usb

将 USB 驱动器的分区 /dev/sdb1 挂载到 /media/usb

挂载 NTFS 分区

bash复制

sudo mount -t ntfs-3g /dev/sda2 /mnt

挂载 NTFS 文件系统分区到 /mnt,需要安装 ntfs-3g 工具。

挂载 ISO 文件

bash复制

sudo mount -o loop /path/to/image.iso /mnt

将 ISO 文件挂载为虚拟光驱。

挂载 NFS 共享

bash复制

sudo mount -t nfs server:/path/to/share /mnt

将 NFS 共享目录挂载到本地 /mnt


4. 查看挂载信息

bash复制

mount

列出当前所有已挂载的文件系统。

或者使用更简洁的格式:

bash复制

df -h

显示已挂载文件系统的使用情况。


5. 自动挂载

为了在系统启动时自动挂载文件系统,可以将挂载信息添加到 /etc/fstab 文件中。格式如下:

<设备> <挂载点> <文件系统类型> <挂载选项> <dump> <pass>

例如:

UUID=1234-5678 /mnt ext4 defaults 0 2

  • UUID:设备的唯一标识符。
  • 挂载点:挂载目录。
  • 文件系统类型:如 ext4ntfs 等。
  • 挂载选项:如 defaults(默认选项,包括 rwsuiddev 等)。
  • dump:用于 dump 命令的备份选项,通常设置为 0
  • passfsck 检查顺序,0 表示不检查,1 表示根分区,2 表示其他分区。

6. 卸载文件系统

使用 umount 命令卸载文件系统:

bash复制

sudo umount /mnt

或者通过设备名称卸载:

bash复制

sudo umount /dev/sda1

df

df 是 Linux 中用于显示文件系统磁盘空间使用情况的命令。它的全称是 disk filesystem,能够显示挂载的文件系统的总空间、已用空间、可用空间和使用百分比等信息。

df [选项] [文件或目录]
  • 如果不指定文件或目录,df 会显示所有已挂载文件系统的信息。
  • 如果指定文件或目录,df 会显示该文件或目录所在文件系统的磁盘使用情况。

常用命令

# 显示所有文件系统的磁盘使用情况
df 
# 以易读的格式显示磁盘使用情况
df -h 

通过 df 命令,你可以快速了解文件系统的磁盘使用情况,帮助排查磁盘空间不足等问题。结合 -h-T 等选项,可以更直观地查看信息。 需要注意的是df只能看到已经挂载的文件情况,对于没有挂载的磁盘空间,是看不到的。

lsblk

lsblk(list block devices)是一个用于列出块设备信息的命令,它能够显示系统中所有块设备的详细信息,包括设备名称、挂载点、文件系统类型、大小等。lsblk 是一个非常实用的工具,可以帮助用户快速了解系统中存储设备的使用情况。

基本语法

bash复制

lsblk [选项]

常用选项

  • -a:显示所有设备,包括未挂载的设备。
  • -d:仅显示设备信息,不显示分区信息。
  • -e <设备号> :排除指定设备号的设备。
  • -f:显示文件系统类型和挂载点。
  • -i:仅显示指定类型的设备。
  • -l:以列表形式显示设备信息。
  • -m:显示设备的权限信息。
  • -n:不显示标题。
  • -o:指定要显示的列,例如 NAME,SIZE,MOUNTPOINT,FSTYPE
  • -p:在设备名称前加上 /dev/ 前缀。
  • -r:以原始格式显示设备信息。
  • -s:以树状结构显示设备信息。
  • -t:显示设备的拓扑信息。

使用示例

列出所有块设备信息

bash复制

lsblk

输出示例:

复制

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 465.8G  0 disk 
├─sda1        8:1    0   512M  0 part /boot/efi
├─sda2        8:2    0   732M  0 part /boot
└─sda3        8:3    0 464.6G  0 part /
sdb           8:16   1   7.5G  0 disk 
└─sdb1        8:17   1   7.5G  0 part /mnt/usb
显示文件系统类型和挂载点

bash复制

lsblk -f

输出示例:

复制

NAME        FSTYPE      LABEL UUID                                 MOUNTPOINT
sda                                                                  
├─sda1      vfat        EFI   1234-ABCD                            /boot/efi
├─sda2      ext4        BOOT  12345678-1234-1234-1234-123456789012  /boot
└─sda3      ext4        ROOT  23456789-2345-2345-2345-234567890123  /
sdb                                                                  
└─sdb1      vfat        USB   3456-7890                            /mnt/usb
以列表形式显示设备信息

bash复制

lsblk -l

输出示例:

复制

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 465.8G  0 disk 
sda1     8:1    0   512M  0 part /boot/efi
sda2     8:2    0   732M  0 part /boot
sda3     8:3    0 464.6G  0 part /
sdb      8:16   1   7.5G  0 disk 
sdb1     8:17   1   7.5G  0 part /mnt/usb
显示指定列的信息

bash复制

lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT

输出示例:

复制

NAME   SIZE FSTYPE MOUNTPOINT
sda   465.8G            
├─sda1  512M vfat  /boot/efi
├─sda2  732M ext4  /boot
└─sda3 464.6G ext4  /
sdb     7.5G            
└─sdb1  7.5G vfat  /mnt/usb