NILFS文件系统使用入门
2015-05-04 16:34
302 查看
NILFS(New Implementation of a Log-structured File System )可以像版本控制软件一样做到对文件读写版本的控制,它可以以快照的方式保存某个时刻写在磁盘上的内容,并且可以在任意时刻回到以前的某个版本,虽然它的功能并没有版本控制软件那样强大,但它为那些需要在过去与现在穿梭的应用提供了一条便捷通道,另外NILFS一定程度上提升了应用程序写磁盘的效率(缩短了查找磁盘的时间),特别在SSD环境当中,真的很值得学习。
首先需要将NILFS加载到内核当中,Ubuntu在开机启动时会自动加载,当然你也可以手动加载
首先,我们需要做的是安装NILFS工具集,该工具集包含创建NILFS文件系统的工具,查看NILFS文件系统快照等信息的工具。
添加一个新的磁盘并格式化,这在vmware当中很容易做到
若不在vmware环境下,可以创建一个镜像
将准备好的磁盘格式化成NILFS文件系统
对于手动创建的镜像需要这样做
有了自己的NILFS文件系统之后我们便可以使用mount将其挂载到系统当中了
对于手动创建的镜像需要这样做
mount的时候会自动启动nilfs_cleanerd进程,该进程为NILFS在用户层实现的垃圾回收服务进程(注: umount nilfs文件系统失败的时候大多数是由该进程占用文件系统所致)。
现在可以向正常使用POSIX文件系统一样操作nilfs系统了,如使用open,write,read系统调用。可以使用lscp命令查看一下当前的检查点信息:
当device参数未指定时,lscp命令会从/proc/mounts当中查找可用的nilfs文件系统(注:当存在多个nilfs文件系统时未有文档定义)。
当向NILFS文件系统内写入任何信息时便产生一个检查点,该检查点包含NILFS文件系统的连续状态信息,如block占用信息。快照是特殊的检查点,当一个检查点使用mkcp命令标记为快照的时候便产生一个快照,快照不会被垃圾回收。lscp 命令默认输出的是所有检查点(包括快照)的信息,当想要只查看快照信息的时候可以使用。
另外lscp命令默认输出的是NBLKINC而非BLKCNT,要达到这个目的需要使用
其中NBLKINC和BLKCNT的区别请见lscp的帮助文档。
其中MODE列当中cp表示检查点(checkpoint),ss表示快照(snapshot)。下面的命令会使我们回到一个快照版本
mount命令当中的-r表明文件系统为只读的,cp选项指定要挂载的检查点的序号,该序号指定的检查点必须为一个序号,如上面创建的快照序号为8,这里就使用8,若使用非快照的序号,则会报参数不正确错误。
到这里我们已经发现NILFS很方便的记录了我们的文件日志,这真是一个不错的功能。
GitHub Markdown
创建NILFS文件系统
NILFS 在 linux2.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
其中NBLKINC和BLKCNT的区别请见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
相关文章推荐
- inotify之文件系统事件监控使用入门
- inotify之文件系统事件监控使用入门
- 区块链研究-星际文件系统IPFS之Windows环境安装及使用入门
- 详细记录 mac 系统下使用 chmod 命令修改文件权限
- mac 系统下使用 chmod 命令修改文件权限
- tiny4412新手入门,从零开始一步一步到挂载网络根文件系统
- linux系统误删文件怎么办!使用extundelete恢复数据
- LInux入门学习——系统的安装与使用
- 文件系统 | 如何使用网络根文件系统启动开发板?
- 使用PF4J实现插件化系统-入门
- [置顶] 使用mkfs.ubifs制作文件系统时写入文件扩展属性的方法
- Linux入门笔记2. 文件系统概览
- 关于使用Intellij Idea时java系统找不到指定文件的解决方案
- UBIFS文件系统使用
- 06 H5直接使用网络文件系统
- linux系统mysql 查看当前使用的配置文件my.cnf的方法
- 浅析debugfs文件系统调试阶段gpio使用范例
- Win7 :user profile server 您已经使用系统的默认配置文件登录
- linux\mac 日常入门命令行使用——文件以及文件夹操作
- mui初级入门教程(七)— 基于native.js的文件系统管理功能实现