Seven 儲存結構與磁碟劃分
檔案儲存結構(FHS標準)
在Linux系統中,目錄、字元裝置、塊裝置、套接字、印表機等都被抽象成了檔案,即“Linux系統中一切都是檔案”。既然平時我們打交道的都是檔案,那麼又應該如何找到它們呢?在Windows作業系統中,想要找到一個檔案,我們要依次進入該檔案所在的磁碟分割槽(假設這裡是D盤),然後在進入該分割槽下的具體目錄,最終找到這個檔案。但是在Linux系統中並不存在C/D/E/F等碟符,Linux系統中的一切檔案都是從“根(/)”目錄開始的,並按照檔案系統層次化標準(FHS)採用樹形結構來存放檔案,以及定義了常見目錄的用途。另外,Linux系統中的檔案和目錄名稱是嚴格區分大小寫的。例如,root、rOOt、Root、rooT均代表不同的目錄,並且檔名稱中不得包含斜槓(/)。
Linux系統中的檔案儲存結構如圖所示:
FHS定義了使用者應該把什麼型別的檔案檔案存放到什麼位置,但使用者不一定要遵守,這裡只是定義而非gun定。
Linux系統中常見的目錄名稱以及相應內容:
物理裝置命名規則(udev)
在Linux系統中一切都是檔案,硬體裝置也不例外。既然是檔案,就必須有檔名稱。系統核心中的udev裝置管理器會自動把硬體名稱規範起來,目的是讓使用者通過裝置檔案的名字可以猜出裝置大致的屬性以及分割槽資訊等;這對於陌生的裝置來說特別方便。另外,udev裝置管理器的服務會一直以守護程式的形式執行並偵聽核心發出的訊號來管理/dev目錄下的裝置檔案。Linux系統中常見的硬體裝置的檔名稱
如表所示:
由於現在的IDE裝置已經很少見了,所以一般的硬碟裝置都會是以“/dev/sd”開頭的。而一臺主機上可以有多塊硬碟,因此係統採用a~p來代表16塊不同的硬碟(預設從a開始分配,如果超過26個硬碟,那麼前26個命名sd[a-z],第27-52個命名為sd[aa-az],第53-78個命名為sd[ba-bz],依此類推)而且硬碟的分割槽編號也很有講究:
主分割槽或擴充套件分割槽的編號從1開始,到4結束;
邏輯分割槽從編號5開始。
注意兩點
儲存裝置的名稱從a開始按序命名,是由系統核心的識別順序決定的,與裝置在第幾個插槽無關。
分割槽編號並不代表分割槽個數,分割槽的數字編碼不一定是強制順延下來的,也有可能是手工指定的。
硬碟命名規則
正是因為計算機有了硬碟裝置,我們才可以在玩遊戲的過程中或遊戲通關之後隨時存檔,而不用每次重頭開始。硬碟裝置是由大量的扇區組成的,每個扇區的容量為512位元組。其中第一個扇區最重要,它裡面儲存著主開機記錄與分割槽表資訊。就第一個扇區來講,主開機記錄需要佔用446位元組,分割槽表為64位元組,結束符佔用2位元組;其中分割槽表中每記錄一個分割槽資訊就需要16位元組,這樣一來最多隻有4個分割槽資訊可以寫到第一個扇區中,這4個分割槽就是4個主分割槽。
第一個扇區中的資料資訊如圖所示:
檔案系統與資料資料
常見的檔案系統
**Ext3:**是一款日誌檔案系統,能夠在系統異常當機時避免檔案系統資料丟失,並能自動修復資料的不一致與錯誤。然而,當硬碟容量較大時,所需的修復時間也會很長,而且也不能百分之百地保證資料不會丟失。它會把整個磁碟的每個寫入動作的細節都預先記錄下來,以便在發生異常當機後能回溯追蹤到被中斷的部分,然後嘗試進行修復。
**Ext4:**Ext3的改進版本,作為RHEL 6系統中的預設檔案管理系統,它支援的儲存容量高達1EB(1EB=1,073,741,824GB),且能夠有無限多的子目錄。另外,Ext4檔案系統能夠批量分配block塊,從而極大地提高了讀寫效率。
**XFS:**是一種高效能的日誌檔案系統,而且是RHEL 7中預設的檔案管理系統,它的優勢在發生意外當機後尤其明顯,即可以快速地恢復可能被破壞的檔案,而且強大的日誌功能只用花費極低的計算和儲存效能。並且它最大可支援的儲存容量為18EB,這幾乎滿足了所有需求。
1.inode存放檔案的許可權與屬性記錄,每個檔案佔用一個獨立的inode表格,該表格的大小預設為128位元組,裡面記錄著如下資訊:
該檔案的訪問許可權(read、write、execute);
該檔案的所有者與所屬組(owner、group);
該檔案的大小(size);
該檔案的建立或內容修改時間(ctime);
該檔案的最後一次訪問時間(atime);
該檔案的修改時間(mtime);
檔案的特殊許可權(SUID、SGID、SBIT);
該檔案的真實資料地址(point)。
2.block存放檔案的實際內容(大小可以為1KB、2KB、4KB)。
檔案很小(1KB),但依然會佔用一個block,因此會潛在地浪費3KB。
檔案很大(5KB),那麼會佔用兩個block(5KB-4KB後剩下的1KB也要佔用一個block)。
VFS虛擬檔案系統:
各式各樣的檔案系統在VFS下隱藏各自的特性和細節,使用者在操作檔案時就是統一對VFS進行操作,使用者無需關心底層的硬碟結構。
掛載硬體裝置
一、分割槽
fdisk命令:用於管理磁碟分割槽。格式:fdisk
[磁碟名稱]。它提供了集新增、刪除、轉換分割槽等功能於一身的“一站式分割槽服務”。這是一條互動式命令。
常用引數:
引數 作用
m 檢視全部可用的引數
n 新增新的分割槽
d 刪除某個分割槽資訊
l 列出所有可用的分割槽型別
t 改變某個分割槽的型別
p 檢視分割槽表資訊
w 儲存並退出
q 不儲存直接退出
二、格式化
mkfs命令:用於格式化操作。格式:mkfs.檔案型別 磁碟裝置檔案。
三、掛載與解除安裝
①掛載操作就是把硬體裝置與目錄進行關聯的動作
②解除安裝操作就是取消硬體裝置與目錄關聯的動作,解除安裝檔案系統就意味不再使用硬體的裝置資源
掛載 mount 裝置 目錄
-a:掛載所有在/etc/fstab中定義的檔案系統
-t:指定檔案系統的型別
解除安裝 umount 裝置或者目錄
用mount命令掛載,系統重啟後就會失效。要在/etc/fstab檔案追加掛載資訊才能永久掛載。在/etc/fstab檔案中,掛載資訊格式:“裝置檔案
掛載目錄 格式型別 許可權選項 是否備份 是否自檢”
掛載資訊格式各欄位含義:
欄位 意義
裝置檔案 一般為裝置的路徑+裝置名稱,也可以寫唯一識別碼(UUID,Universally Unique Identifier)
掛載目錄 指定要掛載到的目錄,需在掛載前建立好
格式型別 指定檔案系統的格式,比如Ext3、Ext4、XFS、SWAP、iso9660(此為光碟裝置)等
許可權選項 若設定為defaults,則預設許可權為:rw, suid, dev, exec, auto, nouser, async
是否備份 若為1則開機後使用dump進行磁碟備份,為0則不備份
是否自檢 若為1則開機後自動進行磁碟自檢,為0則不自檢
df命令:用於檢視掛載狀態和硬碟使用量資訊。常用引數為-h。格式:df -h。
du命令:用於檢視檔案資料佔用量。格式 :du [選項] [檔案]。
du -sh /* #檢視在Linux系統根目錄下所有一級目錄分別佔用的空間大小
du -sh /newFS #檢視/newFS下的內容佔了多少容量
新增交換分割槽
SWAP(交換)分割槽是一種通過在硬碟中預先劃分一定的空間,然後將把記憶體中暫時不常用的資料臨時存放到硬碟中,以便騰出實體記憶體空間讓更活躍的程式服務來使用的技術,其設計目的是為了解決真實實體記憶體不足的問題。但由於交換分割槽畢竟是通過硬碟裝置讀寫資料的,速度肯定要比實體記憶體慢,所以只有當真實的實體記憶體耗盡後才會呼叫交換分割槽的資源。
交換分割槽的建立過程與前文講到的掛載並使用儲存裝置的過程非常相似。在對/dev/sdb儲存裝置進行分割槽操作前,有必要先說一下交換分割槽的劃分建議:在生產環境中,交換分割槽的大小一般為真實實體記憶體的1.5~2倍。
1.分割槽建立邏輯分割槽
fdisk /dev/sdb
Command (m for help): n #新增分割槽
Select (default p): e #先建立擴充套件分割槽,才能建立邏輯分割槽
Partition number (2-4, default 2): #直接回車
First sector (4196352-20971519, default 4196352): #回車
Last sector, +sectors or +size{K,M,G} (4196352-20971519, default 20971519): +6G #為擴充套件分割槽分配6G空間
Command (m for help): n #新增分割槽
Select (default p): l #建立邏輯分割槽
First sector (4198400-16779263, default 4198400): #回車
Last sector, +sectors or +size{K,M,G} (4198400-16779263, default 16779263): +5G #為邏輯分割槽分配5G空間,空間最多不能超過擴充套件分割槽的大小
Command (m for help): w #儲存並退出
2.格式化
mkswap命令:swap分割槽的專用格式化命令。格式:mkswap [裝置檔案]。
3.掛載
swapon命令:因為swap分割槽沒有掛載點,所以需要用掛載swap分割槽的專用命令來對swap分割槽進行掛在操作。格式:swapon
[裝置檔案]。
swapoff命令:
解除安裝swap分割槽裝置。格式:swapoff [裝置檔案]。 磁碟容量配額
磁碟容量配額
Linux系統的設計初衷就是讓許多人一起使用並執行各自的任務,從而成為多使用者、多工的作業系統。但是,硬體資源是固定且有限的,如果某些使用者不斷地在Linux系統上建立檔案或者存放電影,硬碟空間總有一天會被佔滿。針對這種情況,root管理員就需要使用磁碟容量配額服務來限制某位使用者或某個使用者組針對特定資料夾可以使用的最大硬碟空間或最大檔案個數,一旦達到這個最大值就不再允許繼續使用。可以使用quota命令進行磁碟容量配額管理,從而限制使用者的硬碟可用容量或所能建立的最大檔案個數。quota命令還有軟限制和硬限制的功能。
軟限制:當達到軟限制時會提示使用者,但仍允許使用者在限定的額度內繼續使用。
硬限制:當達到硬限制時會提示使用者,且強制終止使用者的操作。
RHEL 7系統中已經安裝了quota磁碟容量配額服務程式包,但儲存裝置卻預設沒有開啟對quota的支援,此時需要手動編輯配置檔案,讓RHEL 7系統中的/boot目錄能夠支援quota磁碟配額技術。
1.編輯/etc/fstab檔案,新增引數讓儲存裝置支援磁碟配額技術。早期檔案系統新增的引數為usrquota引數,而xfs檔案系統使用的是uquota或usrquota。
vim /etc/fstab
...
UUID=9d5e3b22-75ac-4f47-9e2b-dd33a06b0f81 /boot xfs defaults,uquota 1 2 #新增uquota引數(XFS檔案系統,usrquota也行)
/dev/sdb1 /newFS ext4 defaults,usrquota 0 0 #新增usrquota引數(早期檔案系統專用引數)
2.重啟系統,使用mount命令檢視目錄是否已經支援quota磁碟配額技術。
reboot
mount | grep /boot #從mount命令的輸出結果中,查詢出含有/boot字樣的行
mount | grep /newFS #如果輸出結果有usrquota的字眼,說明該目錄已經支援quota磁碟配額技術
3.設定quota磁碟配額。
xfs_quota命令是一個專門針對XFS檔案系統來管理quota磁碟容量配額服務而設計的命令,格式為“xfs_quota [引數] 配額 檔案系統”。其中
-c引數用於以引數的形式設定要執行的命令;
-x引數是專家模式,
讓運維人員能夠對quota服務進行更多複雜的配置。
edquota命令用於編輯使用者的quota配額限制,格式為“edquota [引數] [使用者] ”。在為使用者設定了quota磁碟容量配額限制後,可以使用edquota命令按需修改限額的數值。其中
-u參數列示要針對哪個使用者進行設定;
-g參數列示要針對哪個使用者組進行設定。
-v 顯示指令執行過程
軟硬方式連結
在Linux系統中存在硬連結和軟連線兩種檔案。
硬連結(hard
link):可以將它理解為一個“指向原始檔案inode的指標”,系統不為它分配獨立的inode和檔案。所以,硬連結檔案與原始檔案其實是同一個檔案,只是名字不同。我們每新增一個硬連結,該檔案的inode連線數就會增加1;而且只有當該檔案的inode連線數為0時,才算徹底將它刪除。換言之,由於硬連結實際上是指向原檔案inode的指標,因此即便原始檔案被刪除,依然可以通過硬連結檔案來訪問。需要注意的是,由於技術的侷限性,我們不能跨分割槽對目錄檔案進行連結。
軟連結(也稱為符號連結[symbolic
link]):僅僅包含所連結檔案的路徑名,因此能連結目錄檔案,也可以跨越檔案系統進行連結。但是,當原始檔案被刪除後,連結檔案也將失效,從這一點上來說與Windows系統中的“快捷方式”具有一樣的性質。
ln命令
ln命令用於建立連結檔案,格式為“ln [選項]
目標”,其可用的引數以及作用如表6-6所示。在使用ln命令時,是否新增-s引數,將建立出性質不同的兩種“快捷方式”。
ln命令中可用的引數以及作用
引數 作用
-s 建立“符號連結”(如果不帶-s引數,則預設建立硬連結)
-f 強制建立檔案或目錄的連結
-i 覆蓋前先詢問
-v 顯示建立連結的過程
例項
echo "cao ni ma" > test.txt #建立原始測試檔案test.txt
ln -s test.txt soft_link.txt #建立檔案test.txt的軟連結檔案soft_link.txt
ln test.txt hard_link.txt #建立檔案test.txt的硬連結檔案hard_link.txt
rm -rf test.txt #刪除原始檔test.txt
cat soft_link.txt #軟連線檔案打不開
cat hard_link.txt #硬連結檔案能正常開啟
相關文章
- Seven 儲存結構與磁碟劃分 主分割槽交換分割槽的作用!
- Linux物理儲存結構以及磁碟劃分Linux
- Linux應該這麼學第6章儲存結構與磁碟劃分Linux
- Prometheus時序資料庫-磁碟中的儲存結構Prometheus資料庫
- 儲存結構
- MySQL體系結構與儲存引擎MySql儲存引擎
- 資料結構知識點--儲存結構與邏輯結構資料結構
- JanusGraph -- 儲存結構
- CentOS 儲存結構CentOS
- linux6-儲存結構與硬碟管理Linux硬碟
- 儲存結構的種類與比較
- InnoDB記錄儲存結構
- php圖的儲存結構PHP
- redis 儲存結構原理 2Redis
- HBase 資料儲存結構
- MySQL的varchar儲存原理:InnoDB記錄儲存結構MySql
- VSAN儲存結構解析+儲存資料恢復案例資料恢復
- MySQLInnoDB儲存引擎(一):精談innodb的儲存結構MySql儲存引擎
- [資料結構] 劃分樹資料結構
- 【資料結構——圖和圖的儲存結構】資料結構
- PostgreSQL儲存引擎之page結構SQL儲存引擎
- 儲存器的層次結構
- innodb表空間儲存結構
- etcd MVCC 儲存結構及流程MVC
- 【RocketMQ】RocketMQ儲存結構設計MQ
- 圖(Graph)——圖的儲存結構
- 【部落格383】etcd儲存結構
- 大話儲存——磁碟原理與技術筆記(一)筆記
- 儲存系統-cache-磁碟
- 【PHP資料結構】圖的概念和儲存結構PHP資料結構
- 架構分層的小糾結-層級該如何劃分與定位?架構
- RBAC_專案結構劃分
- JVM記憶體結構劃分JVM記憶體
- Redis(一):基本資料型別與底層儲存結構Redis資料型別
- Shopee ClickHouse 冷熱資料分離儲存架構與實踐架構
- MyRocks儲存引擎資料結構解析儲存引擎資料結構
- PostgreSQL儲存引擎之heap tuple結構SQL儲存引擎
- 圖說HP-lefthand儲存結構