商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 系统应用 > FreeBSD 数据转移办法

FreeBSD 数据转移办法

  发布于2026-06-02 阅读(0)

扫一扫,手机访问

在开始之前,先确认硬件已经就位:关机,把新硬盘装上,再重新开机。开机后第一件事,就是检查系统是否识别到了新设备。用 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/var

3. 复制数据。这里强烈建议用 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- -r

4. 数据复制完成后,检查一下有没有遗漏,然后分别卸载分区:

hpserver# umount /mnt/root
hpserver# umount /mnt/usr
hpserver# umount /mnt/var

5. 关掉机器,把旧硬盘摘下来,将新硬盘装到旧硬盘原来的接口位置。这一步不能省略——如果新硬盘仍然插在原来的 ad2 位置,而 /etc/fstab 里写的是 ad0,启动时系统会找不到 /usr、/var 等文件系统。重新开机,如果没有异常,恭喜你,迁移成功。万一出了问题,回头检查每一步有没有遗漏。无论结果如何,都别急着清空旧硬盘——让新系统稳定运行几天,确认一切正常之后再处理旧盘。

最后再说一句:数据迁移这件事,容错空间很小。一个不小心就可能弄丢数据。所以每一步最好都停下来想一想,确认无误再继续。小心驶得万年船。

本文转载于:https://www.jb51.net/os/Unix/1569.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注