Linux文件系统快照
来自:http://www.mike.org.cn/blog/index.php?load=read&id=619
文件系统快照 (File System Snapshots) 顾名思义就是在文件系统上照张相片,也就是将文件系统当时的情形记录下来,就好像照相一样。日后您可以一张一张照片翻出来看。例如,您目前文件系统中有十个档案,我们先使用文件系统快照拍一张照片。之后我们可以删除档案,在目前文件系统中已经没有东西了。但如果您将照片挂入,您还是可以看到这些档案。简单的来说,文件系统快照的功能就是记录当时文件系统的状态。
文件系统快照只能用在独立的「文件系统」。例如我们的 /home、/var 分别是独立的分割区 /dev/ad0s1d 及 /dev/ad0s1e,则我们可以对 /home 及 /var 做文件系统快照。
让我们实际操作一次如何进行快照。建立文件系统快照的方法有二个,一是使用 mount 指令,另一个是使用 mksnap_ffs。例如我们在将 /home 这一个分割区做一个文件系统快照,并将快照存成 /home/snapshot20050730,可以使用下列指令:
# mount -u -o snapshot /home/snapshot20050730 /home
或是
# mksnap_ffs /home /home/snapshot20050730
您会发现在 /home 中多了一个文件名为 snapshot20050730。这个档案就是现在这个时间点的文件系统状态。必须要注意的是,如果您要对 /home 做快照,在快照时只能将结果放在 /home 目录下。例如,你可以放在 /home/snapshot/20050730,或是 /home/alex/backup/0730。但是不能放在 /var/snap.0730。也就是对某一个文件系统进行快照的结果只能放在该文件系统中。但是快照完成后,您就可以将它复制到其它地方。
现在,您可以在 /home 中先建一些档案,等一下我们再将刚才的 snapshot 翻开来看,您会发现这些新建的档案都不会出现在「照片」中。
我们现在来看看要怎么把「照片」翻开来看。要看快照的内容可以使用下列指令:
# mdconfig -a -t vnode -f /home/snapshot20050730 -u 3
# mount -r /dev/md3 /mnt
上面的指令是将快照档案挂入第 3 个 md 装置,再使用 mount 指令将它像文件系统一样挂入。因为这是快照,照片是不能修改的,所以我们只能以只读格式挂入。您现在可以看一下 /mnt 中的档案,是不是和您 /home 中的档案一样,但却没有新建的档案存在。而且您可以试着开启档案,连档案内容都一样。很神奇吧,杰克!
md是FreeBSD 中一种特别的装置,它可以让我们将档案仿真成文件系统,您可以随意指定没有在使用中的 md 装置,如 md1、md2、md3 等。我们使用 mdconfig 这个指令将设定档案使用某一个编号的装置,在挂入时必须也使用相对的编号 (例如上面的 md3)。而在使用完快照后,我们必须将它卸载,并释放md装置:
# umount /mnt
# mdconfig -d -u 3
以上就是文件系统快照,是不是很好用。
同一个文件系统中最多可以有 20 个档案统快照,如果您有旧的快照不用了,可以直接使用 rm 指令删除它。如果您要查找某一目录下所有的快照,可以使用下列指令:
# find /home -flags snapshot
如果您查看一下我们做出来的快照,您会发现它的档案大小和文件系统大小一模一样。但是如果您将它放在原本的文件系统中,它是不占空间的。如果您将 /home 的快照复制到其它的分割区中,它才会真正的占空间。
这么神奇的文件系统快照有什么功用呢?实际上的应用可多了。您有没有发现文件系统快照的速度非常快,这一点可以让我们在备份时更快。传统上,如果您要备份系统,您必须先停止网络服务,以免使用者数据备份到一半却有人修改而造成错误,接着您才可以备份数据。而这样一来,服务中断的时间会非常长,直到整个档案备份完为止。
而利用文件系统快照,您先停止网络服务,将文件系统进行快照,快照完后立即启用网络服务。接下来,再将快照挂入后依正常程序备份即可。或者,您也可以直接备份快照的档案即可。如此一来,服务中断的时间就可以大幅减少了,是不是很赞!