NILFS文件系统使用入门

来源:互联网 发布:kali sql注入检测工具 编辑:程序博客网 时间:2024/06/05 07:03

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在开机启动时会自动加载,当然你也可以手动加载

sudo modprobe nilfs2

首先,我们需要做的是安装NILFS工具集,该工具集包含创建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/sdb1mkfs.nilfs2 ver 2.0Start writing file system initial data to the device       Blocksize:4096  Device:/dev/sdb1  Device Size:73402366464File system initialization succeeded !! 

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

mkfs.nilfs2 /tmp/disk.imgmkfs.nilfs2 ver 2.0Start writing file system initial data to the device      Blocksize:4096  Device:/tmp/disk.img  Device Size:402653184File system initialization succeeded !!

有了自己的NILFS文件系统之后我们便可以使用mount将其挂载到系统当中了

mkdir /mnt/nilfsmount /dev/sdb1 /mnt/nilfs

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

losetup /dev/loop0 /tmp/disk.imgmkdir /mnt/nilfsmount -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.txthello 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

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

使用快照

创建一个快照

# echo "hello NILFS" > 1.txt# echo "hello NILFS" > 2.txt# ls1.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# ls1.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很方便的记录了我们的文件日志,这真是一个不错的功能。

本文地址

  1. CSDN博客
  2. GitHub Markdown
0 0
原创粉丝点击