您的位置:首页 > 其它

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

2015-05-13 21:07 513 查看

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

陈海青(joson chen) http://www.chq.name 2006.09.09 最近,为更换硬盘,参照有关资料,进行了一次FreeBSD下的硬盘数据迁移,具体情况如下: 1:起因:原有的硬盘容量小、有坏区、swap设置不合理、/var太小,所以要进行更换 2:计划:1)使用sysinstall--fdisk划分好新硬盘的slice,...... [align=center]FreeBSD 硬盘系统和数据的复制迁移实战[/align] [align=center] [/align] [align=center][/align] [align=left]陈海青(joson chen) http://www.chq.name[/align] [align=left]2006.09.09[/align] [align=left] [/align] [align=left]最近,为更换硬盘,参照有关资料,进行了一次FreeBSD下的硬盘数据迁移,具体情况如下:[/align] [align=left]1:起因:原有的硬盘容量小、有坏区、swap设置不合理、/var太小,所以需要进行更换[/align] [align=left] [/align] [align=left]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));[/align] [align=left] [/align] [align=left]3:操作步骤:[/align] [align=left]1)将新硬盘装上并让系统正确识别。原硬盘为IDE0口上的Master,FreeBSD识别为ad0。为了不用设硬盘跳线,这里将新硬盘到IDE1接口的Master,系统识别为ad2;如果你想和旧硬盘接在同一数据线线上,即IDE0接口,则必须将跳线设为slave,系统识别为ad1。 1、关机,将新硬盘装上,重新开机。 2、开机后查看是否系统是否已经识别到新硬盘了:[/align] [align=left]http://www.chq.name# dmesg | grep ad2[/align] [align=left] [/align] [align=left]2)记下旧硬盘文件系统所对应的mount:查看/etc/fstab,并且运行命令df,记录结果。新硬盘分区次序基本按照旧的一样,避免混淆。[/align] [align=left]
3[/align])使用sysinstall的FDISK命令把新硬盘分片,设置MBR然后用LABEL命令分区。可以先自动分区,再对照原来的次序修改,假设原来的文件系统/dev/ad0s1g 对应/usr,那你新硬盘/dev/ad2s1g就用来做/usr,划分好后,按M分别清空所有文件系统的mount点,因为我们还没有建立临时的mount的目录,不清空会和系统原来的mount冲突的。 [align=left] [/align] [align=left]4)创建临时的目录用来作临时mount,用于以下步骤挂载文件系统。[/align] [align=left]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[/align] [align=left]http://www.chq.name# mkdir /backup/tmp[/align] [align=left][/align] [align=left]5)停止原系统的主要服务,如APACHE,MYSQL等,或者重启后进入单用户状态,准备复制。进入单用户模式的方法:1.重启,在启动菜单开始倒计时的时候按下空格(space)键,输入boot -s ,然后在#后输入
fsck -p
mount -u /
mount -a
swapon -a
adjkerntz -i
[/align] [align=left] [/align] [align=left]6)运行以下脚本,执行硬盘数据和系统的复制。要注意根据前面记录的/etc/fstab和df结果查看文件系统的对应关系,修改mount等脚本。[/align] [align=left]#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[/align] [align=left] [/align] [align=left]其中:(1):( dump -0f - / ) | ( cd /backup/root ; restore -rf - ),这是把老的根目录下所有内容复制输出到管道 , restore 从管道里读数据 , 写入当前目录所在目录.[/align] [align=left](2):进行dump/restore的操作可能会花点时间,需耐心等待,我迁移了3GB数据,运行脚本用了大约40分钟。[/align] [align=left] [/align] [align=left]7)调整新硬盘中的/etc/fstab,将Device等修正,我原来使用的是第二块slice,现在使用第一个slice,于是修改了Device列:[/align] [align=left](http://www.chq.name)#mount /dev/ad1s1a /backup/root
http://www.chq.name)# vi /backup/root/etc/fstab[/align] [align=left] [/align] [align=left]8)关机,摘掉原来的硬盘,把新硬盘挂到旧硬盘原来的位置,这步不要省略了,如果你不换位置,系统还是认为新硬盘是ad2,由于你的/etc/fstab里面是对应ad0的,所以启动会找不到/usr和/var等文件系统。[/align] [align=left] [/align] [align=left]9)注意事项:重新启动,如果没有什么异常,那恭喜你,数据迁移已经成功,否则,请再看看有什么操作错误或者忘记做哪一步了。建议,让新的系统运行几天,正常后再处置旧硬盘。切记,数据迁移的是一件比较危险的事情,操作过程中不能有差错,否则可能导致你原来的数据丢失,所以必须非常谨慎。[/align] [align=left] [/align] [align=left]10)我的部分操作输出结果http://www.chq.name):[/align] [align=left]# cd /[/align] [align=left]# mkdir backup[/align] [align=left]# cd backup [/align] [align=left]# mkdir root[/align] [align=left]。。。[/align] [align=left]www# newfs /dev/ad2s1a[/align] [align=left]/dev/ad2s1a: 1024.0MB (2097152 sectors) block size 16384, fragment size 2048[/align] [align=left] using 6 cylinder groups of 183.77MB, 11761 blks, 23552 inodes.[/align] [align=left]super-block backups (for fsck -b #) at:[/align] [align=left] 160, 376512, 752864, 1129216, 1505568, 1881920[/align] [align=left]。。。[/align] [align=left]# sh restore.sh[/align] [align=left] DUMP: WARNING: should use -L when dumping live read-write filesystems![/align] [align=left] DUMP: Date of this level 0 dump: Thu Sep 7 22:22:40 2006[/align] [align=left] DUMP: Date of last level 0 dump: the epoch[/align] [align=left] DUMP: Dumping /dev/ad0s2a (/) to standard output[/align] [align=left] DUMP: mapping (Pass I) [regular files][/align] [align=left] DUMP: mapping (Pass II) [directories][/align] [align=left] DUMP: estimated 37230 tape blocks.[/align] [align=left] DUMP: dumping (Pass III) [directories][/align] [align=left] DUMP: dumping (Pass IV) [regular files][/align] [align=left]warning: ./.snap: File exists[/align] [align=left] DUMP: DUMP: 37868 tape blocks[/align] [align=left] DUMP: finished in 7 seconds, throughput 5409 KBytes/sec[/align] [align=left] DUMP: DUMP IS DONE[/align] [align=left] DUMP: WARNING: should use -L when dumping live read-write filesystems![/align] [align=left] DUMP: Date of this level 0 dump: Thu Sep 7 22:22:49 2006[/align] [align=left] DUMP: Date of last level 0 dump: the epoch[/align] [align=left]……[/align] [align=left] DUMP: finished in 1 seconds, throughput 7128 KBytes/sec[/align] [align=left] DUMP: DUMP IS DONE[/align] [align=left]tunefs: soft updates set[/align] [align=left] [/align] [align=left]参考资料:FreeBSD硬盘分区和数据迁移相关资料[/align] [align=left] [/align] [align=left] [/align] [align=left]
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(兆字节)

[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: