了解Linux存儲結構與文件系統(tǒng)

前言

Linux 系統(tǒng)中一切都是文件拌汇。
不僅普通的文件和目錄,就連塊設備弊决、管道噪舀、socket 等,也都是統(tǒng)一交給文件系統(tǒng)管理的飘诗。

根(/)

Linux 系統(tǒng)中的一切文件都是從“根(/)”目錄開始的与倡,并按照文件系統(tǒng)層次化標準(FHS)采用樹形結構來存放文件,以及定義了常見目錄的用途昆稿。另外纺座,Linux系統(tǒng)中的文件和目錄名稱是嚴格區(qū)分大小寫的。

根目錄文件結構

PC:/$ tree -L 1
.
├── bin //存放單用戶模式下還可以操作的命令
├── boot //開機所需文件—內核溉潭、開機菜單以及所需配置文件等
├── cdrom //光驅掛載
├── dev //以文件形式存放任何設備與接口
├── etc //配置文件
├── home //用戶主目錄
├── lib //開機時用到的函數(shù)庫净响,以及/bin 與/sbin 下面的命令要調用的函數(shù)
├── lost+found //當文件系統(tǒng)發(fā)生錯誤時,將一些丟失的文件片段存放在這里
├── media //用于掛載設備文件的目錄
├── root //系統(tǒng)管理員的主目錄
├── srv //一些網絡服務的數(shù)據(jù)文件目錄
├── tmp //任何人均可使用的“共享”臨時目錄
├── usr/local //用戶自行安裝的軟件
├── usr/sbin //Linux 系統(tǒng)開機時不會使用到的軟件/命令/腳本
├── usr/share //幫助與說明文件岛抄,也可放置共享文件
├── var //主要存放經常變化的文件别惦,如日志
...

物理設備命名

在 Linux 系統(tǒng)中一切都是文件狈茉,硬件設備也不例外夫椭。既然是文件,就必須有文件名稱氯庆。系統(tǒng)內核中的 udev 設備管理器會自動把硬件名稱規(guī)范起來蹭秋,目的是讓用戶通過設備文件的名字可以猜出設備大致的屬性以及分區(qū)信息等;這對于陌生的設備來說特別方便堤撵。另外仁讨,udev設備管理器的服務會一直以守護進程的形式運行并偵聽內核發(fā)出的信號來管理/dev 目錄下的設備文件。

常見硬件設備及其文件名稱

image.png

設備文件名舉例:/dev/sda5

  • dev:代表硬件設備文件所在的目錄
  • sd:代表SCSI存儲設備
  • a:代表硬盤的順序號
  • 5:代表擴展分區(qū)的順序號

文件系統(tǒng)

文件系統(tǒng)種類

用戶在硬件存儲設備中執(zhí)行的文件建立实昨、寫入洞豁、讀取、修改、轉存與控制等操作都是依靠文件系統(tǒng)來完成的丈挟。文件系統(tǒng)的作用是合理規(guī)劃硬盤刁卜,以保證用戶正常的使用需求。Linux系統(tǒng)支持數(shù)十種的文件系統(tǒng)曙咽。常見的文件系統(tǒng)如下:

Ext3

能夠在系統(tǒng)異常宕機時避免文件系統(tǒng)資料丟失蛔趴,并能自動修復數(shù)據(jù)的不一致與錯誤。然而例朱,當硬盤容量較大時孝情,所需的修復時間也會很長,而且也不能百分之百地保證資料不會丟失洒嗤。它會把整個磁盤的每個寫入動作的細節(jié)都預先記錄下來箫荡,以便在發(fā)生異常宕機后能回溯追蹤到被中斷的部分,然后嘗試進行修復烁竭。

Ext4

Android操作系統(tǒng)依托于Linux菲茬,所以主要的文件系統(tǒng)也是從Linux中發(fā)展而來,包括exFAT派撕、ext3婉弹、ext4等,目前大多數(shù)手機仍使用Ext4终吼,但相對于手機上使用的閃存設備來說镀赌,Ext4這一基于Linux的文件系統(tǒng)還有很大的優(yōu)化空間。

F2FS

F2FS “Flash Friendly File System”际跪,一種專門為閃存而生的文件系統(tǒng)商佛,其優(yōu)勢就是小文件的傳輸速率更快。近年來不斷的有旗艦機采用這一文件系統(tǒng)姆打,華為良姆、OnePlus、三星等幔戏,也使得這一文件系統(tǒng)在高端機上得到普及玛追,促進了它的不斷優(yōu)化和兼容性。

inode和block

文件系統(tǒng)通常會將 文件權限(rwx)與文件屬性(擁有者闲延、群組痊剖、時間參數(shù)等)這部份的數(shù)據(jù)放置到 inode 中,至于實際數(shù)據(jù)則放置到 data block 區(qū)塊中垒玲。 另外陆馁,還有一個超級區(qū)塊 (superblock) 會記錄整個文件系統(tǒng)的整體信息,包括 inode 與 block 的總量合愈、使用量叮贩、剩余量等击狮。
每個 inode 與 block 都有編號,至于這三個數(shù)據(jù)的意義可以簡略說明如下:

  • superblock:記錄此 filesystem 的整體信息益老,包括inode/block的總量帘不、使用量、剩余量杨箭, 以及文件系統(tǒng)的格式與相關信息等寞焙;
  • inode:記錄文件的屬性,一個文件占用一個inode互婿,同時記錄此文件的數(shù)據(jù)所在的 block 號碼捣郊;
  • block:實際記錄文件的內容,若文件太大時慈参,會占用多個 block 呛牲。

如下圖所示,文件系統(tǒng)先格式化出 inode 與 block 的區(qū)塊驮配,假設某一個文件的屬性與權限數(shù)據(jù)是放置到 inode 4 號(下圖較小方格內)娘扩,而這個 inode 記錄了文件數(shù)據(jù)的實際放置點為 2, 7, 13, 15 這四個 block 號碼,此時我們的操作系統(tǒng)就能夠據(jù)此來排列磁盤的讀取順序壮锻。 那么數(shù)據(jù)的讀取就如同下圖中的箭頭所指定的模樣了琐旁。
這種數(shù)據(jù)存取的方法我們稱為索引式文件系統(tǒng)(indexed allocation)。

image.png

虛擬文件系統(tǒng)

文件系統(tǒng)的種類眾多猜绣,而操作系統(tǒng)希望對用戶提供一個統(tǒng)一的接口灰殴,于是在用戶層與文件系統(tǒng)層引入了中間層,這個中間層就稱為虛擬文件系統(tǒng)(Virtual File System掰邢,VFS)牺陶。

VFS 定義了一組所有文件系統(tǒng)都支持的數(shù)據(jù)結構和標準接口,這樣程序員不需要了解文件系統(tǒng)的工作原理辣之,只需要了解 VFS 提供的統(tǒng)一接口即可掰伸。

掛載設備

什么是掛載? 當用戶需要使用硬盤設備或分區(qū)中的數(shù)據(jù)時怀估,需要先將其與一個已存在的目錄文件進行關聯(lián)狮鸭,這個關聯(lián)動作就是“掛載”。將一個文件系統(tǒng)的頂層目錄掛到另一個文件系統(tǒng)的子目錄上奏夫,使它們成為一個整體怕篷,稱為掛載历筝。把該子目錄稱為掛載點酗昼。

mount命令沒有建立掛載點的功能,因此你應該確保執(zhí)行mount命令時梳猪,掛載點已經存在麻削。(就是說要把文件系統(tǒng)掛載到哪蒸痹,首先要保證目錄存在)

mount命令

mount /dev/sdb2 /backup
將設備 /dev/sdb2 掛載到 /backup 目錄

系統(tǒng)重啟后掛載就會失效,linux提供了/etc/fstab配置文件可以在重啟后自動掛載呛哟。
如果想讓這個某個設備文件的掛載永久有效叠荠,則需要把掛載的信息寫入到配置文件中。
他的格式是:

設備文件 掛載目錄 格式類型 權限選項 自檢 優(yōu)先級

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/nvme0n1p3 during installation
UUID=a181a5a3-34b0-452a-8aa6-afd60efef515 /               ext4    errors=remount-ro 0       1
# /boot/efi was on /dev/nvme0n1p1 during installation
UUID=2497-B2DC  /boot/efi       vfat    umask=0077      0       1
# /home was on /dev/sdb1 during installation
UUID=22e1e864-578a-460e-94ea-e03a6b890178 /home           ext4    defaults        0       2
# /home/data was on /dev/sda1 during installation
UUID=e1eafdad-5310-4dc5-a3ae-44c2aadd1949 /home/data      ext4    auto,nouser,rw        0       2
# swap was on /dev/nvme0n1p2 during installation
UUID=f7ce45d5-ba45-4932-a48d-b08dba88cb26 none            swap    sw              0       0

unmount命令

unmount /dev/sdb2 撤銷掛載的設備文件

du命令

du [選項] [文件]
du的英文原義為“disk usage”扫责,含義為顯示磁盤空間的使用情況榛鼎,統(tǒng)計目錄(或文件)所占磁盤空間的大小

例如:du -sh /*命令來查看在 Linux 系統(tǒng)根目錄下所有一級目錄分別占用的空間大小。

PC:/$ sudo du -sh /*
13M /bin
122M    /boot
4.0K    /cdrom
0   /dev
15M /etc

軟鏈接和硬鏈接

在 Linux 系統(tǒng)中存在硬鏈接和軟連接兩種文件鳖孤。

  • 硬鏈接(hard link):可以將它理解為一個“指向原始文件 inode 的指針”者娱,系統(tǒng)不為它分配獨立的 inode 和文件。所以苏揣,硬鏈接文件與原始文件其實是同一個文件黄鳍,只是名字不同。我們每添加一個硬鏈接平匈,該文件的 inode 連接數(shù)就會增加 1框沟;而且只有當該文件的 inode 連接數(shù)為 0 時,才算徹底將它刪除增炭。換言之忍燥,由于硬鏈接實際上是指向原文件 inode 的指針,因此即便原始文件被刪除隙姿,依然可以通過硬鏈接文件來訪問灾前。需要注意的是,由于技術的局限性孟辑,我們不能跨分區(qū)對目錄文件進行鏈接哎甲。
  • 軟鏈接(也稱為符號鏈接[symbolic link]):僅僅包含所鏈接文件的路徑名,因此能鏈接目錄文件饲嗽,也可以跨越文件系統(tǒng)進行鏈接炭玫。但是,當原始文件被刪除后貌虾,鏈接文件也將失效吞加,從這一點上來說與 Windows 系統(tǒng)中的“快捷方式”具有一樣的性質。

ln命令

ln 命令用于創(chuàng)建鏈接文件尽狠,格式為“l(fā)n [選項] 目標”

[圖片上傳失敗...(image-6ebbcd-1627393728391)]

創(chuàng)建軟鏈接:

PC:~/DEBUG$ echo "HelloWorld!" > readme.txt
PC:~/DEBUG$ ln -s readme.txt link.txt
PC:~/DEBUG$ cat readme.txt 
HelloWorld!
PC:~/DEBUG$ cat link.txt 
HelloWorld!
PC:~/DEBUG$ rm -rf readme.txt 
PC:~/DEBUG$ cat link.txt 
cat: link.txt: 沒有那個文件或目錄

軟鏈接的原始文件刪除后衔憨,鏈接也失效了

創(chuàng)建硬鏈接:

PC:~/DEBUG$ echo "HelloWorld!" > readme.txt
PC:~/DEBUG$ ln readme.txt hardlink.txt
PC:~/DEBUG$ cat readme.txt 
HelloWorld!
PC:~/DEBUG$ rm -rf readme.txt 
PC:~/DEBUG$ cat hardlink.txt 
HelloWorld!

硬鏈接的原始文件刪除后,仍然可以通過硬鏈接文件來訪問

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末袄膏,一起剝皮案震驚了整個濱河市践图,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沉馆,老刑警劉巖码党,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件德崭,死亡現(xiàn)場離奇詭異,居然都是意外死亡揖盘,警方通過查閱死者的電腦和手機眉厨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兽狭,“玉大人憾股,你說我怎么就攤上這事』郏” “怎么了荔燎?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長销钝。 經常有香客問我有咨,道長,這世上最難降的妖魔是什么蒸健? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任座享,我火速辦了婚禮,結果婚禮上似忧,老公的妹妹穿的比我還像新娘渣叛。我一直安慰自己,他們只是感情好盯捌,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布淳衙。 她就那樣靜靜地躺著,像睡著了一般饺著。 火紅的嫁衣襯著肌膚如雪箫攀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天幼衰,我揣著相機與錄音靴跛,去河邊找鬼。 笑死渡嚣,一個胖子當著我的面吹牛梢睛,可吹牛的內容都是我干的。 我是一名探鬼主播识椰,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼绝葡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了腹鹉?” 一聲冷哼從身側響起藏畅,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎种蘸,沒想到半個月后墓赴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡航瞭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年诫硕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刊侯。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡章办,死狀恐怖,靈堂內的尸體忽然破棺而出滨彻,到底是詐尸還是另有隱情藕届,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布亭饵,位于F島的核電站休偶,受9級特大地震影響,放射性物質發(fā)生泄漏辜羊。R本人自食惡果不足惜踏兜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望八秃。 院中可真熱鬧碱妆,春花似錦、人聲如沸昔驱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽骤肛。三九已至纳本,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間腋颠,已是汗流浹背饮醇。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留秕豫,地道東北人朴艰。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像混移,于是被迫代替她去往敵國和親祠墅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內容