本章介绍FreeBSD系统的一些管理和维护经验
下面的例子中, 我将FreeBSD从一块20G的硬盘迁移到另一个80G 的硬盘的最后一个主分区, 该分区大小基本上仍然在20G左右
原分区情况
Filesystem 1M-blocks Used Avail Capacity Mounted on /dev/ad0s1a 313 67 221 23% / devfs 0 0 0 100% /dev /dev/ad0s1e 495 342 114 75% /tmp /dev/ad0s1f 7096 5957 570 91% /usr /dev/ad0s1d 495 339 117 74% /var linprocfs 0 0 0 100% /usr/compat/linux/proc procfs 0 0 0 100% /proc
新硬盘计划挂载在/dev/ad0上
对新的磁盘进行分区
由于两块硬盘分区的大小不一致, 所以使用了一张FreeBSD的安装光盘进行Minimal的安装, 这时去掉原硬盘, 在ad0上挂载新硬盘, 安装时分区情况如下: /dev/ad0s4a分给`/', /dev/ad0s4b分给swap, /dev/ad0s4d分给`/var', /dev/ad0s4e分给`/tmp', /dev/ad0s4f分给`/usr', /dev/ad0s4g分给`/home'
迁移`/'数据
重启进入单用户模式, 将新硬盘设置为从盘, 在ad0挂载原硬盘, ad1挂载新硬盘, 由于分区的情况不一致, 不能使用dump/restore进行恢复`/', 因为FreeBSD的分区表信息 位于/dev/ad0s4a, 也就是现在的/dev/ad1s4a上的前512字节中, 直接的dump/restore会 导致分区信息被覆盖, 因此对`/'采用pax进行备份和恢复, 最后修改fstab中各个挂载点的设备, 记得修改为ad0s4x, 因为最后新硬盘要挂载在ad0上, 命令如下:
# /sbin/fsck -p # /sbin/mount -a # /sbin/swapon -a # /sbin/adjkerntz -i # export HOME=/root # export TERM=vt200 # csh -l # mkdir -p /mnt/new/root # mkdir -p /mnt/new/var # mkdir -p /mnt/new/tmp # mkdir -p /mnt/new/usr # newfs /dev/ad1s4a # mount /dev/ad1s4a /mnt/fs/root # cd /mnt/fs/root; pax -rw -pe -X / . # cd /mnt/fs/root/etc # vi fstab
恢复FreeBSD其他分区的数据
这里由于不涉及对分区信息的操作, 可以使用dump/restore进行数据迁移, 同样也可以使用pax进行迁移, 这里使用dump/restore进行迁移
# newfs /dev/ad1s4d # newfs /dev/ad1s4e # newfs /dev/ad1s4f # newfs /dev/ad1s4g # newfs /dev/ad1s4h # mount /dev/ad1s4d /mnt/new/var # mount /dev/ad1s4e /mnt/new/tmp # mount /dev/ad1s4f /mnt/new/usr # (dump -0b 512 -f - /usr) | (cd /mnt/new/usr; restore -rb 512 -f - ) # (dump -0f - /var) | (cd /mnt/new/var; restore -rf - ) # umount /mnt/new/var # umount /mnt/new/tmp # umount /mnt/new/usr # tunefs -n enable /dev/ad1s4d # tunefs -n enable /dev/ad1s4e # tunefs -n enable /dev/ad1s4f # tunefs -n enable /dev/ad1s4g # tunefs -n enable /dev/ad1s4h
迁移其他数据
其他数据可以通过cp, tar, cpio, pax等迁移
迁移完毕, 关机, 重新挂载新硬盘到ad0, 重启, :)