zoukankan      html  css  js  c++  java
  • 操作系统-文件系统(5)Linux文件系统管理

    主流分区机制有MBR和GPT两种
    MBR分区:第一个扇区最重要,里面有:引导代码(Bootstrap code area)及分区表(partition table), 其中Bootstrap code area 占有 446 bytes,而 partition table 则占有 16*4 bytes,知道分隔槽的启动和结束磁柱,最后两个字节是启动标识55h和AAh
    只能使用不超过2T的硬盘,否则只能使用2T空间(有第三方解决方案)
    最多4个主分区,扩展分区占用主分区位置且无法格式化
    逻辑分区建立在扩展分区上:Linux最多支持63个IDE分区,15个SCSI分区
     
    文件系统主要分三个区块:
    superblock:记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等。每个 block group 都可能有 superblock,但后面的仅作为备份。
    inode:记录档案的属性,一个档案占用一个inode,同时记录此档案的数据所在的 block 号码,大小固定为128bytes,记录一个block号码需要4bytes,因此系统将block号码的纪录区域定义为12个直接、1个间接,1个双间接与1个三间接记录区。
    使用stat命令查看某个文件的inode信息
    - File:显示文件名 
    - Size:显示文件大小 
    - Blocks:文件使用的数据块总数 
    - IO Block:IO块大小 
    - regular file:文件类型(常规文件) 
    - Device:设备编号 
    - Inode:Inode号 
    - Links:链接数 
    - Access:文件的权限 
    - Gid、Uid:文件所有权的Gid和Uid。
    - Access Time:简写为atime,表示文件的访问时间。当文件内容被访问时,更新这个时间 
    - Modify Time:简写为mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间。 
    - Change Time:简写为ctime,表示文件的状态时间,当文件的状态被修改时,更新这个时间,例如文件的链接数,大小,权限,Blocks数。
    block:实际记录档案的内容,若档案太大时,会占用多个 block 。每个block内最多放一个档案的数据,大小和数量在格式化后就不能再改变了。
     
    ⭐️建立目录时,会分配一个 inode 和若干个 block 给该目彔。其中,inode 记录该目录相关权限与属性,并记录分配到的block 号码; 而 block 则是记录在这个目录下的文件名与该文件名占用的 inode 号码数据。
    例:系统读取/etc/passwd的过程如下:
    (1)透过挂载点的信息找到 /dev/XXX 的 inode 号码为 2 的根目录inode, 且该 inode 规范的权限让我们可以读取该 block 的内容(有r和x)
    (2)/ 的 block: 经过上个步骤取得 block 的号码,并找到该内容有 etc/ 目录的 inode 号码 (16777281)
    (3)etc/ 的 inode: 读取16777281 号 inode 得知 用户 具有r和x的权限,因此可以读取 etc/的 block内容
    (4)etc/ 的 block: 经过上个步骤取得 block 号码,并找到该内容有 passwd 档案的 inode 号码 (18313675)
    (5)passwd 的 inode: 读取 18313675号 inode 得知用户 具有 r 的权限,因此可以读叏 passwd 的 block 内容
    (6)passwd 的 block: 最后将该 block 内容数据读出来。
    系统建立新档案的过程如下:
    (1)先确定用户对想增加新档案的目录是否具有w和x的权限
    (2)根据inode bitmap找到没有使用的inode号码,将新档案的权限和属性写入
    (3)根据block bitmap找到没有使用的block号码,写入实际数据并更新inode中的block指向
    (4)将新写入的信息同步到inode bitmap和block bitmap,并更新superblock
     
    想知道Linux支持的文件系统有哪些,进入目前核心的模块目录:
    ls -l /lib/modules/$(uname -r)/kernel/fs,其中uname -r用于输出Linux的版本号
    系统目前已加载到内存中支持的文件系统通过命令cat /proc/filesystems查看
    整个Linux文件系统都是通过VFS( Virtual  Filesystem Switch)的核心功能去读取文件系统的,通过VFS,可以把多种具体文件系统纳入统一框架,不同磁盘分区可以包含不同具体文件系统,对它们的使用和传统的单一文件系统并无区别;用户可以通过同一组系统调用对不同文件系统及文件进行操作,系统调用可以跨物理介质和文件系统执行;对网络共享文件提供完全的支持,访问远程节点上的文件和本地节点上的文件一样。
    VFS实质上是一种存在于内存中、支持多种具体文件系统的运行环境,功能有:记录所安装的文件系统类型、建立设备与文件系统之间的联系、实现面向文件的通用操作、涉及特定文件系统的操作时映射到具体文件系统中去
    VFS之所以能衔接不同文件系统,因为它定义了所有文件系统都必须支持的基本抽象接口和数据类型,各种文件系统也要与其定义保持一致。非Unix类型的文件系统也必须经过封装提供符合VFS概念的接口(如不支持inode概念的文件系统,必须在内存中装配inode结构体,如同本身包含inode一样),这些装配和转换必须在使用现场引入特别处理,使得文件系统能够兼容Unix操作系统的使用规则和满足VFS的接口要求。
     
    df列出文件系统的整体磁盘使用量
    -h 以人容易阅读的格式显示
    -i 不用硬盘容量而用inode的数量显示
    -T 列出文件系统的类型
     
    du -sh * 列出当前目录下所有档案容量
    -s 列出总量 
    -h 以人容易阅读的格式显示
     
    dumpe2fs /dev/sda3      查看文件系统详细信息
    -h  仅列出superblock的数据
     
    fdisk:基于MBR的分区工具,root用户才能运行
    fdisk -l列出所有已安装硬盘和分区信息
    Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk label type: dos
    Disk identifier: 0x000b2bc5
     
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *        2048     2099199     1048576   83  Linux
    /dev/sda2         2099200    41943039    19921920   8e  Linux LVM
    fdisk /dev/sda    进行分区,按【m】进入帮助页面后按照提示操作。
    Command (m for help): m
    Command action
       a   toggle a bootable flag
       b   edit bsd disklabel
       c   toggle the dos compatibility flag
       d   delete a partition
       g   create a new empty GPT partition table
       G   create an IRIX (SGI) partition table
       l   list known partition types
       m   print this menu
       n   add a new partition
       o   create a new empty DOS partition table
       p   print the partition table
       q   quit without saving changes
       s   create a new empty Sun disklabel
       t   change a partition's system id
       u   change display/entry units
       v   verify the partition table
       w   write table to disk and exit
       x   extra functionality (experts only)
     创建分区后需要设置id,Linux默认为83,最终将分区表写 入磁盘并退出。
    /proc/partprobe更新内核分区信息
     
    裸设备需要格式化才能使用(创建文件系统)
    NTFS(Windows)
    Ext3、Ext4(Linux) 
     
    mke2fs -t ext4 /dev/sda3
                  -t 指定要创建的文件系统类型
                  -c 创建时检测损坏
                  -L  Label 指定卷标(名字)
                  -b blocksize 指定文件系统块大小
    mkfs.ext4  /dev/sda3
     
    e2label /dev/sda3 LABELNAME       打上标签名,一般大写
    fsck      检查并修复损坏的文件系统(必须先卸载)
               -y   直接修复
               -t   指定类型(损坏严重时)
    对于识别为文件的损坏数据,fsck会放入lost+found目录
     
    创建文件系统后,磁盘需要挂载在某个目录下才能使用
    手工挂载操作,或配置系统进行自动挂载
    mount   /dev/sda3   /mnt/(挂载点)
    不带命令的mount命令会显示所有已挂载的文件系统
    mount -o remount, ro /dev sda3  /mnt/
    -o                         指定挂载选项
    ro,rw                    以只读或读写形式挂载,默认读写
    remount              重新挂载
    sync/async          不使用缓存/使用缓存
    noatime/atime   访问文件时不更新文件访问时间/访问文件时更新文件访问时间
     
    umount 设备/挂载点(必须先卸载再进行操作)
    fuser -m  /mnt             查看使用文件系统的进程
    lsof  /mnt                      查看正在使用的文件
          
    /etc/fstab定义需要自动挂载的文件系统
    /dev/sda3             /mnt               ext4                 defaults                         0    0
    需挂载设备              挂载点           文件系统          挂载选项                      dump、fsck相关
    LABEL=XX识别
  • 相关阅读:
    Eclipse 远程调试
    大数据处理方法bloom filter
    sicily 1259 Sum of Consecutive Primes
    sicily 1240. Faulty Odometer
    sicily 1152 简单马周游 深度优先搜索及回溯算法
    sicily 1050 深度优先搜索解题
    sicily 1024 邻接矩阵与深度优先搜索解题
    sicily 1156 二叉树的遍历 前序遍历,递归,集合操作
    sicily 1443 队列基本操作
    sicily 1006 team rankings 枚举解题
  • 原文地址:https://www.cnblogs.com/yangyuliufeng/p/9339116.html
Copyright © 2011-2022 走看看