文件系统与磁盘管理

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

欢迎来到这个关于 Linux 文件系统和磁盘管理的实验!本实验专为刚开始探索 Linux 系统管理领域的初学者设计。我们将引导你学习与磁盘空间管理、创建虚拟磁盘以及维护文件系统相关的基本命令和概念。通过本实验,你将获得使用 Linux 磁盘管理工具的实践经验。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux/BasicFileOperationsGroup -.-> linux/head("File Beginning Display") linux/FileandDirectoryManagementGroup -.-> linux/mkdir("Directory Creating") linux/TextProcessingGroup -.-> linux/sort("Text Sorting") linux/SystemInformationandMonitoringGroup -.-> linux/df("Disk Space Reporting") linux/SystemInformationandMonitoringGroup -.-> linux/du("File Space Estimating") linux/SystemInformationandMonitoringGroup -.-> linux/mount("File System Mounting") linux/SystemInformationandMonitoringGroup -.-> linux/dd("File Converting/Copying") linux/UserandGroupManagementGroup -.-> linux/sudo("Privilege Granting") subgraph Lab Skills linux/head -.-> lab-17999{{"文件系统与磁盘管理"}} linux/mkdir -.-> lab-17999{{"文件系统与磁盘管理"}} linux/sort -.-> lab-17999{{"文件系统与磁盘管理"}} linux/df -.-> lab-17999{{"文件系统与磁盘管理"}} linux/du -.-> lab-17999{{"文件系统与磁盘管理"}} linux/mount -.-> lab-17999{{"文件系统与磁盘管理"}} linux/dd -.-> lab-17999{{"文件系统与磁盘管理"}} linux/sudo -.-> lab-17999{{"文件系统与磁盘管理"}} end

使用 df 查看磁盘使用情况

df(disk free)命令是你在 Linux 系统中检查磁盘空间使用情况的首选工具。让我们来探索如何使用它:

  1. 打开你的终端。你应该在 /home/labex/project 目录中。如果不确定,可以使用 pwd 命令检查当前目录。

  2. 运行以下命令以查看磁盘使用情况:

    df

    你会看到类似以下的输出:

    Filesystem     1K-blocks      Used Available Use% Mounted on
    overlay         20971520    128744  20842776   1% /
    tmpfs              65536         0     65536   0% /dev
    tmpfs            3995004         0   3995004   0% /sys/fs/cgroup
    shm                65536         0     65536   0% /dev/shm
    /dev/vdb       104806400  57754052  47052348  56% /etc/hosts

    如果一开始看起来有些混乱,别担心!让我们分解一下:

    • Filesystem:此列显示磁盘或分区的名称。
    • 1K-blocks:这是文件系统的总大小,以 1KB 块为单位。
    • Used:显示当前已使用的空间。
    • Available:显示剩余的可用空间。
    • Use%:显示文件系统的使用百分比。
    • Mounted on:显示文件系统挂载在目录树中的位置。
  3. 现在,让我们使输出更易读。运行:

    df -h

    -h 选项代表“human-readable”(人类可读)。你会看到类似以下的输出:

    Filesystem      Size  Used Avail Use% Mounted on
    overlay          20G  126M   20G   1% /
    tmpfs            64M     0   64M   0% /dev
    tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
    shm              64M     0   64M   0% /dev/shm
    /dev/vdb        100G   56G   45G  56% /etc/hosts

    这样好多了,对吧?现在大小以 GB 和 MB 显示,更容易理解。

  4. 如果你想检查特定文件系统的空间,可以指定它:

    df -h /dev/vdb

    这将仅显示 /dev/vdb 文件系统的信息。

df 命令对于快速检查剩余磁盘空间非常有用。如果你遇到系统提示空间不足的问题,df 通常是你用来调查的第一个命令。

使用 du 检查目录大小

虽然 df 为我们提供了磁盘使用情况的概览,但有时我们需要更深入地挖掘。这时就需要用到 du(disk usage,磁盘使用情况)命令了。它帮助我们了解哪些目录和文件占用了最多的空间。

  1. 让我们从最简单的 du 命令开始。运行:

    du ~

    你会看到一长串数字和目录名称。每个数字代表目录的大小(以 KB 为单位)。这可能会让人感到不知所措,所以让我们让它更易于管理。

  2. 为了获得更易读的输出,使用 -h 选项:

    du -h ~

    df 类似,-h 选项使输出更易读。你会看到以 KB、MB 或 GB 为单位的大小。

  3. 通常,我们只想知道一个目录的总大小。为此,使用:

    du -sh ~

    这里,-s 表示“汇总”,~ 代表你的主目录。此命令将显示主目录中所有内容的总大小。

  4. 要查看主目录中直接子目录的大小,使用:

    du -h --max-depth=1 ~

    这将显示一级子目录的大小。--max-depth=1 选项限制了 du 递归进入子目录的深度。

  5. 让我们检查主目录中各项的大小:

    du -sh ~/*

    这将显示主目录下每个直接项的大小。

  6. 以下是一个强大的命令,用于查找主目录中最大的项:

    du -h ~ | sort -rh | head -n 10

    让我们分解一下:

    • du -h ~ 列出主目录中所有文件和目录及其大小
    • sort -rh 以逆序(从大到小)和人类可读格式排序
    • head -n 10 仅显示输出的前 10 行
    • | 是管道符,将一个命令的输出作为下一个命令的输入

    这个命令是一个很好的例子,展示了如何结合简单的 Linux 命令来执行更复杂的操作。

当你试图释放磁盘空间时,du 命令非常有用。它帮助你识别哪些目录或文件占用了最多的空间,从而让你知道应该集中清理哪些地方。

创建和管理虚拟磁盘

现在我们将创建一个虚拟磁盘文件,为其格式化文件系统并挂载它。这个过程类似于设置一个新的硬盘驱动器,但我们是在一个文件中完成所有操作。

  1. 首先,使用 dd 命令创建一个 256MB 的虚拟磁盘:

    dd if=/dev/zero of=virtual.img bs=1M count=256

    以下是该命令的作用:

    • if=/dev/zero:输入文件是 /dev/zero,这是一个特殊的文件,提供尽可能多的空字节
    • of=virtual.img:输出文件是 virtual.img
    • bs=1M:将输入和输出的块大小设置为 1MB
    • count=256:仅复制 256 个输入块

    这实际上创建了一个 256MB 的文件,其中填充了零。

  2. 验证文件大小:

    ls -lh virtual.img

    你应该会看到 virtual.img 正好是 256MB。

  3. 现在,让我们用 ext4 文件系统格式化这个虚拟磁盘:

    sudo mkfs.ext4 virtual.img

    此命令在我们的虚拟磁盘文件上创建一个 ext4 文件系统。你会看到一些关于文件系统创建过程的输出。

  4. 接下来,我们需要创建一个挂载点。这是虚拟磁盘内容将出现的目录:

    sudo mkdir /mnt/virtualdisk
  5. 现在我们可以挂载虚拟磁盘:

    sudo mount -o loop virtual.img /mnt/virtualdisk

    -o loop 选项是必要的,因为我们是将一个文件挂载为块设备。

  6. 让我们验证磁盘是否已挂载:

    mount | grep virtualdisk

    你应该会看到一行指示 virtual.img 已挂载到 /mnt/virtualdisk

  7. 现在它已经挂载,我们可以像使用其他目录一样使用它。让我们创建一个文件:

    sudo touch /mnt/virtualdisk/testfile
    ls /mnt/virtualdisk

    你应该会看到 testfile 被列出。

  8. 当你完成使用虚拟磁盘后,应该卸载它:

    sudo umount /mnt/virtualdisk

创建、格式化和挂载虚拟磁盘的过程与插入新硬盘或 USB 驱动器非常相似。主要区别在于我们是在文件中完成所有操作,而不是使用物理设备。

挂载文件系统意味着将其附加到指定目录,以便操作系统可以访问文件系统内的数据。在本实验中,虚拟磁盘映像文件被视为物理磁盘,挂载使其内容在特定目录(例如 /mnt/virtualdisk)中可用。

卸载会从该目录中移除文件系统,确保操作系统在分离之前完成所有挂起的读写操作。未能正确卸载可能会导致数据损坏。尽管命令语法侧重于卸载目录,但在底层,操作系统知道该目录对应于挂载的磁盘映像。

使用 fdisk 管理磁盘分区

在实际系统中,创建文件系统之前,通常需要先创建分区。虽然我们无法在这个虚拟环境中修改实际的磁盘分区,但我们可以探索如何使用 fdisk 查看分区信息。

  1. 首先,让我们查看所有磁盘分区的信息:

    sudo fdisk -l

    这将显示所有磁盘设备及其分区的信息。你会看到磁盘大小、扇区数量和分区表等详细信息。

  2. 现在,让我们查看虚拟磁盘的分区信息:

    sudo fdisk -l virtual.img

    这将显示虚拟磁盘的分区表。由于我们直接在磁盘映像上创建了文件系统而没有分区,你可能会看到一条消息,提示它不包含有效的分区表。

在实际系统中,你可以交互式地使用 fdisk 来创建、删除或修改分区。以下是其工作原理的简要概述:

  • 你可以使用 sudo fdisk /dev/sdX 启动 fdisk(将 X 替换为你要分区的磁盘的适当字母)
  • 使用命令 n 创建新分区
  • 使用 d 删除分区
  • 使用 t 更改分区的系统 ID(表示分区的预期用途)
  • 使用 w 写入更改并退出

请记住,修改分区可能会导致数据丢失,因此在更改磁盘分区之前,请务必小心并备份重要数据。

fdisk 不仅限于显示分区信息。它还可以交互式地创建、删除和修改磁盘分区。虽然它是磁盘分区的重要工具,但在使用 fdisk 修改包含关键数据的系统上的分区时,请务必谨慎;不当的更改可能会导致数据丢失。

总结

恭喜你!在本实验中,你已经学会了如何:

  1. 使用 df 查看磁盘使用情况
  2. 使用 du 检查目录大小
  3. 创建、格式化、挂载和卸载虚拟磁盘
  4. 使用 fdisk 查看分区信息

这些技能为更高级的 Linux 系统管理任务奠定了基础。它们对于管理存储、排查磁盘空间问题以及维护 Linux 系统中的文件系统健康至关重要。

作为一个额外的挑战,尝试编写一个 shell 脚本,查找主目录中最大的 10 个文件或目录,并以人类可读的格式显示它们的大小。这将结合你在本实验中学到的多个命令。

请记住,练习是掌握这些概念的关键。不要犹豫,在安全的环境中尝试这些命令,以加深你的理解。祝你在 Linux 系统管理的学习旅程中继续取得成功!