在动手操作之前,请先确认硬件已准备就绪:关闭系统,安装好新硬盘,然后重新启动。开机后首要任务是检查系统能否识别新设备。运行 dmesg | grep ad2 命令查看,如果输出类似于 ad2: 9765MB [19841/16/63] at ata1-master UDMA33 的信息,说明新硬盘已被成功检测到。若未显示任何内容,就需要重新检查接线或硬件兼容性。
新硬盘安装完成后,接下来进行数据迁移。下面以两个常见场景为例,详细演示具体操作步骤。两种方法各有适用场景,关键在于根据自身需求选择最合适的方案。
一、增加一块硬盘,将原硬盘 /var 数据迁移至新硬盘
系统已经正常运行,FreeBSD 不像 PQMagic 那样能够随意调整分区空间而不损坏数据。当 /var 空间不足时,唯一的方法就是添加一块硬盘,将 /var 的数据迁移过去。这个过程听起来有些复杂,但只要步骤清晰,实际操作并不困难。
首先对新硬盘进行分区。可以使用 sysinstall 或命令行工具。虽然 fdisk 更为灵活,但个人建议采用 sysinstall,图形界面下操作更直观,不易出错。分区完成后,再通过 sysinstall 中的 Label 功能创建文件系统。注意:文件系统的类型必须与目标挂载点匹配。
分区挂载:
hpserver# mount /dev/ad1s1e /mnt接下来是数据迁移环节。这里有两条路径可选:tar 或 dump/restore。下面分别介绍,大家可根据实际情况灵活选择。
方法一:使用 tar 备份与还原
hpserver# cd /var
hpserver# tar cf - * | (cd /mnt; tar xf -)这种方法简单直接,但需注意:如果 /var 中存在正在被占用的文件(如日志文件、数据库文件),tar 可能会报错甚至中途中断。笔者曾遇到此类情况,一次备份中途失败,排查发现是被某个临时文件卡住。
方法二:使用 dump/restore(推荐)
根据个人经验,我更推荐使用 dump。因为它以数据块为单位读取,而非文件级别,正在使用中或临时文件不会干扰备份。操作如下:
hpserver# cd /mnt
hpserver# dump -f- /var | restore -f- -r执行过程中会看到类似以下的输出:
DUMP: Date of this level 0 dump: Wed Jan 14 23:44:35 2004
DUMP: Date of last level 0 dump: the epoch
DUMP: Dumping /dev/ad0s1e (/var) to standard output
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 305 tape blocks.
DUMP: dumping (Pass III) [directories]
DUMP: dumping (Pass IV) [regular files]
DUMP: DUMP: 361 tape blocks
DUMP: finished in less than a second
DUMP: DUMP IS DONE有一点需要提醒:在备份期间应确保没有新数据写入原 /var 目录,否则这部分增量数据将无法被迁移。备份结束后,检查 /mnt 中的内容是否完整,然后卸载:
hpserver# ls /mnt
hpserver# umount /mnt最后一步,编辑 /etc/fstab,将原先指向 /var 的文件系统设备名修改为新分区的名称(例如 /dev/ad1s1e),然后重启系统,新分区即可生效。
二、硬盘复制(整体迁移)
如果旧系统盘存在一些小问题,或容量不足需要整体更换,可以直接将旧硬盘的全部数据复制到新硬盘,然后替换旧盘。安装步骤与上述类似,但必须先弄清旧硬盘上每个分区对应的挂载点。一个小技巧:对照 /etc/fstab 记录分区名称与挂载点,新硬盘分区时按照相同顺序命名,这样后续挂载时不易混淆。
具体步骤如下:
1. 使用 sysinstall 对新硬盘进行分区并设置 MBR。分区顺序应模仿旧硬盘:例如旧硬盘的 /dev/ad0s1g 对应 /usr,新硬盘则用 /dev/ad2s1g 对应 /usr;旧硬盘的 /dev/ad0s1e 对应 /var,新硬盘则用 /dev/ad2s1e 对应 /var。注意:在 Label 阶段,务必清空所有文件系统的挂载点(按 M 键),因为当前尚无临时挂载目录,不清空会与运行中的系统冲突。
2. 创建临时挂载点并挂载新分区:
hpserver# cd /mnt
hpserver# mkdir root
hpserver# mkdir usr
hpserver# mkdir var然后根据记录依次挂载:
hpserver# mount /dev/ad2s1a /mnt/root
hpserver# mount /dev/ad2s1g /mnt/usr
hpserver# mount /dev/ad2s1e /mnt/var3. 复制数据。这里强烈建议使用 dump 而非 tar。因为 tar 在复制根分区时如果不加排除参数,会将当前系统的所有文件(包括 /proc、/sys 等虚拟目录)一并复制,这并非我们期望的结果。而 dump 则能避开此问题:
hpserver# cd /mnt/root
hpserver# dump -f- / | restore -f- -r
hpserver# cd /mnt/var
hpserver# dump -f- /var | restore -f- -r
hpserver# cd /mnt/usr
hpserver# dump -f- /usr | restore -f- -r4. 数据复制完成后,检查是否有遗漏,然后分别卸载分区:
hpserver# umount /mnt/root
hpserver# umount /mnt/usr
hpserver# umount /mnt/var5. 关闭机器,拔掉旧硬盘,将新硬盘安装到旧硬盘原来的接口位置。这一步不可省略——如果新硬盘仍插在原 ad2 位置,而 /etc/fstab 中写的是 ad0,启动时系统将找不到 /usr、/var 等文件系统。重新开机后,若一切正常,恭喜你迁移成功。若出现问题,请回头逐一检查每一步是否遗漏。无论结果如何,都不要急于清空旧硬盘——让新系统稳定运行几天,确认一切正常后再处理旧盘。
最后再提醒一句:数据迁移容错空间很小,稍有不慎就可能丢失数据。因此每一步最好停下来思考,确认无误后再继续。谨慎行事,方能万无一失。
