歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux運維實戰之文件系統、鏈接文件

Linux運維實戰之文件系統、鏈接文件

日期:2017/2/28 14:26:15   编辑: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/sda1
tune2fs 1.41.12 (17-May-2010)
Filesystem volume name:   <none>
Last mounted on:          /boot
Filesystem UUID:          0a800a5e-6e0b-48f6-b935-1296b7438b64
Filesystem magic number:  0xEF53
Filesystem 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_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              51200         #inode數目
Block count:              204800        #塊數目
Reserved block count:     10240
Free blocks:              149802        #空閒塊數
Free inodes:              51160         #空閒inode
First block:                1
Block size:               1024          #塊大小
Fragment size:            1024
Reserved GDT blocks:      256
Blocks per group:         8192        #每個塊組的塊數
Fragments per group:      8192
Inodes per group:         2048
Inode blocks per group:   256
Flex block group size:    16
Filesystem created:       Wed Jan 29 05:20:48 2014
Last mount time:          Mon Sep 22 21:01:04 2014
Last write time:          Mon Sep 22 21:01:04 2014
Mount count:              19
Maximum mount count:      -1
Last checked:             Wed Jan 29 05:20:48 2014
Check interval:           0 (<none>)
Lifetime writes:          162 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               128        #inode大小
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      30a7a5f3-de5b-4d07-b512-ddb52100b427
Journal backup:           inode blocks
#----dumpe2fs命令查看超級塊信息----#

[root@Centos ~]# dumpe2fs /dev/sda1
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   <none>
Last mounted on:          /boot
Filesystem UUID:          0a800a5e-6e0b-48f6-b935-1296b7438b64
Filesystem magic number:  0xEF53
Filesystem 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_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              51200
Block count:              204800
Reserved block count:     10240
Free blocks:              149802
Free inodes:              51160
First block:              1
Block size:               1024
Fragment size:            1024
Reserved GDT blocks:      256
Blocks per group:         8192
Fragments per group:      8192
Inodes per group:         2048
Inode blocks per group:   256
Flex block group size:    16
Filesystem created:       Wed Jan 29 05:20:48 2014
Last mount time:          Mon Sep 22 21:01:04 2014
Last write time:          Mon Sep 22 21:01:04 2014
Mount count:              19
Maximum mount count:      -1
Last checked:             Wed Jan 29 05:20:48 2014
Check interval:           0 (<none>)
Lifetime writes:          162 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               128
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      30a7a5f3-de5b-4d07-b512-ddb52100b427
Journal backup:           inode blocks
Journal features:         journal_incompat_revoke
Journal size:             4096k
Journal length:           4096
Journal sequence:         0x000000a8
Journal start:            0


Group 0: (Blocks 1-8192) [ITABLE_ZEROED]         #塊組0的信息
  Checksum 0xf7f8, unused inodes 2006
  Primary superblock at 1, Group descriptors at 2-2        #超級塊信息
  Reserved GDT blocks at 3-258
  Block 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 inodes
  Free blocks: 4409-8192
  Free inodes: 40, 42-2048
Group 1: (Blocks 8193-16384) [INODE_UNINIT, ITABLE_ZEROED]
  Checksum 0x132c, unused inodes 2048
  Backup superblock at 8193, Group descriptors at 8194-8194          #超級塊的備份
  Reserved GDT blocks at 8195-8450
  Block 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 inodes
  Free blocks: 11336, 11452-12288, 16379-16384
  Free inodes: 2049-4096
Group 2: (Blocks 16385-24576) [INODE_UNINIT, ITABLE_ZEROED]
  Checksum 0x6de3, unused inodes 2048
  Block 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 inodes
  Free blocks: 
  Free inodes: 4097-6144
Group 3: (Blocks 24577-32768) [INODE_UNINIT, ITABLE_ZEROED]
  Checksum 0xbade, unused inodes 2048
  Backup superblock at 24577, Group descriptors at 24578-24578        #超級塊的備份
  Reserved GDT blocks at 24579-24834
  Block 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 inodes
  Free blocks: 24835-25101, 25103-26624
  Free inodes: 6145-8192
Group 4: (Blocks 32769-40960) [INODE_UNINIT, ITABLE_ZEROED]
  Checksum 0x3c6a, unused inodes 2048
  Block 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 inodes
  Free blocks: 38303-38912
  Free inodes: 8193-10240
Group 5: (Blocks 40961-49152) [INODE_UNINIT, ITABLE_ZEROED]
  Checksum 0xadda, unused inodes 2048
  Backup superblock at 40961, Group descriptors at 40962-40962
  Reserved GDT blocks at 40963-41218
  Block 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 inodes
  Free blocks: 41219-43008
  Free 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

Copyright © Linux教程網 All Rights Reserved