mfs文件系统(三)

使用  MooseFS
一、挂载文件系统
启动管理服务器(master server)和数据服务器(chunkservers) (chunkservers一个是必需的,但至少两个推荐) 后,客户机便可以利用mfsmount挂接mfs文件系统。
MooseFS文件系统利用下面的命令:
mfsmount mountpoint [-d] [-f] [-s] [-m] [-n] [-p] [-H MASTER] [-P PORT] [-S PATH] [-o OPT[,OPT...]]
-H MASTER:是管理服务器(master server)的ip地址
-P PORT: 是管理服务器(master server)的端口号,要按照mfsmaster.cfg 配置文件中的变量MATOCU_LISTEN_POR的之填写。如果master serve使用的是默认端口号则不用指出。
-S PATH:指出被挂接mfs目录的子目录,默认是/目录,就是挂载整个mfs目录。
Mountpoint:是指先前创建的用来挂接mfs的目录。
在开始mfsmount进程时,用一个-m或-o mfsmeta的选项,这样可以挂接一个辅助的文件系统MFSMETA,这么做的目的是对于意外的从MooseFS卷上删除文件或者是为了释放磁盘空间而移动的文件而又此文件又过去了垃圾文件存放期的恢复,例如:
mfsmount -m /mnt/mfsmeta
需要注意的是,如果要决定挂载mfsmeta,那么一定要在mfsmaster的mfsexports.cfg文件中加入如下条目:
*                       .       rw

原文件中有此条目,只要将其前的#去掉就可以了。
基本操作
挂载文件系统后就可以执行所有的标准的文件操作了(如创建,拷贝,删除,重命名文件,等等)。MooseFS是一个网络文件系统,因此操作进度可能比本地系统要慢。
MooseFS卷的剩余空间检查可以用和本地文件系统同样的方法,例如df命令:
$ df -h | grep mfs
mfsmaster:9421         85T   80T  4.9T  95% /mnt/mfs
mfsmaster:9321        394G  244G  151G  62% /mnt/mfs-test
重要的是每一个文件可以被储存多个副本,在这种情况下,每一个文件所占用的空间要比其文件本身大多了。此外,被删除且在有效期内(trashtime)的
文件都放在一个“垃圾箱”,所以他们也占用的空间,其大小也依赖文件的份数。就像其他Unix的文件系统一样,以防删除一个被其它进程打开文件,数据将被
一直存储,至少直到文件被关闭。
二、MooseFS的特定的操作
1、设定的目标
目标(goal),是指文件被拷贝的份数,设定了拷贝的份数后是可以通过可以mfsgetgoal命令来证实的,也可以通过mfssetgoal来改变设定。例如:
$ mfsgetgoal /mnt/mfs-test/test1
/mnt/mfs-test/test1: 2
$ mfssetgoal 3 /mnt/mfs-test/test1
/mnt/mfs-test/test1: 3
$ mfsgetgoal /mnt/mfs-test/test1
/mnt/mfs-test/test1: 3
用mfsgetgoal –r和mfssetgoal –r同样的操作可以对整个树形目录递归操作。
$ mfsgetgoal -r /mnt/mfs-test/test2
/mnt/mfs-test/test2:
files with goal        2 :                   36
directories with goal  2 :                    1
$ mfssetgoal -r 3 /mnt/mfs-test/test2
/mnt/mfs-test/test2:
inodes with goal changed:                        37
inodes with goal not changed:                     0
inodes with permission denied:                    0
$ mfsgetgoal -r /mnt/mfs-test/test2
/mnt/mfs-test/test2:
files with goal        3 :                   36
directories with goal  3 :                    1
实际的拷贝份数可以通过mfscheckfile 和 mfsfileinfo 命令来证实,例如:
$ mfscheckfile /mnt/mfs-test/test1
/mnt/mfs-test/test1:
3 copies: 1 chunks
$ mfsfileinfo /mnt/mfs-test/test1
/mnt/mfs-test/test1:
        chunk 0: 00000000000520DF_00000001 / (id:336095 ver:1)
                copy 1: 192.168.0.12:9622
                copy 2: 192.168.0.52:9622
                copy 3: 192.168.0.54:9622
注意:一个不包含数据的零长度的文件,尽管没有设置为非零的目标(the non-zero "goal"),但用命令查询将返回一个空的结果,例如:
[root@www bin]# touch    /mnt/mfs/mmm
[root@www bin]# ./mfsfileinfo  /mnt/mfs/mmm   
/mnt/mfs/mmm:
但是如果对此文件进行编辑,如:
[root@www bin]# echo "1234"> /mnt/mfs/mmm
然后看:
root@www bin]# ./mfsfileinfo  /mnt/mfs/mmm      
/mnt/mfs/mmm:
        chunk 0: 0000000000000040_00000001 / (id:64 ver:1)
                copy 1: 192.168.3.31:9422
                copy 2: 192.168.3.96:9422
                copy 3: 192.168.3.139:9422
此时在将文件清空:
[root@www bin]# echo ""> /mnt/mfs/mmm  
然后在看:
[root@www bin]# ./mfsfileinfo  /mnt/mfs/mmm         
/mnt/mfs/mmm:
        chunk 0: 0000000000000041_00000001 / (id:65 ver:1)
                copy 1: 192.168.3.31:9422
                copy 2: 192.168.3.96:9422
                copy 3: 192.168.3.139:9422
副本将任然存在。
假如改变一个已经存在的文件的拷贝个数,那么文件的拷贝份数将会被扩大或者被删除,这个过程会有延时。可以通过上面的命令来证实。
对一个目录设定“目标”,此目录下的新创建文件和子目录均会继承此目录的设定,但不会改变已经存在的文件及目录的拷贝份数。例如:
[root@bzd f]# touch 1
[root@bzd f]# echo “11” > 1
[root@bzd f]# /usr/local/mfs/bin/mfsfileinfo 1   
1:
        chunk 0: 0000000000000043_00000001 / (id:67 ver:1)
                copy 1: 192.168.3.31:9422
                copy 2: 192.168.3.96:9422
                copy 3: 192.168.3.139:9422
[root@bzd f]# cd ..
[root@bzd mfs]# /usr/local/mfs/bin/mfssetgoal 2 f
f: 2
[root@bzd mfs]# cd f/
[root@bzd f]# ls
1
[root@bzd f]# touch 2
[root@bzd f]# echo “222” > 2
[root@bzd f]# /usr/local/mfs/bin/mfsfileinfo 1
1:
        chunk 0: 0000000000000043_00000001 / (id:67 ver:1)
                copy 1: 192.168.3.31:9422
                copy 2: 192.168.3.96:9422
                copy 3: 192.168.3.139:9422
[root@bzd f]# /usr/local/mfs/bin/mfsfileinfo 2
2:
        chunk 0: 0000000000000044_00000001 / (id:68 ver:1)
                copy 1: 192.168.3.31:9422
                copy 2: 192.168.3.96:9422

整个目录树的内容摘要可以用一个功能增强的等同于du –s的命令mfsdirinfo,mfsdirinfo为MooseFS列出具体的信息。
例如:
$ mfsdirinfo /mnt/mfs-test/test/:
inodes:                         15
  directories:                    4
  files:                          8
chunks:                          6
length:                     270604
size:                       620544
realsize:                  1170432
上述内容摘要显示了目录、文件及chunks的数目,还有整个目录占用磁盘空间的情况。
length -文件大小的总和
size –块长度总和
realsize –磁盘空间的使用包括所有的拷贝

这是一个文件被分成了6个chunk例子:
[root@bzd mfs]# /usr/local/mfs/bin/mfsfileinfo fdsf.iso
1.img:
        chunk 0: 000000000000053A_00000001 / (id:1338 ver:1)
                copy 1: 192.168.3.31:9422
                copy 2: 192.168.3.96:9422
                copy 3: 192.168.3.139:9422
        chunk 1: 000000000000053B_00000001 / (id:1339 ver:1)
                copy 1: 192.168.3.31:9422
                copy 2: 192.168.3.96:9422
                copy 3: 192.168.3.139:9422
        chunk 2: 000000000000053C_00000001 / (id:1340 ver:1)
                copy 1: 192.168.3.31:9422
                copy 2: 192.168.3.96:9422
                copy 3: 192.168.3.139:9422
        chunk 3: 000000000000053D_00000001 / (id:1341 ver:1)
                copy 1: 192.168.3.31:9422
                copy 2: 192.168.3.96:9422
                copy 3: 192.168.3.139:9422
        chunk 4: 000000000000053E_00000001 / (id:1342 ver:1)
                copy 1: 192.168.3.31:9422
                copy 2: 192.168.3.96:9422
                copy 3: 192.168.3.139:9422
        chunk 5: 000000000000053F_00000001 / (id:1343 ver:1)
                copy 1: 192.168.3.31:9422
                copy 2: 192.168.3.96:9422
                copy 3: 192.168.3.139:9422

三、垃圾箱(trash bin)设定隔离的时间(quarantine time)
一个删除文件能够存放在一个“垃圾箱”的时间就是一个隔离时间,这个时间可以用mfsgettrashtime命令来验证,也可以用mfssettrashtime命令来设置,例如:
$ mfsgettrashtime /mnt/mfs-test/test1
/mnt/mfs-test/test1: 604800
$ mfssettrashtime 0 /mnt/mfs-test/test1
/mnt/mfs-test/test1: 0
$ mfsgettrashtime /mnt/mfs-test/test1
/mnt/mfs-test/test1: 0
这些工具也有个递归选项-r,可以对整个目录树操作,例如:
$ mfsgettrashtime -r /mnt/mfs-test/test2
/mnt/mfs-test/test2:
files with trashtime                 0 :                   36
directories with trashtime      604800 :                    1
$ mfssettrashtime -r 1209600 /mnt/mfs-test/test2
/mnt/mfs-test/test2:
inodes with trashtime changed:                       37
inodes with trashtime not changed:                    0
inodes with permission denied:                        0
$ mfsgettrashtime -r /mnt/mfs-test/test2
/mnt/mfs-test/test2:
files with trashtime           1209600 :                   36
directories with trashtime     1209600 :                    1
时间的单位是秒(有用的值有:1小时是3600秒,24 - 86400秒,1 - 604800秒)。就像文件被存储的份数一样, 为一个目录 设定存放时间是要被新创建的文件和目录所继承的。数字0意味着一个文件被删除后, 将立即被彻底删除,在想回收是不可能的
删除文件可以通过一个单独安装MFSMETA文件系统。特别是它包含目录 / trash (包含任然可以被还原的被删除文件的信息)和 / trash/undel (用于获取文件)。只有管理员有权限访问MFSMETA(用户的uid 0,通常是root)。
$ mfssettrashtime 3600 /mnt/mfs-test/test1
/mnt/mfs-test/test1: 3600
$ rm /mnt/mfs-test/test1
$ ls  /mnt/mfs-test/test1
ls: /mnt/mfs-test/test1: No such file or directory
# ls -l /mnt/mfs-test-meta/trash/*test1
-rw-r--r-- 1 user      users     1 2007-08-09 15:23 /mnt/mfs-test-meta/trash/00013BC7|test1
被删文件的文件名在
“垃圾箱”目录里还可见,文件名由一个八位十六进制的数i-node和被删文件的文件名组成,在文件名和i-node之间不是用“/”,而是用了“|”替
代。如果一个文件名的长度超过操作系统的限制(通常是255个字符),那么部分将被删除。通过从挂载点起全路径的文件名被删除的文件任然可以被读写。需要
注意的是被删除的文件在用全路径文件名(注意文件名是两部分)时一定要用单引号引起来。例如:
# cat '/mnt/mfs-test-meta/trash/00013BC7|test1'
test1
# echo 'test/test2' > '/mnt/mfs-test-meta/trash/00013BC7|test1'
# cat '/mnt/mfs-test-meta/trash/00013BC7|test1'
test/test2
移动这个文件到trash/undel子目录下,将会使原始的文件恢复到正确的MooseFS文件系统上 路径下(如果路径没有改变)。例如:
[root@www mfs]# ll dgg   
-rw-r--r--  1 root root 8 Jan 13 08:45 dgg
[root@www mfs]# rm -f dgg
[root@www mfs]# ll dgg   
ls: dgg: No such file or directory
[root@www trash]# ls
0000000B|dgg   00000047|f1    undel
[root@www trash]# mv '/mnt/mfsmeta/trash/0000000B|dgg' ./undel/
[root@www trash]# ls
undel 00000047|f1
[root@www mfs]# ll dgg
-rw-r--r--  1 root root 8 Jan 13 08:45 dgg
注意:如果在同一路径下有个新的同名文件,那么恢复不会成功
从“垃圾箱”中删除文件结果是释放之前被它站用的空间(删除有延迟,数据被异步删除)。在这种被从“垃圾箱”删除的情况下,该文件是不可能恢复了。
可以通过mfssetgoal工具来改变文件的拷贝数,也可以通过mfssettrashtime工具来改变存储在“垃圾箱”中的时间。

MFSMETA的目录里,除了trash和trash/undel两个目录外,还有第三个目录reserved,该目录内有已经删除的文件,但却有一直打
开着。在用户关闭了这些被打开的文件后,reserved目录中的文件将被删除,文件的数据也将被立即删除。在reserved目录中文件的命名方法同
trash目录中的一样,但是不能有其他功能的操作。
四、快照
MooseFS系统的另一个特征是利用mfsmakesnapshot工具给文件或者是目录树做快照,例如:
$ mfsmakesnapshot source ... destination

Mfsmakesnapshot是在一次执行中整合了一个或是一组文件的拷贝,而且任何修改这些文件的源文件都不会影响到源文件的快照, 就是说任何对源文件的操作,例如写入源文件,将不会修改副本(或反之亦然)。
文件快照可以用mfsappendchunks,就像MooseFS1.5中的mfssnapshot一样,,作为选择,二者都可以用。例如:
$ mfsappendchunks destination-file source-file ...
当有多个源文件时,它们的快照被加入到同一个目标文件中(每个chunk的最大量是chunk)。
五、额外的属性
文件或目录的额外的属性(noowner, noattrcache,
noentrycache),可以被mfsgeteattr,mfsseteattr,mfsdeleattr工具检查,设置,删除,其行为类似
mfsgetgoal/mfssetgoal or或者是mfsgettrashtime/mfssettrashtime,详细可见命令手册。

mfs教程(三)的更多相关文章

  1. CRL快速开发框架系列教程三(更新数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  2. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(三)-使用Travis自动部署Hexo(1)

    前言 前面两篇文章介绍了在github上使用hexo搭建博客的基本环境和hexo相关参数设置等. 基于目前,博客基本上是可以完美运行了. 但是,有一点是不太好,就是源码同步问题,如果在不同的电脑上写文 ...

  3. 无废话ExtJs 入门教程三[窗体:Window组件]

    无废话ExtJs 入门教程三[窗体:Window组件] extjs技术交流,欢迎加群(201926085) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3 ...

  4. CocoStudio教程三:认识并利用CocoStudio的果实 运行2.2.1版本

    原文:CocoStudio教程三:认识并利用CocoStudio的果实 原文用的老版,用2.21搞起来好像有些问题,然后自己摸索了下,有的都是乱找的方法,只求能运行... 1,原文的CCJsonRea ...

  5. Android Studio系列教程三--快捷键

    Android Studio系列教程三--快捷键 2014 年 12 月 09 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://stormzhang.com/ ...

  6. Laravel教程 三:视图变量传递和Blade

    Laravel教程 三:视图变量传递和Blade 此文章为原创文章,未经同意,禁止转载. Blade 上一篇我们简单地说了Router,Views和Controllers的工作流程,这一次我就按照上一 ...

  7. NGUI系列教程三

    接下来我们再来看Progress Bar和Slider,对比参数我们可以发现,Progress Bar和slider的明显区别在于slider多一个Thumb选项,这里的Thumb就是我们拖动的时候点 ...

  8. 中文翻译:pjsip教程(三)之ICE stream transport的使用

    1:pjsip教程(一)之PJNATH简介 2:pjsip教程(二)之ICE穿越打洞:Interactive Connectivity Establishment简介 3:pjsip教程(三)之ICE ...

  9. 黄聪:Microsoft Enterprise Library 5.0 系列教程(三) Validation Application Block (高级)

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(三) Validation Application Block (高级) 企业库验证应用程序模块之配置文件模式: ...

随机推荐

  1. js 柯里化Currying

    今天读一篇博客的时候,看都有关柯里化的东西,由于好奇,特意查了一下,找到一篇比较好的文章,特意收藏. 引子先来看一道小问题:有人在群里出了到一道题目:var s = sum(1)(2)(3) .... ...

  2. mysql基础认识1

    一.配置文件 服务端和客户端的字符编码不一样时,可能会导致乱码显示等情况,为了统一两端的字符编码,可以通过配置文件进行实现,当然譬如登录账户等信息也可以进行配置,在启动mysql服务端时会自动读取配置 ...

  3. phpcms v9 csdn老手记录

    http://blog.csdn.net/yanhui_wei/article/category/1220735

  4. self = [super init]

    Objective-C的推荐init方法写法如下: - (id) init { if(self = [super init]) { //为子类增加属性进行初始化 } return self; } 返回 ...

  5. hibernate 多对多(many-to-many)

    多对多(many-to-many):在操作和性能方面都不太理想,所以多对多的映射使用较少,实际使用中最好转换成一对多的对象模型:hibernate会为我们创建中间关联表,转换成两个一对多. 1. E- ...

  6. C#进阶之路(七)反射的应用

    反射在C#中的应用还是很多的,但它对代码的性能有一定影响. 反射的性能: 使用反射来调用类型或者触发方法,或者访问一个字段或者属性时clr 需要做更多的工作:校验参数,检查权限等等,所以速度是非常慢的 ...

  7. bzoj 2119 股市的预测 —— 枚举关键点+后缀数组

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2119 思路就是对于这个形如 ABA 的串,枚举 A 的长度,并按照长度分出几块,找到一些关键 ...

  8. android中MediaPlayer类的用法

    用法直接看sample package com.turtle920.androidaudioprocess; import android.media.MediaPlayer; import andr ...

  9. HTTP-POST

    POST方式:用来向目的服务器发出请求,要求它接受被附在请求后的实体,并把它当作请求队列中请求URI所指定资源的附加新子项,Post被设计成用统一的方法实现下列功能: 1:对现有资源的解释: 2:向电 ...

  10. git的分布式和集中式

    当然,Git的优势不单是不必联网这么简单,后面我们还会看到Git极其强大的分支管理,把SVN等远远抛在了后面.