首页 > 代码库 > linux文件系统简析

linux文件系统简析

什么是文件系统?
    文件系统是基于操作系统的。用来管理和组织保存在磁盘驱动器上的数据的系统软件。通过对数据存储布局,文件命名,安全控制等方面的管理。解决了如何在设备上有效的存储数据。
    元数据(metadata)存储文件的重要信息(文件的权限,大小,修改时间,属主,存储位置等)
    文件系统是操作系统和硬盘之间 一个桥梁,对磁盘的写操作,都要经过文件系统,然后才到磁盘。
    常见的文件系统:
        DOS系统的msdoc    
        windows 下的FAT系统(fat16(最大支持2G)和fat32(最大支持4G))和NTFS文件系统
        光盘文件系统 ISO-9660
        linux 下 单一文件系统 ext2  和日志文件系统 ext3/ext4/xfs
        集群文件系统 gfs (Red Hat Global File System)
        虚拟文件系统 (/proc)  
        加密文件系统 (CFS)
        网络文件系统(NFS)
 linux标准文件系统是从VFS开始的,然后是ext2。ext3,ext4
    ext系列的对比:
        ext3是在ext2的基础上增加了日志形式(便于数据恢复)这一思想来源于:超级块和inode设计理念。
        ext3是一种日志式的文件系统,在ext2的基础上加入特殊的inode(日志文件)。日志记录功能,用于记录文件系统的元数据或各种写操作的变化。ext3数据的写入顺序;先通过日志文件的记录功能,然后在将数据写入磁盘的最终位置。
        ext4 是linux第四代日志文件系统。是ext3文件系统的后续版本。比较ext3的改进:(centos6下的默认文件系统)
         1.支持更多的子目录数量(ext3支持32000个子目录)ext4,理论上支持无限数量子目录
         2.支持更大的文件系统和更大的文件(ext3 持续贺词32TB的文件系统和2TB的文件,而ext4 容量可达1EB,文件容量增至16TB)
    XFS文件系统:
        XFS文件系统是SGI(美国硅图公司)开发的一个高级日志文件系统。centos7下作为默认文件系统(centos7 下构架全部是64位了)
        文件系统格式化命令mkfs.xfs
        # mkfs.xfs -f /dev/sda2    (由于sda2已经完成格式化了。需要-f  强制重新格式化)
            meta-data=http://www.mamicode.com/dev/sda2 isize=512 agcount=4, agsize=1525824 blks
                     =                       sectsz=512   attr=2, projid32bit=1
                     =                       crc=1        finobt=0, sparse=0
            data     =                       bsize=4096   blocks=6103296, imaxpct=25
                     =                       sunit=0      swidth=0 blks
            naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
            log      =internal log           bsize=4096   blocks=2980, version=2
                     =                       sectsz=512   sunit=0 blks, lazy-count=1
            realtime =none                   extsz=4096   blocks=0, rtextents=0
        文件系统一致性检测命令:
            xfs_repair -n /dev/sda2 (-n 只是测试不是修复)
        修复和监测要把分区卸载了。
        这里出现启动问题:
        A start job is running for dev-disk-by\x2duuid-.....device(1min \1min 30)
        然后是时间超时
        然后出现提示: [DEPEND] DEpendency failed for /data
        不过 centos7下。的init系统还是比较好的。没有直接拒绝登录系统而是给了修复信息。
        Give root passwd for maintenance (输入root密码进入修复)
        (or type Control-D to continue):(这种一般是文件系统启动的错误。系统尝试自动修复文件系统)
        前面 由于出现提示是/data挂载不了。还是先进入系统看下/etc/fstab
        先查看 分区的UUID; # blkid
        然后查看 /ect/fstab
        对比发现: /data的UUID 有问题。
        修改 /data 的UUID
        重启,正常。
    文件系统使用的差异
        1.读操作频繁,小文件非常多(web应用,邮件应用) ext 4 文件系统比较好。ext4支持更多目录和文件
        2.写操作频繁。(需求日志功能)xfs 文件系统较好。(在高并发下:xfs比ext4 省CPU资源)
        3.对性能和安全都要求不高。可以用ext2 。(没有日志记录功能,可以省去设备开销)
    NFS 网络文件系统的
        功能:
            让网络上的不同操作系统之间共享数据。NFS首先在远程服务端(共享数据的操作系统)共享出文件或者目录,然后远程
        共享出来的文件或者目录,可以通过挂载的方式接到本地的不同系统上。
        实现原理:NFS server启动后,开启一个端口为客户端连接。由于这个端口每次都不一样,NFS文件系统通过rpc(remote procedure call)
        远程过程调用,监听NFS守护进程的端口号,通知给客户端。
        nfs需要2个系统服务。
        portmap;RPC的portmap 管理器,管理RPC服务的连接
        nfs-utils: 提供 rpc.nfsd 及prc.mountd 这2个 nfs (daemons)的系统服务。
            其中:rpc.nfsd 是管理客户端是否有权限登录服务器。rpc.mountd 是管理认证后的客户端是否对文件有使用权。
                简单点就是: rpc.nfsd 处理连接请求  rpc.mountd 监督是否有权限操作目录。
        nfs是 c/s架构。
        NFS 服务器端 安装 需要 rpcbind 和 nfs 包
            centos7下一般默认安装了。现在检查下:
            # rpm -qa | grep rpcbind
            rpcbind-0.2.0-38.el7.x86_64
            # rpm -qa | grep nfs
            nfs-utils-1.3.0-0.33.el7.x86_64
            libnfsidmap-0.25-15.el7.x86_64
        主配置文件: /etc/exports
        添加一条语句:/app 192.168.1.140(rw,sync,no_root_squash)
        在添加的时候vim 不允许保存。显示 read_only file system
        解决方法:mount -o remount,rw /(重新挂载/分区为可读写)
        格式:共享资源路径 [主机地址][选项]
        格式解析:
      共享资源路径:就是要共享出来的目录或者磁盘分区。这些目录存在于NFS Server端,以供NFS Client挂载使用。
        主机地址:设定允许使用NFS Server共享资源的客户端主机地址,主机地址可以是主机名、域名、IP地址等,支持匹配。
        选项:下面是可用的各个选项含义:
        ro: 即为:read only,也就是客户端主机对共享资源仅仅有读权限。
        rw: 即为:read write,也就是客户端主机对共享资源有读、写权限。
        no_root_squash: 信任客户端,根据用户UID进行判断,如果登入到NFS主机的用户是ROOT,那么此用户就拥有对共享资源的最高权限。此参数很不安全,建议不要使用。
         root_squash:系统预设值,当登入NFS主机的用户root时,那么这个使用者的权限将被縮成为匿名使用者,也就是它的UID与GID都会变成nfsnobody身份;只有可读权限,例如客户端使用者以UID,GID)=(0,0)的身份使用共享目录时,其身份就被转换为(UID,GID)=(65534,65534) 也就nfsnobody这个用户身份。系统以此为预设值,显然是为了安全考虑。
        all_squash:不管登陆NFS主机的是什么用户,都会将共享文件的UID和GID映射为匿名用户nfsnobody。
        no_all_squash:系统预设值,保留共享文件的UID和GID默认权限。也就是客户端用户的UID以及GID和服务端共享文件UID和GID相同时,才有对共享文件的读写权限。这种选项保证了共享文件的用户和组权限不会改变。
        anonuid:将登入NFS主机的用户都设定成指定的UID,此UID必须存在于NFS Server端/etc/passwd中。
        anongid:与“anonuid”含义类似,但是变成 GID了,即用户组ID!
        sync:资料同步写入磁盘中。默认选择。
        async:资料会先暂时存放在内存中,不会直接写入硬盘。
 开启NFS服务
        # systemctl start nfs
        # systemctl start rpcbind
        exportfs 命令可以临时生效一条策略。系统不重启,就不会生效。
 客户端:
            安装 rpcbind 和 nfs-utils
            启动服务: service  rpcbind start
        查看nfs服务器提供了哪些服务:
            showmount -a ip
            查看nfs主机信息
            showmount -e ip
            查看nfs主机和目录信息
    如何使用NFS: 在客户端挂载nfs服务器共享的目录
    # mkdir /app
          # mount -t nfs 192.168.1.152:/app /app
          (需要关闭服务器端口的防火墙 systemctl stop firewalld.service )
    NFS应用便捷场景:文件备份。
    需要备份的文件为客户端。粗放备份文件的客户端为nfs服务器。
    直接在挂载目录下。tar 需要复制的文件。

本文出自 “赵雁生的linux之旅” 博客,请务必保留此出处http://12042068.blog.51cto.com/12032068/1898605

linux文件系统简析