導航:首頁 > 編程系統 > linuxnamei

linuxnamei

發布時間:2025-02-05 19:53:11

1. linux裡面什麼是ext2fs

EXT2FS第二代擴展文件系統(英語:second extended filesystem,縮寫為 ext2),是LINUX內核所用的文件系統。它開始由Rémy Card設計,用以代替ext,於1993年1月加入linux核心支持之中。ext2 的經典實現為LINUX內核中的ext2fs文件系統驅動,最大可支持2TB的文件系統,至linux核心2.6版時,擴展到可支持32TB。其他的實現包括GNU Hurd,Mac OS X(第3方),Darwin(第3方),BSD。ext2為數個LINUX發行版的默認文件系統,如Debian、Red Hat Linux等 。

簡介

Linux支持多種不同類型的文件系統:網路文件系統NFS,磁碟文件系統Extfs,特殊文件系統proc、tmpfs等。

Ext2fs文件系統基本概念

Inode

Ext2fs中,每個文件都用如下圖所示的inode結構來描述,用戶空間操作的對象是文件路徑和名稱,系統kernel把路徑名稱解析成inode,通過inode號來訪問它代表的文件。

Mode:包含兩個數據,文件類型(普通文件/目錄/字元設備/塊設備/符號鏈接/管道)和用戶訪問許可權信息(0660)。

Ownerinfo:文件屬組信息。

Size:文件長度,單位是byte。

Timestamps:文件訪問和修改的時間戳。

Linkscount:這個項在上圖中沒有體現,它記錄了這個inode存在多少個鏈接,創建新文件時,其inode的linkscount應該為1,文件被刪除後,這個inode的linkscount就變為0。

DataBlocks:指向真實的文件數據塊,因為大文件可能會分配很多的block,直接在inode中保存所有的數據塊指針將會比較困難,也會浪費掉很多空間,畢竟系統中大文件的數量是佔少數的,所以設計了間接塊指針(Indirectblocks)和二級塊指針(Doubleblocks)來指向真實數據塊。

實際上還應該包含了inode號。

目錄

在Ext2fs中,目錄被看做一種特殊文件,也用一個inode來描述,目錄的datablock中保存了目錄下的所有內容,每條內容叫做一個entry,結構如下:

每條entry都保存了inode號、entry的長度、文件名長度、文件類型,並且都是4位元組對齊。


特別地,每個目錄下有兩個特殊的子目錄,'.'和'..',分別代表當前目錄和上一級目錄,這兩個目錄文件其實是硬鏈接。其中'..'有一個重要的作用:FSchecker(可以把文件系統umount後手動執行e2fsck看看)在檢查文件系統的時候,就會使用』..『來檢查目錄是否可以追溯到掛載根目錄,如果檢查失敗,目錄便會被鏈接到掛載根目錄下面的lost+found。

鏈接

為了方便系統內文件共享,Linux支持了兩種基本的鏈接文件:硬鏈接和軟鏈接(也叫符號鏈接)。

硬鏈接並不是一個獨立的文件,不佔用inode,只是在目錄下創建了一條entry,其中inode號保存的是目標文件的inode號,訪問硬鏈接時,文件系統通過inode將訪問操作重定向到目標文件,實現了文件共享,所以硬鏈接就是多個文件名直接指向同一個inode,用stat命令也能看到其inode號就是目標文件的inode號,它的特點:

不能跨文件系統。

目標文件必須先存在(inode存在且linkcount不為0)。

只能對普通文件創建硬鏈接,目錄不行。

刪除一個硬鏈接文件並不影響其他有相同inode號的文件。

軟鏈接是一個獨立的文件,擁有自己的inode,其數據塊存放的是目標文件的名稱,訪問軟鏈接時,kernel先訪問軟鏈接的內容,拿到目標文件名,並重新啟動路徑解析,獲取到目標文件inode號再向文件系統發起訪問。軟鏈接的特點:

可以跨文件系統。

文件和目錄都可以。

可對不存在的文件或目標創建軟鏈接。

軟鏈接有自己文件屬性和許可權。

創建軟鏈接時,鏈接計數i_nlink不會增加;

刪除軟鏈接並不影響被指向的文件,但若被指向的原文件被刪除,則相關軟連接被稱為死鏈接(即danglinglink,若被指向路徑文件被重新創建,死鏈接可恢復為正常的軟鏈接)。

軟鏈接的目標文件也可以是軟鏈接,其解析過程是遞歸的。

注意:軟鏈接創建時目標文件的路徑指向使用絕對路徑比較好,使用相對路徑創建的軟鏈接被移動後該軟鏈接文件將成為一個死鏈接,因為鏈接數據塊中記錄的也是相對路徑指向。

下面這個圖清晰描述了硬鏈接和軟連接之間的區別:

Ext2fs基本結構

在創建文件系統的時候,Ext2fs將設備(磁碟或者分區)劃分成1K、2K或者4K的block,然後通過Blockgroup來管理,Ext2fs/Ext3fs/Ext4fs的結構差不多(Ext2fs主要是少了日誌功能相關的內容),大致如下圖所示:

SuperBlock

SuperBlock是文件系統最重要的數據,它從設備開始位置偏移1024位元組的地方開始存儲,佔用1個block。如果block的大小是1KB,那麼SuperBlock就存放在block-1。如果block的大小是4KB,那Superblock就存放在block-0。

在Ext2fs的第一個版本(reverson0),每個BlockGroup都會存儲一份SuperBlock的一份副本,因為對空間浪費比較嚴重,後來的版本就只在部分BlockGroup(0、1、3、5、7、9這幾個group)中保留了SuperBlock的副本,在這幾個Group,和SuperBlock一起備份的還有GroupDescriptor。當然,如果沒有這么多Group,副本數量自然更少,在後面的demo中也可以看出來。其中Group-0中的SuperBlock叫作PrimarySuperBlock,文件系統被mount時,VFS讀取的也正是這份。

SuperBlock裡面的具體數據包括:

inode和block的總數,以及還有多少未分配。

每個BlockGroup有多少個inode和block。

文件系統唯一身份標識符(UUID),每個設備上的文件系統UUID都不一樣。

...

GDT

GroupDescriptorTable,GDT在文件系統中的layout緊跟Superblock後面,是文件系統第二關鍵的數據,它主要用於存放所有BlockGroup的信息:

Ext2fs為GDT預留了一部分空間,用於文件系統擴容。


通過冗餘提高了文件系統可靠性:在多個group中保存了關鍵數據的冗餘副本,包括superblock、GDT,當這些關鍵數據損壞的時候,很容易從這些冗餘副本中恢復。


提升性能:分成group後,inodetable和datablock之間的」距離「變近了,在執行I/O時,可能會減少磁頭定址的時間。

註:實際上inodesize,每個group中的block數等參數都可以在創建文件系統的時候指定,具體命令參數參考manpage。

Ext2fs的性能優化


為了提升I/O性能,Ext2fs內核代碼也做了很多設計,其中有兩個關鍵的技術:

提前讀:當必須讀取一個塊時,內核代碼在幾個連續的塊上請求I/O。通過這種方式,它試圖確保要讀取的下一個塊已經載入到緩沖區緩存中。提前讀通常在文件的連續讀取期間執行,Ext2fs將它們擴展到目錄讀取,可以是顯式讀取(readdir(2)調用),也可以是隱式讀取(namei內核目錄查找)。

預分配:在將數據寫入文件時,Ext2fs在分配新塊時預先分配最多8個相鄰塊。具體預分配多少個塊取決於blocksize:blocksize=1KB,每次預分配2個block;blocksize=2KB,每次預分配4個block;blocksize=4KB,每次預分配8個block。當然,對於用touch創建的空文件是不會預分配block的。即使在非常滿的文件系統上,預分配命中率也只有75%左右。這種預分配在負載較大的情況下可以獲得良好的寫性能,同時它還允許將連續的塊分配給文件,從而加快未來的順序讀取。

下面是Ext2fs、Ext3fs和Ext4fs的一個簡單對比:

只有Ext2fs的Filesystemstate是notclean,Ext3fs和Ext4fs都是clean,Ext2fs剛被以讀寫模式mount時,這個state被設置成notclean,umount或者以只讀模式mount時,state被設置成clean,啟動時文件系統根據這個狀態來決定是否要執行檢查。

Ext3fs/Ext4fs的Superblock中多了關於日誌功能的信息。

Ext4fs的每個group多了校驗和(checksum)數據。

2. util-linux是什麼軟體

Util-linux的內容
Util-linux 軟體包包含許多工具。其中比較重要的是載入、卸載、格式化、分區和管理硬碟驅動器,打開 tty 埠和得到內核消息。
安裝下列程序: agetty, arch, blockdev, cal, cfdisk, chkpexe, col, colcrt, colrm, column, ctrlaltdel, cytune, ddate, dmesg, elvtune, fdformat, fdisk, fsck.cramfs, fsck.minix, getopt, hexmp, hwclock, ipcrm, ipcs, isosize, line, logger, look, losetup, mcookie, mkfs, mkfs.bfs, mkfs.cramfs, mkfs.minix, mkswap, more, mount, namei, parse.bash, parse.tcsh, pg, pivot_root, ramsize (link to rdev), raw, rdev, readprofile, rename, renice, rev, rootflags (link to rdev), script, setfdprm, setsid, setterm, sfdisk, swapoff (link to swapon), swapon, test.bash, test.tcsh, tunelp, ul, umount, vidmode (link to rdev), whereis 和 write

簡短說明
agetty打開一個TTY埠,顯示登錄提示,執行/bin/login命令。
arch 顯示機器的體系結構信息。
blockdev在命令行中調用塊設備的ioctl。
cal顯示一個簡單的日歷。
cfdisk 處理指定設備的分區表。
chkpexe 找出多餘的可執行文件。
col 過濾來自輸入的反向行饋送內容。
colcrt預覽nroff的輸出。
colrm 在某個文件中刪除列。
column 把輸出格式化為幾列。
ctrlaltdel設置CTRL+ALT+DEL組合鍵的功能,為硬重啟或軟重啟。
cytune 查詢和修改cyclade驅動器的中斷入口。
ddate 把陽歷日期轉換為Discordian日期。
dmesg 顯示內核的啟動信息。
elvtune 調整I/O埠平衡。
fdformat 低級格式化一張軟盤。
fdisk 磁碟分區管理程序。
fsck.cramfs對Cramfs文件系統的一致性進行檢查。
fsck.minix 對MINIX文件系統的一致性進行檢查。
getopt解析命令參數。
hexmp用用戶指定的方式(包括ASCII, 十進制, 十六進制, 八進制)顯示一個文件或者標准輸入的數據。
hwclock查詢和設置硬體時鍾。(也被稱為RTC或BIOS時鍾)
ipcrm刪除一個指定的資源。
ipcs 提供IPC機制的信息。
isosize輸出iso9660文件系統的長度。
line 單行拷貝。
logger 設置系統日誌的入口。
look 顯示以某個給定字元串為開頭的行。
losetup 啟動和控制回環(loop)設備。
mcookie為xauth產生magic cookie,128位隨機數。
mkfs 在一個設備(通常是一個硬碟分區)設備上建立文件系統。
mkfs.bfs 創建 SCO bfs 文件系統。
mkfs.cramfs創建cramfs文件系統。
mkfs.minix 創建 Minix 文件系統。
mkswap 初始化指定設備或文件,以用做交換分區。
more 分屏顯示文件,但less更好用。
mount把一個文件系統從一個設備掛載到一個目錄。
namei 顯示指定路徑的符號鏈接。
pg顯示文本文件內容,一次顯示一屏。
pivot_root 使某個文件系統成為當前進程的根文件系統。
ramsize 顯示或者改變內存虛擬盤的大小。
rdev 查詢和設置內核的根設備和其他信息。
readprofile顯示/proc/profile文件的信息。
rename對文件重命名。
renice修改正在運行進程的優先順序。
rev 顛倒一個文件每行字元的順序。
rootflags在掛載根設備時,查詢和設置額外的信息。
script 為終端會話過程建立一個typescipt文件,記錄會話過程中終端的輸出。
setfdprm設置軟盤參數。
setsid 在一個新的會話過程中運行程序。
setterm 設置終端屬性。
sfdisk磁碟分區表管理工具。
swapdev 能在啟動內核中設置交換分區設備。
swapoff取消對指定交換設備和交換文件的使用。
swapon 使指定的交換設備和交換文件生效。
tunelp設置列印設備的參數。
ul 加下劃線。
umount卸載一個被掛載的文件系統。
vidmode查詢和設置視頻模式。
whereis確定某命令二進制文件,源文件和手冊文檔的位置。
write發一個消息給另一個用戶,如果他開啟了writting的話。

Util-linux 安裝依賴關系
Util-linux 依賴於: Bash, Binutils, Coreutils, Diffutils, GCC, Gettext, Glibc, Grep, Make, Ncurses, Sed, Zlib

閱讀全文

與linuxnamei相關的資料

熱點內容
算命網站哪個最准 瀏覽:857
如何將文件夾按123排序 瀏覽:228
如何看到大盤的數據 瀏覽:858
新開公司建立資料庫 瀏覽:429
什麼app可以調整視頻傾斜度 瀏覽:244
iar配置文件 瀏覽:715
axure源文件下載 瀏覽:495
域配置文件防火牆 瀏覽:962
簡潔個人博客網站模板下載 瀏覽:58
word游標很小 瀏覽:727
主題的文件名是什麼 瀏覽:480
開源軟體都用什麼編程語言 瀏覽:732
免費聽課的是什麼網站 瀏覽:863
php配置文件詳解 瀏覽:561
如何收索pdf文件里的關鍵詞 瀏覽:840
javalog清空日誌文件 瀏覽:529
07版word如何解鎖 瀏覽:112
sl400t6670cpu升級 瀏覽:84
織夢cms資料庫備份 瀏覽:260
普通寬頻升級光纖需要更換帳號嗎 瀏覽:86

友情鏈接