• 【Linux】管理文件系统


    文件系统概念:

    文件系统是指文件的组织与管理结构,是一个有关于磁盘中各种有用信息的记录——即是保存以下信息的结构记录表
    当前所使用磁盘的容量信息
    磁盘的可用信息,包括已占用和剩余的空间;

    文件与目录的属性;

    文件与目录的在磁盘中确切地址与链接信息。
    一句话总结:文件系统就是管理这块(分区)文件的机制或者说是组织方式。

    文件系统类型:

    Linux支持多种文件系统
    ·ext2:Linux基本文件系统
    ·ext3:ext2的增强版本
    ·ext4:ext文件系统的第四个版本()
    ·swap:交换文件系统
    ·nfs:网络文件系统,适合Linux或Unix机器间共享
    ·smbfs:适合Linux或Unix和windows机器间共享
    ·vfat:windows早期文件系统
    ·ntfs:windows默认文件系统,功能非常强大
    ·iso9660:CD光盘的只读文件系统
    ·GFS:google专用存储海量搜索数据而设计的专用文件系统
    ·reiserfs:早期linux使用的日志功能的文件系统
     

    文件系统

    Linux内核采用虚拟文件系统层(VFS),通过该中间层对各类文件系统提供了完美的支持。对于用户来说,这些文件系统几乎是透明的,用户不需要关心底层文件系统的具体实现。
     
    VFS 基本结构
      ·super block
      ·dentry
      ·inode
      ·data
     
    super block (超级块)
      存储文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式。文件系统中第一个块被称为超级块。
       将物理相邻的若干个扇区称为了一个块。操作系统读写磁盘的基本单位是扇区,而文件系统的基本单位是块(block)。块越大存储性能越好,但空间浪费严重。块越小性能相对越低,但空间利用率高。
    Inode 索引节点(元数据)
      保存的其实是实际的数据(文件内容)的一些信息,这些信息称为“元数据”(也就是对文件属性的描述)。例如:文件大小,文件拥有者(owner),文件属组(group),文件权限,文件读取或修改的时间戳,链接数量,同时记录此文件的数据所在的 block 号码,文件类型等等。
        注意,数据分成:元数据+数据本身
    每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般每2KB就设置一个inode。一般文件系统中很少有文件小于2KB的,所以预定按照2KB分,一般inode是用不完的。
      inode号是唯一的,表示不同的文件。其实Linux内核访问文件都是通过inode号来进行的,所谓文件名仅仅是inode号的别名,方便用户识别和使用的。当我们打开一个文件的时候,首先,系统找到这个文件名对应的inode号;然后,通过inode号,在inode table中找到inode信息,最后在inode信息中找到文件数据所在的block,接着就可以处理文件数据了。
      当创建一个文件(包括目录)的时候,就给文件分配了一个inode。inodes最大数量就是文件的最大数量。
      一个文件 肯定会占用一个inode,如果是空文件,就不会占用block,如果不是空文件,肯定会占用block;
      一个文件系统内的文件总数跟inode总数一致。
    dentry 目录项
      目录项是描述文件的逻辑属性,只存在于内存中,并没有实际对应的磁盘上的描述,更确切的说是存在于内存的目录项缓存,为了提高查找性能而设计。注意不管是目录还是最终的文件,都是属于目录项,所有的目录项在一起构成一颗庞大的目录树。例如:打开一个文件/opt/data/a.txt,那么/、opt、data、a.txt都是一个目录项,VFS在查找的时候,根据一层一层的目录项找到对应的每个目录项的inode,那么沿着目录项进行操作就可以找到最终的文件。
    注意:目录也是一种文件(所以也存在对应的inode)。打开目录,实际上就是打开目录文件。
    data 数据
      记录文件的实际内容,若文件太大时,会占用多个 block
     
     
    链接文件:
      硬链接:不同的文件名对应相同的inode
        ln a.txt a.hard
    不能跨文件系统
      软链接:ln -s a.txt a.link
    可以跨文件系统
     

    创建文件系统:

    创建完整的文件系统的四个步骤
      ·建立分区
      ·格式化分区建立文件系统
      ·检验文件系统
      ·装载文件系统
     
    fdisk命令建立分区
      用途:在交互式的操作环境中管理磁盘分区
      格式:fdisk [磁盘设备]
      交互模式中的常用指令
        ·m:查看操作指令的帮助信息
        ·p:列表查看分区信息
        ·n:新建分区
        ·d:删除分区
        ·t:变更分区类型
        ·w:保存分区设置并退出
        ·q:放弃分区设置并退出
     
    mkfs命令
      用途:Make Filesystem,创建文件系统(格式化)
      格式:mkfs -t 文件系统类型 分区设备
     
    fsck命令
      用途:file system check,诊断修复文件系统
      格式:fsck -t 文件系统类型 分区设备
      -y:自动输入yes(与-a相同)
     
     
    文件系统使用:
      挂载文件系统:
        mount命令:
          用途:挂载文件系统、ISO镜像到指定文件夹
          mount [ -t 类型 ] [ -o 选项 ] 设备名 挂载点目录
      卸载文件系统:
        umount命令:
          用途:卸载已挂载的文件系统
          格式:umount 存储设备位置
          umount 挂载点目录
    eg:
    [root@localhost ~]# df
    Filesystem     1K-blocks    Used Available Use% Mounted on
    /dev/sda3       18244476 1908296  15402756  12% /
    tmpfs             953140       0    953140   0% /dev/shm
    /dev/sda1         194241   38685    145316  22% /boot
    [root@localhost ~]# df -i
    Filesystem      Inodes IUsed   IFree IUse% Mounted on
    /dev/sda3      1166880 56419 1110461    5% /
    tmpfs           238285     1  238284    1% /dev/shm
    /dev/sda1        51200    39   51161    1% /boot
    

      

    验证:

     1.创建小分区

    [root@localhost ~]# fdisk /dev/sdb
    
    WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
             switch off the mode (command 'c') and change display units to
             sectors (command 'u').
    
    Command (m for help): p
    
    Disk /dev/sdb: 21.5 GB, 21474836480 bytes
    255 heads, 63 sectors/track, 2610 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x000215f9
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1               1           2       16033+  83  Linux
    /dev/sdb2               3        1308    10490445   83  Linux
    /dev/sdb3            1309        1435     1015808   83  Linux
    
    Command (m for help): n
    Command action
       e   extended
       p   primary partition (1-4)
    p  
    Selected partition 4
    First cylinder (1435-2610, default 1435): 
    Using default value 1435
    Last cylinder, +cylinders or +size{K,M,G} (1435-2610, default 2610): +10G
    

      2.创建文件系统

    [root@localhost ~]# mkfs -t ext4 /dev/sdb1
    mke2fs 1.41.12 (17-May-2010)
    /dev/sdb1 is mounted; will not make a filesystem here!
    [root@localhost ~]# mount /dev/sdb1 /tmp/sdb1/
    mount: /dev/sdb1 already mounted or /tmp/sdb1/ busy
    mount: according to mtab, /dev/sdb1 is already mounted on /tmp/sdb1
    

      3.创建空文件

      

    while :
    do
    touch /tmp/sdb1/a${RANDOM}
    done
    快速使用block:
    while :
    do
    cat /etc/passwd >> /test/a.txt
    done

    [root@localhost ~]# while :
    > do
    > touch /tmp/sdb1/ a${RANDOM}
    > done
    
    touch: cannot touch `/tmp/sdb1/a31677': No space left on device
    touch: cannot touch `/tmp/sdb1/a2591': No space left on device
    touch: cannot touch `/tmp/sdb1/a19649': No space left on device
      4.使用df/df -i 查看空间使用情况;
    [root@localhost ~]# df -i /dev/sdb1
    Filesystem     Inodes IUsed IFree IUse% Mounted on
    /dev/sdb1        4016  4016     0  100% /tmp/sdb1
    [root@localhost ~]# df /dev/sdb1
    Filesystem     1K-blocks  Used Available Use% Mounted on
    /dev/sdb1          14497  14497     0    100% /tmp/sdb1
      5.inode全使用,block还有空闲的,这时不能创建新文件了,但是还可以增加文件内容;
      inode还有空闲,block全使用,这时可以创建新文件,但是不能增加文件内容。
     

    管理交换空间:

      虚拟内存也叫交换空间
      短时间缓解物理内存的不足;但不能代替物理内存
    mkswap命令
      用途:Make Swap,创建交换文件系统
      格式:mkswap 分区设备
      -L:设置交换分区文件系统标签
    swapon 分区设备 ----激活交换分区
    swapoff 分区设备----停用交换分区
    eg:
    [root@localhost ~]# mkswap /dev/sdb5
    Setting up swapspace version 1, size = 2006929 kB 
    [root@localhost ~]# swapon /dev/sdb5
    [root@localhost ~]# free | grep -i swap
    Swap:      3008456          0    3008456
    [root@localhost ~]# swapoff /dev/sdb5
    [root@localhost ~]# free | grep -i swap
    Swap:      1048568          0    1048568
    

      

  • 相关阅读:
    非常强大的table根据表头排序,点击表头名称,对其内容排序
    处理字符集中的算式问题
    java基础复习:final,static,以及String类
    try,catch,finally含return时的执行顺序及丢失的伪例
    系统 触发器
    某个表按某个列分组且按另一个列排序
    XML读取
    硬软件交互原理
    TcpClient 读写流
    C# Socket的TCP通讯 异步 (2015-11-07 10:07:19)转载▼
  • 原文地址:https://www.cnblogs.com/qq1148932219/p/10689643.html
Copyright © 2020-2023  润新知