Andy Niu �����ĵ�

Andy Niu

Andy Niu Help  1.0.0.0
文件系统和目录树

变量

 文件系统
 
 目录树
 
 mount
 
 mount报错不能分配内存
 
 umount
 
 ln
 

详细描述

变量说明

ln
1、连接文件分为两种方式:硬连接和软连接
2、我们知道,文件名关联文件系统的inode,硬连接相当于多一个文件名关联inode。
    通过ll -i,可以看到文件名关联的inode相同,同时inode的连接个数加1
3、软连接相当于新建一个文件,软连接文件名关联inode,inode指向data block,data block关联原文件的inode。
4、从C++指针和引用计数的角度理解:
    硬连接相当于指针复制,inode的引用计数加1,删除文件名的时候,检查引用计数,为0的时候才删除原文件。
    软连接相当于指针的指针,比如原文件名为A,软连接为B,B指向A,删除A,B也就无效了。
5、使用硬连接比较安全,但是硬连接存在问题:
    a、不能跨越文件系统,原因是:因为只有一个文件系统中,两个文件名才能关联同一个inode
    b、不能硬连接到目录,原因是:如果可以,那就要保证目录下面的文件之间也要建立一一对应的硬连接关系,
    这显然太复杂。
6、软连接是指针的指针,可认为是Windows下面的快捷方式,没有硬连接的限制。
7、ln的语法,ln [-sf] 源文件 目标文件
    -s  是软连接,不加参数就是硬连接
    -f  如果目标文件存在,删除目标文件再重新创建
参见
mount
1、将文件系统(或者其他目录)与目录树结合的操作,成为挂载。
    也就是目录树上面的一个目录,作为挂载点,挂载一个文件系统,该目录作为文件系统的入口。
    注:挂载点必须是目录树上面的目录。
2、示例,如下:
    mount //10.36.65.80/80_Linux_Dir ~/80_Linux_Dir -t cifs -o username=25697,password=Dh_@2015
mount报错不能分配内存
1、mount报错如下:
    [root@localhost datafs]# mount //10.65.200.168/ivss ./ivss -t cifs -o username=niu,password=ruanxiaopang
    mount: Cannot allocate memory
2、错误原因是:
    //10.65.200.168/ivss 目录太大,不能进行挂载
3、解决办法:
    修改windows的注册表
    修改注册表 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanServer\Parameters\IRPStackSize项
    如果不存在IRPStackSize项,新建一个DWORD值,取名为IRPStackSize,值设置为18(10进制)
    然后重启电脑。
umount
取消挂载:
    umount //10.36.65.80/80_Linux_Dir
文件系统
1、Linux的文件系统包含三个部分:
    inode:记录文件的属性,包括访问模式(rwx),所有者和所有组,大小,修改时间,
        最重要的是包含指针(多个指针以及间接指针),指向文件的内容,也就是data block,一个文件占用一个inode
    data block:实际记录文件的内容,若文件较大,会占用多个data block
    super block 记录文件系统的整体信息,包括inode/data block的总量,使用量,剩余量,以及文件系统的格式。
2、Linux的这种文件系统,称为索引式文件系统,由inode可以定位到所有的data block,磁盘转一圈,就可以读取到文件所有的
    内容。而Windows的文件系统可认为是链表式文件系统,读取到data block,才能读取下一个data block,这就导致读取文件的
    所有内容,可能需要磁盘转几圈。如果data block分散的很厉害,读取开销更大。因此,Windows需要定期进行碎片整理。
    而Linux基本上不需要。
参见
目录树
1、Linux内存中维护一棵目录树,使用VFS,目录包含两个部分:目录和文件名
2、目录关联一个inode,inode记录目录的权限和属性,inode关联data block,data block中记录该目录下面
    的文件名和该文件名占用的inode
3、inode中并不记录文件名,而是文件名关联inode,inode记录文件的信息,其中有一个data block指针,指向文件的数据。
4、定位文件的过程是:当前目录A-->目录A的inode-->目录A的data block-->目录A下面的文件名和该文件名对应的inode
    -->找到文件名对应的inode-->找到文件的data block-->读取数据
参见
Copyright (c) 2015~2016, Andy Niu @All rights reserved. By Andy Niu Edit.