用户工具

站点工具


doc:b:backup_with_dump_and_restore

FreeBSD系统完全备份

摘要:

FreeBSD操作系统是非常稳定的,但是这并不是说FreeBSD系统都不备份数据,系统备份是系统管理中一个重要的部分。

在学习使用FreeBSD的过程中经常需要对系统进行某些实验性的操作,这时就有可能把系统搞乱,

只要你是正常操作搞坏一个FreeBSD还是比较困难的,如果没有root权限的话,几乎就是不可能的,当然你可以把自己的home塞满,如果管理员没有使用quato技术的话。 但是想搞坏一个FreeBSD也是很容易的,比如说你在行使root权限时随便输入了一个错误的命令。

这个Wiki页面将会介绍一种FreeBSD系统的完全备份方法,主要基于FreeBSD Forum上killasmurf86一个关于Backup的帖子。

在FreeBSD的Handbook上专门内容讲系统备份,在网上也有很多关于FreeBSD系统的备份文章,这个wiki页面的主要目的在于给出一个详细的备份以及恢复系统的过程描述。

基本的游戏规则:

  1. FreeBSD系统的备份不需要什么特殊的工具,你需要的工具在FreeBSD的基本系统里面就有;
  2. FreeBSD系统的备份就是对系统文件的打包,然后放到一个安全的地方,本文中使用的打包工具是dump;
  3. FreeBSD系统的恢复就是把你保存好的系统文件从安全的地方里面拿出来放到你的硬盘上去,本文中使用的恢复工具是restore;
  4. Unix-like下面不使用ghost之类的备份工具。

需要使用的工具:

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%    /proc
cat /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 用户数据,需要备份;但是有些情况下,/home目录是/usr/home目录的一个符号链接,这时候可以不备份,而只需要备份/usr

/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/ad12s1a
newfs -U /dev/ad12s1a

区别在于后者将打开softupdate选项,详细情况参考newfs

在FreeBSD系统的安装过程中“/”分区默认是打开softupdate的,并且你也没有办法打开,因为sysinstall程序不允许你打开。

这是一个历史遗留问题,当时softupdate还不成熟,于是决定在“/”分区中禁止使用softupdate,现在softupdate已经成熟了,但是对这个问题却保留了下来。 ^_^

在“/”分区使用softupdate不会造成什么问题,但是在系统安装的默认设置中是没有打开的,这一点需要注意。

可以使用如果想打开或者关闭softupdate这个选项,可以使用tunefs(8)这个工具。

备份MBR:

上面只提到了备份文件系统,没有讲如何备份系统的MBR。

关于MBR是什么就不详细介绍了,有兴趣的可以参考Handbook上面有一章专门介绍FreeBSD系统的启动过程。

备份:

dd if=/dev/da0 of=/path/to/mbr.img bs=512 count=1

恢复:

dd if=/path/to/mbr.img of=/dev/da0 bs=512 count=1

参考:

注意:

系统的备份与恢复并不十分困难,但是如果你不慎输入某个错误的命令的话,有可能导致某些灾难性的后果。

重做系统需要的是时间,但是如果重要数据丢失了,那就不只是时间的问题了。

所以,在备份与恢复系统时,请尽量保证自己头脑清醒。

后记:

欢迎提出修改意见。

感谢killasmurf86

/data/vhosts/wiki-data/pages/doc/b/backup_with_dump_and_restore.txt · 最后更改: 2012/04/20 16:27 由 wf.ab