如何将你的 Linux 主目录移动到另一个驱动器

想把你的Linux主文件夹迁移到另一个硬盘驱动器吗? 这里有一个简单易行的步骤指南,适用于任何Linux发行版。 移动主文件夹意味着你可以重新安装Linux系统,而无需担心丢失个人文件。

为什么要分离你的主文件夹?

当你设置新机器或向现有机器添加额外的硬盘时,你可能会希望将主目录放置在与默认位置不同的驱动器上。

现代个人电脑中越来越流行的一种配置是使用中等大小的固态硬盘(SSD)来安装操作系统,并使用容量更大的固态混合硬盘(SSHD)或传统硬盘(HD)作为主要的数据存储。 或者,你的系统可能只有一个传统硬盘,现在你又添加了一个新的硬盘来增加存储空间。 无论出于何种原因,这里介绍一种简单直接的方法来移动你的主目录。

顺便一提,如果你是从头开始安装Linux系统,你可能会在Linux发行版的安装程序中看到创建单独主目录的选项。 通常,你只需要进入分区选项,创建一个独立的分区,然后将其挂载到“/home”。 但是,如果你的Linux发行版已经安装好了,你可以使用这些步骤将当前的主目录移动到新的位置,而不会丢失任何数据或重新安装操作系统。

在开始之前,请务必进行备份。

识别驱动器

如果你刚刚将新的驱动器安装到你的Linux电脑上,或者将Linux安装在一台有多硬盘的电脑上并重启后,几乎没有明显的迹象表明新硬盘已经存在。

使用fdisk命令可以列出硬盘及其分区

sudo fdisk -l

滚动输出,直到你找到新硬盘。 第一个驱动器通常名为/dev/sda,第二个驱动器名为/dev/sdb,依此类推,每个驱动器的最后一个字母都会递增。 因此,/dev/sde将是系统中的第五个硬盘驱动器。

在这个例子中,新硬盘是要添加到系统中的第二个驱动器。 因此,我们需要寻找/dev/sdb的条目。

/dev/sdb在上面已突出显示。 你会发现它没有描述分区的行。 这表示它是一个全新的硬盘,尚未分区。 我们需要创建分区。 我们可以使用fdisk来实现这一点。 如果你的硬盘驱动器不是/dev/sdb,请确保在命令中将/dev/sdb替换为你的新硬盘的实际驱动器标识符。

sudo fdisk /dev/sdb

当fdisk提示输入命令时,请按字母p。 这将打印硬盘的分区表。 我们知道它不会有任何分区,但这会给我们一些关于硬盘的有用信息。 这也给我们一个很好的机会来确认我们要为其创建分区的硬盘确实是我们打算使用的那块。

它显示这个硬盘是一个1TB的硬盘,这与我们在这台测试机器上的预期相符,所以我们可以继续。

创建分区

按字母n表示创建一个新的分区,然后按p表示创建一个主分区。 当系统要求你输入分区号时,请输入数字1。

我们打算为整个磁盘创建一个分区,所以当提示输入第一个扇区时,我们可以直接按Enter键接受默认值。 然后系统会提示输入最后一个扇区,同样按Enter键接受默认值。

虽然fdisk确认已经创建了一个1TB大小的Linux分区,即分区号1,但是此时硬盘上还没有任何实际的更改。 在你向fdisk发出命令将更改写入硬盘之前,硬盘驱动器不会受到任何影响。 一旦你确认对我们的选择感到满意,请按字母w将更改写入硬盘。

分区已写入/dev/sdb。 让我们来看看发生了什么。 我们再次使用fdisk命令作用于/dev/sdb。

sudo fdisk /dev/sdb

按字母p打印分区表,你会发现现在驱动器上列出了一个分区。 因为这是该驱动器上的第一个分区,所以它被命名为/dev/sdb1。 第二个分区将被称为/dev/sdb2,依此类推。

我们不想对分区进行任何更改,所以按字母q退出。

在分区上创建文件系统

我们需要在分区上创建一个文件系统。 这可以通过mkfs命令轻松实现。 请注意,你必须在命令中包含分区号。 请务必输入/dev/sdb1(分区)而不是/dev/sdb(驱动器)。

sudo mkfs -t ext4 /dev/sdb1

文件系统将被创建,然后你会返回到命令提示符。

挂载新驱动器

要使用新的硬盘驱动器,我们必须将该驱动器上的分区挂载到文件系统中的一个挂载点。 实际上,准确地说,我们既不是挂载驱动器也不是分区,而是挂载文件系统到分区上,通过将其连接到系统的文件系统树。

/mnt这个挂载点和其他位置一样好。 它只是一个临时的挂载点,使我们能够将数据复制到新驱动器。 我们将使用mount命令将文件系统挂载到/dev/sdb的第一个分区上的/mnt。

sudo mount /dev/sdb1 /mnt

如果一切顺利,你会返回到命令行而没有错误消息。 让我们看看是否可以将目录更改为新挂载的文件系统。

cd /mnt

我们可以。 让我们看看里面有什么。

ls -ahl

我们现在位于新的文件系统中。 默认的“lost+found”目录是不需要的,我们可以把它删除。

sudo rm -rf lost+found

复制你的主文件夹

我们需要将旧主目录中的所有内容复制到新挂载的文件系统中。 使用r(递归)和p(保留)选项可以确保所有子目录都被复制,同时保留文件所有权、权限和其他属性。

sudo cp -rp /home/* /mnt

复制完成后,使用ls命令浏览一下,确认你的数据是否在新文件系统的预期位置。 换句话说,如果/mnt是你的主目录,那么所有的内容都存在并且正确吗?

ls
ls dave

你可能需要比我们在本文研究的测试机器上做得更彻底。 作为安全措施,我们将重命名并保留你旧的/home目录,直到你确信可以安全地删除它为止。

sudo mv /home /home.orig

我们将创建一个新的空主目录。

sudo mkdir /home

我们将使用新的空主目录作为新硬盘上文件系统的挂载点。 我们需要从/mnt卸载它,然后在/home上重新挂载它。 请注意,命令umount在“u”之后没有“n”。

sudo umount /dev/sdb1
sudo mount /dev/sdb1 /home/

测试你的新主目录

让我们看看/dev/sdb1分区的属性现在是什么:

df /dev/sdb1

我们会看到文件系统的名称、分区的大小以及分区的已用和可用空间,重要的是,它的挂载位置。 它现在是我们的/home目录。 这表示我们应该能够像使用旧的/home目录一样来引用它。

如果我们移动到文件系统中的某个任意位置,我们应该能够使用 ~ 波浪号快捷方式切换回/home。

cd /
cd ~
pwd
ls

cd /home
ls
cd dave
ls
ls -a

我们可以使用显式命令和使用~快捷方式在文件系统中来回移动到/home。 我们期望的文件夹、文件和点文件都存在。 一切看起来都很好。

如果缺少任何内容,我们可以从/home.orig目录中复制,我们仍然可以在文件系统的根目录中访问该目录。 但一切看起来都很好。

现在我们需要在每次启动计算机时自动挂载/dev/sdb1。

编辑fstab

“fstab”文件包含系统启动时将要挂载的文件系统的描述。 在对其进行任何更改之前,我们需要对其进行备份,以便在出现问题时可以恢复它。

sudo cp /etc/fstab /etc/fstab.orig

现在我们可以编辑fstab文件了。

sudo gedit /etc/fstab

你必须在文件底部添加一行来挂载新的/home目录。 如果你的驱动器和分区标识符与本示例中使用的不同,请将其替换为此处显示的/dev/sdb1。

在行首键入分区的名称,然后按Tab键。
键入挂载点/home,然后按Tab键。
键入文件系统描述ext4,然后按Tab键。
键入安装选项的默认值,然后按Tab键。
为文件系统转储选项键入数字0,然后按Tab键。
为文件系统检查选项键入数字0。

保存fstab文件。

重新启动系统

我们需要重新启动来验证一切是否按计划进行,并且你已经无缝连接到新的/home目录。

如果没有,你仍然拥有原始的/home目录和fstab文件的安全网,如果需要,可以恢复这些文件。 因为我们采取了预防措施(复制/home目录和fstab文件),你可以很容易地将系统恢复到开始之前的状态。

sudo reboot now

最终检查

当你的系统重新启动后,让我们检查一下你的/home目录是否真的在你的新硬盘上,并且你的系统没有以某种方式(奇迹般地)恢复到使用旧的/home目录。

df /dev/sdb1

太棒了,它挂载在/home上。 任务完成。

一旦你完全确定不再需要旧/home目录的安全备份,你可以将其删除:

cd /
sudo rm -rf home.orig/

当然,如果你确实发现有些内容没有从旧的/home复制到新的/home,你将能够从我们开始之前所做的备份中恢复它。

家,甜蜜的家

现在你已经将/home目录与操作系统的其他部分分离开来,你可以重新安装操作系统,而你的数据不会受到影响。 你所要做的就是编辑fstab文件,将你的第二个驱动器挂载到/home。

因为所有的点文件都在/home目录中,所以当你启动各种应用程序时,它们会找到你的所有设置、首选项和数据。

它消除了重新安装的痛苦并降低了升级的风险。