上一篇文章中我们介绍了Ubuntu系统的两种脚本恢复策略,接下来介绍另外一种tar包全盘备份恢复策略。
tar包全盘备份恢复策略
上述两种恢复策略免不了还是需要在分区以后,插入启动U盘或者光盘,从头开始安装操作系统本身,并且安装完操作系统以后继续安装软件,恢复配置,熟悉Windows下大名鼎鼎的Ghost的同学一定在想,Ubuntu下是否也有这种一站式的全盘备份方案:无论计算机系统当前的状态,我可以对整个系统的每一个字节都做数据备份,当需要恢复系统的时候甚至都不必再次安装Ubuntu本身就可以把当初备份的那个状态复原到新的机器或者格式化以后的当前机器上,甚至是虚拟机上。这也是一般公司的IT部门在帮员工重装机器的时候最常用的策略,没有其它原因,就是因为这种方式最快捷。备份恢复一个系统的时间不会超过一个小时。
tar包全盘备份恢复策略的优点
最迅速快捷的备份恢复方式,可以通过刻录母盘的方式在各处恢复自己的备份。你既可以在一台物理机上做备份恢复到另一台物理机或者虚拟机,你甚至也可以将一台虚拟机里的备份恢复到一台物理机或者另一台虚拟机上,非常的灵活方便。
tar包全盘备份恢复策略的缺点
采用这种方式的一个问题在于,如果需要还原的目标机器和做备份的源机器硬件配置差异过大,可能会发生恢复以后某些驱动程序工作不正常的状况,例如计算机没有声音,或者图形分辨率特别低,无法联网等状况。这个时候需要用户自行尝试解决。第二个问题在于由于全盘备份,意味着如果你备份的是Ubuntu 10.04的系统,那你也只能恢复到10.04的系统,这种恢复方式没有办法升级你的Ubuntu到更高的版本。第三个问题:一定的学习实践成本,以下就我个人的实践经验提供tar包全盘备份的基本步骤和原理,也许你在网络上可以找到更方便的脚本或者备份软件替代这些工作,但是如果遇到问题回到这些具体的步骤和原理可以帮助你了解到底是哪里出了问题,怎么解决这些问题。
1. 全盘备份
得益于Linux系统强大的命令行和系统设计,全盘备份一个Ubuntu系统的基本原理相当简单:使用tar命令打包必要的文件目录即可,也就是说备份系统和备份数据基本没有区别。
新建一个脚本文件BACKUP_SYSTEM.sh,在其中添加以下内容:
mkdir ~/BACKUP_SYSTEM
sudo tar –exclude /proc –exclude /mnt –exclude /tmp –exclude /media –exclude /home/jiawzhang/Downloads –exclude /home/jiawzhang/Templates –exclude ‘/home/jiawzhang/VirtualBox VMs’ –exclude /home/jiawzhang/BACKUP_SYSTEM -jpcvf ~/BACKUP_SYSTEM/Ubuntu-12.04-20121114-home-pc.tar.bz2 /
这两条命令首先在home目录新建了一个BACKUP_SYSTEM的目录用于放置备份后的tar包。随后tar命令的 –exclude 参数排除了某些你认为没有必要进行备份的目录,例如Download, Templates目录,同时我的案例里也排除VirtualBox VMs这个目录,因为安装虚拟机以后,Virtualbox所在的这个目录会极度膨胀,我们没有必要把几十个G的虚拟机镜像全都备份进tar包。-jpcvf 这个命令中:j表示使用 bzip2 格式打包,这是一种压缩耗时但是压缩比很高的格式,经常用于压缩大数据。p 表示在制作tar包的时候保留目录结构的用户权限信息,最大程度的对文件系统做现场保护。cvf 表示创建一个压缩包,并且列出详细的压缩过程。~/BACKUP_SYSTEM/Ubuntu-12.04-20121114-home-pc.tar.bz2指定了压缩包的文件名,我个人偏向于在这个文件名里写清楚版本信息,打包的时间和在哪一台机器上做的备份,有助于今后做恢复操作。这条命令的最后有一个 “/” 字符就是表示从本机的根目录开始做全盘备份,你本机的所有东西除了被–exclude的目录都会被打进最终的压缩包。即使是全盘备份,事前一定要甄别清楚到底哪些目录是没必要备份的,否则压缩和解压过程都会变得无法接受的漫长。
开启终端运行sh BACKUP_SYSTEM.sh开始备份。取决于用户备份数据的多少和硬件配置的好坏,备份的时长会有所不同。在笔者本机上,去除非必要目录的全盘备份花费了大约1个小时,把 40G 的资料压缩在 9G 大小的压缩包内。如果你想时刻了解压缩的进度,可以开启另一个终端,运行以下命令:
watch -d -n 5 ls -alh ~/BACKUP_SYSTEM/
这个watch命令用于每隔5秒执行一遍随后的‘ls -alh ~/BASHUP_SYSTEM/’幷高亮出两次执行之间的不同,因此你可以观察到正在制作中的压缩包大小的变化。
2. 全盘恢复
恢复系统的步骤会比备份繁琐许多,以下是主要步骤,我会尽量解释每个步骤的含义。
●确保事先备份的压缩包在某个分区可以被访问到,这里假设你的备份压缩包位于/home/jiawzhang/BACKUP_SYSTEM/UBUNTU-2012-02-05.tar.bz2
●通过Ubuntu的启动U盘或者光盘重启电脑,进入试用Ubuntu的模式。
●在试用模式的Ubuntu中开启终端,运行命令
sudo su –
切换至root权限,取得root权限以后类似fdisk -l, df -h这些命令才能返回准确的结果。
●运行命令
sudo gparted
打开Linux下的分区软件gparted,如果提示需要安装,则运行
sudo apt-get install gparted
之后可以按照上一篇博客的分区推荐方案进行分区,如果你对自己的分区已经满意,也可以略过分区的步骤,只需要格式化/所在分区即可,/home所在分区因为用于存放备份压缩包,可以选择暂时不做格式化。
●解压备份压缩包
mkdir /tmp/root
mkdir /tmp/root2
mount /dev/sda1 /tmp/root
mount /dev/sda2 /tmp/root2
cd /tmp/root2/jiawzhang/BACKUP_SYSTEM/
sudo tar -jpxvf UBUNTU-2012-02-05.tar.bz2 -C /tmp/root
使用U盘启动到live Ubuntu模式幷不会实际上挂载你的物理分区,所以这里需要使用mount命令手动挂载你刚才格式化以后的 / 分区并且将压缩包解压导入。新建两个目录/tmp/root /tmp/root2,将分区/dev/sda1 /dev/sda2分别挂载到这两个目录。确保sda1是系统恢复以后挂载 / 目录的分区,sda2是原来/home目录挂载的分区,其中有我们需要的备份压缩包存在。挂载完毕以后,/tmp/root 对应了 sda1 分区,/tmp/root2 对应了 sda2 分区,进入 /tmp/root2/jiawzhang/BACKUP_SYSTEM 就是我们原先的备份存储的位置。运行 sudo tar -jpxvf xxx.tar.bz2 -C /tmp/root 做解压操作,jpxvf 中的 x 指解压,-C /tmp/root 则指定了需要解压的目标目录,这里实际上就是sda1分区所在的根目录。完成这个操作以后,所有的数据就已经被还原到sda1分区。
你应该可以查看到类似/tmp/root/etc, /tmp/root/home/这样的目录,它们对应的目录就是原先的 /etc, /home。我们下面的步骤会指定启动系统的时候把sda1分区挂载回 / 目录,sda2分区挂载回 /home目录,这样在系统的目录结构就完全恢复了。另外由于/home目录对应的 sda2 分区之前没有进行过格式化操作,此时你可以选择删除/tmp/root2/jiawzhang/下除了BACKUP_SYSTEM以外的所有数据,然后运行:
cp /tmp/root/home/. /tmp/root2/ -r rm /tmp/root/home -rf
将刚才从备份压缩包中解压出的/tmp/root/home部分的数据重新拷贝到/tmp/root2,然后删除/tmp/root/home,即完成了从sda1分区转移恢复后的home数据到sda2分区的工作:sda2 分区是过后用来挂载 /home 目录的分区,理应把home下的数据恢复在这个分区。
●恢复分区的 GRUB/MBR 信息
经过格式化,分区等等步骤以后,即便你是在现有硬盘上恢复自己的系统,分区的uuid都可能已经被改变,因此当初备份在压缩备份包里的启动引导信息诸如:GRUB/MBR都已经不再和目前实际的信息相匹配,我们因此要做修复工作。
仍旧在live ubuntu模式下运行:
$ sudo add-apt-repository ppa:yannubuntu/boot-repair
$ sudo apt-get update
$ sudo apt-get install -y boot-repair
$ sudo boot-repair
下载运行启动修复软件boot-repair,启动后点击默认推荐方式即可。如果想了解这个软件具体做了哪些工作,可以在这里参看手工修复的步骤。不过由于笔者并未验证其正确性,不能保证一定可用。
1 $ ls -al /dev/disk/by-uuid
再次查看各个分区的uuid 信息,确保这些uuid和 /tmp/root/etc/fstab中使用的uuid一致, 需要挂载的 /, /home,swap 在 /tmp/root/etc/fstab 中也和相应的 uuid 匹配。因为我们恢复的备份使用的是旧有的 uuid 信息,如果不一致:手工打开/tmp/root/etc/fstab这个文件做更正,主要工作就是替换其中的 uuid 字符串和上述命令中的一致。在启动系统的时候,/etc/fstab 这个文件指定了分别挂载sda1 sda2 sda3分区到 /,/home,swap,如果没有正确的 uuid 以及分区目录挂载匹配,系统就无法正确启动。大家可以大致参看一下 /etc/fstab 这个文件的内容片段:
# / was on /dev/sda1 during installation
UUID=f381f8cd-ca11-4227-b9ce-8de330bf0e9f / ext4 errors=remount-ro 0 1
# /home was on /dev/sda2 during installation
UUID=b4b376c7-9ef0-48dc-9f50-28decd899190 /home ext4 defaults 0 2
# swap was on /dev/sda3 during installation
UUID=d770aa08-a3f3-4469-a682-f161cff16135 none swap sw 0 0
另外如果你加装第二块硬盘以后也可以通过 ‘ls -al /dev/disk/by-uuid’ 查看新硬盘的 uuid,幷新建这块硬盘分区对应的挂载目录以后,将这些信息一并写入 /etc/fstab,这样,系统在启动以后就会自动加载你的新硬盘分区。
●重建系统目录
这些目录就是我们当初做备份时加在 –exclude 参数后面的目录。
mkdir /tmp/root/proc /tmp/root/mnt /tmp/root/tmp /tmp/root/media
chmod 777 /tmp/root/tmp
记得一定要赋予 /tmp/root/tmp 777 权限,这是一个系统级别的临时目录,需要完全的读写权限,否则你的系统无法启动成功,我自己在最初实践全盘备份恢复的时候就因为忽视了这个小细节,导致屡次恢复系统失败,差点放弃。
●重启计算机
关闭计算机,幷从硬盘重启计算机,一切顺利的话,全盘恢复已经成功,至此,你可以别无二致的使用备份当时的专属高效系统了。
全盘备份恢复的操作对初学者来说有一定的风险,如果担心操作不当丢失数据,可以先在虚拟机环境里练习,笔者实践过这种方法对虚拟机一样适用。
迁徙wubi系统到物理分区
另外有一些用户最初是在Windows上通过Wubi的方式试用Ubuntu,最后决定彻底抛弃Windows的时候才发觉已经在Wubi里积累了太多的软件和配置,重装系统的代价很大,笔者自己最初也是在Wubi系统中操练Ubuntu,一年半以后才正式迁移到独立分区,彻底告别Windows。所以这里简要介绍一下如何将一个Wubi系统移植到物理分区。
●新建分区
在Windows下使用分区工具从现有的分区中划分出两个分区,假设分别叫做 /dev/sda5 用作安装系统, /dev/sda6 用作 swap 分区。(如果需要独立的/home分区,可以再多分一个)
●进入Wubi系统
●下载运行移植脚本
点击下载Wubi移植脚本后解压运行
sudo zxvf wubi-move.tar.gz sudo bash wubi-move.sh /dev/sda5 /dev/sda6
如果有独立的/home分区,读者可参考前面解压备份压缩包小节中恢复/home分区数据的部分。
●重启计算机
一切顺利的话,系统会出现Grub引导菜单,你可以通过选择菜单选择进入Windows还是物理分区上的Ubuntu系统,这个Ubuntu系统的内容和你的Wubi系统也同样地别无二致。
这个脚本的使用方法和更新也在持续进行中,目前支持从Ubuntu 8.04到12.04之间的所有版本。这里只是做了一些摘要,读者可以自行访问Ubuntu Forums查看这个脚本更多的用法和其它详细信息。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
Ubuntu系统备份恢复策略之一:利用脚本
本文提供Ubuntu系统的备份恢复的第一个策略:使用脚本文件进行备份恢复。该备份恢复策略不仅适用于Ubuntu,对于使用其他发行版的Linux用户,同样可以参阅。