时间:2016-02-28 13:38 来源: 我爱IT技术网 作者:佚名
欢迎您访问我爱IT技术网,今天小编为你分享的电脑教程是网络协议方面的经验知识教程:远程克隆你的系统,下面是详细的分享!
远程克隆你的系统
文章作者:朱德林摘要:
当你需要从一台电脑复制数据到另一台电脑上去的时候,本文所讲基于网络的且安全、简易、有效的方法就派上用场了。
提要:
尽管克隆动物(“多莉羊“)甚至人类胚胎的研究依然是一个充满争议和风险的领域,而掌握一些关于“克隆”电脑的知识不但没有害(正确的操作为前提),反而会使你仔细书写配置脚本的能力得到提升。根据摩尔定律以及计算机生产的快速进程,我们在使用电脑时很可能会遇到需要“克隆”我们的电脑的情况——不管是台式机被笔记本取代还是换一台更快的机子。而我们就需要将电脑A 上的所有文件分区 复制到电脑B上而且使它正常工作。通常有两种做法:一种就是直接打开机箱,然后将硬盘换掉就可以了——但是但打开机箱通常意味着失去质保,而且这通常很危险——一个没有经验的用户可能会给硬件带来机械的或者电子上的损伤。另一种方法要求两台电脑都有网卡(现在即使是在家用电脑中通常也满足),这种在下面会详细介绍的方法更安全。
下面描述的所有方法都是建立在网络连接的基础上,即,需要在“源”电脑(就是那台有数据要被复制的电脑)和“目标”电脑(就是需要数据的那台电脑)之间有网络连接。可以直接通过集线器连接,或者通过特殊连接线(crossovercable)将两张网卡连接起来(注意:一般的网线是不行的)。对目标电脑来说,需要一张Live-CD(如Knoppix 或 LNX-BBC)或一个最小安装,以保证可对网卡进行操作而且使ssh和/或netcat能用。甚至有的软盘上的系统(就像我用tomsrtb也能很好工作),而且如果你想安装另一个全新的发行版,这是一个很不错的选择。两台电脑的IP要在同一个网段,以便他们能相互进行“会话”,
可能的方案:
通过基本的准备,有几种方法来进行复制:
* 通过dd复制
* tar/cpio管道
* rsync
* dump和restore
如果你的两块硬盘不是同样的型号和大小,第一种方法是不可行的或非常复杂的(复制iso 镜像(dd if=/dev/cdrom of=the.iso)或者软盘通过dd很不错。这里 (diskcopy 脚本)是一个使用dd的脚本diskcopy)。使用dd的另一个缺点是:你未使用的空间也会被复制,从而浪费很多无谓的时间。通过tar和cpio的管道会花费很长的时间(长达数小时),而且对文件名和符号连接会有一些限制,在/dev时会被阻塞,等等。因此,不推荐此法。如果你的源电脑和目标电脑上的文件系统不一样,那么rsync(1)可能是最好的选择。这只需要有ssh正常的运行且文件传输协议正常。而且它还有针对设备文件的-D选项以及其他很多针对各种场合各种需求的选项。这是对每天的备份、作镜像或其他任务来说很有用的一个工具,它的手册上还有很多值得学习的例子。通过rsync复制的例子在[1]可以找到。
这里,我们使用dump和restore,这样还可以重新分配整个文件系统。这是一个快速、有效且可以通过最少的努力达到我们的目的——简直是理想的解决方法。我需要操作这个过程两次,因为有两台目标电脑。两台目标电脑都能很好的启动、工作,而且复制那些成G的数据大概只花了我一个小时。这个方法要求源电脑和目标电脑有同样的文件系统。在此,我们假定是ext2或ext3,因为这是现在最广泛的使用的两种文件系统()(参见下面).
配置ssh
一旦配置好最小安装的系统或者Live-CD,下一步就是配置ssh(如果你没有像下面描述的使用netcat来传送文件)。这需要源电脑运行sshd(the secure shell daemon)。如果不确定,请检查 /etc/init.d/。在目标电脑上输入(root帐户):
ssh-keygen -t rsa
为简便起见,不要输入密码。公钥就会保存在/root/.ssh/id_rsa.pub文件里。复制此文件到源电脑上
scp /root/.ssh/id_rsa SourcePC:/tmp
在此SourcePC是你源电脑的IP地址,当提示你是否确认时,输入完整的“yes”(单独的“y”有时会不行)。在源电脑上你还会被要求输入root的密码。现在把目标电脑加入你源电脑的可信任网络节点里去。
cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys
为检查是否成功完成,重复上面的复制命令,应该不会再要求你输入密码了!在目标电脑上创建文件系统.
通常第一步都是对你的硬盘分区,然后创建ext2/ext3文件系统。ext3的需要在mke2fs命令里加一个-j (journalling)的选项(需要内核对ext3的支持)。你甚至可以将ext2的分区转化为 ext3的, 参见tune2fs(8)。假设我们的源电脑上有如下的分区:
Filesystem Size Used Use% Mounted on
/dev/hda3 2.7G 552M 22% /
/dev/hda5 7.8G
1.6G 22% /usr
/dev/hda7 6.3G 1.7G 28% /usr/share
/dev/hda8 3.4G 601M 19% /home
/dev/hda12 5.3G 1.9G 37% /opt
/dev/hda1 587M 70M 13%
/var/backup
我推荐大家一定要做一些分区,否则,文件系统的错误使用或者硬盘磁道的一点损坏就会完全破坏掉你所有的数据。而且根据Murphy定律,在事先没有做好硬盘分区而是直接使用整块硬盘的时候,这通常就会发生。我最近就遇到过这样的情况,如果事先没有做好分区的话,就会由于主分区的一点问题而丢失掉我的所有数据。上面的文件表明/usr分区增长的太大了,所以/usr/share必须被加入。是该换一个大点的硬盘的时候了。在目标电脑上,使用parted(推荐)或者你喜爱的分区工具(Qtparted 是一个很好的图形界面的工具,据说是PartitionMagic克隆版)。创建的分区不能比源电脑上对应的分区小。另外,别忘了 swap 分区。保存好分区表,在刚创建的分区上创建文件系统,可以使用
mke2fs -j -L /dev/xxx
这里xxx是你的分区名,然后用设置卷标号。我经常使用如“/usr”一类的作为卷标。你也可以通过tune2fs(8)来设置各种任务,比如周期性的文件系统检查。
传送文件系统
首先你需要加载所有新创建的分区,我们先从主文件系统(“/”)开始,其他的按顺序依次进行。当然可以将源电脑上的两个分区整合到目标电脑上的一个分区上去,事实上,这正是我们要做的——将上例中/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 http:///net/200503/usr
cd http:///net/200503/usr
ssh targetPC dump -0 -f - /usr | restore -r -f -
这个mount-cd-dump/restore循环现在可以对你的所有目录重复进行操作。上面提到的对/usr/share(在源电脑上是个独立的分区)的处理,可以简单的通过切换目录到http:///net/200503/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)时停止运行,
以上就是关于远程克隆你的系统的网络协议知识分享,更多电脑教程请移步到>>电脑教程。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
