linux學習之存儲結構與磁盤划分
主要內容:
Linux文件系統層次化標准(FHS,Filesystem Hierarchy Standard)
udev硬件命名規則
硬盤分區的規划方法
部署SWAP交換分區
配置quota磁盤配額服務
軟硬鏈接
1 FHS(文件系統層次化標准)
Linux系統中一切文件都是從根目錄“/”開始的,嚴格區分大小寫,采用樹狀結構存放文件。
1.1 Linux系統中常見的目錄名稱以及相應內容
/boot 開機所需文件——內核、開機菜單以及所需配置文件等
/dev 以文件形式存放任何設備與接口
/etc 配置文件
/home 用戶家目錄
/bin 存放單用戶模式下還可以操作的命令
/lib 開機時用到的函數庫,以及/bin與/sbin下面的命令要調用的函數
/sbin 開機過程中需要的命令
/media 用於掛載設備文件的目錄
/opt 放置第三方的軟件
/root 系統管理員的家目錄
/srv 一些網絡服務的數據文件目錄
/tmp 任何人均可使用的“共享”臨時目錄
/proc 虛擬文件系統,例如系統內核、進程、外部設備及網絡狀態等
/usr/local 用戶自行安裝的軟件
/usr/sbin Linux系統開機時不會使用到的軟件/命令/腳本
/usr/share 幫助與說明文件,也可放置共享文件
/var 主要存放經常變化的文件,如日志
/lost+found 當文件系統發生錯誤時,將一些丟失的文件片段存放在這里
1.2 路徑
絕對路徑:從根目錄“/”開始寫起的文件或目錄名稱
相對路徑:相對於當前路徑(不具備普適性)
2 物理設備的命名規則
系統內核中的udev設備管理器會自動把硬件名稱規范起來,目的是讓用戶通過設備文件的名字猜出設備大致的屬性以及分區信息等;udev設備管理器的服務會一直以守護進程的形式運行並偵聽內核發出的信號來管理/dev目錄下的設備文件。
常見的硬件設備及文件名稱
IDE設備 /dev/hd[a-d]
SCSI/SATA/U盤 /dev/sd[a-p]
軟驅 /dev/fd[0-1]
打印機 /dev/lp[0-15]
光驅 /dev/cdrom
鼠標 /dev/mouse
磁帶機 /dev/st0 或 /dev/ht0
目前IDE設備較少見,一般硬盤設備都是/dev/sd[a-p],系統采用a-p代表不同的硬盤,默認從a開始。
硬盤分區編號規則:
1.主分區或擴展分區的編號從1開始,到4結束
2.邏輯分區從編號5開始
知識點一:/dev目錄中sda設備之所以是a,並不是由插槽決定的,而是由系統內核的識別順序來決定的,而恰巧很多主板的插槽順序就是系統內核的識別順序。
知識點二:分區的數字編碼不一定是強制順延下來的,也有可能是手工指定的,因此sda3只能表示是編號為3的分區,而不能判斷sda設備上已經存在了3個分區。
例:“/dev/sdb5”表示“這是系統第二個被識別的硬件設備上的編號為5的邏輯分區的設備文件”
知識點三:硬盤設備是由大量的扇區組成的。每個扇區的容量為512字節,其中第一個扇區最重要,保存着主引導記錄與分區表信息。主引導記錄需要占用446字節,分區表為64字節,結束符占用2字節,分區表中每記錄一個分區信息需要16字節,這樣一來最多只有4個分區信息可以寫入第一扇區,這4個分區就是4個主分區。
為了解決分區個數不夠的問題,可以將第一個扇區的分區表中16字節(原本要寫入主分區信息)的空間(稱之為擴展分區)拿出來指向另外一個分區。換言之,擴展分區並不是一個真正的分區,而是一個占用16字節分區表空間的指針。用戶一般會選擇使用3個主分區加1個擴展分區的方法,然后在擴展分區中創建出數個邏輯分區,從而滿足多分區(大於4)的要求。
所謂擴展分區,嚴格地講它不是一個實際意義的分區,它僅僅是一個指向下一個分區的指針,這種指針機構將形成一個單向鏈表。
3 文件系統與數據資料
Ext3: 是一款日志文件系統,能夠在系統異常宕機時避免文件系統資料丟失,並能自動修復數據的不一致與錯誤。然而當硬盤容量較大時,所需的修復時間也會很長,而且也不能百分百保證資料不會丟失。它會把整個磁盤的每個寫入動作的細節都預先記錄下來,以便在發生異常宕機后能回溯追蹤到被中斷的部分,然后嘗試進行修復。
Ext4: Ext3的改進版本,作為RHEL6系統中的默認文件管理系統,它支持的存儲容量高達1EB,且能夠有無限多的子目錄。另外,Ext4文件系統能夠批量分配block塊,從而極大地提高了讀寫效率。
XFS: 是一種高性能的日志文件系統,而且是RHEL7中默認的文件管理系統,它的優勢在發生意外宕機后尤其明顯,即可以快速地恢復可能被破壞的文件,而且強大的日志功能只用花費極低的計算和存儲性能。而且它最大可支持的存儲容量為18EB,幾乎滿足了所有要求。
Linux系統中有一個名為“super block”的硬盤地圖,Linux會把每個文件的權限與屬性記錄在inode中,而且每個文件僅占用一個獨立的inode表格,表格的默認大小為128字節,表中有如下信息:
a.該文件的訪問權限(r、w、x)
b 該文件的所有者與所屬組(owner、group)
c 該文件的大小(size)
d 該文件的創建或內容修改時間(ctime)
e 該文件的最后一次訪問時間(atime)
f 該文件的修改時間(mtime)
g 文件的特殊權限(SUID、GUID、SBIT)
h 該文件的真實數據地址(point)
而文件的實際內容則保存在block塊中(大小可以是1KB、2KB或4KB),一個inode默認大小為128B(Ext3),記錄一個block則消耗4B。當文件的inode被寫滿后,Linux系統會自動分配出一個block塊,專門用於像inode那樣記錄其他block塊的信息,這樣把各個block塊的內容串到一起,就能夠讓用戶讀到完整的文件內容了。Linux內核中的軟件層為用戶提供了一個VFS(虛擬文件系統)接口,用戶操作時不必面對底層的細節。
4 掛載硬件設備
掛載—卸載
掛載:當用戶需要使用硬盤設備或分區中的數據時,需要先將其與一個已存在的目錄文件進行關聯,而這個關聯動作就是掛載。
4.1 mount命令
用於掛載文件系統,格式為“mount 文件系統 掛載目錄”(在系統重啟后掛載就會失效)
常用參數及作用:
-t 指定文件系統的類型(對於比較新的Linux系統一般不需使用,Linux會自動進行判斷)
-a 掛載所有在/etc/fstab中定義的文件系統(他會在執行后自動檢查/etc/fstab文件中有無疏漏被掛載的設備文件,如果有,則進行自動掛載操作)
% mount /dev/sdb2 /backup
若需永久掛載,需修改/etc/fstab配置文件
用於掛載信息的指定填寫格式中,各字段所表示的意義:
設備文件 一般為設備的路徑+設備名稱,也可以寫唯一識別碼(UUID)
掛載目錄 指定要掛載到的目錄,需在掛載前創建好
格式類型 指定文件系統的格式,比如Ext3、Ext4、XFS、SWAP、iso9660(此為光盤設備)等
權限選項 若設置為defaults,則默認權限為:rw,suid,dev,exec,auto,nouser,async
是否備份 若為1則開機后使用dump進行磁盤備份,為0則不備份
是否自檢 若為1則開機后自動進行磁盤自檢,為0則不自檢
在/etc/fstab文件中寫入信息格式
/dev/sdb2(設備文件) /backup(掛載目錄) ext4(格式類型) defaults(權限選項) 0(是否備份) 0(是否自檢)
4.2 umount命令
用於撤銷已經掛載的設備文件,格式為“umount [掛載點/設備文件]”
% umount /dev/sdb2
5 添加硬盤設備
步驟:加入新的硬盤設備 → 分區 → 格式化 → 掛載
5.1 添加硬盤設備
5.1.1 fdisk命令(分區)
用於管理磁盤分區,格式為“fdisk [磁盤名稱]”,提供了添加、刪除、轉換分區等功能。
常用參數及作用:
m 查看全部可用的參數
n 添加新的分區
d 刪除某個分區信息
l 列出所有可用的分區類型
t 改變某個分區的類型
p 查看分區信息
w 保存並退出
q 不保存直接退出
主要輸入分區大小,添加時輸入+2G,刪除時輸入-2G
file命令
用於查看該文件的屬性
partprobe命令
用於手動將分區信息同步至內核,一般推薦連續兩次執行該命令。如此命令無法解決,則重啟。
5.1.2 mkfs命令(格式化)
用於格式化操作,格式為“mkfs.文件類型名稱”
如要格式分區為XFS的文件系統,則命令應為
% mkfs.xfs /dev/sdb1
5.1.3 掛載
步驟:創建一個用於掛載設備的掛載點目錄 → 使用mount命令將存儲設備與掛載點進行關聯 → 使用df -h命令來查看掛載狀態和硬盤使用量信息
1 % mkdir /newFS #創建掛載目錄
2 % mount /dev/sdb1 /newFS #掛載設備與掛載點關聯
3 % df -h # 顯示掛載狀態和硬盤使用量信息
5.2 du命令
用於查看文件數據占用量,格式為“du [選項] [文件]”,該命令就是用來查看一個或多個文件占用了多大的硬盤空間。
還可以用du -sh/*命令查看在Linux系統根目錄下所有一級目錄分別占用的空間大小。
6 添加交換分區
SWAP(交換)分區是一種通過在硬盤中預先划分一定的空間,然后將把內存中暫時不常用的數據臨時存放到硬盤中,以便騰出物理內存空間讓更活躍的程序服務來使用的技術,其設計目的是為了解決真實物理內存不足的問題。但由於交換分區畢竟是通過硬盤設備讀寫數據的,速度肯定要比物理內存慢,所以只有當真實的物理內存耗盡后才會調用交換分區的資源。在生產環境中,交換分區的大小一般為真實物理內存的1.5~2倍。
6.1 mkswap命令
SWAP分區專用的格式化命令,對新建的主分區進行格式化操作:
% mkswap /dev/sdb2
6.2 swapon命令
用於把准備好的SWAP分區設備正式掛載到系統中
% swapon /dev/sdb2
6.3 永久保存
格式如掛載:
/dev/sdb2(設備文件) swap(掛載目錄) swap(文件類型) defaults(權限選項) 0(是否備份) 0(是否自檢)
7 磁盤容量配額
7.1 quota命令
用於進行磁盤容量配額管理,從而限制用戶的硬盤可用容量或所能創建的最大文件個數。此外,還有軟限制和硬限制功能。
軟限制:當達到軟限制時會提示用戶,但仍允許用戶在限定的額度內繼續使用。
硬限制:當達到硬限制時會提示用戶,且強制終止用戶的操作。
早期RHEL讓硬盤設備支持quota磁盤容量配額服務,使用的是usrquota參數,RHEL7系統使用的是uquota參數。
7.2 xfs_quota命令
此命令是一個專門針對XFS文件系統來管理quota磁盤容量配額服務而設計的命令,格式為“xfs_quota [參數] 配額 文件系統”
常用參數及作用:
-c 用於以參數的形式設置要執行的命令
-x 專家模式,讓運維人員能夠對quota服務進行更多復雜的配置。
例:硬盤使用量的軟限制和硬限制分別為3M、6M,創建文件數量的軟限制和硬限制分別為3個和6個。
% xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 tom' /boot
% xfs_quota -x -c report /boot
7.3 edquota命令
用於編輯用戶的quota配額限制,格式為“edquota [參數] [用戶]”。
常用參數及作用:
-u 表示要針對哪個用戶進行設置
-g 表示要針對哪個用戶組進行設置
8 軟硬方式鏈接
8.1 軟硬方式鏈接
類似於Windows系統中的快捷方式,Linux系統中存在硬鏈接和軟鏈接兩種文件:
硬鏈接:可以將其理解為一個“指向原始文件inode的指針”,系統不為它分配獨立的inode和文件。所以,硬鏈接文件與原始文件其實是同一個文件,只是名字不同。每添加一個鏈接,該文件的inode連接數就會增加1,而且只有當該文件的inode連接數為0時,才算徹底刪除。換言之,由於硬鏈接實際上是指向原文件inode的指針,因此即使原始文件被刪除,依然可以通過硬鏈接文件來訪問。由於技術的局限性,不能跨分區對目錄文件進行鏈接。
軟鏈接(符號鏈接):僅僅包含所鏈接文件的路徑名,因此能鏈接目錄文件,也可以跨越文件系統進行鏈接,當原始文件被刪除后,鏈接文件也將失效,同Windows系統中的快捷方式性質相同。
8.2 ln命令
用於創建鏈接文件,格式為“ln [選項] 目標”
常用參數及作用:
-s 創建“符號鏈接”(如果不帶-s參數,則默認創建硬鏈接)
-f 強制創建文件或目錄的鏈接
-i 覆蓋前先詢問
-v 顯示創建鏈接的過程