分类: 系统运维
2010-06-01 00:36:55
在这个新的技巧集中,Daniel Robbins 说明了如何在正在运行的系统上更改分区布局。同时他还介绍了几个诀窍,从而使您可将停机时间缩到最短,并可避免犯严重错误。在这篇技巧中,他将说明如何将 /home 移动到另一个分区上。
/home 分区是最常移动的分区之一。某些时候,/home 中的全部空间都用完了,而且需要增加一个硬盘驱动器。另一些时候,/home 被设置为根分区的一部分,为了提高性能或便于备份,可能需要将它移动到别的地方。我会针对每种情况说明如何安全有效地移动 /home。
警告
下面的技术说明如何移动一个或多个分区。尽管这项技术的设计使您能够“撤销”失败的分区移动,但它并不防止用户的错误。换言之,只要进行格式化分区或复制大量文件的操作,就存在因输入错误而导致大量数据被破坏的可能性。因此,强烈建议您 在行动之前采取适当的措施来备份所有的重要文件。
现在您已作好准备,我们就可以开始移动 /home 了。您要完成的确切步骤取决于 /home 当前是驻留在它自己单独的分区上,还是位于根分区上。在我们完成下面的步骤时,要紧记这一点(必要时我将提醒您)。如果您正在将 /home 移动到一个新的硬盘驱动器上,则这个驱动器现在应该物理上安装在您的系统中。
如果您正在将 /home 移动到一个现有的分区(没有必要一定是 ext2 文件系统,只要目标主分区或扩展分区存在即可)上,则您可以直接转到 步骤 2。
如果新分区还不存在,则需要用 cfdisk(首选)或 fdisk 来创建一个新分区。如果这个分区不在第一个驱动器上,则别忘了将这个设备的名称指定为 cfdisk 或 fdisk 的第一个参数。在创建了适当的主分区或扩展分区以后,应重新启动系统以便正确地重新读取分区表。这是唯一需要重启系统的时候。
要在新分区上创建文件系统,首先要知道这个新分区的准确设备名(例如,/dev/sda5)。如果您不能确定准确的设备名,请立即停下来,仔细核对设备名。然后以 root 身份键入以下命令:
# mkfs.ext2 /dev/--? |
在上面和以后的代码样例中,应该用目标分区名替换 --?。在执行此命令以后,目标分区将包含一个空的 ext2 文件系统。
创建一个名为 /mnt/newpart 的目录,然后将新分区挂载到这个目录上:
# mount /dev/--? /mnt/newpart |
为了使系统的可用性达到最大限度,我尽量推迟这一步,但现在我们必须进入单用户模式,然后将 /home 中的文件复制到 /mnt/newpart 中。您不应该让 /home 中的任何文件处于打开状态,而进入单用户模式消除了这种可能性:
# init 1 |
如果出现提示,请输入 root 口令来执行系统维护任务。您现在应该在 root shell 中。
键入以下命令:
# cd /home # cp -ax * /mnt/newpart |
cp -ax 命令循环地将 /home 中的内容复制到 /mnt/newpart 中,并保留全部文件属性,也不会交叉任何挂载点。该命令执行完以后,/mnt/newpart 中将包括 /home 中当前包含的全部文件和目录的精确副本。如果原来的 /home 在它自己单独的分区上(在 /etc/fstab 中用单独一行列出),请转到 步骤 6a。否则,请转到 步骤 6b。
下面的说明适用于原来的 /home 已经在它自己的专用分区上的系统。如果不是这种情况,请参阅 步骤 6b。
键入以下命令卸载原来的分区:
# cd / # umount /home |
然后,卸载并重新挂载新分区:
# umount /mnt/newpart # mount /dev/--? /home |
现在就可以通过 /home 访问新分区了,并可立即投入使用。我们可以在多用户模式下执行最后几个步骤。请按 CTRL-D 退出单用户模式,这样系统就会回到启动运行状态。
重要步骤: 在系统正常启动以后,以 root 身份登录,然后编辑 /etc/fstab,以便将 /dev/--? 自动挂载到 /home 上,而不是仍然在这个挂载点挂载原来的分区。例如,将下面这一行:
/dev/hda3 /home ext2 defaults 1 2 |
更改为:
/dev/--? /home ext2 defaults 1 2 |
如果 /home 以前不在它自己单独的分区上(例如,如果 /home 只是根分区上的一个目录),请按下面的说明操作。执行以下命令:
# cd / # mv /home /home.old # mkdir /home # mount /dev/--? /home |
现在,请按 CTRL-D 离开单用户模式。当系统回到启动运行状态以后,编辑 /etc/fstab 文件,在其中添加类似这样一行:
/dev/--? /home ext2 defaults 1 2 |
这样,当下次重新启动系统时,您的新分区将被正确挂载。
我们特意将原来的 /home 目录/分区保留下来,以防复制文件时出现问题。在证实系统稳定运行以后,您就可以将原来的 /home 分区用于其他目的,或者删除原来的 /home 目录。
恭喜您,您已经移动了 /home!在下一篇技巧中,我们将重新配置一个系统,以使 /tmp 和 /var 使用它们自己的共享分区。下篇再见。
Daniel Robbins 住在新墨西哥州 Albuquerque 市,他是 Gentoo Project 的首席体系结构设计师,Gentoo Technologies 公司的首席执行官,Linux Advanced Multimedia Project (LAMP) 的顾问,他还是 Macmillan 公司出版的 Caldera OpenLinux Unleashed、 SuSE Linux Unleashed和 Samba Unleashed 几本书的重要作者之一。由于深受 Pac Man 的影响,Daniel 在读二年级时第一次接触到 Logo 编程语言后即执迷于计算机。这可能是他后来作为 SONY Electronic Publishing/ 的首席图形艺术家的原因。Daniel 喜欢与他的妻子 Mary 共度美好时光,Mary 今年春天已经怀孕。可以通过 与 Daniel 联系。 |