如何在 Linux 上将 Ext2 或 Ext3 文件系统迁移到 Ext4

是否考虑过升级 Linux 文件系统,但又担心过程过于复杂?本文将详细介绍如何在不完全重新安装系统的情况下,将 ext2 或 ext3 文件系统升级到 ext4。

Linux 文件系统的演变

ext3 文件系统诞生于 2001 年,在当时可谓是先进的技术。而更早的 ext2 文件系统,其历史可以追溯到 1993 年,在现代计算机领域中,它更像是一个考古遗迹。相比之下,ext3 可以被认为是一位值得尊敬的长者。

在 Linux 世界中,ext4 是目前较为先进的文件系统。它于 2008 年发布,不仅速度更快,而且更不容易产生碎片。ext4 能够处理更大的文件系统和更大的文件,拥有更精确的文件日期时间戳,当然,它的速度也快得多。

升级:必要性与替代方案

在考虑升级文件系统之前,我们有必要仔细权衡利弊。实际上,您可能并不一定需要升级文件系统。

更合理的做法可能是升级整个 Linux 系统。这意味着需要多次备份数据,然后擦除当前系统,重新安装一个现代的发行版,最后再恢复您的数据。这是一个彻底的更新过程,它能让您获得新版 Linux 发行版、更新的软件以及全新安装的文件系统带来的好处。

但如果您的硬件实在无法运行现代 Linux 发行版,哪怕是像 LubuntuLinuxLiteCrunchBang++ 这样的轻量级版本,而您又必须坚持使用现有的 Linux 系统,那么请务必注意以下几点。

要将文件系统升级到 ext4,您的内核版本必须至少为 2.6.28。如果您的内核版本低于此要求,则必须先升级内核。

警告:在内核版本不满足要求的情况下,请勿尝试此操作,否则可能会导致计算机无法启动。在继续之前,请务必检查您正在使用的内核版本。

同时,请确保您手头有当前 Linux 版本的安装光盘,并做好备份。升级文件系统并非完全没有风险。

备份是您的安全网。在执行任何操作之前,请多次备份数据到不同的存储介质,并确保您的旧版 Linux 安装光盘也准备就绪。如果出现严重问题,您可以使用旧版 Linux 重新安装系统并恢复数据。

您还需要一个现代 Linux 发行版的 Live CD/DVD 来进行文件系统升级,所以请提前准备好。

本文的撰写,基于使用 2009 年 4 月发布的 Ubuntu Jaunty Jackalope 进行的研究,该系统使用 ext3 作为文件系统。

准备工作:检查内核和磁盘

第一步是使用 uname 命令检查内核版本。此命令用于显示各种系统信息。

在旧的 Linux 计算机上打开终端窗口,输入 uname -r 并按 Enter 键。

示例中,Linux 版本使用的是内核版本 2.6.28-11,满足了最低内核版本要求。

再次强调,如果您的内核版本不满足要求,请立即停止操作。必须达到或超过此内核版本号。

接下来,我们将使用 blkid 命令检查磁盘标识符,该命令用于识别系统上的块设备。

blkid

该系统有一个硬盘驱动器 (sda),上面有一个文件系统 (sda1),它被挂载在 /dev/sda1 上。这是一个 ext3 文件系统,也就是我们要转换的文件系统。

此外还有一个名为 swap 的文件系统,但我们不需要关注它。

使用 Live CD 重启系统

插入 Live CD 并重新启动计算机。您可能需要在重启过程中按下某个键,才能让计算机从 CD 启动。要按下的键会在启动过程的早期阶段显示,请注意不要错过。如果错过了,请重新启动并重试。

当您启动到 Live CD 环境时,请务必确保您不会意外启动安装程序。花点时间仔细阅读选项,如果有一个类似“Try DistributionName”的选项,请选择该选项。

获取 Root 权限

打开终端窗口并键入以下命令,这将使您获得 root 权限,从而无需在每个命令前使用 sudo

sudo bash

请注意,命令提示符已更改,您现在拥有 root 权限,请谨慎操作。

再次识别文件系统

我们需要再次识别文件系统,以了解它们在这个 Linux 实例中的显示方式。

fdisk -l

您将看到类似以下内容的输出:

Live CD Linux 已经找到并识别了我们之前标识为 sda1 的文件系统。这是一个重要的里程碑。

下一步就是转换文件系统。

转换文件系统

这里有两个命令,一个用于从 ext2 转换为 ext4,另一个用于从 ext3 转换为 ext4。请务必使用适合您的命令!

要从 ext2 转换为 ext4,请使用以下命令:

tune2fs -O extents,uninit_bg,dir_index,has_journal /dev/sda1

要从 ext3 转换为 ext4,请使用以下命令:

tune2fs -O extents,uninit_bg,dir_index /dev/sda1

命令执行后,可能会出现没有发生太多事情的错觉。您将返回到命令提示符。如果看到一些输出,则可能是错误消息。所以,没有消息就是好消息。

检查文件系统

即使没有错误报告,我们也要彻底检查整个文件系统是否存在问题。我们将使用一个名为 e2fsck 的命令,它是一个用于检查 文件系统完整性 的工具。它还可以尝试修复发现的任何问题。 e2fsck 工具适用于 ext2、ext3 和 ext4 文件系统。

-p (preen) 选项使 e2fsck 尝试修复错误,而 -f (force) 选项使 e2fsck 检查文件系统,即使文件系统看起来很干净。

e2fsck -pf /dev/sda1

没有报告错误。现在我们可以尝试挂载文件系统了。

挂载文件系统

我们需要调整文件系统表 (fstab) 和 grub 引导加载程序以使用转换后的文件系统。为此,我们必须挂载文件系统。我们将把它挂载在 /mnt 上。我们之前将文件系统标识为 sda1,所以我们的命令是:

mount -t ext4 /dev/sda1 /mnt

现在文件系统已挂载,我们应该能够列出其中的内容。让我们检查一下。文件系统的根目录将位于挂载点 /mnt

ls /mnt

一切正常,这让人感到鼓舞。

编辑 fstab

我们需要编辑 fstab 文件,并将所有对 ext3 (或 ext2) 的引用更改为 ext4。

此示例使用的 Live CD 上有 nano 编辑器。这是一个简单易用的编辑器,我们将使用它。如果您的 Live CD 上没有 nano,那么发行版中也会包含另一个编辑器。

nano /mnt/etc/fstab

将出现 nano 编辑器窗口。您需要查找字符串“ext3”或“ext2”的出现,并将它们更改为“ext4”。在此示例中,出现了一次 ext3,并且它被突出显示。

将 ext3 替换为 ext4。

您需要保存文件并退出编辑器。在 nano 中,Ctrl+O 将保存文件,而 Ctrl+X 将关闭编辑器。

升级 Grub

由于我们已将 sda1 文件系统挂载在 /mnt 上,因此文件系统中目录的路径实际上比平时深了一层。这就是为什么我们提供给 nano 的路径是 /mnt/etc/fstab 而不是通常的 /etc/fstab。

因为 grub 期望在特定位置找到文件,我们需要让文件系统看起来像正常挂载一样。我们需要文件系统的根位于 / 而不是 /mnt。chroot 命令允许我们运行命令 shell 并 指定我们希望使用的根点。

我们使用的命令是:

chroot /mnt

请注意,命令提示符已更改。

我们现在可以发出 update-grub 命令,使 grub 读取 fstab 文件并重新配置自己。

update-grub

一旦 grub 完成重新配置,我们需要在硬盘驱动器上安装一个新的 grub 实例。请注意,这是硬盘驱动器 sda,而不是文件系统 sda1。不要包含“1”,只需输入“sda”。

grub-install /dev/sda

重启 Linux 系统

重新启动系统并取出 Live CD。系统重新启动后,打开终端窗口,然后输入以下命令:

blkid

如您所见,文件系统现在是一个 ext4 文件系统。

本文研究的机器重启花费了很长时间(超过十分钟),一度被认为出现了问题,不会恢复。可能是因为它是一台虚拟机,或者某些文件系统转换发生在第一次启动期间。但最终,耐心得到了回报,系统最终恢复。如果您的机器也出现类似情况,请耐心等待,一切可能没有丢失。

随后的重启速度恢复正常。

更好的选择:升级您的 Linux 系统

至此,您成功升级了文件系统。但您仍然在现代文件系统上使用旧版本 Linux 的混合系统。

如果迁移到新的文件系统对您来说非常重要,并且您的硬件条件允许,那么迁移到当前 Linux 发行版是最佳选择。您将享受到由此带来的所有其他安全和软件优势。

尽管如此,如果别无选择,这些步骤将允许您升级您的文件系统。