zoukankan      html  css  js  c++  java
  • 文件管理之文件系统,软硬链接

    一. 文件系统

    1.文件系统介绍

    文件系统是操作系统内核中负责组织管理磁盘的程序,文件系统属于操作系统的一部分,它提供了文件的概念.
    Linux中常见的文件系统有xfs,ext4,btrfs文件系统,他们都是日志文件系统(其特点是文件系统将没提交的数据变化保存到日志文件,以便在系统崩溃或者断电时恢复数据),三者各有优势和劣势.


    2.文件系统工作原理
    一个文件由两部分内容组成:
    (1)文件的元信息,如:权限,属主属组,时间等.文件的元信息放置在inode块中
    (2)文件的实际内容,放置在block块中
    注意:每个inode和block都有自己的编号,另外文件系统还有一个超级区块(superblock),他会记录整个文件系统的整体信息,包括inode和block的总量,使用量,剩余量等.



     
    cat /etc/passwd 的整体过程如下:


     

    3.inode的大小

    inode会消耗硬盘空间的,所以硬盘格式化时,操作系统自动将硬盘分为两个区域:一个是inode区,存放inode包含的信息.另一个是block区,存放的是文件数据.
    每个inode节点的大小一般为128或者256字节,inode节点的总数,在硬盘格式化时就给定了,一般是每1KB或者2KB就设置一个inode.假设一块1GB硬盘,每个inode节点的大小为128字节,每1KB设置一个inode,那么inode总大小就会达到128MB.
    查看inode总数和已经使用的数量可以使用:  df -i 
    查看ext文件系统信息:sudo dumpe2fs -h /dev/hda | grep "Inode size"

    查看xfs文件系统信息:xfs_info /dev/sda3 

    注意: 由于每个文件都必须有一个inode,所以可能发生inode数量用完,硬盘空间还没用完的情况,这时也无法在硬盘上创建新文件.

    4.inode号码
    每个inode都有一个号码,操作系统用inode号码来识别不同的文件:

    首先,系统找到这个文件名对应的inode号码

    其次,通过inode号码,获取inode信息

    最后,根据inode信息,找到文件数据所在的block,读取数据


    5.目录项
    Linux系统中,目录也是一种文件,打开目录,实际上就是打开目录文件.
    目录文件的结构非常简单,就是一系列目录项的列表,每个目录项由两部分组成:文件名及其对应的inode号码.

    ps:为什么每次修改完服务器配置后,都要重新加载一下配置文件?
    因为vim每次修改完成后,等于新建了一个文件,inode号码也会改变,而系统读取的还是原来inode号的配置文件,所以需要重启服务,根据新的inode号重新读一下文件.



    二. linux文件的三种时间属性

    linux文件的三种时间属性分别为:

    atime,为access time(访问时间)的缩写,显示的是文件中的数据最后被访问的时间,读一次这个文件的内容,这个时间就会更新,比如被系统的进程直接使用或者通过一些命令和脚本间接使用。(执行一些可执行文件、脚本)或对这个文件运用 more、cat等命令。ls、stat命令都不会修改文件的访问时间

    mtime,为modify time(修改时间)的缩写,显示的是文件的内容被改变时的最后时间,比如用vi编辑时就会改变(也就是Block的内容),ls -l列出的时间就是这个时间。

    ctime,为change time(状态改动时间)的缩写,显示的是文件的权限,拥有者,所属的组,链接数发生改变时的时间。当然当内容改变时,也会改变。(也就是Inode内容发生改变和Block内容发生改变时),通过chmod、chown命令修改一次文件属性,这个时间就会更新。

     
    使用命令stat查看:

     

    三. 硬链接和软链接

    硬链接:
    通过索引节点号来进行连接,inode可以对应多个文件名.

     

    1,硬链接文件与源文件具有相同inode号的不同文件名:一个文件只能有一个inode号,但多个文件的inode号可以相同.

    2,删除硬链接或者源文件之一,不影响另一个文件名的访问,除非所有的都删除掉,所以硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要文件,以防止误删操作.
    3,目录不可以创建硬链接,并且硬链接无法跨分区(文件系统)
    创建硬链接的命令: ln [源文件] [目标文件]


    软链接:
    即符号链接,类似于Windows的快捷方式.它实际上是一个特殊的文件,在符号连接中,文件实际上是一个文本文件,其中包含有另一文件的位置信息.


    1,软链接文件与源文件具有不同的inode号
    2,删除软链接文件的源文件,软链接文件将无法使用,软链接的作用:

    --软件升级
    --企业代码发布
    --不方便目录移动

    3,可以对目录创建软链接,并且可以跨分区(文件系统)
    创建软链接的命令:ln -s [源文件] [目标文件]

    解决磁盘有空间但创建不了文件

    实战场景:在一台配置较低的Linux服务器(内存、硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了80%,还有1.9G的剩余空间,但是无法创建新的文件。当时使用的是root用户。服务器没有被黑。

    [root@xuegod63 ~]# df -h

    文件系统 容量 已用 可用 已用% 挂载点

    /dev/sda3 10G 8.0G 1.9G 80% /

    常识: 只要权限够,磁盘上有空间一定可以创建文件。 这个是错的。

    排查:

    [root@xuegod63 ~]# df -i

    文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点

    /dev/sda3 5242880 5242880 0 100% /

    用df -i查看了一下/data所在的分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。

    查找原因:

    /data/cache目录中存在数量非常多的小字节缓存文件,占用的Block不多,但是占用了大量的inode。

    解决方案1:删除/data/cache目录中的部分文件,释放出/data分区的一部分inode。

    解决方案2 : 在/data备份好一些文件,然后删除这些文件,释放一些inode,然后创建一个文件夹/data/cache2。在cache2下挂载一个新分区: sda4 ,下次写数据需要写到新分区cache2目录下。

    inode分区完后,可以增加吗? 不可以。 inode总数是在格式化时定下来。

  • 相关阅读:
    mongo admin 客户端管理工具安装
    kong API gateway
    安装 docker管理 工具 页面 portainer
    elcipse 安装lombok插件解决 @Slf4j 等找不到log变量问题
    cqrs案例
    你还不知道这四点Mysql调优的话,那就赶快学起来
    python中的类型提示(type hint)
    大厂面试最常被问的Redis问题合集
    nginx gzip json [2]
    nginx gzip json 配置「1」
  • 原文地址:https://www.cnblogs.com/allenzhu128/p/13887730.html
Copyright © 2011-2022 走看看