关于类unix系统(linux,bsd等)克隆的资料
远程克隆你的系统.. 1
关于DUMP. 8
linux克隆,备份软件.. 10
......
word版下载:http://www.chq.name/component/option,com_docman/task,doc_download/gid,16/Itemid,71/
关于类unix系统(linux,bsd等)克隆的资料
目录:
关于类unix系统(linux,bsd等)克隆的资料.. 1
word版下载:http://www.chq.name/component/option,com_docman/task,doc_download/gid,16/Itemid,71/
远程克隆你的系统
摘要:
当你需要从一台计算机复制资料到另一台计算机上去的时候,本文所讲基于网络的且安全、简易、有效的方法就派上用场了。
提要:
尽管克隆动物(“多莉羊“)甚至人类胚胎的研究依然是一个充满争议和风险的领域,而掌握一些关于“克隆”计算机的知识不但没有害(正确的操作为前提),反而会使你仔细书写配置脚本的能力得到提升。根据摩尔定律以及计算机生产的快速进程,我们在使用计算机时很可能会遇到需要“克隆”我们的计算机的情况――不管是台式机被笔记本取代还是换一台更快的机子。而我们就需要将计算机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定律,在事先没有做好硬盘分区而是直接使用整块硬盘的时候,这通常就会发生。我最近就遇到过这样的情况,如果事先没有做好分区的话,就会由于主分区的一点问题而丢失掉我的所有资料。上面的?n表明/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 ./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 |
http://www.softhouse.com.cn/html/200503/2005032508584500005895.html#
关于DUMP
dump命令是一个专门用来备份的工具。
[root@laptop pyegrp]# dump -0 -u -f /dev/hda3 /home/pyegrp/
DUMP: Date of this level 0 dump: Sat Nov 30 19:45:56 2002
DUMP: Dumping /dev/hda9 (/home/pyegrp) to /dev/hda3
DUMP: Added inode 7 to exclude list (resize inode)
DUMP: Label: none
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 15492 tape blocks.
DUMP: Volume 1 started with block 1 at: Sat Nov 30 19:46:01 2002
DUMP: dumping (Pass III) [directories]
DUMP: dumping (Pass IV) [regular files]
DUMP: Closing /dev/hda3
DUMP: Volume 1 completed at: Sat Nov 30 19:46:13 2002
DUMP: Volume 1 15490 tape blocks (15.13MB)
DUMP: Volume 1 took 0:00:12
DUMP: Volume 1 transfer rate: 1290 kB/s
DUMP: 15490 tape blocks (15.13MB) on 1 volume(s)
DUMP: finished in 12 seconds, throughput 1290 kBytes/sec
DUMP: Date of this level 0 dump: Sat Nov 30 19:45:56 2002
DUMP: Date this dump completed: Sat Nov 30 19:46:13 2002
DUMP: Average transfer rate: 1290 kB/s
DUMP: DUMP IS DONE
-0 是备份的等级,从0-9,0以后都是更新备份的参数,一般常用的是0和9
-u 是将备份记录写入/etc/dumpdates这个文件中
[root@laptop pyegrp]# cat /etc/dumpdates
/dev/hda9 0 Sat Nov 30 19:45:56 2002
/dev/hda9 9 Sat Nov 30 17:04:20 2002
注意,当你备份的目录是一个子目录,而不是一个分区的顶层目录时-u参数
是不能使用的。
-f 是指定备份到那个文件,也可以指定一个设备文件,我在这里指定的就是一个分区
更新备份:
在0级别备份的基础上,向/home/pyegrp写入一些新的文件,然后
umount /home/pyegrp
mount /home/pyegrp
注意如果不这样做,不会将新写入的文件备份进去的。
然后:
[root@laptop pyegrp]# dump -9 -u -f /dev/hda3 /home/pyegrp/
用restore tf /dev/hda3
就会看到刚刚写入的文件会出现在列表中。
restore命令是用来恢复备份的。
[root@laptop pyegrp]# restore rf /dev/hda3 /home/pyegrp
用restore命令来查看备份文件里的文件列表
[root@laptop pyegrp]# restore ft /dev/hda
linux克隆,备份软件
linux克隆,备份软件
不想重装又重装?Mondorescue可以帮到你!
加入论坛有一段时间了,发现没人提起过Mondorescue,所以特此发贴向大家介绍这个功能强大的备份程序。Mondorescue可以说是Linux 下的Ghost,它可以将你的系统像照相一样备份至磁带,CD-R,CD-RW,NFS或硬盘分区。Mondo广泛支援LVM,RAID,ext2, ext3, JFS, XFS,ReiserFS,VFAT等。这个软件可以让大家一步一步地将linux调至自己心目中理想的境地,而不用重装。因为一但调出了问题,只要用你的MondoCD将系统还原至上次备份时的状态就行了!根据个人的经验,如果系统只用了1.7G以下,一张光盘就够用了。当然如果你装了很多的程序,就需要更多的光盘,最多20张。实际上可以更多,不过作者认为那么大的系统应该用磁带做备份才对。而且Mondo的主要功能是做系统备份,而不是资料备份,所以20张光盘的限制应已可以应付绝大多数人的需要了。
安装
Mondorescue由Mondo和Mindi两个包组成。Mondo是主程序用来备份和还原。Mindi则类似一个迷你的Linux,它包括核心,模块,函数库及一些做系统维护的重要工具。官方网站提供了rpm,srpm,tgz,deb的软包,安装方法没什么特别。不过某些发行版可能需要下一些依赖性的程序。所有这些网站都有:http://www.microwerks.net/%7Ehugo/docs/download.html ;首页:http://www.mondorescue.org/;或http://mondorescue.norsklinux.no/
备份
以下讲一下个人使用Mondo的经验。首先挂载所有分区(如果你另设了分区给/boot,有可能在开机的时候没有挂载)。以Root的身份执行命令:
#mondoarchive
你会看到一个文字菜单问你想备份到什么地方:
mondorescue.org/docs/1.6x-howto/images/mamain.png');" border="0">
一般我选‘Hard disk’。然后它会问做好的iso档摆在哪儿,默认是/root/images/mondo
(你的硬盘必须要有足够的空间才能使用Mondo);
选择压缩比率,一般Average也就够了;
iso档大小,默认是650m,如果用CDR,可选700m或更多。
想要备份的目录,默认是/(即整个系统)。
不想备份的目录,/tmp和/proc一般是自动排除在外的。(例子:‘/mnt /backup /win’)
要不要核实你的备份,选Yes(除非你已经试了很多次,对Mondo有足够的信心,那你可以选No,这样备份过程会快一点)。
你的核心是否标准,如果你用Redhat,Mandrake,Slackware可选Yes,如是Gentoo,Debian的使用者选No(Mondo会用自己的failsafe核心取代这些发行版的核心)。
确认要继续?选Yes,然后去看电视。一个2G的系统一般要半个多小时做备份,大的系统(尤其是压缩比率选了Maximum的时候)可能要几个小时。
备份完成时,Mondo会问要不要制作开机软盘,选No(反正也装不下)。
然后你可以用自己喜欢的烧碟程序(如k3b,xcdroast等)把1.iso,2.iso等烧到光盘。一个1.7G以下的系统,一张650m的光盘就行了,而且不到10分钟就可以还原。
如直接在命令行用cdrecord
#cd /root/images/mondo(iso所在的目录)
#cdrecord -scanbus
(to find out dev=x,x,x for your cdwriter,一般是 0,0,0)
#cdrecord -blank fast dev=x,x,x speed=4 1.iso (for cd-rw)
还原
用第1张光盘开机后很快会看到boot:按回车,过了一会儿会出现一个菜单。我选iteractive模式(除非你备份了整部机,即所有分区,别选automatic!) 接着Mondo会问备份来源:
我通常用CD-RW做备份,所以我选CD-RW disks。然后你会看到mountlist,也就是你的硬盘分区表(有点象fstab)。如果没改过,就按OK(我曾经试过改了分区设置,都能成功还原)。
要不要更改或删除硬盘分区,否;要不要格式化分区,最好选Yes,要不然会有一些残留的资料会与还原后的系统产生冲突。然后Mondo会一个个分区来问要不要格式化;如你只想格式化linux分区的话,千万要看清楚。
是否还原所有数据?我选Yes(如果选否,Mondo会问是否做部分还原,然后可选择想还原的目录)。还原过程就开始了。
拷贝过程完了之后,Mondo会问是否起动bootloader,选Yes。
是否改过mountlist?如果改过,Mondo会给你机会修改fstab和lilo.conf(用vi)。如过没改过,Mondo就会问最后一个问题,是否为适当的分区贴上ext2/ext3的标签?选是,然后就可以重启了。
除了Mondorescue之外,另外还有两个类似的程序大家也可以试一试,一个是mkCDrec 网址 http://mkcdrec.ota.be/project/;另一个是
Partition Image 网址 http://www.partimage.org/
责任编辑: lyingjie
linux下使用dump实现增量备份机制:
>>dump和restore用来创建备份和恢复的常见方法.
dump优点:
1.备份可以跨多卷磁带;
2.任何类型的文件(甚至设备)都能备份和恢复;
3.访问权限/归属关系和修改时间都被保存下来;
4."空洞"文件也能被正确的处理;
5.备份能够以增量的方式进行.
-------------------------------------------------
linux下通常用:
/dev/st0代表倒带设备; /dev/nst0代表非倒带设备.
---------------------------------------------------
***其它的存档程序:
tar cpio dd也能把文件从一个介质转存.
*对于tar把目录树从一个位置移到另一个位置,也是非常有用的.
^ : 但是在很多的linux版本中,tar命令中的路径名被限制在100个字符之内.
使用Linux作硬盘克隆
发布时间:2001-12-20
源盘:IBM 20G 5400RPM FAT16分区1;Linux native分区1;FreeBSD分区1,内又分为一个主Sillice和一个Swap Sillice;扩展分区1,4个逻辑分区,其中最后一个是Linux Swap分区。IDE1 Master
目标盘:西部数据30G 7200RPM,空白盘。IDE2 Master
进入Linux,运行: dd if=/dev/hda of=/dev/hdc
dd就是Linux/Unix下通用的克隆、镜像程序,if=输入的文件 of=输出的文件。由于在Linux下所有的硬件都表示为文件,所以可以进行任何复制、克隆。比如还可以把/dev/hda克隆到MO、磁带以及映像文件中,当然,目标“文件”必须比原“文件”大,不然就会溢出。
20G的硬盘复制了大约不到2个小时,在整个过程中,使用K6-2 500CPU,UDMA2打开的情况下,CPU占用率只有18%-19%,从来没有超过20%。在此期间还可以玩玩扫雷、国际象棋等游戏,也可以看看文档、帮助什么的,但是最好不要作写操作。当然你可以估计时间,在复制进程还没有到Linux分区,或者已经过了Linux分区的时候,也可以进行写操作,但是要当心!
最后,dd会报告一共复制了多少字节,这就是源盘的实际大小。完成以后,30G的西部数据硬盘就跟原来的IBM硬盘“一模一样”了,只不过是后面有10G的空空间,你可以在份一个分区(我的硬盘不能在分主分区了,因为4个Primray分区已满,只能在芬逻辑分区),或者用PQ、Fips扩大原有的分区。如果你什么都不做,那么从新启动Win98以后,跟原来是一模一样的。如果启动Linux,就有了一些问题,因为对于新硬盘来说,相当于运行完了dd程序就切断了电源,因此文件系统处于un clean状态,在启动的时候会报错,不要怕,输入root密码,然后运行:fsck / 这就启动了文件系统检测程序,相当于Windows下的磁盘检测,对于所有的问题都回答“y”,大部分都是/tmp的问题,无关紧要的。修复完毕,输入:reboot就可以安全的启动Linux了!
总的来说,Linux下的dd相对于Ghost各有所长。dd的复制是完全基于二进制的物理复制,从硬盘的第一个字节道最后一个字节,完全一样的克隆了一边,所以是最保险、最准确的。而且由于dd是物理复制,所以只要是硬盘上存在的分区,无论Linux是否认识,甚至是Linux认不出是什么的一段数据,都可以原原本本的复制,例如FreeBSD分区、其他操作系统的分区,甚至加密扇区什么的,就连逻辑坏块也原样复制!因此除非出现物理问题,不然dd是绝对不会出错的!而Ghost则比较“高级”一些,可以在复制的时候改变分区大小(他认识的分区格式),压缩映像文件(dd本身不具有压缩功能,但是可以用gzip、bzip2等工具压缩生成的文件),在Windows下还有explore软件可以单独提取文件出来,还有网络功能,而且速度也要比dd快一些(好像Ghost使用了较大的缓存)。另外一点dd的优势在于,在克隆的同时还可以干些别的事情,不像Ghost那样只能干等。因此从这方面来看,dd的速度又要比Ghost快,因为它完全占用系统的时间是零!
其它Unix下的dd操作跟Linux下的雷同,只不过是/dev/hda的称谓变化一下。我
在FreeBSD4.2下试验过,效果跟Linux下完全相同,时间稍微长一点点,但是在FreeBSD下,dd的CPU占用率有时会达到30%以上。
如果你的源盘是IDE,而目标盘是SCSI的,这时要注意了,虽然对于硬件来说是没有什么问题,因为现在的Linux还是FreeBSD都支持即插即用;但是,/etc/fstab文件需要修改,在dd之前要把所有的hda改成sda,然后再改回来^_^
原文网址:http://www.infosecurity.org.cn/article/netmanager/linux/7754.html