文件系统与磁盘管理

LinuxLinuxBeginner
立即练习

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

简介

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("`Linux`")) -.-> linux/BasicFileOperationsGroup(["`Basic File Operations`"]) 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/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 修改包含关键数据的系统上的分区时,请务必谨慎;不当的更改可能会导致数据丢失。

使用 fsck 检查文件系统完整性

fsck(文件系统一致性检查)工具是维护文件系统健康的重要工具。它用于检查并可选地修复文件系统的不一致性。

  1. 首先,确保虚拟磁盘已卸载。如果它在上一步中仍然挂载,请卸载它:

    sudo umount /mnt/virtualdisk

    始终在未挂载的文件系统上运行 fsck 非常重要,以避免数据损坏。

  2. 现在,让我们在虚拟磁盘上运行 fsck

    sudo fsck -f virtual.img

    -f 选项强制检查,即使文件系统看起来是干净的。你应该会看到输出,指示 fsck 正在检查文件系统。

  3. 如果发现任何错误,fsck 会询问你是否要修复它们。出于学习目的,你可以对这些提示回答 y。然而,在实际场景中,如果涉及重要数据,你需要在允许自动修复之前仔细考虑每个错误。

  4. fsck 完成后,它会给出一个总结,说明它发现了什么以及采取了哪些操作。

在实际场景中,你会在实际的磁盘分区(如 /dev/sda1)上使用 fsck,而不是在磁盘映像文件上。它是维护文件系统健康的重要工具,通常在系统检测到文件系统未干净卸载(例如,断电后)时,在启动过程中自动运行。

请记住,虽然 fsck 可以修复许多文件系统问题,但它不能替代定期备份。始终备份你的重要数据!

总结

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

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

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

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

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

您可能感兴趣的其他 Linux 教程