大学开始慢慢接触Linux系统,从开始的CentOS到现在的Ubuntu(也称乌班图:“来自南部非洲班图语“),传递着”我的存在是因为大家的存在”的价值观。Linux的哲学思想深深吸引着我————“一切皆文件”。
身边好多朋友也在用Ubuntu,都说好用,很炫酷,但也易崩溃。这个问题也让我头疼。我重装系统不下三次了,每次最担心的就是数据丢失。用的最久的一次是1年多,还挺自豪,算给面子了~.~
遇到问题,就要着手解决问题。毕竟重装系统真的心塞。下面我要先说说我的想法,当然你也可以跳过这一部分,直接看下面的操作方法。
面临这个问题,我的第一个想法就是,系统备份。类似与VMware下的快照一样,可以给Ubuntu系统做个备份,储存下来以备不时之需。有人会问,系统都崩溃了,备本份文件怎么用?对于这个问题,关于存储方面我想到的是云存储技术,毕竟现在云服务无处不在。实在不行将备份文件拷贝到U盘。关于如何运用备份文件恢复系统的方面我没有什么建议,对这方面不太懂。难道是类似于数据库的“事物回滚”!
下面就分享下我搜集到的方法吧,基本可以满足要求。
系统备份
linux秉承一切皆文件的思想,系统备份就相当于把整个/(根目录)所有文件打包压缩保存。
备份前先切换到root用户,避免权限问题,然后切换到/(根目录)。
tar -cvpzf /media/Disk/myDisk/ubuntu_backup@`date +%Y-%m+%d`.tar.gz --exclude=/proc --exclude=/tmp --exclude=/boot --exclude=/home --exclude=/lost+found --exclude=/media --exclude=/mnt --exclude=/run /
下面解释一下上面这条命令。tar就是一个打包命令。
* /media/Disk/myDisk/ubuntu_backup@date +%Y-%m+%d.tar.gz
这个是备份文档的存放路径,我的移动硬盘名字叫myDisk,挂载在/media/Disk目录下,ubuntu_backup@date +%Y-%m+%d.tar.gz是我备份文件的名字,这里用了一个shell命令date +%Y-%m+%d用于获取当前时间,因为备份嘛,注明时间戳还是有必要的,然后.tar.gz是说明这个文件是用tar进行打包,gzip进行压缩的。所以要根据你自己情况换为你自己的备份文件目录和文件名。
参数:
-c: 新建一个备份文档
-v: 显示详细信息
-p: 保存权限,并应用到所有文件
-z: 用gzip压缩备份文档,减小空间
-f: 指定备份文件的路径
–exclude: 排除指定目录,不进行备份
Note: 注意–exclude参数,接下来谈谈那些目录没有备份,以及为什么不备份。
我的ubuntu系统,共有四个分区,分别是:/、/home、/boot、swap。
非常建议系统备份的时候按照分区进行分别备份,并且也不建议安装系统的时候只给系统分一个分区。有四个分区的好处是,一般系统坏了都是/分区的问题,/home没什么关系,所以这种情况,我可以只还原/分区,其他分区完全可以不用动,系统就可以恢复,会节省很多时间。
另外,为了保险起见,也可以对/home和/boot备份,但是备份频率完全没必要和/分区一样高。比如/分区每周备份一次,那/home和/boot完全可以一个月备份一次,因为这两个分区出问题的概率真的很小,而且变动也不会太频繁。
请注意,如果没有把/home或者/boot目录单独分一个区,一定不要加–exclude=/home或–exclude=/boot参数!!!
/proc:一个虚拟文件系统,系统运行的每一个进程都会自动在这个目录下面创建一个进程目录。既然是系统自动创建,也就没必要备份的必要了。
/tmp:一个临时文件夹,系统的一些临时文件会放在这里。
/lost+found:系统发生错误时(比如非法关机),可以在这里找回一些丢失文件。
/media:多媒体挂载点,像u盘、移动硬盘、windons分区等都会自动挂载到这个目录下。
/mnt:临时挂载点,你可以自己挂载一些文件系统到这里。
/run:系统从启动以来产生的一些信息文件。
/home:用户家目录,存放用户个人文件和应用程序。
/boot:和系统启动相关的文件,像grub相关文件都放在这里,这个目录很重要!
我再次强调一次,/home和/boot目录我实际也是做了备份的,备份命令和上面差不多,当然你也可以排除一些目录不进行备份,像我/home下面的虚拟机文件,太占空间了。
tar -cvpzf /media/Disk/my_Disk/ubuntu_home_backup@`date +%Y-%m-%d`.tar.gz /home tar -cvpzf /media/Disk/myDisk/ubuntu_boot_backup@`date +%Y-%m-%d`.tar.gz /boot
最后还要提一下就是,有可能备份到最后系统会提示”tar: 由于前次错误,将以上次的错误状态退出”,这个警告可以忽略,没什么影响的。
系统还原
系统备份的意义就在于系统哪天发生意外时可以系统还原拯救回来
这里有两种还原方式,如果你系统出问题了,但是还可以进入终端,那就可以直接解压备份文件进行还原。但是如果你连系统都不能登录了,就要使用LiveCD(U盘启动盘)进行还原了。
- 直接操作
操作前切换到root,并且换到/根目录。
tar -xvpzf /media/Disk/myDisk/ubuntu_boot_backup@2016-6-6.tar.gz -C /
- LiveCD
操作之前请确保你已经有一个制作好的ubuntu U盘启动盘。进入系统后,打开终端还是先切换到root。
mkdir /mnt/sys
mount /dev/sdaX /mnt/sys
tar -xvpzf /media/myDisk/ubuntu_boot_backup@2016-6-6.tar.gz -C /mnt/sys
注意先创建一个临时目录用于挂载你的/根目录分区,sdaX代表你的/根目录分区,如果不知道就用fdisk -l查看一下,另外如果你的移动硬盘没有被自动挂载,你也需要手动创建一个临时目录进行挂载。
Note:因为 tar还原是只会覆盖相同的文件,但是这种方法只是恢复备份时的文件,就是说如果某些文件丢失或损坏了,这样可以恢复修复这些文件,但不能删除自备份到恢复前这期间所生成的其它文件,说白了就是假如你备份系统时有1234这四个文件,如果三天后,由于某些原因变成了1234’5(4改变了),你恢复后,就会变成12345,其中4’恢复成备份时的文件,5保留。所以大家要是想彻底还原成备份时候的样子最好彻底删除根目录下的所有文件,然后再还原,这样就可以还原成备份时的样子了。
删除整个文件系统,比如运行命令rm -fr /*,那么你还原系统后一定要把你之前没有备份的目录手动创建,不然重启系统是有问题的。
mkdir proc tmp lost+found media mnt run