用tar打包转移系统
kevin.Zhu 发布于:2013-4-11 20:21 分类:Linux 有 13 人浏览,获得评论 0 条
http://forum.ubuntu.org.cn/viewtopic.php?t=196581
其实很简单,高手请绕行。
我的电脑有两块硬盘,一块装了xp给家人用,另一块装了ubuntu(8.10升9.04)和arch(只用了一个区,swap共用)给自己用。有一天心血来潮把arch分区的格式改成了ext4,结果用ubuntu的grub无法启动arch,只能用grub4dos来启动arch。查了一下原因,应该是arch所在分区处于硬盘最后部分,启动时超出查找范围。一开始这个区被分为sdb8,安arch的时候就无法正常启动,当时把它的分区从逻辑分区改成了主分区(成为了sdb3),然后就可以正常启动了,这次改了格式又出现了这个问题,而且即便是用arch自己的grub也无法启动,令人稍有不快。同时由于当初为ubuntu的boot也分了区,在硬盘起始位置。现在很想把硬盘分区从新规划一下。刚好ubuntu-9.04rc出来了,就想付诸行动。
初步打算重新分区后,把ubuntu重装,因为它比较好配置,只需要把home下的用户家目录备份一下就行了;比较麻烦的是arch,本来配置的好好的,不想再折腾一下,而且有时候网络不稳定,重装arch有时候是很费时间的事。怎么办?用cpio、dd还是tar?
用cpio太占地方,而且由于分区还没分好,不能直接拷贝;用dd只能源文件分区比目标分区大,而我从新规划的分区大小都比arch目前的分区小那么一点点。看来tar是个不错的选择,用它把arch系统打包然后暂存在另一块硬盘上,等sdb硬盘从新分好区后,再解压到新选择的分区,修改menu.lst和fstab中的相关信息,就可以用grub或者grub4dos来引导启动了。这种方法在节省空间的同时,还不依赖于文件系统格式,你可以选用新的文件系统格式,比如ext4。当然,这需要另一个linux系统,你可以用livecd的linux来操作,我是直接用ubuntu-9.04rc的iso镜像刻录入u盘,制作了一个u盘启动的livecd来操作的。你要有自己刻录的光盘版的livecd也可以啊。
下面进入正题。其实只是注意事项的提醒而已。以下操作都是在livecd系统启动电脑下进行的。
1、tar打包,解压时会自动按打包时的路径还原,即便是加-C指定路径,依然会在该路径下建立打包时的路径还原。
如果在本系统进行打包及还原,一般不会产生问题。比如 tar -zcvpf bird.tar.gz /home/bird 你在别的linux系统下还原时,它依旧解压为/home/bird,如果你加-C指定路径,比如 tar -zxvpf bird.tar.gz -C /mnt 结果就是 /mnt/home/bird。(这是介绍tar打包特性,不是具体操作)。
2、如果准备在一个系统打包而在别的系统进行还原的话,有时候就会有麻烦,即便是指定路径。还原时多出路径怎么办?
比如备份sdb3的arch系统,怎么办比较好呢,先把sdb3挂载到/media/arch,
然后 cd /media/arch,然后用相对路径打包
用这个办法打包,解压时,要么cd到需要解压的目录,然后sudo tar -zxvpf (保存路径)arch.tar.gz进行解压,要么用-C指定路径,都可以。比如
这样貌似麻烦,但比较灵活,可以比较自如的变换解压后的文件路径。
3、如果打包时用的是绝对路径,如上例子的情况:
4、需注意,要用参数-p来确保文件权限属性,而且需要管理员权限来操作,否则有些文件会拒绝被读取打包。
这是一点心得,给新手做个参考,少走些弯路。现在偶已经畅快地用上了arch和ubuntu-9.04rc,文件系统格式全换成了ext4,swap扩大成3G,把原来独立的ubuntu的boot分区取消了。arch也能完全自主独立的启动了,不再出现超过寻址范围的启动问题了。
用这个方法,原来4.5G的arch系统,打包压缩后只占了1.7G,还原后,一切如常,仿佛没有移动过。
