第八章 Linux磁盤(pán)與文件系統(tǒng)管理

8.1 認(rèn)識(shí) ET2文件系統(tǒng)

8.1.1硬盤(pán)組成與分區(qū)的復(fù)習(xí)

  • 磁盤(pán)的物理組成 (3個(gè)物理組成 3個(gè)盤(pán)片組成 兩種磁盤(pán)文件名)
    Review p#12
  • 分區(qū)(5 個(gè)點(diǎn))
    Review p#67

8.1.2 文件系統(tǒng)特性

  • Linux ->Ext2
    Windows -> NTFS

  • 使用LVM (Logical Volume Manager)和 軟磁盤(pán)陣列 Softdisk RAID 將一個(gè)分區(qū)格式化為多個(gè)文件系統(tǒng), 也能將多個(gè)分區(qū)合成一個(gè)文件系統(tǒng)。
    Review RAID 和 LVM

  • 文件系統(tǒng)如何運(yùn)行?

    • Inode
      文件權(quán)限和屬性放 inode
      一個(gè)文件占用一個(gè)inode,同時(shí)記錄此文件的數(shù)據(jù)所在的block號(hào)碼

    • Block
      而文件實(shí)際數(shù)據(jù)放data block 塊中
      若文件太大,會(huì)占用多個(gè)block

    • Superblock
      用于存放整體信息,包括inode和block的總量、使用量、剩余量、以及文件系統(tǒng)的格式。

  • 索引式文件系統(tǒng) indexed allocation
    根據(jù)inode查找所有block讀取

-FAT U盤(pán)
沒(méi)有inode存在,只能先將上一個(gè)block讀取出來(lái)才知道下一個(gè)block號(hào)碼。

  • 碎片整理 (對(duì)于FAT文件系統(tǒng)經(jīng)常使用)
    將同一個(gè)文件所屬的的block再匯合到一起,提高讀取速度。

8.1.3 Linux的 Ext2 文件系統(tǒng)

  • 為什么硬盤(pán)只有一個(gè)MBR卻可以安裝雙系統(tǒng) ?
  1. Ext2 文件系統(tǒng)為了便于管理 固定的 inode 和block 區(qū)分出 多個(gè)塊組(block group),每個(gè) 塊組 都擁有自己獨(dú)立的inode block superblock 系統(tǒng)。
  2. 在整體的規(guī)劃中,文件系統(tǒng)在最前面有一個(gè) 啟動(dòng)扇區(qū) BootSector 用于安裝引導(dǎo)裝載文件,不用覆蓋硬盤(pán)唯一個(gè)MBR

BootSection 在文件系統(tǒng)的 最前端

  • data block (數(shù)據(jù)塊)
    三種size 1KB 2KB 4KB
    對(duì)應(yīng)最大單一文件限制 16GB 256GB 2TB
    對(duì)應(yīng)對(duì)大文件系統(tǒng)總?cè)萘?2TB 8TB 16TB

  • 原則上 block 的數(shù)量和大小在格式化完成后就固定了, 除非重新格式化

  • 每個(gè)block 最多放一個(gè)文件的數(shù)據(jù)

  • 如果文件大于block大小,則一個(gè)文件會(huì)占用多個(gè)block

  • 若小于 block 大小,則剩余空間也不能被使用

產(chǎn)生兩個(gè)問(wèn)題
如果采用了較大size的block,會(huì)造成資源的浪費(fèi)
如果采用較小的,會(huì)使讀寫(xiě)速度變慢

估計(jì)文件的大小選擇block的size

  • inodetable(inode 表格)
    1.inode 記錄了哪些文件數(shù)據(jù)?
    rwx;owner/group;size;ctime/atime/mtime;SetID;pointer
    2.inode的其他特點(diǎn)
    inode 固定大小為128bytes
    每個(gè)文件只能占用一個(gè)inode
    文件系統(tǒng)能創(chuàng)建文件的數(shù)量和inode的數(shù)量有關(guān)
    系統(tǒng)讀取文件需要先找到inode, 并分析 inode所記錄的權(quán)限與用戶是否符合,符合了才開(kāi)始讀取block里面的內(nèi)容

  • inode 結(jié)構(gòu)
    12個(gè)直接、一個(gè)間接、一個(gè)雙間接、一個(gè)三間接記錄區(qū)


    inode結(jié)構(gòu)圖.jpg
  • Superblock (超級(jí)塊)
    block 與inode的總量
    未使用與已使用b&i總量
    b&i的大小
    文件系統(tǒng)掛載時(shí)間、最近一次寫(xiě)入數(shù)據(jù)時(shí)間、最近一次檢測(cè)磁盤(pán)fsck的時(shí)間等文件系統(tǒng)相關(guān)信息
    一個(gè)validbit數(shù)值,0->已掛載 1->未被掛載
    每個(gè)block group都可能含有superblock 作為唯一的superblock的備份

  • File System Descripition (文件系統(tǒng)描述說(shuō)明)
    用于描述:
    每個(gè)block group 的開(kāi)始與結(jié)束的 block號(hào)碼
    說(shuō)明每個(gè)區(qū)段分別介于哪個(gè)block號(hào)碼之間
    (superblock,bitmap,inodemap,data block)

  • block bitmap
    哪些block號(hào)碼用著,哪些block號(hào)碼未使用,刪除文件時(shí)釋放block號(hào)碼

-inode bitmap
如上,替換成 inode

Tips:可以使用dumpe2fs 查看Superblock和File Syetem Descripition

  • df 查看目前掛載的設(shè)備
  • dumpe2fs /dev/hdc2
    稍后問(wèn)萱萱

8.1.4 與目錄樹(shù)的關(guān)系

  • 目錄
    當(dāng)我們mkdir時(shí),ext2會(huì)分配一個(gè)inode和至少一塊block給該目錄
    inode記錄目錄相關(guān)權(quán)限和屬性,并可記錄分配到的那塊block號(hào)碼
    block記錄該目錄下的文件名與該文件名占用的inode號(hào)碼數(shù)據(jù)。

    • 使用 ls -i 查看目錄文件所占用的inode號(hào)碼
    • 查看 /bin /boot /proc /lost+found /sbin 這五個(gè)目錄的ls -l
      ll -d / /bin /boot /proc /lost+found /sbin
      Review 目錄樹(shù) p#156 (proc為什么不占用硬盤(pán)容量)
  • 文件
    當(dāng)我們?cè)?ext2 下新建一個(gè)文件時(shí), ext2會(huì)分配一個(gè)indoe和相對(duì)于該文件大小的的block數(shù)量給該文件。超過(guò)12個(gè)block,會(huì)多一個(gè)block作為塊號(hào)碼的記錄

  • 目錄樹(shù)讀取
    文件名實(shí)際上是存在目錄文件的block里,所以文件名的新增、刪除、重命名都是需要 讀取 目錄文件的inode和block,才能找到文件名占用的inode,再找到文件的block。

    • 目錄樹(shù)讀取的過(guò)程
      1 通過(guò)掛載點(diǎn)信息找到/dev/hdc2 的inode 號(hào)碼為2的根目錄 inode ,且inode 具有的權(quán)限讓我們可以讀取該block的內(nèi)容
      2 取得的block號(hào)碼, 并找到etc/下的inode內(nèi)容
      3 讀取inode號(hào)碼得知vbird具有r和x的權(quán)限 ,因此可以讀取etc/的block內(nèi)容
      4 取得的block號(hào)碼,找到block內(nèi)容中的passwd文件的inode號(hào)碼
      5 讀取inode號(hào)碼得知vbird具有r的權(quán)限,因此可以讀取passwd的block內(nèi)容
  • 文件大小的磁盤(pán)讀取性能
    分區(qū)的規(guī)劃不是越大越好,大的文件系統(tǒng)存在文件數(shù)據(jù)離散的問(wèn)題,造成數(shù)據(jù)讀取性能低。

8.1.5 Ext2/Ext3 文件的訪問(wèn)與日志文件系統(tǒng)的功能

  • 新增文件時(shí),系統(tǒng)的行為?
    1 用戶在該目錄下,是否有w 和x 的權(quán)限?有,繼續(xù)。
    2 根據(jù)inode bitmap找到?jīng)]有使用的inode號(hào)碼,并將新文件的權(quán)限和屬性寫(xiě)入
    3 根據(jù) block bitmap 找到?jīng)]有使用的block 號(hào)碼,并將實(shí)際數(shù)據(jù)寫(xiě)入block,且更新 inode 的block指向數(shù)據(jù)
    4 將剛才寫(xiě)入的inode 與block 數(shù)據(jù)同步更新inode bitmap 與block bitmap,并更新superblock的內(nèi)容

  • 數(shù)據(jù)的不一致?tīng)顟B(tài) (Inconsistent)

    • 數(shù)據(jù)存放區(qū)域 -> inode 和 data block
    • metadata (中間數(shù)據(jù)) -> super block , inode bitmap, block bitmap:因?yàn)檫@數(shù)據(jù)都是經(jīng)常變動(dòng)的,每次添加、刪除、編輯都可能會(huì)影響到這三個(gè)部分的數(shù)據(jù)。
      1 文件在寫(xiě)入文件系統(tǒng)時(shí),系統(tǒng)中斷,inode table 和 data block 被寫(xiě)入,但metadata還未更新,metadata和數(shù)據(jù)存放區(qū)不一致
      2 Ext2 會(huì)在系統(tǒng)重新啟動(dòng)時(shí),強(qiáng)制比對(duì)metadata 和數(shù)據(jù)存放區(qū),數(shù)量多,時(shí)間慢,系統(tǒng)繁忙
  • 出現(xiàn)日志文件系統(tǒng) (Journaling file system)
    專(zhuān)門(mén)在文件系統(tǒng)中規(guī)劃出一個(gè)塊,該塊專(zhuān)門(mén)記錄寫(xiě)入或修訂文件時(shí)的步驟:
    1 預(yù)備:當(dāng)系統(tǒng)寫(xiě)入文件時(shí),會(huì)先在Journal 塊中記錄某個(gè)文件準(zhǔn)備要寫(xiě)入的信息
    2 實(shí)際寫(xiě)入: 寫(xiě)入文件的權(quán)限與數(shù)據(jù); 開(kāi)始更新meta data
    3 結(jié)束:完成數(shù)據(jù)與meta data 的更新后,在journal塊當(dāng)中完成該文件的記錄

    • 只要檢查journal塊就可以知道是哪些文件出現(xiàn)了inconsistent的狀態(tài),針對(duì)文件修復(fù)
    • dumpe2fs 中的 superblock 有Journal inode/backup/size 的信息
    • 為什么 從Ext2 轉(zhuǎn)換到Ext3 ?可利用性 數(shù)據(jù)完整性 速度 和 易于轉(zhuǎn)換(不用格式化)

8.1.6 Linux 文件系統(tǒng)的操作

Review #p
所有數(shù)據(jù)都得加載到內(nèi)存后cpu才能夠?qū)?shù)據(jù)進(jìn)行處理。當(dāng)編輯很大的文件時(shí),頻繁的要系統(tǒng)寫(xiě)入磁盤(pán)中,由于磁盤(pán)寫(xiě)入速度要比內(nèi)存慢很多,耗在等待硬盤(pán)的寫(xiě)入和讀取中,沒(méi)效率。

  • Asynchronously 異步處理
    1 當(dāng)系統(tǒng)加載一個(gè)文件到內(nèi)存后,若沒(méi)被改動(dòng),則內(nèi)存區(qū)段的文件數(shù)據(jù)會(huì)被設(shè)置為clean
    2 如若被改動(dòng),內(nèi)存中數(shù)據(jù)會(huì)被改成dirty
    3 改動(dòng)被保存在內(nèi)存里,未被保存到磁盤(pán)中
    4 系統(tǒng)會(huì)不定時(shí)將 dirty 的數(shù)據(jù)寫(xiě)回磁盤(pán),保持磁盤(pán)和內(nèi)存數(shù)據(jù)的一致性。(sync命令強(qiáng)制同步)
  • 內(nèi)存 與 文件系統(tǒng)的關(guān)系
    1 系統(tǒng)將常用文件放置在主儲(chǔ)存器的緩沖區(qū),以提高文件系統(tǒng)的讀寫(xiě)速度
    2 Linux的物理內(nèi)存會(huì)被用光,正常。可加速系統(tǒng)性能
    3 sync 手動(dòng)同步
    4 正常關(guān)機(jī),關(guān)機(jī)命令會(huì)調(diào)用sync同步
    5 非正常關(guān)機(jī)會(huì)導(dǎo)致長(zhǎng)時(shí)間的磁盤(pán)校驗(yàn),甚至導(dǎo)致文件系統(tǒng)損毀

8.1.7 掛載點(diǎn)(mount point)的意義

文件系統(tǒng)鏈接到某個(gè)目錄 -> 掛載
一定是目錄,該目錄為掛載點(diǎn)

?#p208 難道不是掛載到root下?

8.1.8 其他Linux支持的文件系統(tǒng)與VFS

傳統(tǒng)文件系統(tǒng)
日志文件系統(tǒng)
網(wǎng)絡(luò)文件系統(tǒng):NFS SMBFS

  • 查看Linux支持的文件系統(tǒng)
    ls -l /lib/modules/$ (uname -r)/kernel/fs
  • 查看系統(tǒng)目前已經(jīng)加載的內(nèi)存支持的文件系統(tǒng)
    cat /proc/filesystems
  • VFS Virtual Filesystem System
    Linux 通過(guò)VFS的內(nèi)核功能讀取文件系統(tǒng)
    (文件系統(tǒng)略)

8.2 文件系統(tǒng)的簡(jiǎn)單操作

8.2.1 磁盤(pán)與目錄的容量

  • df [-hiTa] display free disk space列出文件系統(tǒng)的整體磁盤(pán)使用量

    • -h human readable
      -i 不用硬盤(pán)容量,用inode數(shù)量顯示
      -T 列出該分區(qū)的文件系統(tǒng)名稱

    • Output
      Filesystem 代表文件系統(tǒng)是在哪個(gè)分區(qū)
      1K-block 說(shuō)明下面單位為1kb
      Used 使用掉的硬盤(pán)空間
      Available剩下
      Use% 使用率
      mountedon 掛載點(diǎn)

    • df 針對(duì)整個(gè)文件系統(tǒng) ,需特別關(guān)注 根目錄 的剩余容量

    • 特殊的 /proc 和 /dev/shm(虛擬的,下次開(kāi)機(jī)就沒(méi)了)

  • du display disk usage statistics
    不使用任何參數(shù)時(shí),會(huì)列出當(dāng)前目錄下的目錄文件容量
    -a 列出目錄和文件的容量
    -s 只列出總量 -S 去除子目錄
    使用通配符 查看 每個(gè)目錄所占用容量
    du -sm /*

8.2.2 連接文件 ln

softlink 快捷方式
hardlink 通過(guò)文件系統(tǒng)的inode連接產(chǎn)生新文件名,而非新文件

  • Hard Link
    ls -al link字段下的數(shù)字,實(shí)際是多少文件link到了這個(gè)inode號(hào)碼
    為什么?
    安全。
    1 任意的文件名被刪除,文件內(nèi)容仍然實(shí)際存在。
    2 任意的文件名進(jìn)入編輯,文件內(nèi)容都可以被修改。
    3 就是多在block里寫(xiě)入一個(gè)關(guān)聯(lián)信息而已

缺點(diǎn)
1 不能跨文件系統(tǒng) 2 不能連接到目錄 ?#p214

  • symbolic link
    創(chuàng)建一個(gè)獨(dú)立的文件(新的inode號(hào)碼,新的block),讓這個(gè)文件數(shù)據(jù)讀取指向它連接的文件名。
    當(dāng)源文件被刪除后,slink文件無(wú)法打開(kāi),實(shí)際就是找不到連接的文件名。
  • ln link 源文件 目標(biāo)文件
    -s 創(chuàng)建symbolic link
    -f 如果目標(biāo)文件存在,則先將其刪除再創(chuàng)建

  • Tips
    ln -s /bin /root/bin
    此時(shí)/root/bin(為符號(hào)連接文件) 下內(nèi)容進(jìn)入/bin下內(nèi)容,如果被刪除了,block中就沒(méi)有這份數(shù)據(jù)了(軟連接文件)
    挽救:趕緊刪除/root/bin 這個(gè)符號(hào)鏈接文件
    原本hardlink,/root/bin下刪除,與/bin下內(nèi)容無(wú)關(guān)。

  • 關(guān)于目錄的鏈接數(shù)量
    新目錄底下存在 . 和 .. 目錄
    該目錄本身 鏈接數(shù)量為2 (自身+.)
    上級(jí)目錄 鏈接數(shù)量+1 (原有 + ..)

8.3 磁盤(pán)的分區(qū)、格式化、檢驗(yàn)與掛載

加磁盤(pán)怎么做?
1 對(duì)磁盤(pán)分區(qū)
2 對(duì)分區(qū)format創(chuàng)建可用文件系統(tǒng)
3 對(duì)文件系統(tǒng)檢驗(yàn)
4 Linux,需要?jiǎng)?chuàng)建掛載點(diǎn),并掛載。

8.3.1 磁盤(pán)分區(qū)

  • fdisk DOS partition maintenance program
    按m顯示所有操作 離開(kāi)q所有操作不會(huì)生效
    w操作生效 p 輸出目前磁盤(pán)狀態(tài)
    Device 設(shè)備文件名
    Boot 是否為開(kāi)機(jī)引導(dǎo)模塊
    Start End 哪個(gè)柱面號(hào)碼之間 決定分區(qū)的大小
    Blocks 以1k為單位的容量
    ID system 提示文件系統(tǒng)
    最后dev的End柱面號(hào)碼為多少 與最大柱面號(hào)碼5005差距多少 即剩余可分區(qū)的大小
    Start End 判斷拓展分區(qū)和邏輯分區(qū)
    fdisk -l 查閱系統(tǒng)內(nèi)所有分區(qū)
    設(shè)備文件名不要加上數(shù)字 (數(shù)字就是分區(qū))

  • 刪除分區(qū)
    fdisk /dev/hdc
    p
    d 選擇
    w or q

  • 新增分區(qū)
    后略,實(shí)操

8.3.2 磁盤(pán)格式化

mkfs -t 文件系統(tǒng)格式 /dev/hdc6
mke2fs 指定格式化 創(chuàng)建文件系統(tǒng)

8.3.3 磁盤(pán)檢驗(yàn) fsck badblocks

  • fsck filesystem consistency check and interactive repair

8.3.4 磁盤(pán)掛載與卸載

單一文件系統(tǒng)不應(yīng)該被重復(fù)掛載在不同的掛載點(diǎn)
單一目錄不應(yīng)該重復(fù)掛載多個(gè)文件系統(tǒng)
作為掛載點(diǎn)的目錄應(yīng)該是空目錄
掛載:
mount 剛才創(chuàng)建的文件系統(tǒng)/dev/hdc6 目錄/mnt/hdc6
Linux有驅(qū)動(dòng)程序和分析superblock可以自動(dòng)識(shí)別出掛載的文件系統(tǒng)類(lèi)型
依靠 兩個(gè)文件
/etc/filesystems
/proc/filesystems
驅(qū)動(dòng)程序目錄
/lib/modules/$ (uname -r )/kernel/fs/
查看 mount -l
光驅(qū)一旦掛載之后就無(wú)法退出光盤(pán)

  • 格式化(mksf)與掛載軟盤(pán)
  • 掛載U盤(pán)
  • 重新掛載
    mount -o remount,rw,auto/
  • 掛載不特定目錄
    mount --bind /hom /mnt/home
  • 將設(shè)備文件卸載
    umount
  • 使用Label name 進(jìn)行掛載的方法
    查看Label name (dumpe2fs -h /dev/hdc6)
    掛載(mount -L “vibird_logical” /mnt/hdc6)

8.3.5 磁盤(pán)參數(shù)修改

mknod(略)
修改Lable name (e2label)
tune2fs & hdparm 命令(略)

8.4 設(shè)置開(kāi)機(jī)掛載

8.4.1 開(kāi)機(jī)掛載文件/etc/fstab 及/etc/mtab

  • 系統(tǒng)掛載的一些限制
    1 根目錄是必須掛載的,而且一定要先于其他mount point被掛載出來(lái)
    2 其他掛載點(diǎn)必須為已新建的目錄,可任意指定,但一定要遵守必需的系統(tǒng)目錄架構(gòu)原則。
    3 所有掛載點(diǎn)在同一時(shí)間之內(nèi),只能掛載一次
    4 所有分區(qū)在同一時(shí)間之內(nèi),只能被掛載一次
    5 若進(jìn)行卸載,你必須將工作目錄移到掛載點(diǎn)外(以及子目錄)之外

  • Lable 或設(shè)備文件名

  • mount point

  • 磁盤(pán)分區(qū)的文件系統(tǒng)

  • 文件系統(tǒng)的參數(shù)


    screenshot.png
  • 能否被 dump 備份命令作用
    dump 是一個(gè)用來(lái)做為備份的命令, 我們可以透過(guò) fstab 指定哪個(gè)文件系統(tǒng)必須要進(jìn)行 dump 備份! 0 代表不要做 dump 備份, 1 代表要每天進(jìn)行 dump 的動(dòng)作。 2 也代表其他不定日期的 dump 備份動(dòng)作, 通常這個(gè)數(shù)值不是 0 就是 1 啦!

  • 是否以 fsck 檢驗(yàn)扇區(qū):
    啟動(dòng)的過(guò)程中,系統(tǒng)默認(rèn)會(huì)以fsck檢驗(yàn)我們的 filesystem 是否完整 (clean)。 不過(guò),某些 filesystem 是不需要檢驗(yàn)的,例如內(nèi)存置換空間 (swap) ,或者是特殊文件系統(tǒng)例如 /proc 與 /sys 等等。所以,在這個(gè)字段中,我們可以配置是否要以 fsck 檢驗(yàn)該 filesystem 喔。 0 是不要檢驗(yàn), 1 表示最早檢驗(yàn)(一般只有根目錄會(huì)配置為 1), 2 也是要檢驗(yàn),不過(guò) 1 會(huì)比較早被檢驗(yàn)啦! 一般來(lái)說(shuō),根目錄配置為 1 ,其他的要檢驗(yàn)的 filesystem 都配置為 2 就好了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容