將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, 重啟.