远程克隆你的系统(下篇)
上接:远程克隆你的系统(上篇)
传送文件系统
首先你需要加载所有新创建的分区,我们先从主文件系统(“/”)开始,其它的按顺序依次进行。当然可以将源计算机上的两个分区整合到目标计算机上的一个分区上去,事实上,这正是我们要做的――将上例中/usr/ 和 /usr/share合并为一个分区。我们加载未来的主文件系统:
mount /dev/xxx /mnt
在复制的时候,转到目标目录里面去是很必要的
cd /mnt
在目标计算机上键入
ssh targetPC 'dump -0 -f - /' | restore -r -f -
这里targetPC是你目标计算机的IP地址。参数“-0”表示完全备份,“-f-”表示使用stdin/stdout做为档描述符,而“-r”意思是指示restore去重新创建通过网络传送的文件系统到目标计算机上去。更多内容请参考dump(8) 和 restore(8)。下面你看到的是传送主文件系统的输出。
$ ssh 10.42.3.42 'dump -0 -f - /' | restore -r -f -
DUMP: Date of this level 0 dump: Tue Feb 22 15:50:12 2005
DUMP: Dumping /dev/hda3 (/) to standard output
DUMP: Label: debian
DUMP: Writing 10 Kilobyte records
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 547312 blocks.
DUMP: Volume 1 started with block 1 at: Tue Feb 22 15:50:14 2005
DUMP: dumping (Pass III) [directories]
DUMP: dumping (Pass IV) [regular files]
DUMP: Volume 1 completed at: Tue Feb 22 15:51:43 2005
DUMP: Volume 1 546590 blocks (533.78MB)
DUMP: Volume 1 took 0:01:29
DUMP: Volume 1 transfer rate: 6141 kB/s
DUMP: 546590 blocks (533.78MB)
DUMP: finished in 89 seconds, throughput 6141 kBytes/sec
DUMP: Date of this level 0 dump: Tue Feb 22 15:50:12 2005
DUMP: Date this dump completed: Tue Feb 22 15:51:43 2005
DUMP: Average transfer rate: 6141 kB/s
DUMP: DUMP IS DONE
Restore通常会创建一个名叫restoresymtable的档,如果你确信在文件系统重建过程中没有错误发生,你可以将这个档删掉。完成主文件系统的复制,下面我们依次完成其它子分区的复制。从/usr开始吧(假定你现在的工作目录是未来的主文件系统)。
mount /dev/xxx ./usr
cd ./usr
ssh targetPC 'dump -0 -f - /usr' | restore -r -f -
这个mount-cd-dump/restore循环现在可以对你的所有目录重复进行操作。上面提到的对/usr/share(在源计算机上是个独立的分区)的处理,可以简单的通过切换目录到./usr/share(注意这个“.”),然后简单的重复
ssh targetPC 'dump -0 -f - /usr/share' | restore -r -f -
在目标文件系统有你要restore的档时,Restore会报错。通过ssh复制一整台计算机的资料会花费大概一个小时和100MB 网卡(也许还要特殊资料线crossover cable)。
注意:转储文件系统时,并不需要加载,你可以仅仅通过给定分区名,如/dev/hda6,而非加载后的目录名。
另一个选择netcat
另一个种方法不使用ssh,而使用netcat(1),netcat简称nc.Netcat,是一把非常简单易用的基于 TCP/IP协议(C/S模型的)的“瑞士军刀”,它能允许我们通过网络创建管道(pipe)。上面的例子只需像下面一样改一点点东西就可以用了。我们假设加载在/var/backup上的分区是我们要通过dump/restore来传送的。在接收端(目标计算机),创建一个netcat的监听例程(-l),这个监听例程将管道输出到restore。
nc -l -p 2000 -q 1 | restore -r -f -
在源计算机,创建另一个netcat的例程,这个例程将它从管道里得到的输入发给目标计算机,这里target-IP 是目标计算机的 IP 地址。
dump -0 -f - /var/backup | nc 2000
-q选项是让nc在到达档结束(EOF)时停止执行,但我是手动结束nc的。不过,仍然建议大家使用ssh 。
后期工作
恭喜你!到目前为止,你已经成功的复制了你的系统。剩下的问题就是让它好好的工作起来。首先,就是更新你的 /etc/fstab ?n。如果你的目标计算机的IP地址变了,那么网络配置文件(Debian 里面是/etc/hosts和/etc/network/interfaces 两个文件)。然后就是非常重要的 激活配置 文件,这个是无论如何都需要更新的。对lilo 来说, 就是需要修改 /etc/lilo.conf?n(特别是 root=... 选项) 然后执行 lilo -v)。 对 grub 来说, 编辑 /boot/grub/menu.lst(或 /boot/grub/grub.conf,取决于哪个是符号链接)然后执行 grub,
grub> root (hd0,xxx)
... filesystem is ...
grub> setup (hd0)
... lots of output here
grub> quit
或执行grub-install/dev/xxx其中xxx是你的硬盘。在此,检查你的root(hdn,xx),并加上 root=/dev/xxx 的设定。
可能的情况是,你现在复制好的计算机有了一些更好的硬件,因此可能需要修改你内核的配置。如果你的系统有很多预先配置的好的模块(如RedHat,SuSe,Mandrake,Fedora...),那么很可能已经有了合适的模块(module)了。否则, lspci -vv 并自己重新编译内核。如果你的显卡不同了,更新 /etc/X11/XF86Config-4(或者在 RH/Fedora 中xorg.conf )。如果可能,激活到执行级别 3 并使用工具来配置你的 X。在 debian 里,一些调查是必要的,我就很幸运的发现我的驱动从r128 变为了radeon。
其它系统
这篇文章讲解了克隆ext2/ext3文件系统的全过程。很多类似的命令可以在很多其它的*nix系统上,诸如 FreeBSD, HP-UX, IRIX 等也提供 dump/restore 这些命令; 在 Solaris 中,这被称作 ufsdump/ufsrestore。当然也有的文件系统不提供dump功能,例如ReiserFS,这种情况就最好使用 rsync了。关于使用 rsync 成功复制Linux 系统的问题,参见 [1]。
References
[1] ''Replicating a Linux System - Yet Another Method.'' Ben Okopnik, Linux Gazette Issue 83, October 2002.
| 出处: HKIT 日期: 2005-3-25 |
好:0 一般:0 差:1 |
|