天天看點

Linux檔案管理系統

LINUX檔案系統體系結構

Linux檔案管理系統

使用者空間(User space)包含一些應用程式(例如,檔案系統的使用者)和 GNU C 庫(glibc),它們為檔案系統調用(打開、讀取、寫和關閉)提供使用者接口。系統調用接口(System call interface)的作用就像是交換器,它将系統調用從使用者空間發送到核心空間(Kernel space)中的适當端點。

VFS(Virutal file systems) 是底層檔案系統的主要接口。這個元件導出一組接口,然後将它們抽象到各個檔案系統,各個檔案系統的行為可能差異很大。有兩個針對檔案系統對象的緩存(inode 和 dentry)。它們緩存最近使用過的檔案系統對象。每個檔案系統實作(比如 ext2、JFS 等等)導出一組通用接口,供 VFS 使用。緩沖區緩存會緩存檔案系統和相關塊裝置之間的請求。

主要結構

Linux 以一組通用對象的角度看待所有檔案系統。這些對象是超級塊(superblock)、inode、dentry 和檔案。超級塊在每個檔案系統的根上,超級塊描述和維護檔案系統的狀态。檔案系統中管理的每個對象(檔案或目錄)在 Linux 中表示為一個 inode。inode 包含管理檔案系統中的對象所需的所有中繼資料(包括可以在對象上執行的操作)。另一組結構稱為 dentry,它們用來實作名稱和 inode 之間的映射,有一個目錄緩存用來儲存最近使用的 dentry。dentry 還維護目錄和檔案之間的關系,進而支援在檔案系統中移動。最後,VFS 檔案表示一個打開的檔案(儲存打開的檔案的狀态,比如寫偏移量等等)。

虛拟檔案系統層

VFS 作為檔案系統接口的根層。VFS 記錄目前支援的檔案系統以及目前挂裝的檔案系統。

超級塊

超級塊結構表示一個檔案系統。它包含管理檔案系統所需的資訊,包括檔案系統名稱(比如 ext2)、檔案系統的大小和狀态、塊裝置的引用和中繼資料資訊(比如空閑清單等等)。超級塊通常存儲在存儲媒體上,但是如果超級塊不存在,也可以實時建立它。

Linux系統下可使用的檔案系統有:

基本檔案系統:ext2, ext3, ext4, reiserfs, xfs, btrfs, swap

CD光牒:iso9660

Windows: fat32(vfat), ntfs

Unix: ffs, ufs, jfs, jfs2

網絡檔案系統:nfs, cifs

叢集檔案系統:ocfs2, gfs2

分布式檔案系統:ceph, moosefs, mogilefs, hdfs, gfs, glusterfs

(1)日志型檔案系統:非日志型檔案系統:ext2

日志型檔案系統:ext3

(2)swap:交換分區

建立檔案系統:

在分區上執行格式化(進階格式化)要使用某種檔案系統,滿足兩個條件:

(1)核心中:支援此種檔案系統

(2)使用者空間:有檔案系統管理工具

系統檔案一般的管理工具:

mkfs指令

使用格式: mkfs [-V] [-t fstype] [fs-options] filesys [blocks] [-L Lable]      

作用:建立檔案系統

參數

-V : 詳細顯示模式
-t : 給定檔案系統的格式
-c : 在制做檔案系統前,檢查該partition 是否有壞軌
-l bad_blocks_file : 将有壞軌的block資料加到 bad_blocks_file 裡面
block : 給定 block 的大小
-L:建立lable      
執行個體:      
設定sda2分區的檔案格式為ext3,以下兩種方式同樣可以實作      
[root@localhost ~]# mkfs.ext3 /dev/sda2      
[root@localhost ~]# mkfs -t ext3 /dev/sda2      
mke2fs指令      
使用格式:mke2fs [OPTION]... DEVICE      
常用參數      
-t:{ext2|ext3|ext4}  指定需使用的檔案系統      

-b: {1024|2048|4096}      指定塊大小

-L : 'LABEL'                 設定标簽

-j:  mke2fs -t ext3       建立使用ext3卷号的檔案系統

-i #:                                指定每個inode的位元組數

-N #:                              指定inode的數量

-m #:                                預留磁盤空間占據多大百分比的空間為後期管理使用;

-O: FEATURE[,...]     指定分區特性

-O: ^FEATURE:      關閉此特性

執行個體:

(1)     使用fdisk建立分區

fdisk /dev/sda

Linux檔案管理系統

(2)建立分區後,使用partx /dev/sda3 重新激活分區表

[root@localhost~]# partx /dev/sda

#1:      2048-  4098047 ( 4096000 sectors,   2097 MB)

# 2:   4098048-106498047 (102400000 sectors,  52428 MB)

# 3:106498048-110703914 (  4205867sectors,   2153 MB)

(3)建立檔案系統為ext4,指定塊大小為1024,卷标為“test”

[root@localhost~]# mke2fs -t ext4 -b 1024 -L test /dev/sda3

 (4)使用blkid指令檢視結果

[root@localhost~]# blkid /dev/sda3

/dev/sda3:LABEL="test" UUID="22c70ef3-9497-4b48-b5c9-5067c5b71710"TYPE="ext4"      

檔案系統屬性檢視及調整工具

e2label指令

使用格式:e2lable DEVICE [LABEL]

作用: 檢視分區的卷标及設定

[root@localhost~]# e2label /dev/sda3
test      

tune2fs指令

顯示ext系列檔案系統的屬性,或調整其屬性;

-l:顯示超級塊中的資訊;顯示整個檔案的屬性及布局等相關資訊;

-L: 'LABEL':修改卷标;

-m#: 調整預留給管理者的管理空間百分比;

-j:ext2 --> ext3

-O:檔案系統屬性的啟動或關閉

-o:檔案系統預設挂載選項的啟用或關閉

dumpe2fs指令

-h: 僅顯示超級塊資訊

檔案系統檢測:

fsck(Filesystem check)指令

fsck-t type

fsck.type

-a: 自動修複錯誤

-r: 互動式修複錯誤

-f: 強制檢測

e2fsck指令:ext系列檔案系統專用的檢測修複工具;

-y: 自動回答為“yes”

-f:force

檔案系統的挂載和使用

将額外檔案系統與根檔案系統某現存的目錄建立起關聯關系,進而使得此目錄做為其它檔案系統通路入口的行為,稱之為挂載;

解除此關聯關系的過程為解除安裝。

挂載點:mount point, 裝置挂載至目錄;

注意:挂載點在挂載在之後,其内部原有的檔案會被暫時隐藏;建立使用空目錄做為挂載點

常用的挂載指令有

mount

格式為:mount [-afFhnrvVw] [-L<标簽>] [-o<選項>] [-t<檔案系統類型>] [裝置名] [加載點]      
作用: 加載指定的檔案系統。      
常用參數和選項: 
-a 加載檔案/etc/fstab中設定的所有裝置。 
-f 不實際加載裝置。可與-v等參數同時使用以檢視mount的執行過程。 
-F 需與-a參數同時使用。所有在/etc/fstab中設定的裝置會被同時加載,可加快執行速度。 
-h 顯示線上幫助資訊。 
-L<标簽> 加載檔案系統标簽為<标簽>的裝置。 
-n 不将加載資訊記錄在/etc/mtab檔案中。 
-o<選項> 指定加載檔案系統時的選項。有些選項也可在/etc/fstab中使用。這些選項包括: 
    async 以非同步的方式執行檔案系統的輸入輸出動作。 
    atime 每次存取都更新inode的存取時間,預設設定,取消選項為noatime。 
    auto 必須在/etc/fstab檔案中指定此選項。執行-a參數時,會加載設定為auto的裝置,取消選取為noauto。 
    defaults 使用預設的選項。預設選項為rw、suid、dev、exec、anto nouser與async。 
    dev 可讀檔案系統上的字元或塊裝置,取消選項為nodev。 
    exec 可執行二進制檔案,取消選項為noexec。 
    noatime 每次存取時不更新inode的存取時間。 
    noauto 無法使用-a參數來加載。 
    nodev 不讀檔案系統上的字元或塊裝置。 
    noexec 無法執行二進制檔案。 
    nosuid 關閉set-user-identifier(設定使用者ID)與set-group-identifer(設定組ID)設定位。 
    nouser 使一位使用者無法執行加載操作,預設設定。 
    remount 重新加載裝置。通常用于改變裝置的設定狀态。 
    ro 以隻讀模式加載。 
    rw 以可讀寫模式加載。 
    suid 啟動set-user-identifier(設定使用者ID)與set-group-identifer(設定組ID)設定位,取消選項為nosuid。 
    sync 以同步方式執行檔案系統的輸入輸出動作。 
    user 可以讓一般使用者加載裝置。 
-r 以隻讀方式加載裝置。 
-t<檔案系統類型> 指定裝置的檔案系統類型。常用的選項說明有: 
    minix Linux最早使用的檔案系統。 
    ext2 Linux目前的常用檔案系統。 
    msdos MS-DOS 的 FAT。 
    vfat Win85/98 的 VFAT。 
    nfs 網絡檔案系統。 
    iso9660 CD-ROMCD光牒的标準檔案系統。 
    ntfs Windows NT的檔案系統。 
    hpfs OS/2檔案系統。Windows NT 3.51之前版本的檔案系統。 
    auto 自動檢測檔案系統。 
-v 執行時顯示詳細的資訊。 
-V 顯示版本資訊。 
-w 以可讀寫模式加載裝置,預設設定。      
unmount:解除安裝指令      
# umount DEVICE      
       # umount MOUNT_POINT      
執行個體:      
(1)  建立挂載點 /mnt/test      
[root@localhost ~]# mkdir /mnt/test      
(2)把/dev/sda3挂載到/mnt/test上      
[root@localhost ~]# mount /dev/sda3 /mnt/test      
(3)使用df –h 指令檢視      
 [root@localhost ~]# df -h      
Filesystem            Size  Used Avail Use% Mounted on      
/dev/mapper/789-LogVol01      
                       47G  3.5G   41G   8% /      
tmpfs                 491M  224K  491M   1% /dev/shm      
/dev/sda1             1.9G   37M  1.8G   3% /boot      
/dev/sr0              3.7G  3.7G     0 100% /mnt/iso      
/dev/sda3             2.0G  3.1M  1.9G   1% /mnt/test      
使用umount指令解除安裝      
[root@localhost ~]# umount /mnt/test/      
[root@localhost ~]# df -h      
Filesystem            Size  Used Avail Use% Mounted on      
/dev/mapper/789-LogVol01      
                       47G  3.5G   41G   8% /      
tmpfs                 491M  224K  491M   1% /dev/shm      
/dev/sda1             1.9G   37M  1.8G   3% /boot      
/dev/sr0              3.7G  3.7G     0 100% /mnt/iso      
交換分區      

檢視記憶體(memory)及交換分區(swap)的指令

free

-m: 以MB為機關

-g: 以GB為機關

[root@localhost ~]# free -m

            total       used       free    shared    buffers     cached

Mem:           981        710        270          3         62        312

-/+ buffers/cache:        336        645

Swap:         1999         0       1999

建立交換分區

mkswap

格式:mkswap [option] DEVICE

       -L 'LABEL'       指定卷标

swapon:啟用交換分區

格式:swapon [option] [DEVICE]

       -a: 激活所有交換分區

       -p PRIORITY: 設定其優先級

swapoff:禁用交換分區

格式:swapoff [option] [DEVICE]

建立一個交換分區

[root@localhost ~]# mkswap /dev/sda3
Setting up swapspace version 1, size = 2102928 KiB
no label, UUID=023db09a-ccd8-4714-ad69-337b744e2843
[root@localhost ~]# swapo
swapoff  swapon   
[root@localhost ~]# swapo
swapoff  swapon   
[root@localhost ~]# swapon /dev/sda3
[root@localhost ~]# swapon –s    
Filename                           Type             SizeUsed      Priority
/dev/dm-1                              partition     2047996       0     -1
/dev/sda3                               partition      2102928       0     -2      

檔案系統等空間占用資訊的檢視工具

df指令

作用:報告檔案系統磁盤空間的使用情況      
格式:df [OPTION]... [FILE]... POSIX 選項: [-kP]      

常用參數

df: disk free                      顯示磁盤空間

-h: human-readable   用常見的格式顯示出大小      
-i: inode數量       用資訊索引點代替塊表示使用狀況      

-P:                                     以Posix相容的格式輸出

du: disk usage

-s: summary

檔案系統上的連結檔案:

硬連結:

特性:(1)兩個路徑指向同一個inode

(2)不能對目錄進行;

       (3)不能跨分區進行

注意:指向同一個inode的多個不同路徑; 建立檔案的硬連結會增加inode的引用計數;删除硬連結僅是删除其一個通路路徑,隻到最後一個路徑被删除;

符号連結(軟連結):

特性:(1)連結檔案的資料指向另一個檔案路徑

(2)可以對目錄進行;

(3)可以跨分區;

注意:指向的是另一個檔案路徑,而非inode。對檔案建立符号連結不會增加其引用計數;删除原檔案,符号連結檔案也将無法;

ln [-s] SRC DEST

                 -s:symbolic link

                 -v:verbose

作業

建立一個10G檔案系統,類型為ext4,要求開機可自動挂載至/mydata目錄

(1)   建立分區

[root@localhost ~]# fdisk /dev/sda
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e                                             因隻能分四個主分區,之前已有3個在用,是以此處第4個分區分為
Selected partition 4               extended(擴充)
First cylinder (6892-15665, default 6892): 
Using default value 6892
Last cylinder, +cylinders or +size{K,M,G} (6892-15665, default 15665): 
Using default value 15665
Command (m for help): n
First cylinder (6892-15665, default 6892): 
Using default value 6892
Last cylinder, +cylinders or +size{K,M,G} (6892-15665, default 15665): +10G
Command (m for help): p
Device Boot      Start         End      Blocks  Id  System
/dev/sda1   *           1         256    2048000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2             256        6630   51200000   8e  Linux LVM
/dev/sda3            6630        6891    2102933+  83  Linux
/dev/sda4            6892       15665   70477155    5  Extended
/dev/sda5            6892        8197   10490413+  83  Linux      

(2)使用kpatx指令重新整理分區表後,檢視/proc/partitions下的分區資訊

[root@localhost ~]# kpartx /dev/sda5
[root@localhost ~]# cat /proc/partitions 
major minor  #blocks  name
   7        0   3804160 loop0
   8        0 125829120 sda
   8        1   2048000 sda1
   8        2  51200000 sda2
   8        3   2102933 sda3
   8        4         31 sda4
   8        5  10490413 sda5
 253        0  49147904 dm-0
 253        1   2048000 dm-1      

(3)使用mke2fs指令建立檔案系統ext4

[root@localhost ~]# mke2fs -t ext4  /dev/sda5
 (4)使用blkid指令檢視
[root@localhost ~]# blkid /dev/sda5
/dev/sda5: UUID="b6d1d8c9-6496-4e85-9d0f-026b3756c11e" TYPE="ext4"      

(4)建立挂載點并使用mount指令挂載上去;最後編輯/etc/fstab檔案

[root@localhost ~]# mkdir /dev/sda5 /mnt/test
[root@localhost ~]# mount /dev/sda5 /mnt/test/
[root@localhost ~]# vim /etc/fstab      
Linux檔案管理系統
[root@localhost~]# mount -a
[root@localhost~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/789-LogVol01
                       47G  3.5G  41G   8% /
tmpfs                 491M  224K 491M   1% /dev/shm
/dev/sda1             1.9G   37M 1.8G   3% /boot
/dev/sr0              3.7G 3.7G     0 100% /mnt/iso
/dev/sda5            9.8G   23M  9.3G  1% /mnt/test      

繼續閱讀