Welcome 微信登录

首页 / 操作系统 / Linux / Linux运维实战之文件系统、链接文件

计算机操作系统作为最重要的系统软件,被用户直接使用的部分就是它的文件管理。因为用户使用计算机遇到的首要问题是如何保存程序和数据,然后如何查找、复制、删改它们。文件管理就是为用户的这些问题而设置的。  本次博文的主要内容:1、文件系统基础(文件的概念、分类及存储机制)2、从文件系统管理机制角度理解文件的复制、移动和删除3、ext文件系统的扩展属性4、硬链接和软链接
一、文件系统基础:1、什么是文件系统:操作系统中负责管理和存取文件信息的软件机构叫做文件系统。文件系统的目标是向用户提供简便、统一的使用文件的界面,实现文件按名存取。用户使用界面中的命令,按照文件的逻辑结构,直观、透明地对文件实施操作(所谓透明,是指用户不必了解文件存放的物理结构、查找方法、I/O实现细节等与存储介质有关的特性,就能完成对文件的有关操作)2、文件系统的分类:操作系统的文件系统按组成单位分为两类:(1)流式文件:构成流式文件的基本单位是字符,即流式文件是具有符号名且在逻辑意义上完整的有穷字符流序列。如Linux、UNIX、OS/2、windows等都采用流式文件形式。(2)记录式文件:构成记录式文件的基本单位是记录,所谓记录,是一段有独立意义的信息集合。如学生成绩文件,是由全部学生的成绩记录组成的,每个记录包括学生的姓名、学号、各科成绩等多个字段。3、Linux系统中的文件类型:  Linux系统中,文件被分为3类:(1)目录文件:全部由目录组成的文件(2)普通文件:由系统文件、用户文件、实用程序文件、库文件组成(3)特别文件:所有的输入/输出设备被看作特别文件,系统指定专用的文件名,如:/dev/lp表示打印机设备。4、虚拟文件系统:VFS(Virtual File System)在前面的博文中已经提到,Linux系统支持众多文件系统,那它是如何做到的呢?【答】通过虚拟文件系统VFS,使得Linux系统可以支持众多文件系统,这种机制有点类似java的虚拟机机制哈,通过虚拟机机制才使得java能够跨平台!5、Linux系统ext文件系统的管理机制:Linux中文件系统存取文件的过程说明(1)根据文件名,通过Directory里的对应关系,找到文件对应的Inode number
(2)再根据Inode number读取到文件的Inode table
(3)再根据Inode table中的Pointer读取到相应的Blocks
Tips:A、这里有一个重要的内容,就是Directory(目录),它并不是存放文件的容器,而是文件的路径映射,记录了一个文件/目录名称对应的Inode number;B、每个Inode条目占用128个字节;C、为了加速文件的查找速度,第一次需要查找,之后系统会把查找结果缓存到buffer中;事实上,系统启动时会把大多数文件缓存到buffer中(这就是buffer的意义)文件存储空间管理】光盘、磁盘、磁带等是保存文件内容的物理设备,它们被划分成物理块(block),全部的物理块组成文件的存储空间。文件存储空间的管理就是块空间的管理,包括空闲块的分配、回收和组织几个问题。常见的文件存储空间管理方法有:空闲块表和空闲块链、位图、空闲块成组链接法。Linux综合位图和空闲块成组链接法来实现文件存储空间的管理(如图所示):每个块组所包含的Block数相同,它们是自我管理的,其组成说明如下:(1)Super Block(超级块)-->只有块组0中有超级块
  • 描述整个分区的文件系统信息,例如块大小、文件系统版本号、上次mount的时间等等。
  • 超级块在块组1、3、5、7、9上有一个备份;
文件系统相关命令
  • 用tune2fs –l 和 dumpe2fs [-h] 可查看超级块信息
  • du:disk usage
    -s: summary,显示某指定路径下所有文件的大小之和;
    -h:human-readale
  • df: disk free
        -l: 只显示本地文件系统的相关信息
        -h: human-readable
        -P: posix兼容的风格显示;
        -i: 显示inode使用信息,而非1k块
#----tune2fs -l 命令查看超级块信息-----#[root@CentOS ~]# tune2fs -l /dev/sda1tune2fs 1.41.12 (17-May-2010)Filesystem volume name: <none>Last mounted on:/bootFilesystem UUID:0a800a5e-6e0b-48f6-b935-1296b7438b64Filesystem magic number:0xEF53Filesystem revision #:1 (dynamic)Filesystem features:has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isizeFilesystem flags: signed_directory_hash Default mount options:user_xattr aclFilesystem state: cleanErrors behavior:ContinueFilesystem OS type: LinuxInode count:51200 #inode数目Block count:204800#块数目Reserved block count: 10240Free blocks:149802#空闲块数Free inodes:51160 #空闲inodeFirst block:1Block size: 1024#块大小Fragment size:1024Reserved GDT blocks:256Blocks per group: 8192#每个块组的块数Fragments per group:8192Inodes per group: 2048Inode blocks per group: 256Flex block group size:16Filesystem created: Wed Jan 29 05:20:48 2014Last mount time:Mon Sep 22 21:01:04 2014Last write time:Mon Sep 22 21:01:04 2014Mount count:19Maximum mount count:-1Last checked: Wed Jan 29 05:20:48 2014Check interval: 0 (<none>)Lifetime writes:162 MBReserved blocks uid:0 (user root)Reserved blocks gid:0 (group root)First inode:11Inode size: 128#inode大小Journal inode:8Default directory hash: half_md4Directory Hash Seed:30a7a5f3-de5b-4d07-b512-ddb52100b427Journal backup: inode blocks#----dumpe2fs命令查看超级块信息----#[root@Centos ~]# dumpe2fs /dev/sda1dumpe2fs 1.41.12 (17-May-2010)Filesystem volume name: <none>Last mounted on:/bootFilesystem UUID:0a800a5e-6e0b-48f6-b935-1296b7438b64Filesystem magic number:0xEF53Filesystem revision #:1 (dynamic)Filesystem features:has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isizeFilesystem flags: signed_directory_hash Default mount options:user_xattr aclFilesystem state: cleanErrors behavior:ContinueFilesystem OS type: LinuxInode count:51200Block count:204800Reserved block count: 10240Free blocks:149802Free inodes:51160First block:1Block size: 1024Fragment size:1024Reserved GDT blocks:256Blocks per group: 8192Fragments per group:8192Inodes per group: 2048Inode blocks per group: 256Flex block group size:16Filesystem created: Wed Jan 29 05:20:48 2014Last mount time:Mon Sep 22 21:01:04 2014Last write time:Mon Sep 22 21:01:04 2014Mount count:19Maximum mount count:-1Last checked: Wed Jan 29 05:20:48 2014Check interval: 0 (<none>)Lifetime writes:162 MBReserved blocks uid:0 (user root)Reserved blocks gid:0 (group root)First inode:11Inode size: 128Journal inode:8Default directory hash: half_md4Directory Hash Seed:30a7a5f3-de5b-4d07-b512-ddb52100b427Journal backup: inode blocksJournal features: journal_incompat_revokeJournal size: 4096kJournal length: 4096Journal sequence: 0x000000a8Journal start:0Group 0: (Blocks 1-8192) [ITABLE_ZEROED] #块组0的信息Checksum 0xf7f8, unused inodes 2006Primary superblock at 1, Group descriptors at 2-2#超级块信息Reserved GDT blocks at 3-258Block bitmap at 259 (+258), Inode bitmap at 275 (+274)Inode table at 291-546 (+290)3784 free blocks, 2008 free inodes, 6 directories, 2006 unused inodesFree blocks: 4409-8192Free inodes: 40, 42-2048Group 1: (Blocks 8193-16384) [INODE_UNINIT, ITABLE_ZEROED]Checksum 0x132c, unused inodes 2048Backup superblock at 8193, Group descriptors at 8194-8194#超级块的备份Reserved GDT blocks at 8195-8450Block bitmap at 260 (+4294959363), Inode bitmap at 276 (+4294959379)Inode table at 547-802 (+4294959650)844 free blocks, 2048 free inodes, 0 directories, 2048 unused inodesFree blocks: 11336, 11452-12288, 16379-16384Free inodes: 2049-4096Group 2: (Blocks 16385-24576) [INODE_UNINIT, ITABLE_ZEROED]Checksum 0x6de3, unused inodes 2048Block bitmap at 261 (+4294951172), Inode bitmap at 277 (+4294951188)Inode table at 803-1058 (+4294951714)0 free blocks, 2048 free inodes, 0 directories, 2048 unused inodesFree blocks: Free inodes: 4097-6144Group 3: (Blocks 24577-32768) [INODE_UNINIT, ITABLE_ZEROED]Checksum 0xbade, unused inodes 2048Backup superblock at 24577, Group descriptors at 24578-24578#超级块的备份Reserved GDT blocks at 24579-24834Block bitmap at 262 (+4294942981), Inode bitmap at 278 (+4294942997)Inode table at 1059-1314 (+4294943778)1789 free blocks, 2048 free inodes, 0 directories, 2048 unused inodesFree blocks: 24835-25101, 25103-26624Free inodes: 6145-8192Group 4: (Blocks 32769-40960) [INODE_UNINIT, ITABLE_ZEROED]Checksum 0x3c6a, unused inodes 2048Block bitmap at 263 (+4294934790), Inode bitmap at 279 (+4294934806)Inode table at 1315-1570 (+4294935842)610 free blocks, 2048 free inodes, 0 directories, 2048 unused inodesFree blocks: 38303-38912Free inodes: 8193-10240Group 5: (Blocks 40961-49152) [INODE_UNINIT, ITABLE_ZEROED]Checksum 0xadda, unused inodes 2048Backup superblock at 40961, Group descriptors at 40962-40962Reserved GDT blocks at 40963-41218Block bitmap at 264 (+4294926599), Inode bitmap at 280 (+4294926615)Inode table at 1571-1826 (+4294927906)1790 free blocks, 2048 free inodes, 0 directories, 2048 unused inodesFree blocks: 41219-43008Free inodes: 10241-12288 (2)GDT:Group Descriptor Table(块组描述符表)
  • 由很多块组描述符组成,整个分区分成多少个块组就对应有多少个块组描述符
  • 每个块组描述符(Group Descriptor)存储一个块组的描述信息,例如在这个块组中从哪里开始是inode表,从哪里开始是数据块,空闲的inode和数据块还有多少个等等
  • 和超级块类似,块组描述符表在每个块组的开头也都有一份拷贝,这些信息是非常重要的,一旦超级块意外损坏就会丢失整个分区的数据,一旦块组描述符意外损坏就会丢失整个块组的数据,因此它们都有多份拷贝
(3)bit map:位图分为快位图(Block Bitmap)和结点位图(Inode Bitmap),机制如下:【Block Bitmap】:当申请空闲块时,从位图上找出bit=0的字位,将其改为1,返回对应的块号;归还空闲块时,在位图上把该块所对应的字位改为0即可(如下图所示)。 【Inode Bitmap】:和块位图类似,本身占一个块,其中每个bit表示一个inode是否空闲可用。(4)Inode Table:Inode表:
  • 一个文件除了数据需要存储之外,一些描述信息也需要存储,例如文件类型(常规、目录、符号链接等),权限,文件大小,创建/修改/访问时间等,也就是"ls -l”命令看到的那些信息,这些信息存在inode中而不是数据块中。
  • 每个文件都有一个inode,一个块组中的所有inode组成了inode表
  • inode表占多少个块在格式化时就要决定并写入块组描述符中
  • mke2fs格式化工具的默认策略是一个块组有多少个8KB就分配多少个inode
(5)Data Blocks:数据块
  • 对于常规文件,文件的数据存储在数据块中
  • 对于目录,该目录下的所有文件名和目录名存储在数据块中,文件名保存在它所在目录的数据块中
  • 除文件名之外,ls -l命令看到的其它信息都保存在该文件的inode中
  • 目录也是一种文件,是一种特殊类型的文件
  • 对于符号链接,如果目标路径名较短则直接保存在inode中以便更快地查找,如果目标路径名较长则分配一个数据块来保存
  • 设备文件、FIFO和socket等特殊文件没有数据块,设备文件的主设备号和次设备号保存在inode中
更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2014-11/108884p2.htm
  • 1
  • 2
  • 3
  • 下一页
Linux系统入门学习:修复“fatal error: openssl/aes.h: No such file or directory炫丽堪比Win10 最新Ubuntu 14.10轻体验相关资讯      Linux文件系统  Linux链接文件 
  • Linux文件系统简介及其系统管理工  (今 13:21)
  • 哪个文件系统最适合你的 Linux 系  (01月19日)
  • Linux文件系统管理  (12/15/2015 20:58:29)
  • Linux虚拟文件系统VFS  (04月04日)
  • Linux磁盘及文件系统概念  (12/22/2015 15:02:55)
  • Linux 文件系统(inode和block)  (12/02/2015 19:34:16)
本文评论 查看全部评论 (0)
表情: 姓名: 字数