FreeBSD 硬盘系统和数据的复制迁移实战(clone disk on FreeBSD)

FreeBSD 硬盘系统和数据的复制迁移实战
 
陈海青 (joson chen) http://www.chq.name
2006.09.09
 
最近,为更换硬盘,参照有关资料,进行了一次 FreeBSD 下的硬盘数据迁移,具体情况如下:
1 :起因: 原有的硬盘容量小、有坏区、 swap 设置不合理、 /var 太小,所以需要进行更换
 
2 :计划: 1 )使用 sysinstall--fdisk 划分好新硬盘的 slice (片段,一块硬盘分成最多四个 ),本次划分为 2 slice, 用其中的 19GB 用于 Freebsd );  2) 使用 sysinstall--label 划分新硬盘的 partition (分区,每一个 slice 上又可以分成最多 8 partition ): / (512MB),swap (512MB),/tmp (1GB),/var (2G, 数据库等 ) /usr (10GB),(/home (rest of the hdd));
 
3: 操作步骤:
1 将新硬盘装上并让系统正确识别。原硬盘为 IDE0 口上的 Master,FreeBSD 识别为 ad0 。为了不用设硬盘跳线,这里将新硬盘到 IDE1 接口的 Master ,系统识别为 ad2 ;如果你想和旧硬盘接在同一数据线线上,即 IDE0 接口,则必须将跳线设为 slave, 系统识别为 ad1 1 、关机,将新硬盘装上,重新开机。 2 、开机后查看是否系统是否已经识别到新硬盘了:
http://www.chq.name # dmesg | grep ad2
 
2 记下旧硬盘文件系统所对应的 mount :查看 /etc/fstab ,并且运行命令 df, 记录结果。新硬盘分区次序基本按照旧的一样,避免混淆。

       3
使用sysinstall FDISK命令把新硬盘分片,设置MBR 然后用 LABEL 命令分区。可以先自动分区,再对照原来的次序修改,假设原来的文件系统 /dev/ad0s1g 对应 /usr ,那你新硬盘 /dev/ad2s1g 就用来做 /usr ,划分好后,按 M 分别清空所有文件系统的 mount 点,因为我们还没有建立临时的 mount 的目录,不清空会和系统原来的 mount 冲突的。
 
4 创建临时的目录用来作临时 mount ,用于以下步骤挂载文件系统。
http://www.chq.name# mkdir /backup
http://www.chq.name# mkdir /backup/root
http://www.chq.name# mkdir /backup/usr
http://www.chq.name# mkdir /backup/var
http://www.chq.name# mkdir /backup/tmp
 
5 停止原系统的主要服务,如 APACHE MYSQL 等,或者重启后进入单用户状态,准备复制。 进入单用户模式的方法:1.重启,在启动菜单开始倒计时的时候按下空格(space)键,输入boot -s ,然后在#后输入
fsck -p
mount -u /
mount -a
swapon -a 
adjkerntz -i
 
6 运行以下脚本,执行硬盘数据和系统的复制。要注意根据前面记录的 /etc/fstab df 结果查看文件系统的对应关系,修改 mount等 脚本。
#1 - create new filesystems (newfs the drive)
 #2 - mount the partitions
 #3 - dump the data from my old drive, and restore it to my new one
 #4 - unmount the new drives partitions
 #5 - enable softupdates on the new drive (optional)

#!/bin/sh
 newfs /dev/ad1s1a
 newfs /dev/ad1s1e
 newfs /dev/ad1s1f
 newfs /dev/ad1s1g
 mount /dev/ad1s1a /backup/root
 mount /dev/ad1s1e /backup/var
 mount /dev/ad1s1f /backup/tmp
 mount /dev/ad1s1g /backup/usr
( dump -0f - / ) | ( cd /backup/root ; restore -rf - )
( dump -0f - /var ) | ( cd /backup/var ; restore -rf - )
( dump -0f - /usr ) | ( cd /backup/usr ; restore -rf - )
( dump -0f - /tmp ) | ( cd /backup/tmp ; restore -rf - )
# umount /backup/root
# umount /backup/var
# umount /backup/usr
# umount /backup/tmp
# tunefs -n enable /dev/ad2s1a
# tunefs -n enable /dev/ad2s1e
# tunefs -n enable /dev/ad2s1f
# tunefs -n enable /dev/ad2s1g
#end
 
其中:( 1 ): ( dump -0f - / ) | ( cd /backup/root ; restore -rf - ) 这是把老的根目录下所有内容复制输出到管道 , restore 从管道里读数据 , 写入当前目录所在目录 .
(2):进行dump/restore的操作可能会花点时间,需耐心等待,我迁移了3GB数据,运行脚本用了大约40分钟。
 
7 调整新硬盘中的 /etc/fstab, Device 等修正,我原来使用的是第二块 slice, 现在使用第一个 slice, 于是修改了 Device 列:
http://www.chq.name # mount /dev/ad1s1a /backup/root
http://www.chq.name # vi /backup/root/etc/fstab
 
8 )关机,摘掉原来的硬盘,把新硬盘挂到旧硬盘原来的位置 ,这步不要省略了,如果你不换位置,系统还是认为新硬盘是 ad2 ,由于你的 /etc/fstab 里面是对应 ad0 的,所以启动会找不到 /usr /var 等文件系统。
 
9) 注意事项 : 重新启动,如果没有什么异常,那恭喜你,数据迁移已经成功,否则,请再看看有什么操作错误或者忘记做哪一步了。建议,让新的系统运行几天,正常后再处置旧硬盘。 切记,数据迁移的是一件比较危险的事情,操作过程中不能有差错,否则可能导致你原来的数据丢失,所以必须非常谨慎。
 
10 我的部分操作输出结果 http://www.chq.name :
# cd /
# mkdir backup
# cd backup
# mkdir root
。。。
www# newfs /dev/ad2s1a
/dev/ad2s1a: 1024.0MB (2097152 sectors) block size 16384, fragment size 2048
        using 6 cylinder groups of 183.77MB, 11761 blks, 23552 inodes.
super-block backups (for fsck -b #) at:
 160, 376512, 752864, 1129216, 1505568, 1881920
。。。
# sh restore.sh
  DUMP: WARNING: should use -L when dumping live read-write filesystems!
  DUMP: Date of this level 0 dump: Thu Sep  7 22:22:40 2006
  DUMP: Date of last level 0 dump: the epoch
  DUMP: Dumping /dev/ad0s2a (/) to standard output
  DUMP: mapping (Pass I) [regular files]
  DUMP: mapping (Pass II) [directories]
  DUMP: estimated 37230 tape blocks.
  DUMP: dumping (Pass III) [directories]
  DUMP: dumping (Pass IV) [regular files]
warning: ./.snap: File exists
  DUMP: DUMP: 37868 tape blocks
  DUMP: finished in 7 seconds, throughput 5409 KBytes/sec
  DUMP: DUMP IS DONE
  DUMP: WARNING: should use -L when dumping live read-write filesystems!
  DUMP: Date of this level 0 dump: Thu Sep  7 22:22:49 2006
  DUMP: Date of last level 0 dump: the epoch
……
  DUMP: finished in 1 seconds, throughput 7128 KBytes/sec
  DUMP: DUMP IS DONE
tunefs: soft updates set
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FreeBSD操作系统设计与实现》是一本介绍FreeBSD操作系统的权威性书籍。该书籍全面解析了FreeBSD操作系统的设计原理与实现细节,深入讲解了FreeBSD操作系统的核心概念、功能模块和体系结构。 《FreeBSD操作系统设计与实现》一书主要分为五个部分:系统概述、进程管理、存储管理、文件系统和设备驱动。每个部分都对应着FreeBSD操作系统的一个重要方面,详细介绍了相应的设计原理和实现方式。 在系统概述部分,该书首先对FreeBSD操作系统的历史背景、发展过程和基本特性进行了介绍。然后,深入剖析了FreeBSD操作系统的体系结构,包括内核模块的组织结构、进程通信机制、虚拟内存管理和网络子系统等。 在进程管理部分,该书详细讨论了FreeBSD操作系统的进程管理机制,包括进程的创建、调度与退出,进程间的通信和同步方法,以及线程管理和多核支持等。 存储管理部分着重介绍了FreeBSD操作系统的存储管理机制。主要包括物理内存管理、页表管理、虚拟内存系统和缓存管理等内容。同时,该书还对FreeBSD中常用的文件系统如UFS和ZFS进行了深入讲解。 在文件系统部分,该书介绍了FreeBSD操作系统的文件系统层次结构、文件系统缓存和文件系统的操作接口。同时,还讨论了FreeBSD中的文件系统实现原理和常用的文件系统类型。 最后,设备驱动部分详细说明了FreeBSD操作系统的设备管理机制和驱动框架。该书介绍了设备驱动的注册、初始化和操作方式,并讨论了常见设备的驱动实现方法。 总之,《FreeBSD操作系统设计与实现》是一本全面系统地介绍FreeBSD操作系统的权威书籍。它对FreeBSD操作系统的设计原理和实现细节进行了深入剖析,对于对操作系统设计和实现有兴趣的读者来说是一本非常有价值的参考资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值