介绍
欢迎来到 Linux 文件系统与磁盘管理实验!本实验专为刚开始探索 Linux 系统管理世界的初学者设计。我们将引导你学习与管理磁盘空间、创建虚拟磁盘以及维护文件系统相关的核心命令和概念。通过本实验,你将获得 Linux 磁盘管理基础工具的实践经验。
使用 df 查看磁盘使用情况
df (disk free) 命令是你检查 Linux 系统磁盘空间使用情况的首选工具。让我们探索如何使用它:
打开终端。你应该位于
/home/labex/project目录下。如果不确定,可以使用pwd命令随时查看当前目录。运行以下命令查看磁盘使用情况:
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/nvme1n1 104806400 57754052 47052348 56% /etc/hosts如果起初看起来有些困惑,别担心!让我们拆解一下:
Filesystem:此列显示磁盘或分区的名称。1K-blocks:这是以 1 KB 为单位的文件系统总大小。Used:显示当前已使用的空间。Available:显示剩余的可用空间。Use%:显示文件系统的使用百分比。Mounted on:显示文件系统挂载在目录树中的位置。
现在,让我们让输出更易于阅读。运行:
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/nvme1n1 100G 56G 45G 56% /etc/hosts这样好多了,对吧?现在大小以 GB 和 MB 为单位,更容易理解。
如果你想检查包含特定文件或目录的文件系统所占用的空间,可以将路径传递给
df:df -h /etc/hosts这将仅显示包含
/etc/hosts的文件系统信息。在此环境中,该文件系统通常是/dev/nvme1n1。
df 命令对于快速检查剩余磁盘空间非常有用。如果你遇到系统提示空间不足的情况,df 通常是你进行调查时使用的第一个命令。
使用 du 检查目录大小
虽然 df 给出了磁盘使用情况的概览,但有时我们需要深入挖掘。这时就需要用到 du (disk usage) 命令。它能帮助我们了解哪些目录和文件占用了最多的空间。
首先,以最简单的形式使用
du。运行:du ~你将看到一长串数字和目录名称。每个数字代表该目录的大小(以 KB 为单位)。这可能会让人眼花缭乱,所以让我们让它更易于管理。
为了获得更易读的输出,请使用
-h选项:du -h ~与
df一样,-h选项使输出变得易于阅读。你将看到以 KB、MB 或 GB 为单位的大小。通常,我们只想知道目录的总大小。为此,请使用:
du -sh ~这里,
-s表示「summarize」(汇总),~代表你的家目录。此命令将显示你家目录中所有内容的总大小。要查看家目录下直接子目录的大小,请使用:
du -h --max-depth=1 ~这显示了每一级子目录的大小。
--max-depth=1选项限制了du进入子目录递归的深度。让我们检查家目录下各项的大小:
du -sh ~/*这将显示家目录下每个非隐藏文件和目录的大小。
这是一个查找家目录下最大项目的强大命令:
du -h ~ | sort -rh | head -n 10让我们拆解一下:
du -h ~列出家目录下所有文件和目录及其大小sort -rh以逆序(从大到小)并按人类可读格式对列表进行排序head -n 10仅显示输出的前 10 行|是管道符,它将一个命令的输出作为下一个命令的输入
此命令很好地展示了如何组合简单的 Linux 命令来执行更复杂的操作。
当你试图释放磁盘空间时,du 命令非常宝贵。它能帮你识别哪些目录或文件占用了最多的空间,从而让你知道清理工作的重点在哪里。
创建和管理虚拟磁盘
在深入之前,让我们先了解什么是虚拟磁盘。虚拟磁盘就是一个充当物理磁盘驱动器的文件。可以把它想象成创建一个容器文件,操作系统可以像对待真实的硬盘一样对待它。这类似于虚拟机使用虚拟磁盘文件来存储数据的方式。
为什么要这样做呢?虚拟磁盘在以下场景中非常有用:
- 在不冒损坏真实硬件风险的情况下安全地测试磁盘操作
- 创建隔离的存储空间
- 在无需额外物理硬件的情况下学习磁盘管理
- 创建真实磁盘的备份镜像
理解关键概念
在进行实践操作之前,让我们了解一些重要概念:
**文件系统 (Filesystem)**:可以将文件系统视为磁盘上文件和文件夹的组织方式。它就像办公室里的归档系统——决定了数据如何存储和检索。常见的 Linux 文件系统包括 ext4(我们将使用)、XFS 和 btrfs。
**挂载 (Mounting)**:挂载是将文件系统提供给操作系统访问的过程。当你挂载一个文件系统时,你是在告诉 Linux:「让这个磁盘的内容在特定的目录下可用。」这类似于:
- 插入 USB 驱动器(物理连接)
- 然后告诉计算机在哪里显示其内容(挂载点)
**分区 (Partitions)**:分区是磁盘中被视为独立单元的部分。可以把它想象成将大硬盘划分为更小的、独立的区域。分区的理由包括:
- 将系统文件与用户文件分开
- 为不同目的使用不同的文件系统
- 使备份更容易
- 限制磁盘故障的影响
让我们创建并使用一个虚拟磁盘:
首先,使用
dd命令创建一个 256 MB 的虚拟磁盘:dd if=/dev/zero of=virtual.img bs=1M count=256让我们拆解这个命令:
dd是一个用于复制和转换文件的工具if=/dev/zero表示「输入文件是 /dev/zero」(一个提供无限零的特殊文件)of=virtual.img表示「输出文件是 virtual.img」(我们的新虚拟磁盘文件)bs=1M将块大小设置为 1 MB(一次复制多少数据)count=256表示复制 256 个块(生成一个 256 MB 的文件)
这创建了一个充满零的空文件,我们将把它用作虚拟磁盘。
验证文件大小:
ls -lh virtual.img你应该看到
virtual.img正好是 256 MB。现在,使用 ext4 文件系统格式化此虚拟磁盘:
sudo mkfs.ext4 virtual.img这里发生了什么?此命令:
- 在我们的虚拟磁盘文件中创建一个新的 ext4 文件系统
- 设置存储文件和目录所需的基本结构
- 类似于在首次使用前格式化新的 USB 驱动器
ext4 文件系统是许多 Linux 发行版的默认选择,因为它可靠且经过充分测试。
接下来,我们需要创建一个挂载点。这是虚拟磁盘内容将出现的目录:
sudo mkdir /mnt/virtualdisk将挂载点视为进入虚拟磁盘的「窗口」。挂载后,当你查看此目录时,实际上看到的是虚拟磁盘的内容。
现在我们可以挂载虚拟磁盘了:
sudo mount -o loop virtual.img /mnt/virtualdisk让我们拆解一下发生了什么:
-o loop选项告诉 Linux 将我们的文件视为真实的磁盘设备virtual.img是我们的源(我们创建的虚拟磁盘)/mnt/virtualdisk是我们希望内容出现的位置
这类似于插入 USB 驱动器时自动发生的情况,只是我们手动对虚拟磁盘文件执行了此操作。
让我们验证磁盘是否已挂载:
mount | grep virtualdisk你应该看到一行显示
virtual.img已挂载到/mnt/virtualdisk。现在它已挂载,我们可以像使用任何其他目录一样使用它。让我们创建一个文件:
sudo touch /mnt/virtualdisk/testfile ls /mnt/virtualdisk你应该能看到
testfile被列出。当你使用完虚拟磁盘后,应该卸载它:
sudo umount /mnt/virtualdisk卸载会从该目录中移除文件系统,确保操作系统在断开连接前完成所有挂载的读写操作。未能正确卸载可能导致数据损坏。虽然命令语法侧重于卸载目录,但在底层,操作系统知道该目录对应于已挂载的磁盘镜像。
创建、格式化和挂载虚拟磁盘的过程与插入新硬盘或 USB 闪存盘时发生的情况非常相似。主要区别在于我们是用文件而不是物理设备来完成所有操作。
挂载文件系统意味着将其附加到指定的目录,以便操作系统可以访问文件系统内的数据。在本实验中,虚拟磁盘镜像文件被视为物理磁盘,挂载使其内容在特定目录(例如 /mnt/virtualdisk)下可用。
使用 fdisk 管理磁盘分区
在真实系统中,在创建文件系统之前,通常需要创建分区。虽然我们无法在此虚拟环境中修改实际的磁盘分区,但我们可以探索如何使用 fdisk 查看分区信息。
首先,查看所有磁盘分区的信息:
sudo fdisk -l这将显示有关所有磁盘设备及其分区的信息。你将看到有关磁盘大小、扇区数和分区表的详细信息。
现在,查看我们虚拟磁盘的分区信息:
sudo fdisk -l virtual.img这将显示虚拟磁盘的分区表。由于我们直接在磁盘镜像上创建了文件系统而没有进行分区,你可能会看到一条消息,提示它不包含有效的分区表。
在真实系统中,你会交互式地使用 fdisk 来创建、删除或修改分区。以下是其工作原理的简要概述:
- 使用
sudo fdisk /dev/sdX启动fdisk(将 X 替换为要分区的磁盘对应的字母) - 使用命令
n创建新分区 d删除分区t更改分区的系统 ID(指示分区的预期用途)w写入更改并退出
请记住,修改分区可能导致数据丢失,因此在对磁盘分区进行更改之前,请务必小心并备份重要数据。
Fdisk 不仅限于显示分区信息。它还可以交互式地创建、删除和修改磁盘分区。虽然它是磁盘分区的必备工具,但在使用 fdisk 修改包含关键数据的系统分区时要谨慎;不当的更改可能导致数据丢失。
总结
恭喜!在本实验中,你学习了如何:
- 使用
df查看磁盘使用情况 - 使用
du检查目录大小 - 创建、格式化、挂载和卸载虚拟磁盘
- 使用
fdisk查看分区信息
这些技能构成了更高级 Linux 系统管理任务的基础。它们对于管理存储、排查磁盘空间问题以及维护 Linux 系统中的文件系统健康至关重要。
作为额外挑战,尝试编写一个 shell 脚本,找出家目录下最大的 10 个文件或目录,并以人类可读的格式显示它们的大小。这将结合你在本实验中学到的多个命令。
请记住,实践是掌握这些概念的关键。不要犹豫,在安全的环境中尝试这些命令,以加深你的理解。祝你在 Linux 系统管理的学习之旅中一切顺利!



