第七章、Linux磁盤與文件系統(tǒng)管理

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

    • 磁盤組成及分區(qū)復(fù)習(xí)(正好給自己提幾個(gè)問(wèn)題)

      • 什么是扇區(qū),有哪兩種格式

        • 扇區(qū)(Sector)為最小的物理儲(chǔ)存單位,且依據(jù)磁盤設(shè)計(jì)的不同,目前主要有 512bytes 與 4K 兩種格式;
      • 什么是磁柱

        • 將扇區(qū)組成一個(gè)圓,那就是磁柱(Cylinder);
      • 磁盤分區(qū)表的兩種格式

        • 磁盤分區(qū)表主要有兩種格式,一種是限制較多的 MBR 分區(qū)表,一種是較新且限制較少的 GPT 分區(qū)表。
      • MBR第一個(gè)扇區(qū)由什么組成呢

        • MBR 分區(qū)表中,第一個(gè)扇區(qū)最重要,里面有: (1)主要開(kāi)機(jī)區(qū)(Master boot record, MBR)及分區(qū)表(partition
          table), 其中 MBR 占有 446 bytes,而 partition table 則占有 64 bytes。
      • 實(shí)體磁盤的文件名是什么

        • /dev/sd[a-p][1-128]
      • 虛擬磁盤的文件名是什么

        • /dev/vd[a-d][1-128]
    • 文件系統(tǒng)特性

      • 什么是格式化,(我以前只是覺(jué)得是清空哈哈哈哈,還真沒(méi)想過(guò)),每種操作系統(tǒng)所設(shè)定的文件屬性和權(quán)限并不相同,格式化分區(qū)槽是為了讓它變成系統(tǒng)能夠使用的"文件系統(tǒng)格式"
      • 文件系統(tǒng)通常將權(quán)限和屬性放到inode中,實(shí)際數(shù)據(jù)放到data block區(qū)塊中,另外有一個(gè)超級(jí)區(qū)塊(superblock)會(huì)記錄整個(gè)文件系統(tǒng)的整體信息(inode與block的總量呀,使用量呀,剩下多少呀,聽(tīng)起來(lái)像一個(gè)管家哈哈哈哈)
      • inode、block、superblock的簡(jiǎn)要概述
        • superblock:記錄此 filesystem 的整體信息(inode/block 的總量、使用量、剩余量, 以及文件系統(tǒng)的格式與相關(guān)信息)
        • inode:記錄文件的屬性,一個(gè)文件占用一個(gè)inode,同時(shí)記錄文件數(shù)據(jù)所在的block號(hào)碼
        • block:實(shí)際記錄文件的內(nèi)容,如果是很大的文件就多占一些block啦
      • 關(guān)于碎片整理
        • 需要碎片整理是因?yàn)閷懭氲腷lock過(guò)于離散啦,想想磁盤機(jī)械手臂的磁盤讀取頭來(lái)來(lái)回回的我都覺(jué)得累,碎片整理就是將同一個(gè)文件的block整理到一起,那么數(shù)據(jù)的讀取就變得容易,但是Ext2是索引式文件系統(tǒng)(一下子將inode中的block號(hào)碼對(duì)應(yīng)的block全讀出來(lái),是不是有點(diǎn)像散列表哈哈哈),不太需要碎片整理啦,但是如果是以前的老式u盤呢,例如FAT格式(這里讀取block是需要一個(gè)一個(gè)讀取的,感覺(jué)像鏈表),就需要碎片整理了
    • Linux的Ext2文件系統(tǒng)(inode)

    • 文件系統(tǒng)一開(kāi)始就將inode與block規(guī)劃好了,除非重新格式化or利用resize2fs等指令變更文件系統(tǒng)大小,否則inode和block就固定不再變動(dòng)啦
      • 關(guān)于區(qū)塊群組

        • 如果文件系統(tǒng)太大啦,那么那么奪得inode與block都放在一起也不好管理,于是Ext2文件系統(tǒng)在格式化的時(shí)候會(huì)區(qū)分為多個(gè)區(qū)塊群組,而每個(gè)群組都有獨(dú)立的inode、block、superblock系統(tǒng)


        • 接上圖,文件系統(tǒng)最前面有一個(gè)啟動(dòng)扇區(qū)(boot sector)可安裝開(kāi)機(jī)管理程序,所以我們才能由多重引導(dǎo)呀!
      • data block

        • Ext2 文件系統(tǒng)中所支持的 block 大小有 1K, 2K 及
          4K 三種而已


        • 上圖非絕對(duì),某些應(yīng)用程序捕捉不到辣么大的文件
        • 關(guān)于Ext2文件系統(tǒng)block的限制
          1. 原則上, block 的大小與數(shù)量在格式化完就不能夠再改變了(除非重新格式化)
          2. 每個(gè) block 內(nèi)最多只能夠放置一個(gè)文件的數(shù)據(jù)
          3. 如果文件大于 block 的大小,則一個(gè)文件會(huì)占用多個(gè) block 數(shù)量
          4. 若文件小于 block ,則該 block 的剩余容量就不能夠再被使用了(磁盤空間會(huì)浪費(fèi))
          5. 現(xiàn)在磁盤都太大啦,4k就好,知道原理就行
      • inode table

        • inode記錄的文件數(shù)據(jù)至少有:
          1. 該文件的存取模式(read/write/excute);
          2. 該文件的擁有者與群組(owner/group);
          3. 該文件的容量;
          4. 該文件建立或狀態(tài)改變的時(shí)間(ctime);
          5. 最近一次的讀取時(shí)間(atime);
          6. 最近修改的時(shí)間(mtime);
          7. 定義文件特性(flag),如 SetUID...;
          8. 該文件真正內(nèi)容的指向 (pointer);
        • 關(guān)于inode的特色
          1. 每個(gè) inode 大小均固定為 128 bytes (新的 ext4 與 xfs 可設(shè)定到 256 bytes)
          2. 每個(gè)文件都僅會(huì)占用一個(gè)inode
          3. 文件系統(tǒng)能夠建立的文件數(shù)量與inode的數(shù)量有關(guān)
          4. 系統(tǒng)讀取文件需先找到inode,先分析inode所記錄的權(quán)限與用戶是否符合,如果符合才能夠開(kāi)始讀取block內(nèi)容
        • 關(guān)于inode的12個(gè)直接、一個(gè)間接、一個(gè)雙間接和一個(gè)三間接
          • 如果文件很大呢,inode記錄一個(gè)block號(hào)碼要花費(fèi)4byte,根本記錄不下那么多block號(hào)碼


          • 直接就是直接指向block號(hào)碼的對(duì)照
          • 間接就是再拿一個(gè)block當(dāng)作記錄block號(hào)碼的記錄區(qū)
          • 雙間接就是使用第一個(gè)block來(lái)記錄block號(hào)碼
          • 三間接就是使用第二個(gè)block記錄block號(hào)碼
      • 假如block大小為1k,inode能指定多少block呢
        • 12個(gè)直接:12*1K=12K
        • 間接:256*1K=256K
        • 雙間接:2562561K=2562K
        • 三間接: 256256256*1K=2563K
        • 總額=12 + 256 + 256256 + 256256*256 (K) = 16GB
        • 注意2k與4k block不能這么計(jì)算,因?yàn)闀?huì)受到Ext2文件系統(tǒng)本身的限制
      • superblock

        • superblock記錄的主要信息
          1. block與inode的總量
          2. 未使用與已使用的inode和block數(shù)量
          3. block與inode的大小(block 為 1, 2, 4K, inode 為 128bytes 或 256bytes)
          4. filesystem的掛載時(shí)間,最近一次寫入數(shù)據(jù)的時(shí)間,最近一次檢查磁盤(fsck)的時(shí)間等文件系統(tǒng)相關(guān)信息
          5. 一個(gè)valid bit數(shù)值,如果這個(gè)文件系統(tǒng)已經(jīng)被掛載,valid bit為0,否則valid bit為1
          6. 注意:除了第一個(gè)block group含有superblock之外,后面的block group不一定含有superblock,如果有的話呢,主要是作為第一個(gè)block group內(nèi)superblock的備份,用于救援
        • Filesystem Description(文件系統(tǒng)描述誰(shuí)說(shuō)明)
          1. 該區(qū)段描述每個(gè)block group的開(kāi)始和結(jié)束block號(hào)碼,以及每個(gè)區(qū)段(superblock、bitmap、inodemap、data block)分別介于哪一個(gè)block號(hào)碼之間
      • block bitmap(區(qū)塊對(duì)照表)**

        • block bitmap記錄的主要信息
          1. 記錄哪些block是空的
          2. 再刪除某些文件時(shí),文件原本占用的block號(hào)碼需要釋放,block bitmap中相應(yīng)的block號(hào)碼標(biāo)志就會(huì)被修改為"空閑"
      • dumpe2fs:查詢Ext家族superblock信息的指令**

        • 語(yǔ)法
          1. dumpe2fs [-bh] 裝置文件名
          
        • 選項(xiàng)與參數(shù)
          1. -b :列出保留為壞軌的部分(用不到 )
          2. -h : 僅列出 superblock 的數(shù)據(jù),不會(huì)列出其他的區(qū)段內(nèi)容。
          
        • blkid:顯示目前系統(tǒng)被格式化的裝置
        • dumpe2fs的部分字段
          1. Filesystem volume name:文件系統(tǒng)的名稱
          2. Last mounted on:上一次掛載的目錄位置
          3. Filesystem UUID:Linux對(duì)裝置的定義碼
          4. Filesystem features:文件系統(tǒng)的特征數(shù)據(jù)
          5. Default mount options:預(yù)設(shè)在掛載時(shí)會(huì)主動(dòng)加上的掛載參數(shù)
          6. Filesystem state:這塊系統(tǒng)的文件的狀態(tài),clean是沒(méi)問(wèn)題的意思
          7. Inode count:inode的總數(shù)
          8. Block count:block的總數(shù)
          9. Reserved block count:保留的block總數(shù)
          10. Free blocks:空閑的block可用數(shù)量
          11 Free inodes:空閑的inode可用數(shù)量
          12. Block size:?jiǎn)蝹€(gè)block的容量大小
          13. inode size:inode的容量大小
          14. Journal size:日志式數(shù)據(jù)的可供記錄總量
          15. Group 0:第一塊block group位置
          16. Primary superblock at 0, Group descriptors at 1-1:主要 superblock 的所在
          17. Inode table at 161-672 (+161):inode table的所在
          18. Free blocks:剩余的容量有多少
          
    • 與目錄樹(shù)的關(guān)系

      • 目錄

        • 當(dāng)我們?cè)趌inux的文件系統(tǒng)建立一個(gè)目錄時(shí),系統(tǒng)會(huì)分配一個(gè)inode和至少一塊block給該目錄,inode記錄該目錄的權(quán)限、屬性and分配到的block號(hào)碼,block記錄在這個(gè)目錄下的文件名和該文件名占用的inode號(hào)數(shù)據(jù)[要記得這只是個(gè)目錄呀]
        • 當(dāng)目錄下的文件數(shù)過(guò)多導(dǎo)致一個(gè)block無(wú)法容納所有文件名+inode對(duì)照號(hào)碼時(shí),Linux會(huì)給于該目錄多一個(gè)block來(lái)記錄相關(guān)的數(shù)據(jù)
      • 文件

        • 當(dāng)我們?cè)贚inux的ext2建立一個(gè)一般文件時(shí),ext2分配一個(gè)inode與相匹配與文件大小的block給該文件,[記得如果文件很大時(shí)候我們還有inode的12個(gè)直接、一個(gè)間接、一個(gè)雙間接和一個(gè)三間接幫忙]
      • 目錄樹(shù)讀取

        • eg:讀取/etc/passwd的過(guò)程
          1. / 的 inode:
            透過(guò)掛載點(diǎn)的信息找到根目錄 inode,且 inode 規(guī)范的權(quán)限讓我們可以讀取該 block的內(nèi)容(有 r 與 x);
          2. / 的 block:
            取得 block 的號(hào)碼,并找到該內(nèi)容有 etc/ 目錄的 inode 號(hào)碼;
          3. etc/ 的 inode:
            讀取 etc的inode號(hào)碼得知用戶具有 r 與 x 的權(quán)限,因此可以讀取 etc/ 的 block 內(nèi)容;
          4. etc/ 的 block:
            取得 block 號(hào)碼,并找到該內(nèi)容有 passwd 文件的 inode 號(hào)碼;
          5. passwd 的 inode:
            讀取passwd的inode號(hào)碼得知用戶具有 r 的權(quán)限,因此可以讀取 passwd 的 block 內(nèi)容;
          6. passwd 的 block:
            將該 block 內(nèi)容的數(shù)據(jù)讀出來(lái)。
      • filesystem 大小與磁盤讀取效能

        • 文件系統(tǒng)過(guò)大可能會(huì)有文件數(shù)據(jù)離散的問(wèn)題發(fā)生,合理規(guī)劃分區(qū)
    • EXT2/EXT3/EXT4 文件的存取與日志式文件系統(tǒng)的功能

      • 新增一個(gè)文件時(shí)文件系統(tǒng)的行為

        1. 確定新增文件的目錄是不是有相應(yīng)權(quán)限
        2. 根據(jù)inode bitmap找到?jīng)]有使用的inode號(hào)碼,將新文件的權(quán)限/屬性寫入
        3. 根據(jù)block bitmap找到未使用的block號(hào)碼,將實(shí)際數(shù)據(jù)寫入block,并更新inode的block指向
        4. 將剛剛寫入的inode與block數(shù)據(jù)同步至inode bitmap與block bitmap,并更新superblock的內(nèi)容
      • 數(shù)據(jù)存放區(qū)域與中介數(shù)據(jù)

        1. 將inode table與data block稱為數(shù)據(jù)存放區(qū)域
        2. 將其他eg:superblock、block bitmap與inode bitmap等區(qū)段稱為metadata(因?yàn)閟uperblock、block bitmap與inode bitmap數(shù)據(jù)經(jīng)常變動(dòng),無(wú)論新增、刪除還是修改都會(huì)影響這幾個(gè)區(qū)段的數(shù)據(jù),所以就叫中介數(shù)據(jù)啦)
      • 數(shù)據(jù)不一致(inconsistent)狀態(tài)

        1. 寫入inode table與data block數(shù)據(jù)之后,嘣!停電了!系統(tǒng)不知道為啥斷了!metadata的內(nèi)容與實(shí)際數(shù)據(jù)存放區(qū)不一致
        2. Ext2中,如果有此情況,系統(tǒng)重新啟動(dòng)后會(huì)由superblock當(dāng)中的valid bit與filesystem state等狀態(tài)判斷是否強(qiáng)行進(jìn)行數(shù)據(jù)一致性檢查(費(fèi)事費(fèi)力,要針對(duì)metadata區(qū)域與實(shí)際數(shù)據(jù)存放區(qū)進(jìn)行對(duì)比,要搜尋整個(gè)filesystem,于是引出了日志式文件系統(tǒng))
      • 日志式文件系統(tǒng)(journaling filesystem)

        • 簡(jiǎn)化了的一直性檢查的步驟
          1. 預(yù)備:當(dāng)系統(tǒng)要寫入一個(gè)文件,在日志記錄區(qū)塊中記錄某個(gè)文件準(zhǔn)備要寫入的信息
          2. 實(shí)際寫入:寫入文件的權(quán)限and數(shù)據(jù),更metadata的數(shù)據(jù)
          3. 結(jié)束:完成數(shù)據(jù)與metadata的更新
        • 這樣做的好處在于有問(wèn)題檢查日志記錄區(qū)塊就好了,不用針對(duì)整塊filesystem檢查
      • Linux文件系統(tǒng)的運(yùn)作

        • 關(guān)于異步處理(asynchronously)的方式
          系統(tǒng)加載一個(gè)文件到內(nèi)存后,如果文件沒(méi)有修改過(guò),那么內(nèi)存區(qū)段的文件數(shù)據(jù)就會(huì)設(shè)定為干凈(clean)的,但是如果內(nèi)存中的文件被修改過(guò),此時(shí)內(nèi)存中的數(shù)據(jù)就會(huì)被設(shè)定為臟的(dirty),此時(shí)所有的動(dòng)作都在內(nèi)存中進(jìn)行,不寫入到磁盤,然后系統(tǒng)不定時(shí)的將內(nèi)存中設(shè)定為dirty的數(shù)據(jù)寫回磁盤,以保持磁盤和內(nèi)存數(shù)據(jù)一致性
        • 關(guān)于Linux文件系統(tǒng)與內(nèi)存的關(guān)系
          1. 系統(tǒng)將常用的文件數(shù)據(jù)放置到主存儲(chǔ)器的緩沖區(qū),用來(lái)加速文件系統(tǒng)的讀寫
          2. 所以Linux的物理內(nèi)存最后都會(huì)被用光,這是正常滴,為了加速系統(tǒng)效能
          3. 可以使用sync來(lái)強(qiáng)迫內(nèi)存中dirty的文件回寫到磁盤
          4. 關(guān)機(jī)指令會(huì)主動(dòng)呼叫sync
          5. 非正常系統(tǒng)中斷,由于數(shù)據(jù)未回寫到磁盤,重新啟動(dòng)可能要花費(fèi)時(shí)間進(jìn)行磁盤檢驗(yàn),還有可能導(dǎo)致文件系統(tǒng)的損毀(不是磁盤壞了...)
      • 掛載點(diǎn)的意義(mount point)

        • 掛載點(diǎn)一定時(shí)目錄,該目錄未進(jìn)入該文件系統(tǒng)的入口
        • 這里要重點(diǎn)重重點(diǎn)記錄一下了!!!這里我本來(lái)一直沒(méi)搞清楚為什么/,/home,/boot這三個(gè)目錄的inode的號(hào)碼都是一樣的,而且為什么說(shuō)/,/home,/boot是三個(gè)不同的文件系統(tǒng)
          因?yàn)樗麄兌紥燧d在根目錄啊,目錄是目錄,掛載只是掛在樹(shù)上的果子而已,誰(shuí)或三個(gè)果子不能長(zhǎng)在一個(gè)枝椏上,剩下的事交給目錄inode指向的block,而/,/home,/boot的文件屬性并不相同,掛載點(diǎn)也不相同,所以自然是三個(gè)不同的文件系統(tǒng)
        • 為什么/,/.,/..是一樣的東西呢,可以看一看,文件屬性相同,還指向一個(gè)inode,還都是一個(gè)掛載點(diǎn),當(dāng)然是一個(gè)東西[官方一點(diǎn)說(shuō),同一個(gè)filesystem的某個(gè)inode只會(huì)對(duì)應(yīng)到一個(gè)文件內(nèi)容,畢竟一個(gè)文件占用一個(gè)inode嘛]
    • 其他 Linux 支持的文件系統(tǒng)與 VFS

      • 常見(jiàn)的支持的日志式文件系統(tǒng)

        • 傳統(tǒng)文件系統(tǒng): ext2 / minix / MS-DOS / FAT (用 vfat 模塊) / iso9660 (光盤)等等
        • 日志式文件系統(tǒng): ext3 /ext4 / ReiserFS / Windows' NTFS / IBM's JFS / SGI's XFS / ZFS
        • 網(wǎng)絡(luò)文件系統(tǒng): NFS / SMBFS
      • 查看Linux支持的文件系統(tǒng)

        ls -l /lib/modules/$(uname -r)/kernel/fs
      • 查看目前已加載到內(nèi)存中支持的文件系統(tǒng)

        cat /proc/filesystems
      • Linux VFS(virtual filesystem switch)

        • 整個(gè)linux系統(tǒng)都是通過(guò)名為vfs的核心功能來(lái)讀取filesystem的,所以我們才無(wú)需知道每個(gè)partition是什么,vfs主動(dòng)幫我們做好讀取的工作
      • vfs簡(jiǎn)略圖

    • XFS 文件系統(tǒng)簡(jiǎn)介

      • EXT 家族: 支持度最廣,格式化超慢

        • ext家族采用的是預(yù)先規(guī)劃處所有的inode/block/metadata等數(shù)據(jù),但是目前磁盤容量愈來(lái)愈大,傳統(tǒng)MBR被GPT取代,格式化的時(shí)候預(yù)先分配inode和block要耗費(fèi)大量時(shí)間
      • XFS 文件系統(tǒng)的配置

        • xfs主要規(guī)劃為三個(gè)部分,一個(gè)資料區(qū) (data section)、一個(gè)文件系統(tǒng)活動(dòng)登錄區(qū) (log section)以及一個(gè)實(shí)時(shí)運(yùn)作區(qū) (realtime section)
          1. 資料區(qū)(data section)
          • 與ext家族一樣包括 inode/data block/superblock 等數(shù)據(jù)
          • 與ext家族類似,data section分為多個(gè)儲(chǔ)存區(qū)群組(allocation groups),每個(gè)儲(chǔ)存區(qū)群組包含(1)整個(gè)文件系
            統(tǒng)的 superblock、 (2)剩余空間的管理機(jī)制、 (3)inode 的分配與追蹤。
          • inode與block在系統(tǒng)需用時(shí)動(dòng)態(tài)生成
          • 與ext家族不同之處,xfs的block與inode喲多種不同的容量可設(shè)定,block[512bytes ~ 64K,最高4k,不然linux核心不給掛載沒(méi)法用],inode[256bytes ~2M,256bytes的默認(rèn)值即可]
          1. 文件系統(tǒng)活動(dòng)登錄區(qū)(log section)
          • 主要用來(lái)記錄文件系統(tǒng)的變化,直至文件的變化完整的寫入到數(shù)據(jù)區(qū),該文件的該筆記錄才會(huì)終結(jié),文件系統(tǒng)意外中斷后系統(tǒng)會(huì)依此登錄區(qū)進(jìn)行檢驗(yàn),來(lái)快速的修復(fù)文件系統(tǒng)
          • 可指定外部的磁盤作為xfs的日志區(qū)塊(因?yàn)樽x寫頻繁,可指定ssd)
          1. 實(shí)時(shí)運(yùn)作區(qū)(realtime section)
          • 文件建立時(shí),xfs在這一區(qū)段找一個(gè)或書個(gè)extent區(qū)塊用來(lái)將文件放置在這個(gè)區(qū)塊內(nèi),等到分配完畢,再寫入data section的inode與block中
          • 這個(gè)extent區(qū)塊大小在格式化時(shí)要先指定[4K~1G],默認(rèn)即可,不要亂動(dòng)[會(huì)影響到實(shí)際磁盤的效能]
      • XFS文件系統(tǒng)的描述數(shù)據(jù)觀察

        • xfs_info 掛載點(diǎn)/裝置文件名
        • 第一行,isize=inode的容量,agcount=儲(chǔ)存區(qū)群組的個(gè)數(shù),agsize=每個(gè)儲(chǔ)存區(qū)群組具有65536個(gè)block,文件系統(tǒng)容量=4655364k*(第四行bsize=4096=4k)
        • 第二行,sectsz=邏輯扇區(qū)(sector)的容量
        • 第四行,bsize=block的容量
        • 第五行,sunit與swidth與磁盤陣列的stripe相關(guān)性較高
        • 第七行,internal指的是這個(gè)登錄區(qū)的位置在文件系統(tǒng)內(nèi),而非外部設(shè)備
        • 第九行,realtime=none表示沒(méi)有使用,extent容量=4k

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

    • 磁盤與目錄的容量

      • df

        • 語(yǔ)法
          1. df [-ahikHTm] [目錄或文件名]
          
        • 選項(xiàng)與參數(shù)
          1. -a:列出所有文件系統(tǒng),包括特有的/proc等文件系統(tǒng)
          2. -k:以kbytes的容量顯示
          3. -m:以mbytes的容量顯示
          4. -h:以較易閱讀的格式顯示(G,M,K)
          5. -H:以m=1000k取代m=1024k的方式
          6. -T:連同partition的filesystem名稱(eg:xfs)也列出來(lái)
          7. -i:不用磁盤容量,而以inode的數(shù)量來(lái)顯示   
          
        • 字段含義
          1. filesystem:代表文件系統(tǒng)是在哪個(gè)partition
          2. 1k-blocks:底下的數(shù)字單位是1kb
          3. used:使用掉的硬盤空間
          4. available:剩下的磁盤空間大小
          5. use%:磁盤使用率
          6. mounted on:掛載點(diǎn)
        • 有個(gè)/dev/shm的目錄是內(nèi)存虛擬出來(lái)的磁盤空間哈,通常是總物理內(nèi)存的一半
      • du

        • 語(yǔ)法
          1. du [-ahskm] 文件或目錄名稱
          
        • 選項(xiàng)與參數(shù)
          1. -a列出所有的目錄與文件容量
          2. -h:同df
          3. -s:列出總量,而不列出每個(gè)目錄的占用容量
          4. -S:不包括子目錄的統(tǒng)計(jì),與-s有差別
          5. -k,-m:同上
          
        • 直接輸入du不加選項(xiàng),du會(huì)分析當(dāng)前目錄的文件與目錄所占用的磁盤空間,實(shí)際顯示時(shí)僅會(huì)顯示目錄容量(不含文件)
    • 實(shí)體鏈接與符號(hào)鏈接

      • Hard link(實(shí)體鏈接、硬鏈接or實(shí)際鏈接)

        • 有沒(méi)有可能多個(gè)檔名對(duì)應(yīng)到同一個(gè)inode?hard link就是在某個(gè)目錄下新增一筆檔名鏈接到某個(gè)inode號(hào)碼的關(guān)聯(lián)記錄

        • 建立實(shí)體鏈接的指令
          ln 目標(biāo)文件名 將建立實(shí)體鏈接的文件名

        • 示意圖


        • 建立實(shí)體鏈接的好處

          • 安全:將任何一個(gè)文件刪除后,inode與block都依然存在,可通過(guò)另一個(gè)檔名來(lái)讀取到正確的文件數(shù)據(jù)
        • 有沒(méi)有可能hard link改變block呢,有,新增數(shù)據(jù)正好將目錄的block填滿時(shí)則需要再加一個(gè)block來(lái)記錄時(shí)

        • hard link的限制

          • 不能跨filesystem
          • 不能link目錄
      • Symbolic link(符號(hào)鏈接)

        • symbolic link就是建立一個(gè)獨(dú)立的文件,當(dāng)數(shù)據(jù)讀取時(shí)這個(gè)文件會(huì)指向他link的文件的檔名,當(dāng)源檔被刪除后,符號(hào)鏈接的文件將找不到原始的檔名
        • 建立符號(hào)鏈接的指令
          ln -s 目標(biāo)文件名 將建立符號(hào)鏈接的文件名
        • 連結(jié)檔的重要內(nèi)容就是他會(huì)寫上目標(biāo)文件的文件名(ll可以看到連結(jié)檔的的大小其實(shí)就是目標(biāo)文件名的路徑)
        • 示意圖


      • ln

        • 語(yǔ)法
          1.  ln [-sf] 來(lái)源文件 目標(biāo)文件
          
        • 選項(xiàng)與參數(shù)
          -s:如果不加任何參數(shù)就進(jìn)行連結(jié),那就是 hard link,至于 -s 就是 symbolic link
          -f:如果目標(biāo)文件存在時(shí),就主動(dòng)的將目標(biāo)文件直接移除后再建立
          
        • eg
          cd /tmp;cp -a /etc/passwd
          du -sb;df -i .(計(jì)算/tmp下有多少個(gè)bytes的容量,使用了多少inode)
          ln passwd passwd_hd(實(shí)體鏈接)
          du -sb;df -i .(觀察)
          ln -s passwd passwd_so(符號(hào)鏈接)
          du -sb;df -i .(觀察)
          ll -i passwd*(觀察)
          
        • 關(guān)于目錄的link數(shù)量
          • 新建一個(gè)目錄,會(huì)有三樣?xùn)|西,目錄本身,“.”,"..","."指向目錄本身,".."指向上層目錄,so...新的目錄link數(shù)為2,上層目錄的link數(shù)增加1
  • 磁盤的分區(qū)、格式化、檢驗(yàn)與掛載

    • 新增一顆磁盤時(shí)的動(dòng)作
      1. 對(duì)磁盤進(jìn)行分區(qū),以建立可用的 partition
      2. 對(duì)該 partition 進(jìn)行格式化 (format),以建立系統(tǒng)可用的 filesystem
      3. 若仔細(xì)一點(diǎn),則對(duì)剛剛建立好的 filesystem 進(jìn)行檢驗(yàn)
      4. 在 Linux 系統(tǒng)上,需要建立掛載點(diǎn) (亦即是目錄),并將他掛載上來(lái)
    • 觀察磁盤分區(qū)狀態(tài)

      • lsblk 列出系統(tǒng)上的所有磁盤列表

        • 語(yǔ)法
          1.   lsblk [-dfimpt] [device]
          
        • 選項(xiàng)與參數(shù)
          -d : 僅列出磁盤本身,并不會(huì)列出該磁盤的分區(qū)數(shù)據(jù)
          -f :同時(shí)列出該磁盤內(nèi)的文件系統(tǒng)名稱
          -i :使用 ASCII 的方式輸出,不使用復(fù)雜的編碼
          -m :同時(shí)輸出該裝置在 /dev 底下的權(quán)限數(shù)據(jù) (rwx 的數(shù)據(jù))
          -p :列出該裝置的完整文件名
          -t :列出該磁盤裝置的詳細(xì)數(shù)據(jù),包括磁盤隊(duì)列機(jī)制、 預(yù)讀寫的數(shù)據(jù)量大小等
          
        • 一些字段
          NAME:裝置的文件名(省略/dev等前導(dǎo)目錄)
          MAJ:MIN:主要:次要裝置代碼(核心認(rèn)識(shí)的裝置都是透過(guò)這兩個(gè)代碼熟悉的)
          RM:是否為可卸除裝置(usb、光盤...etc)
          SIZE:容量
          RO:是否為只讀裝置
          TYPE:是磁盤(disk),分區(qū)(partition)還是只讀存儲(chǔ)器(rom)等
          MOUNTPOINT:掛載點(diǎn)
          
        • eg
          1. 列出/dev/sda裝置內(nèi)所有數(shù)據(jù)的完整文件名
            lsblk -ip /dev/sda
          2. 列出裝置的UUID參數(shù)
            UUID:全局單一標(biāo)識(shí)符,Linux將系統(tǒng)內(nèi)所有的裝置都給予一個(gè)獨(dú)一無(wú)二的標(biāo)識(shí)符,可用來(lái)掛載or使用
            blkid
          3. parted列出磁盤的分區(qū)表類型與分區(qū)信息
            parted device_name print
            幾個(gè)字段
            Model:磁盤的模塊名(廠商
            Disk /dev/sda:磁盤的總?cè)萘?br> Partition Table:分區(qū)表格式(MBR/GPT)
    • 磁盤分區(qū):gdisk/fdisk

      • __MBR分區(qū)使用fdisk分區(qū),GPT分區(qū)使用gdisk分區(qū)
      • gdisk(不需要背)

        • gdisk 裝置名稱
          eg:

          gdisk /dev/sda
          幾個(gè)常用的指令
          d delete a partition # 刪除一個(gè)分區(qū)
          n add a new partition # 增加一個(gè)分區(qū)
          p print the partition table # 印出分區(qū)表 (常用)
          q quit without saving changes # 不儲(chǔ)存分區(qū)就直接離開(kāi) gdisk
          w write table to disk and exit # 儲(chǔ)存分區(qū)操作后離開(kāi) gdisk
          
        • 使用gdisk不要背,?之后就全都可以看到(可以隨便玩,別按w,按q就行了)

        • p列出目前磁盤分區(qū)表信息后的幾個(gè)字段

          1. Number:分區(qū)表編號(hào),1指的是/dev/sda1
          2. Start(sector):每一個(gè)分區(qū)槽開(kāi)始扇區(qū)號(hào)碼位置
          3. End(sector):每一個(gè)分區(qū)的結(jié)束扇區(qū)號(hào)碼位置,與 start 之間可以算出分區(qū)槽的總?cè)萘?/li>
          4. Size:分區(qū)槽容量
          5. Code:分區(qū)槽內(nèi)可能的文件系統(tǒng)類型,linux為8300,swap為8200(只是一個(gè)提示,不見(jiàn)得真的代表分區(qū)槽內(nèi)的文件系統(tǒng))
          6. Name:文件系統(tǒng)的名稱
        • 幾點(diǎn)重要的結(jié)論

          1. 可以看到最大扇區(qū)數(shù)及目前使用到的扇區(qū)數(shù),可以進(jìn)行額外的分區(qū)
          2. 新分區(qū)通常選用上一個(gè)分區(qū)的結(jié)束扇區(qū)號(hào)碼+1作為起始扇區(qū)號(hào)碼
          3. gdisk只有root可以執(zhí)行,使用的裝置文件名eg:/dev/sda,而不要使用/dev/sda1,因?yàn)槲覀兪菍?duì)整個(gè)磁盤進(jìn)行分區(qū)而不是某個(gè)分區(qū)進(jìn)行分區(qū)
        • 用gdisk新增分區(qū)槽(下面是假設(shè)需求)

          1GB 的 xfs 文件系統(tǒng) (Linux)
          ? 1GB 的 vfat 文件系統(tǒng) (Windows)
          ? 0.5GB 的 swap (Linux swap)(這個(gè)分區(qū)等一下會(huì)被刪除喔! )

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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