您的位置:首页 > 其它

NILFS文件系统使用入门

2015-05-04 16:34 302 查看
NILFS(New Implementation of a Log-structured File System )可以像版本控制软件一样做到对文件读写版本的控制,它可以以快照的方式保存某个时刻写在磁盘上的内容,并且可以在任意时刻回到以前的某个版本,虽然它的功能并没有版本控制软件那样强大,但它为那些需要在过去与现在穿梭的应用提供了一条便捷通道,另外NILFS一定程度上提升了应用程序写磁盘的效率(缩短了查找磁盘的时间),特别在SSD环境当中,真的很值得学习。

创建NILFS文件系统

NILFSlinux2.6.30发布时被合并入内核主线,这也意味着自2.6.30以后的每个版本 你都无需自己编译该文件系统,我们需要的仅仅是安装nilfs-tools,下面的测试在 Ubuntu 14.04.2 LTS上进行。

首先需要将NILFS加载到内核当中,Ubuntu在开机启动时会自动加载,当然你也可以手动加载

[code]sudo modprobe nilfs2


首先,我们需要做的是安装NILFS工具集,该工具集包含创建NILFS文件系统的工具,查看NILFS文件系统快照等信息的工具。

[code]sudo apt-get install nilfs-tools


添加一个新的磁盘并格式化,这在vmware当中很容易做到

[code]fdisk /dev/sdb


若不在vmware环境下,可以创建一个镜像


[code]dd if=/dev/zero of=/tmp/disk.img bs=512M count=1


将准备好的磁盘格式化成NILFS文件系统

[code]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 !!


对于手动创建的镜像需要这样做


[code]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将其挂载到系统当中了

[code]mkdir /mnt/nilfs
mount /dev/sdb1 /mnt/nilfs


对于手动创建的镜像需要这样做


[code]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命令查看一下当前的检查点信息:

[code]# 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。其基本格式为:

[code]lscp [options] [device]


当device参数未指定时,lscp命令会从/proc/mounts当中查找可用的nilfs文件系统(注:当存在多个nilfs文件系统时未有文档定义)。

当向NILFS文件系统内写入任何信息时便产生一个检查点,该检查点包含NILFS文件系统的连续状态信息,如block占用信息。快照是特殊的检查点,当一个检查点使用mkcp命令标记为快照的时候便产生一个快照,快照不会被垃圾回收。lscp 命令默认输出的是所有检查点(包括快照)的信息,当想要只查看快照信息的时候可以使用。

[code]lscp -s


另外lscp命令默认输出的是NBLKINC而非BLKCNT,要达到这个目的需要使用

[code]lscp -b


其中NBLKINCBLKCNT的区别请见lscp帮助文档

使用快照

创建一个快照

[code]# 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)。下面的命令会使我们回到一个快照版本

[code]##确保当前文件系统内容与刚创建的快照内容有偏差。
# 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很方便的记录了我们的文件日志,这真是一个不错的功能。

本文地址

CSDN博客

GitHub Markdown
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: