Chapter 4 FreeBSD系统管理和维护

Table of Contents
4.1 FreeBSD系统备份恢复及迁移
4.2 FreeBSD下的系统监控工具
Jerry

本章介绍FreeBSD系统的一些管理和维护经验

4.1 FreeBSD系统备份恢复及迁移

4.1.1 系统迁移

下面的例子中, 我将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上

  1. 对新的磁盘进行分区

    由于两块硬盘分区的大小不一致, 所以使用了一张FreeBSD的安装光盘进行Minimal的安装, 这时去掉原硬盘, 在ad0上挂载新硬盘, 安装时分区情况如下: /dev/ad0s4a分给`/', /dev/ad0s4b分给swap, /dev/ad0s4d分给`/var', /dev/ad0s4e分给`/tmp', /dev/ad0s4f分给`/usr', /dev/ad0s4g分给`/home'

  2. 迁移`/'数据

    重启进入单用户模式, 将新硬盘设置为从盘, 在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
       
    
  3. 恢复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
       
    
  4. 迁移其他数据

    其他数据可以通过cp, tar, cpio, pax等迁移

  5. 迁移完毕, 关机, 重新挂载新硬盘到ad0, 重启, :)