FreeBSD 硬盘系统和数据的复制迁移实战--www.chq.name

本文详细介绍了在FreeBSD系统中进行硬盘数据迁移的过程,包括硬盘分区、文件系统复制及系统配置调整等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FreeBSD 硬盘系统和数据的复制迁移实战--www.chq.name

陈海青(joson chen) http://www.chq.name

2006.09.09

最近,为更换硬盘,参照有关资料,进行了一次FreeBSD下的硬盘数据迁移,具体情况如下:

1:起因:原有的硬盘容量小、有坏区、swap设置不合理、/var太小,所以要进行更换

2:计划:1)使用sysinstall--fdisk划分好新硬盘的slice,......

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
 
 





hunreal   发表于: Mon 2006-09-1120:21:18  : 

dump的时候加上 大cache 的参数应该能加快点速度 ,对于迁移,bsdtar肯定不适合


joson 发表于: Tue 2006-09-12 19:07:10    发表主题: dump 命令的指定cachesize参数:

-C cachesize

Specify the cache size in megabytes. This will greatly improve performance at the cost of dump possibly not noticing changes in the file system between passes. It is recommended that you always use this option when dumping a snapshot. Beware that dump forks, and the actual memory use may be larger than the specified cache size. The recommended cache size is between 8 and 32(megabytes).

以兆为单位指定缓冲区大小。通过在各遍(between passes,以下为猜测:也许每次备份要由多个循环组成,每一次循环称为一遍)之间忽略文件系统的变化的办法来显著提高dump的性能。建议在进行快照备份时经常采用此参数。要注意dump的forks,也许会因此使得实际占用的缓存比指定的更大。推荐使用的缓存大小为8到32(兆字节)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值