分类: BSD
2011-05-15 22:47:50
FreeBSD操作系统是非常稳定的,但是这并不是说FreeBSD系统都不备份数据,系统备份是系统管理中一个重要的部分。
在学习使用FreeBSD的过程中经常需要对系统进行某些实验性的操作,这时就有可能把系统搞乱,
只要你是正常操作搞坏一个FreeBSD还是比较困难的,如果没有root权限的话,几乎就是不可能的,当然你可以把自己的home塞满,如果管理员没有使用quato技术的话。 但是想搞坏一个FreeBSD也是很容易的,比如说你在行使root权限时随便输入了一个错误的命令。
这个Wiki页面将会介绍一种FreeBSD系统的完全备份方法,主要基于FreeBSD Forum上killasmurf86一个关于Backup的帖子。
在FreeBSD的Handbook上专门内容讲系统备份,在网上也有很多关于FreeBSD系统的备份文章,这个wiki页面的主要目的在于给出一个详细的备份以及恢复系统的过程描述。
FreeBSD基本系统中有很多工具可以备份,比如说tar。
但是在这个Wiki页面中我们只使用:dump+restore+freebsd_livefs_cd。
其中freebsd_livefs_cd可以到任意的FreeBSD的ftp服务器去下载。
这个台式机只有1块硬盘,并且只有一个FreeBSD操作系统,其分区方案如下。
df -h Filesystem Size Used Avail Capacity Mounted on /dev/ad12s1a 496M 36M 420M 8% / devfs 1.0K 1.0K 0B 100% /dev /dev/ad12s1h 240G 1.5G 219G 1% /home /dev/ad12s1e 3.9G 166K 3.6G 0% /tmp /dev/ad12s1f 19G 3.1G 15G 17% /usr /dev/ad12s1g 19G 1.3G 17G 7% /usr/local /dev/ad12s1d 3.9G 55M 3.5G 2% /var procfs 4.0K 4.0K 0B 100% /proccat /etc/fstab # Device Mountpoint FStype Options Dump Pass# /dev/ad12s1b none swap sw 0 0 /dev/ad12s1a / ufs rw 1 1 /dev/ad12s1h /home ufs rw 2 2 /dev/ad12s1e /tmp ufs rw 2 2 /dev/ad12s1f /usr ufs rw 2 2 /dev/ad12s1g /usr/local ufs rw 2 2 /dev/ad12s1d /var ufs rw 2 2 /dev/acd0 /cdrom cd9660 ro,noauto 0 0 proc /proc procfs rw 0 0从这个分区来看,是一个320G的硬盘,上面只有一个FreeBSD操作系统,每个分区的大致用途如下,详情可以参考hier(7)。
/ 这个目录存放很多基本工具,包括内核,需要备份;
/dev 这是一个虚拟的文件系统,不需要备份;
/home 用户数据,需要备份;
/tmp 临时文件,不需要备份;
/usr 很多工具以及系统的源代码都放在这里面,需要备份;
/usr/local 所有安装的软件基本上都在这里,需要备份;
/var 系统的日志,ports系统的数据库,需要备份;
/proc 虚拟文件系统,不需要必要备份。
看来需要备份一下目录:
/
/home
/usr
/usr/local
/var
以/分区为例,我通常直接备份到我的移动硬盘上面。
我的移动硬盘使用的是UFS文件系统,分了4个partition,一般情况下我会把移动硬盘关在在我的/mnt/fender_01目录下面,假设目前系统一切正常,我现在打算做一个备份,那么我就应该关在移动硬盘某个分区到/mnt/fender_01目录下,然后分别对所有需要备份的分区进行备份,这里只给出“/”分区备份的例子。
“/”分区对应我硬盘上面的/dev/ad12s1a,那么备份整个分区的命令如下:
dump -0Lauf /mnt/fender_01/dump/ad12sa1.dump /dev/ad12s1a某些时候,起一个好的文件名很重要!
其中:
-0 备份所有的文件系统中的内容,也就是不使用增量备份;
-f 指定备份结果存放的文件名;
-a 告诉dump不考虑备份的介质的大小问题,早期备份使用磁带,dump会预先计算一下需要的空间,使用这个选项告诉dump忽略这个问题;
-u 告诉dump更新一下/etc/dumpdates,这个文件记录了你在系统上搜有的备份活动;
-L 备份已经挂载的文件系统时需要,这个选项会使用UFS2的snapshot功能来保证文件系统的一致性。
如果你只想恢复/以外的文件系统,那么很容易,
我们以恢复/home文件系统为例,你只需要重启系统进入单用户模式,
挂载/tmp分区,应为restore需要使用/tmp分区,
挂载移动硬盘上保存我备份文件的分区到/mnt目录下面的某个,例如/mnt/01,
按照我上面命名的规则,备份生成的文件应该是保存在/mnt/01/dump/dev/ad12s1h.dump,
首先你需要格式化/dev/ad12s1h,命令如下:
newfs -U /dev/ad12s1h-U选型来打开softupdate。
挂在这个分区到/mnt下面的某个目录,例如/mnt/02/
mount /dev/ad12s1h /mnt/02现在来恢复文件系统:
cd /mnt/02 restore -rf /mnt/01/dump/ad12s1h.dump按照上面的方法你可以恢复/以外的任意的分区,但是你不能恢复“/”,因为你如果使用newfs格式化了“/”你就没有办法使用“/”里面的restore了,
解决的办法就是使用freebsd_livefs_cd启动系统,然后选择fix,之后选择cd,之后的过程就和上面介绍的恢复其他分区是一样的了。
事实上,可以使用freebsd_livefs_cd来恢复任何分区,但是如果你没有下载并刻录这张光盘,那么你就只能在单用户模式下面恢复“/”以外的分区了。
需要注意的是,当你格式化“/”对应的硬盘分区时,可以使用下述两种方法:
newfs /dev/ad12s1anewfs -U /dev/ad12s1a区别在于后者将打开softupdate选项,详细情况参考newfs。
在FreeBSD系统的安装过程中“/”分区默认是不打开softupdate的,并且你也没有办法打开,因为sysinstall程序不允许你打开。
这是一个历史遗留问题,当时softupdate还不成熟,于是决定在“/”分区中禁止使用softupdate,现在softupdate已经成熟了,但是对这个问题却保留了下来。
在“/”分区使用softupdate不会造成什么问题,但是在系统安装的默认设置中是没有打开的,这一点需要注意。
可以使用如果想打开或者关闭softupdate这个选项,可以使用tunefs(8)这个工具。
上面只提到了备份文件系统,没有讲如何备份系统的MBR。
关于MBR是什么就不详细介绍了,有兴趣的可以参考Handbook上面有一章专门介绍FreeBSD系统的启动过程。
系统的备份与恢复并不十分困难,但是如果你不慎输入某个错误的命令的话,有可能导致某些灾难性的后果。
重做系统需要的是时间,但是如果重要数据丢失了,那就不只是时间的问题了。
所以,在备份与恢复系统时,请尽量保证自己头脑清醒。