码迷,mamicode.com
首页 > 其他好文 > 详细

NILFS文件系统使用入门

时间:2015-04-21 16:10:56      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

NILFS(new implementation of a log-structured file system )可以像版本控制软件一样做到对文件读写版本的控制,它可以以快照的方式保存某个时刻写在磁盘上的内容,并且可以在任意时刻回到以前的某个版本,虽然它的功能并没有版本控制软件那样强大,但是它一定程度的提升了应用程序写磁盘的效率(缩短了查找磁盘的时间),并且每一次读写都有记录,这样即使在系统宕机时也可以很快恢复系统宕机前的数据,很值得学习。


创建NILFS文件系统


自linux2.6.30以后的版本都会默认包含NILFS,下面的测试在Ubuntu 14.04.2 LTS上进行,Ubuntu默认已经将NILFS编译进内核,所以无需手动编译内核,在有的时候系统启动并未自动加载NILFS,你需要手动加载
sudo modprobe nilfs2
首先,我们需要做的是安装NILFS工具集,见https://github.com/nilfs-dev/nilfs-utils,该工具集包含创建NILFS文件系统的工具,查看nilfs文件系统快照等信息的工具。
sudo apt-get install nilfs-tools
添加一个新的磁盘并格式化,这在vmware当中很容易做到
fdisk /dev/sdb 
若不在vmware环境下,可以创建一个镜像
dd if=/dev/zero of=/tmp/disk.img bs=512M count=1
将准备好的磁盘格式化成NILFS文件系统
mkfs -t nilfs2 /dev/sdb1
mkfs.nilfs2 ver 2.0
Start writing file system initial data to the device
       Blocksize:4096  Device:/dev/sdb1  Device Size:73402366464
File system initialization succeeded !! 
或者
 mkfs.nilfs2 /tmp/disk.img
mkfs.nilfs2 ver 2.0
Start writing file system initial data to the device
       Blocksize:4096  Device:/tmp/disk.img  Device Size:402653184
File system initialization succeeded !!
有了自己的NILFS文件系统之后我们便可以使用mount将其挂载到系统当中了
mkdir /mnt/nilfs
mount /dev/sdb1 /mnt/nilfs
或者
losetup /dev/loop0 /tmp/disk.img
mkdir /mnt/nilfs
mount -t nilfs2 /dev/loop0 /mnt/nilfs/
mount.nilfs2: WARNING! - The NILFS on-disk format may change at any time.
mount.nilfs2: WARNING! - Do not place critical data on a NILFS filesystem.
mount的时候会自动启动nilfs_cleanerd进程,该进程为NILFS在用户层实现的垃圾回收服务进程(注:umount nilfs文件系统失败的时候大多数是由该进程占用文件系统所致)。
现在可以向正常使用POSIX文件系统一样操作nilfs系统了,如使用open,write,read系统调用。可以使用lscp命令查看一下当前的检查点信息:
# lscp
                 CNO        DATE     TIME  MODE  FLG     NBLKINC       ICNT
                   1  2015-04-21 10:41:58   cp    -           11          2
# cat > a.txt
hello nilfs
# lscp
                 CNO        DATE     TIME  MODE  FLG     NBLKINC       ICNT
                   1  2015-04-21 10:41:58   cp    -           11          2
                   2  2015-04-21 10:56:42   cp    -           14          3
#


lscp命令的基本使用


lscp命令可以查看NILFS文件系统的检查点和快照,其中cp意为checkpoint。其基本格式为:
lscp [options] [device]
当device参数未指定时,lscp命令会从/proc/mounts当中查找可用的nilfs文件系统(注:当存在多个nilfs文件系统时未有文档定义)。
当向NILFS文件系统内写入任何信息时便产生一个检查点,该检查点包含NILFS文件系统的连续状态信息,如block占用信息。快照是特殊的检查点,当一个检查点使用mkcp命令标记为快照的时候便产生一个快照,快照不会被垃圾回收。lscp 命令默认输出的是所有检查点(包括快照)的信息,当想要只查看快照信息的时候可以使用
lscp -s
 另外lscp命令默认输出的是NBLKINC而非BLKCNT,要达到这个目的需要使用
 lscp -b
其中NBLKINC和BLKCNT的区别请见lscp的帮助文档。


使用快照


创建一个快照
# echo "hello NILFS" > 1.txt
# echo "hello NILFS" > 2.txt
# ls
1.txt  2.txt
# lscp
                 CNO        DATE     TIME  MODE  FLG     NBLKINC       ICNT
                   1  2015-04-21 10:41:58   cp    -           11          2
                   5  2015-04-21 11:00:15   cp    -           13          2
                   6  2015-04-21 11:00:40   cp    -           14          3
                   7  2015-04-21 11:06:12   cp    -           14          4
                   8  2015-04-21 11:06:24   cp    -           15          4
# mkcp -s
# lscp
                 CNO        DATE     TIME  MODE  FLG     NBLKINC       ICNT
                   1  2015-04-21 10:41:58   cp    -           11          2
                   5  2015-04-21 11:00:15   cp    -           13          2
                   6  2015-04-21 11:00:40   cp    -           14          3
                   7  2015-04-21 11:06:12   cp    -           14          4
                   8  2015-04-21 11:06:24   ss    -           15          4
#
其中MODE列当中cp表示检查点(checkpoint),ss表示快照(snapshot)。下面的命令会使我们回到一个快照版本
##确保当前文件系统内容与刚创建的快照内容有偏差。
# cp 2.txt 3.txt
# ls
1.txt  2.txt  3.txt
# lscp
                 CNO        DATE     TIME  MODE  FLG     NBLKINC       ICNT
                   1  2015-04-21 10:41:58   cp    -           11          2
                   5  2015-04-21 11:00:15   cp    -           13          2
                   6  2015-04-21 11:00:40   cp    -           14          3
                   7  2015-04-21 11:06:12   cp    -           14          4
                   8  2015-04-21 11:06:24   ss    -           15          4
                  10  2015-04-21 11:08:44   cp    -           14          5
# mkdir /mnt/nilfs-ss8
# mount -t nilfs2 -r -o cp=8 /dev/sdb1 /mnt/nilfs-ss8
# ls /mnt/nilfs-ss8/
1.txt  2.txt
#
mount命令当中的-r表明文件系统为只读的,cp选项指定要挂载的检查点的序号,该序号指定的检查点必须为一个序号,如上面创建的快照序号为8,这里就使用8,若使用非快照的序号,则会报参数不正确错误。

到这里我们已经发现nilfs很方便的记录了我们的文件日志,这真是一个不错的功能。


NILFS文件系统使用入门

标签:

原文地址:http://blog.csdn.net/p569354158/article/details/45170131

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!