配置存储设备

LinuxBeginner
立即练习

介绍

欢迎来到配置 Linux 中存储设备的实验。管理存储是任何 Linux 系统管理员的一项基本技能。当你向系统添加一个新的硬盘或固态硬盘 (SSD) 时,它不会立即可用。你必须先通过创建文件系统来准备它,然后通过将其挂载到目录树上来使其可访问。

在这个实验中,你将了解添加新存储设备的完整生命周期。你将学习如何:

  • 识别新连接的磁盘。
  • 在磁盘上创建标准的 Linux 文件系统 (ext4)。
  • 将磁盘挂载到一个目录以使其可访问。
  • 验证其使用情况并向其写入数据。
  • 安全地卸载和分离磁盘。

我们将使用诸如 lsblkmkfs.ext4mountdfumount 等命令。实验结束时,你将对如何在 Linux 环境中管理基本存储设备有一个扎实的理解。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 中级 级别的实验,完成率为 80%。获得了学习者 82% 的好评率。

附加虚拟磁盘

在这个 Lab 环境中,系统通过自动化设置流程为你创建了一个虚拟磁盘。这模拟了向系统添加新的存储设备。设置脚本会创建一个 100MB 的虚拟磁盘文件,并将其关联到一个 loop 设备,然后为了保持一致性,创建了一个符号链接 /dev/sdb

你的第一个任务是确认操作系统能够识别这个新磁盘。lsblk (list block devices,列出块设备) 命令非常适合这项工作。它会以树状格式显示所有可用块设备的信息。

在终端中运行以下命令来列出块设备:

lsblk

你应该会看到类似以下内容的输出。寻找一个 100MB 的 loop 设备(它可能命名为 loop4loop14 或其他可用的 loop 设备编号),它没有被挂载,并且挂载点一栏为空。

NAME  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0    7:0    0     4K  1 loop /snap/bare/5
loop1    7:1    0  91.4M  1 loop /snap/lxd/35819
...
loop4    7:4    0   100M  0 loop
...
vda    252:0    0    40G  0 disk
├─vda1 252:1    0     1M  0 part
├─vda2 252:2    0   200M  0 part /boot/efi
└─vda3 252:3    0  39.8G  0 part /

这确认了系统已识别该磁盘,并为下一步:格式化,做好了准备。

如果你没有看到 loop 设备,可以运行以下命令来创建它:

## 创建一个 100MB 的文件作为我们的虚拟磁盘
dd if=/dev/zero of=/tmp/disk.img bs=1M count=100 &> /dev/null
## 查找下一个可用的 loop 设备
LOOP_DEVICE=$(losetup -f)
## 将文件关联到一个 loop 设备,模拟物理磁盘
sudo losetup $LOOP_DEVICE /tmp/disk.img
## 为了在 Lab 中保持一致性,创建一个符号链接
sudo ln -sf $LOOP_DEVICE /dev/sdb

然后再次运行 lsblk 命令以确认 loop 设备已创建。

使用 mkfs.ext4 命令格式化磁盘 /dev/sdb

在这一步,你将格式化新磁盘。一个未格式化的磁盘就像一块空白石板;操作系统不知道如何在上面存储文件。格式化,也称为创建文件系统,是将数据结构写入磁盘,使其能够组织和存储文件。

我们将使用 ext4 文件系统,它是 Linux 系统中可靠且广泛使用的标准。创建 ext4 文件系统的命令是 mkfs.ext4

警告: 此命令具有破坏性。它将擦除指定设备上的所有数据。运行前请务必仔细检查设备名称。

现在,格式化 /dev/sdb 磁盘。由于这是一个修改设备的特权操作,你必须使用 sudo

sudo mkfs.ext4 /dev/sdb

该命令将输出有关它正在创建的文件系统的信息,包括 inode 和块的数量。输出将类似于以下内容:

mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 25600 4k blocks and 25600 inodes

Allocating group tables: done
Writing inode tables: done
Creating journal (1024 blocks): done
Writing superblocks and filesystem accounting information: done

/dev/sdb 磁盘现在已使用 ext4 文件系统格式化,并准备好挂载了。

将磁盘挂载到 /mnt/data 目录

在这一步,你将使格式化后的磁盘可供文件系统访问。这个过程称为“挂载”。挂载是将设备上的文件系统附加到一个特定的目录,该目录被称为“挂载点”。一旦挂载,你就可以通过访问挂载点目录来从设备读取和写入数据。

首先,我们需要创建一个目录作为挂载点。一个常见的约定是在 /mnt 下使用子目录进行临时挂载。我们来创建一个名为 /mnt/data 的目录。

sudo mkdir /mnt/data

现在,使用 mount 命令将 /dev/sdb 设备附加到 /mnt/data 目录。语法是 sudo mount [device] [mount_point]

sudo mount /dev/sdb /mnt/data

如果成功,该命令执行时应该没有任何输出。要验证磁盘是否已挂载,你可以再次使用 lsblk 命令。

lsblk

在下面的输出中,请注意 loop 设备(/dev/sdb 所指向的设备)现在显示 /mnt/data 作为其 MOUNTPOINT

NAME  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0    7:0    0     4K  1 loop /snap/bare/5
loop1    7:1    0  91.4M  1 loop /snap/lxd/35819
...
loop4    7:4    0   100M  0 loop /mnt/data
...
vda    252:0    0    40G  0 disk
├─vda1 252:1    0     1M  0 part
├─vda2 252:2    0   200M  0 part /boot/efi
└─vda3 252:3    0  39.8G  0 part /

磁盘现在已准备好使用。

使用 df -h 命令检查磁盘使用情况

在这一步,你将验证已挂载的磁盘是否可用,并检查其可用空间。df (disk free,磁盘空闲) 命令用于报告文件系统的磁盘空间使用情况。使用 -h (--human-readable,人类可读) 标志,通过以 1024 的幂(例如 K、M、G)显示大小,使输出更易于阅读。

运行 df -h 命令查看所有已挂载的文件系统,包括我们新挂载的:

df -h

在输出中查找对应于 /dev/sdb 的那一行。它将显示总大小、已用空间、可用空间和挂载点。

Filesystem      Size  Used Avail Use% Mounted on
...
/dev/sdb         98M  2.5M   89M   3% /mnt/data
...

磁盘现在已挂载,/mnt/data 目录充当新磁盘的根目录。让我们向其中写入一个文件以确认其正常工作。我们将使用 tee 配合 sudo,因为挂载点归 root 所有。

echo "Hello LabEx" | sudo tee /mnt/data/test.txt

你可以通过列出目录内容来验证文件是否已创建:

ls /mnt/data

输出应显示你的新文件:

test.txt

你已成功格式化、挂载并向新存储设备写入了数据。

卸载并分离磁盘

在最后这个步骤中,你将学习如何安全地卸载(unmount)和分离(detach)存储设备。在底层设备从系统中移除之前,卸载文件系统是至关重要的。这能确保所有待处理的数据都已写入磁盘,从而防止数据丢失或损坏。

卸载文件系统的命令是 umount。你可以指定设备名称或挂载点(mount point)。我们将使用挂载点。

sudo umount /mnt/data

要确认磁盘已卸载,请再次运行 lsblk。你将看到该 loop 设备不再关联任何挂载点。

lsblk
NAME  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0    7:0    0     4K  1 loop /snap/bare/5
loop1    7:1    0  91.4M  1 loop /snap/lxd/35819
...
loop4    7:4    0   100M  0 loop
...
vda    252:0    0    40G  0 disk
├─vda1 252:1    0     1M  0 part
├─vda2 252:2    0   200M  0 part /boot/efi
└─vda3 252:3    0  39.8G  0 part /

文件系统现在已卸载,我们可以“分离”虚拟磁盘了。在我们的模拟环境中,这意味着解除 loop 设备的关联。由于 /dev/sdb 是指向实际 loop 设备的符号链接(symbolic link),我们需要解析它以获取实际的设备路径,以便正确地分离它。

## 通过解析符号链接来分离 loop 设备
sudo losetup -d $(readlink -f /dev/sdb)
## 删除符号链接
sudo rm /dev/sdb

最后,让我们清理一下,移除我们创建的挂载点目录。

sudo rmdir /mnt/data

你现在已经成功完成了添加、使用和移除存储设备的完整流程。

总结

恭喜你完成本次实验!你已成功学习了在 Linux 环境中配置新存储设备的基本工作流程。

在本次实验中,你练习了以下关键技能:

  • 使用 lsblk 命令识别新的块设备 (block devices)。
  • 使用 mkfs.ext4 在原始磁盘上创建文件系统
  • 使用 mkdir 创建挂载点
  • 使用 mount 命令挂载文件系统使其可访问。
  • 使用 df -h 检查磁盘使用情况
  • 使用 umount 命令安全卸载文件系统
  • 使用 losetup -d 分离 loop 设备以模拟磁盘移除。

这些是在任何 Linux 服务器或工作站上管理存储的基础操作。你现在可以将这些知识应用于管理真实的硬盘、SSD 或 U 盘。我们鼓励你继续探索更高级的存储主题,例如逻辑卷管理 (LVM)、RAID 和不同的文件系统类型。