《Linux就该这么学》培训笔记_ch06_存储结构与磁盘划分
《Linux就該這么學》培訓筆記_ch06_存儲結構與磁盤劃分
文章最后會post上書本的筆記照片。
文章主要內容:
- Linux系統的文件存儲結構(FHS標準)
- 物理設備命名規則(udev)
- 文件系統與數據資料
- 硬件設備的添加、分區、格式化及掛載
- 添加交換分區
- 磁盤容量配額
- 軟硬方式鏈接
- 書本筆記
Linux系統的文件存儲結構(FHS標準)
?在Linux系統中,目錄、字符設備、塊設備、套接字、打印機等都被抽象成了文件,即Linux系統中一切都是文件。
Linux系統的文件存儲結構和Windows操作系統不同。Linux系統中的一切文件都是從“根(/)”目錄開始的,并按照文件系統層次化標準(FHS)采用樹形結構來存放文件,以及定義了常見目錄的用途。
FHS定義的用戶應該把什么類型的文件文件存放到什么位置的規則并不是死規則,用戶不一定要遵守。
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 | 當文件系統發生錯誤時,將一些丟失的文件片段存放在這里 |
?路徑:指的是如何定位到某個文件,分為絕對路徑與相對路徑。
- 絕對路徑:指的是從根目錄(/)開始寫起的文件或目錄名稱;
- 相對路徑:指的是相對于當前路徑的寫法;
?
物理設備命名規則(udev)
Linux系統內核中的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 |
一般的硬盤設備都以“/dev/sd”開頭。而一臺主機上可以有多塊硬盤,因此系統采用a~p來代表16塊不同的硬盤(默認從a開始分配,如果超過26個硬盤,那么前26個命名sd[a-z],第27-52個命名為sd[aa-az],第53-78個命名為sd[ba-bz],依此類推),而且硬盤的分區編號也很有講究:
- 主分區或擴展分區的編號從1開始,到4結束;
- 邏輯分區從編號5開始。
兩大誤區:
硬盤設備是由大量的扇區組成的,每個扇區的容量為512字節。其中第一個扇區最重要,里面保存著主引導記錄與分區表信息。
第一個扇區中,主引導記錄需要占用446字節,分區表為64字節,結束符占用2字節;其中分區表中每記錄一個分區信息就需要16字節,即最多只有4個分區信息可以寫到第一個扇區中,這4個分區就是4個主分區。
若4個主分區不夠,一般采用3個主分區+1個擴展分區,在擴展分區創建出數個邏輯分區的方法。擴展分區并不是一個實際意義的分區,它僅僅是一個指向下一個分區的指針,這種指針結構將形成一個單向鏈表,指向邏輯分區(邏輯分區才是實際意義的分區,且沒有個數限制)。
?
文件系統與數據資料
常見文件系統:
- Ext3:是一款日志文件系統,能夠在系統異常宕機時避免文件系統資料丟失,并能自動修復數據的不一致與錯誤。然而,當硬盤容量較大時,所需的修復時間也會很長,而且也不能百分之百地保證資料不會丟失。它會把整個磁盤的每個寫入動作的細節都預先記錄下來,以便在發生異常宕機后能回溯追蹤到被中斷的部分,然后嘗試進行修復。
- Ext4:Ext3的改進版本,作為RHEL 6系統中的默認文件管理系統,它支持的存儲容量高達1EB(1EB=1,073,741,824GB),且能夠有無限多的子目錄。另外,Ext4文件系統能夠批量分配block塊,從而極大地提高了讀寫效率。
- XFS:是一種高性能的日志文件系統,而且是RHEL 7中默認的文件管理系統,它的優勢在發生意外宕機后尤其明顯,即可以快速地恢復可能被破壞的文件,而且強大的日志功能只用花費極低的計算和存儲性能。并且它最大可支持的存儲容量為18EB,這幾乎滿足了所有需求。
數據的保存(inode與block):
- inode存放文件的權限與屬性記錄,每個文件占用一個獨立的inode表格,默認大小128B。
- block存放文件的實際內容(大小可以為1KB、2KB、4KB)。
- 在inode中,記錄一個block消耗4B,當文件inode寫滿,系統會自動分配出一個block專門用于像inode一樣記錄其他block信息,把各個block塊內容串在一起才能讀取文件的完整內容。
- 對于存儲文件內容的block塊,有兩種常見情況(以4KB的block大小為例進行說明)。
- 文件很小(1KB),但依然會占用一個block,因此會潛在地浪費3KB。
- 文件很大(5KB),那么會占用兩個block(5KB-4KB后剩下的1KB也要占用一個block)。
VFS虛擬文件系統:各式各樣的文件系統在VFS下隱藏各自的特性和細節,用戶在操作文件時就是統一對VFS進行操作,用戶無需關心底層的硬盤結構。
?
硬件設備的添加、分區、格式化及掛載
添加硬盤設備流程:添加設備(略)-->分區(非必要)-->格式化-->掛載
1.分區
fdisk命令:用于管理磁盤分區。格式:fdisk? [磁盤名稱]。它提供了集添加、刪除、轉換分區等功能于一身的“一站式分區服務”。這是一條交互式命令。
常用參數:
| 參數 | 作用 |
| m | 查看全部可用的參數 |
| n | 添加新的分區 |
| d | 刪除某個分區信息 |
| l | 列出所有可用的分區類型 |
| t | 改變某個分區的類型 |
| p | 查看分區表信息 |
| w | 保存并退出 |
| q | 不保存直接退出 |
做好分區后,系統將把該磁盤主分區抽象成/dev/sdb1設備文件,可以使用file命令查看文件屬性。
partprobe命令:用于將分區信息同步到內核。當添加了新磁盤分區而系統并沒有自動把分區信息同步給Linux內核時,可以通過該命令進行手動同步。
1 file /dev/sdb1 #查看設備文件/dev/sdb1屬性 2 partprobe #查不到,用partprobe命令手動將分區信息同步給Linux內核。推薦連續執行兩次,效果更佳。 3 partprobe 4 file /dev/sdb1 #再查,有了2.格式化
mkfs命令:用于格式化操作。該命令很貼心地把常用的文件系統名稱用后綴的方式保存成了多個命令文件該命令(通過tab鍵可以顯示)。格式:mkfs.文件類型 磁盤設備文件。
1 mkfs.xfs /dev/sdb1 #把磁盤分區格式化為XFS格式3.掛載
掛載與卸載的概念:
- 掛載操作就是把硬件設備與目錄進行關聯的動作;
- 卸載操作就是取消硬件設備與目錄關聯的動作,卸載文件系統就意味不再使用硬件的設備資源;
mount命令:用于掛載文件系統。格式:mount 文件系統 掛載目錄。
常用參數:
- -a:掛載所有在/etc/fstab中定義的文件系統
- -t:指定文件系統的類型
僅僅用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則不自檢 |
?
1 mkdir /newFS #創建掛載目錄 2 mount /dev/sdb1 /newFS #把設備/dev/sdb1掛載到/newFS目錄 3 vim /etc/fstab #往/etc/fstab文件追加掛載信息,實現永久掛載 4 ... 5 /dev/sdb1 /newFS xfs defaults 0 0 #按照“設備文件 掛載目錄 格式類型 權限選項 是否備份 是否自檢”的格式編輯掛載信息 6 ... 7 mount -a #掛載所有在/etc/fstab中定義的文件系統df命令:用于查看掛載狀態和硬盤使用量信息。常用參數為-h。格式:df -h。
du命令:用于查看文件數據占用量。格式 :du [選項] [文件]。
1 du -sh /* #查看在Linux系統根目錄下所有一級目錄分別占用的空間大小 2 du -sh /newFS #查看/newFS下的內容占了多少容量umount命令:用于撤銷已經掛載的設備文件。格式:umount [掛載點/設備文件]。
umount /dev/sdb1 #卸載/dev/sdb1設備文件?
添加交換分區(RHCSA)
SWAP(交換)分區是一種通過在硬盤中預先劃分一定的空間,然后將把內存中暫時不常用的數據臨時存放到硬盤中,以便騰出物理內存空間讓更活躍的程序服務來使用的技術,其設計目的是為了解決真實物理內存不足的問題。但由于交換分區畢竟是通過硬盤設備讀寫數據的,速度肯定要比物理內存慢,所以只有當真實的物理內存耗盡后才會調用交換分區的資源。
交換分區的創建、格式化和掛載與上面普通分區類似。一般來說,交換分區大小為真實物理內存的1.5-2倍就行了。
1.分區。以創建邏輯分區為例。
1 fdisk /dev/sdb 2 Command (m for help): n #添加分區 3 Select (default p): e #先創建擴展分區,才能創建邏輯分區 4 Partition number (2-4, default 2): #直接回車 5 First sector (4196352-20971519, default 4196352): #回車 6 Last sector, +sectors or +size{K,M,G} (4196352-20971519, default 20971519): +6G #為擴展分區分配6G空間 7 Command (m for help): n #添加分區 8 Select (default p): l #創建邏輯分區 9 First sector (4198400-16779263, default 4198400): #回車 10 Last sector, +sectors or +size{K,M,G} (4198400-16779263, default 16779263): +5G #為邏輯分區分配5G空間,空間最多不能超過擴展分區的大小 11 Command (m for help): w #保存并退出分區完成后就有一個/dev/sdb5的邏輯分區的設備文件了。如果沒有,同理,執行兩次partprobe命令手動同步分區信息到內核。
2.格式化
mkswap命令:swap分區的專用格式化命令。格式:mkswap [設備文件]。
1 mkswap /dev/sdb5 #格式化分區/dev/sdb5為swap格式3.掛載
swapon命令:因為swap分區沒有掛載點,所以需要用掛載swap分區的專用命令來對swap分區進行掛在操作。格式:swapon [設備文件]。
swapoff命令:卸載swap分區設備。格式:swapoff [設備文件]。
1 swapon /dev/sdb5 #掛載SWAP分區設備 2 free -m #查看SWAP分區大小 3 vim /etc/fstab #編輯/etc/fstab文件,實現永久掛載 4 ... 5 /dev/sdb5 swap swap defaults 0 0 6 ... 7 mount -a?
磁盤容量配額
磁盤容量配額服務:限制某位用戶或某個用戶組針對特定文件夾可以使用的最大硬盤空間或最大文件個數,一旦達到這個最大值就不再允許繼續使用。
quota命令:用于進行磁盤容量配額管理,從而限制用戶的硬盤可用容量或所能創建的最大文件個數。
quota命令的軟限制和硬限制:
- 軟限制:當達到軟限制時會提示用戶,但仍允許用戶在限定的額度內繼續使用。
- 硬限制:當達到硬限制時會提示用戶,且強制終止用戶的操作。
RHEL 7系統中已經安裝了quota磁盤容量配額服務程序包,但存儲設備默認沒有開啟對quota的支持。需要編輯/etc/fstab配置文件,讓指定的目錄能夠支持quota磁盤配額技術。
?
1.編輯/etc/fstab文件,添加參數讓存儲設備支持磁盤配額技術。以/dev/sdb1為例。注意,早期文件系統添加的參數為usrquota參數,而xfs文件系統使用的是uquota或usrquota也行。
1 vim /etc/fstab2 ... 3 UUID=9d5e3b22-75ac-4f47-9e2b-dd33a06b0f81 /boot xfs defaults,uquota 1 2 #添加uquota參數(XFS文件系統,usrquota也行) 4 /dev/sdb1 /newFS ext4 defaults,usrquota 0 0 #添加usrquota參數(早期文件系統專用參數) 5 ...
2.重啟系統,使用mount命令查看目錄是否已經支持quota磁盤配額技術。
1 reboot 2 mount | grep /boot #從mount命令的輸出結果中,查找出含有/boot字樣的行 3 mount | grep /newFS #如果輸出結果有usrquota的字眼,說明該目錄已經支持quota磁盤配額技術3.設置quota磁盤配額。
xfs_quota命令:專門針對XFS文件系統來管理quota磁盤容量配額服務而設計的命令,格式:xfs_quota [參數] 配額 文件系統。
常用參數:
- -c參數:用于以參數的形式設置要執行的命令;
- -x參數:專家模式,讓運維人員能夠對quota服務進行更多復雜的配置。
edquota命令:用于編輯用戶或用戶組的quota配額限制。格式:edquota [參數] [用戶]。對于早期文件系統,在進行磁盤配額配置之前需要用quotacheck命令生成磁盤內配額數據庫。
通過edquota命令進行磁盤配額配置的參數格式:要進行磁盤配額的分區(必須是在/etc/fstab文件中添加過usrquota參數的才有效) 已使用的塊空間 磁盤容量軟限制 磁盤容量硬限制 已有文件個數 文件數量軟限制 文件數量硬限制。
quotacheck命令:用于生成磁盤內配額數據庫。格式:quotacheck [參數] [目錄]。
常用參數:
- -v 顯示指令執行過程
- -u 掃描磁盤空間時,計算每個用戶識別碼所占用的目錄和文件數目
- -g 掃描磁盤空間時,計算每個群組識別碼所占用的目錄和文件數目
實例:
1 chmod -Rf o+w /boot 2 chmod -Rf o+w /newFS 3 xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 linuxprobe' /boot #為用戶linuxprobe在目錄/boot中設置軟硬限制分別為3m和6m的磁盤容量,軟硬限制分別為3個和6個的文件數量 4 quotacheck -vug /newFS #對于早期的文件系統,要先生成磁盤內配額數據庫(aquota.user),才能進行磁盤配額設置 5 edquota -u linuxprobe #對用戶linuxprobe進行磁盤配額 6 /dev/sdb1 0 2048 4096 0 2 4 #編輯磁盤配額參數配置完畢后,可以用dd命令進行一系列的驗證。當用戶在磁盤配額的目錄里的文件數量/文件的總容量超過isoft/bsoft設定的值,會有提示,而當超過ihard/bhard的值時,則會報錯。
?
軟硬方式鏈接
在Linux系統中存在硬鏈接和軟連接兩種文件。
- 硬鏈接(hard link):可以將它理解為一個“指向原始文件inode的指針”,系統不為它分配獨立的inode和文件。所以,硬鏈接文件與原始文件其實是同一個文件,只是名字不同。每添加一個硬鏈接,該文件的inode連接數就會增加1;而且只有當該文件的inode連接數為0時,才算徹底將它刪除。硬鏈接實際上是指向原文件inode的指針,因此即便原始文件被刪除,依然可以通過硬鏈接文件來訪問。需要注意的是,由于技術的局限性,不能跨分區對目錄文件進行硬鏈接。
- 軟鏈接(也稱為符號鏈接[symbolic link]):僅僅包含所鏈接文件的路徑名,因此能鏈接目錄文件,也可以跨越文件系統進行鏈接。當原始文件被刪除后,鏈接文件將失效。可以理解為Windows系統的快捷方式。
硬鏈接與單純的文件復制的區別:
- 一個文件A,復制一份為文件B。文件A和文件B是完全獨立的,修改A不會影響B;
- 硬鏈接文件和原始文件實際上是同一個文件,無論是修改硬鏈接文件還是原始文件,實際上都是再對同一個文件進行修改。
ln命令:用于創建鏈接文件,格式:ln [選項] 目標。
| 參數 | 作用 |
| -s | 創建“符號鏈接”(如果不帶-s參數,則默認創建硬鏈接) |
| -f | 強制創建文件或目錄的鏈接 |
| -i | 覆蓋前先詢問 |
| -v | 顯示創建鏈接的過程 |
?
書本筆記
?
轉載于:https://www.cnblogs.com/kaminwu/p/10904392.html
總結
以上是生活随笔為你收集整理的《Linux就该这么学》培训笔记_ch06_存储结构与磁盘划分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《机器学习实战》-线性回归
- 下一篇: Scrapy运行中常见网络相关错误