Linux磁盤和文件系統

一.硬盤的組成

    硬盤主要由圓形的盤片、機械臂和機械臂上的磁頭、主軸馬達組成。

    盤片上數據的存儲:

        扇區為最小的物理存儲單位,每個扇區為512bytes;

        扇區組成的圓稱為柱面,柱面是分區的最小單位;

        第一個扇區存放硬盤的主引導記錄(MBR)及分區表(partition table),其中MBR占446bytes,分區表占64bytes。

    由于分區占只有64字節,所以只能記錄4條分區記錄,這4條分區記錄稱為主分區和擴展分區,擴展分區還可以再次劃分為邏輯分區,可以被格式化并記錄數據的只有主分分和邏輯分區。

二. 文件系統

    一個可被掛載的數據稱為文件系統。

    文件系統將文件的權限與屬性保存在inode中,一個文件占用一個inode,實際的數據保存在data block塊中。

    inode會記錄文件所占有用的block的號碼。

    每個block只能放置一個文件的數據,而一個文件可以占用多個block。

    每個文件系統還會有一個超級塊(super block)用于記錄此文件系統的整體信息,包括inode/block的總量、使用量、剩余量、以及文件系統的格式與相關信息。

    可以使用命令dumpe2fs來查看super block的信息

    1.png

    2.png

    inode中并不保存文件的文件名,文件名放置在目錄的block中。

    根目錄的inode號為2。

    3.png

三.文件系統相關操作

    1.鏈接文件

        在Linux下有兩種鏈接文件:硬鏈接和符號鏈接(軟鏈接)。

        硬鏈接:不同文件指向同一個inode,所有硬鏈接到同一個inode的文件,它們的內容是共享的,即修改其中一個文件的內容,其它硬鏈接的文件內容也會更改。硬鏈接有以下特性:

            1)只能對文件創建,不能應用于目錄;

               如果對目錄創建硬鏈接,那么對于目錄下的所有文件都要創建對應的硬鏈接,在文件較多的情況下則會使得情況變得相當復雜,所以不充許對目錄進行硬鏈接。

            2)不能跨文件系統;

               inode號碼是在文件系統中的super block中維護的,不同的文件系統不保證提供相同的inode號碼,所以不同文件系統之間無法創硬鏈接。

            3)創建硬鏈接會增加被硬鏈接的次數;

               在文件屬性中會看到鏈接次數被增加。 

                4.png   

            4)增加inode引用計數;

                同一個inode被鏈接了新的文件,引用計數會增加。

        符號鏈接:類似于window中的快捷方式。符號鏈接文件會占用新的inode,所以被符號鏈接的文件移動或刪除的話,符號鏈接文件也即失效。理解了硬鏈接的特性后,就不難理解符號鏈接的特性了:

            1、可以應用于目錄;

            2、可以跨文件系統;

            3、不會增加被鏈接文件的鏈接次數;

            4、其大小為指定的路徑所包含的字符個數;

            5、不會增加inode引用計數。

        創建鏈接文件

        格式:ln [-sf] 源文件 目標文件

            -s:創建符號鏈接,如果不加任何參數則是創建硬鏈接;

            -f:如果目標文件存在,就將目標文件刪除后再創建;

            創建硬鏈接

                創建前我們先來看下inode的占用情況,df -i可以查看文件系統的inode使用情況;

            12.png

                創建硬鏈接后,兩個文件的硬鏈接數都是2;

            6.png 

                輸入內容到文件hard_link中,可以看到兩個文件同時增加了大??;

            7.png

                將link文件改名后,hard_link文件依然可以訪問;

            12.png

                再來查看一下inode占用情況,并沒有發生變化。

            12.png

            創建軟鏈接

                創建軟鏈接后文件link的鏈接數并沒有增加

            8.png

                訪問symbol_link文件可以看到link文件的內容。

            11.png        

                使用ls命令的-i參數可以看到文件所占用的inode號碼;

                可以看到硬鏈接與原文件的inode號碼相同,而符號鏈接則使用了新的inode號碼。

                下面的輸出中符號鏈接的大小為4,其實它表示符號鏈接所指向的文件名的字符數,link為4個字符,所以它的大小為4。

            9.png

                看下inode的使用情況,在上面創建硬鏈接時inode使用數量為125630,創建符號鏈接后變成了125631,可見符號鏈接會占用inode。

            13.png

                

                將文件link改名后,符號鏈接已經找不到原文件而出錯了。

            9.png

            10.png

    另外,一個inode可以被引用多次,其有計數器;在引用次數降為0之前,不會被標記為未占用inode.

    文件被刪除,inode被標記為空閑,此inode指向的磁盤地塊被標記為空閑。

    如果inode被引用多次,且此次刪除未使得其引用計數降低為0的話,這意味著文件未被刪除,僅刪除了一個訪問路徑。

    文件復制:創建一個新文件,是原文件中數據在新文件指向磁盤塊中寫一次的過程。

    文件移動:

    在同一分區移動: 移動文件僅是改變了文件訪問路徑。

    跨分區移動:在新分區創建文件,把數據復制過去,刪除原分區數據。

    2.du和df命令

        du命令:用于顯示文件和目錄的容量。

            -a:列出所有的文件與目錄容量;

            -s:列出整個目錄的容量;

            -h:以人類易讀的方式顯示;

            -k:以KB顯示容量;

            -m:以MB顯示容量。

        下面舉例來說明: 

            顯示/etc目錄的容量;

        14.png

            以易讀方式顯示;

        15.png

            顯示/etc目錄中每一個文件的大??;

        16.png

        df命令:列出文件系統的使用情況。

            -a:列出所有的文件系統;

            -k:以KB顯示容量;

            -m:以MB顯示容量;

            -h:以人類易讀方式顯示容量;

            -H:以M=1000K替代M=1024的進位方式;

            -T:顯示文件系統的分區格式;

            -i:顯示inode數量。

        下面舉例說明:

            列出所有文件系統;

         17.png

            以易讀方式顯示容量;

        18.png

            顯示文件系統的格式;

        19.png

            以易讀方式顯示inode數量;

         1.png

四. 設備文件

    在Linux中設備文件都是用文件來表示的,如下圖所示:

        1.png

            b:以塊為單位,隨機訪問的設備,比如硬盤;

            c:以字符為單位,線性設備,比如鍵盤。

            上圖中的以逗號分隔的兩個數字,分別表示主設備號和次設備號。

                主設備號:(major number)

                    標識設備類型;

                次設備號:(minor number)

                    標識同一種類型中不同設備。

    創建設備文件

        mknod命令

        格式:mknod -m mode 設備文件名 [bc] [Major] [Minor]

           -m mode:設置設備的權限為mode;

            b:設置塊設備;

            c:設置字符設備;

            Major:主設備代碼;

            Minor:次設備代碼。

         例如:創建一個設備testdev,代碼為10,5的字符設備,并設置權限為644;

            1.png

            1.png

五.磁盤的分區操作

    1.硬盤組成回顧

        磁盤的前512Bytes存放MBR(主引導記錄),其中:

            446Bytes:bootloader; 

            64Bytes:分區表,每16Bytes標記一個分區;

            2Bytes:5A,MBR有效性標記。

        分區是按照柱面來劃分的,一個柱面只能屬于一個分區。

    2.查看系統上的磁盤及分區信息

        1)/proc/partitions文件

            查看目前系統上的分區信息

            1.png

        2)/proc/filesystem文件

            查看系統支持的文件系統

            1.png         

        3)fdisk命令

            1.png

    3.創建分區

        使用fdisk命令來創建分區

        格式:fdisk [-l] 設備名稱

            -l:顯示所有磁盤及分區的內容。

        例如:將磁盤/dev/sdb劃分兩個主分區分別為2G和512M。

            2.png

            新建一個2G的主分區

            3.png

            以上是建立分區的過程,那么這些操作命令是什么意思呢,我們可以通過幫助信息來查詢,如:

            可以輸入m來獲取幫助信息;

            5.png

            比較常用的選項:

                p:顯示磁盤分區表;

                n:新建分區;

                d:刪除分區;

                t:修改分區的系統ID;

                w:保存并退出;

                q:不保存退出。

            下面接著來創建另外一個分區:

            4.png

            分區建好之后,系統并不能馬上識別出來,這時使用兩種方法使用分區生效:

            1)重啟系統

            2)使用partx -a命令

            6.png

        練習:刪除分區/dev/sdb2

            7.png  

    4.創建文件系統       

        1)Linux的文件系統的類型:

            ext(2,3,4),xfs,ffs,ufs,reiserfs,jfs,vfat(fat 32),ntfs

            交換文件系統:swap

            網絡文件系統:nfs,smbfs(cifs)

            分布式文件系統:ceph

            光盤文件系統:iso9660

        2)創建文件系統

            mkfs -t 文件系統類型 設備文件名

                -t:系統可以支持的文件系統類型

            例如:分區/dev/sdb1格式化為ext4文件系統

                8.png

                上面的命令使用的是默認的選項,格式化完成后可以看到文件系統的卷標、block、inode等信息;我們也可以通過命令參數來自定義這些選項。

                -b:設置block大小;

                -i:設置每個inode大?。?br />

                -L:設置卷標;

                9.png

        使用mke2fs命令可以格式化文件系統 

            mke2fs [-t 文件系統類型][-b block大小] [-i inode大小] [-L 卷標] 設備文件名

                -i #:每#個字節給創建一個inode,此字節數不應該小于塊大小

                -N #:直接指定可用的inode數;

                -m #:指定預留空間占整個分區空間的百分比,默認為5;

                -O:指定分區特性

               10.png  

    5.掛載文件系統

        掛載文件系統就是將額外的分區與根文件系統上的某目錄建立關聯關系;將文件系統掛載到某一目錄時,目錄中的原有文件將會被隱藏。

        掛載點:文件系統的訪問入口,也就是文件系統被掛載到的目錄。

        使用mount命令來掛載文件系統

            格式:mount [-t 文件系統] [-L Lable名] [-o 掛載選項] 設備文件名 掛載點

                    不帶任何參數:顯示目前已經掛載的文件系統的信息;

                    -t:指定掛載文件系統的文件類型;

                    -L:使用Lable名進行掛載;

                    -o:可以接一些掛載選項,如:

                        async:異步I/O,數據寫操作先于內存完成,而后再根據某種策略同步至持久設備中                           sync:同步I/O

                        atime/noatime:文件和目錄被訪問時是否更新最近一次的訪問時間戳;

                        auto/noauto:設備是否支持mount的-a選項自動掛載;

                        dirtime/nodirtime:目錄被訪問時是否更新最近一次訪問的時間;

                        dev/nodev:是否支持在此設備上使用設備文件;

                        exec/noexec:是否允許執行此設備上的二進制文件;

                        suid/nosuid:是否支持在此設備的文件上使用suid;

                        remount:重新掛載,通常用于不卸載的情況下重新指定掛載選項;

                        ro:只讀;

                        rw:讀寫;

                        user/nouser:是否允許普通用戶掛載此文件設備;

                        acl:在此設備上支持使用facl,默認不支持;

            例1:將上面創建的/dev/sdb1分區掛載到/mnt/sdb1目錄;

                1.png

                mount命令可以不帶任何參數,將文件系統掛載到目錄上。

            例2:文件系統掛載默認是不掛載acl選項的,將文件系統重新掛載并添加acl功能選項;

                    通過tune2fs命令來查看掛載選項為(none); 

                3.png

                    使用-o選項將/dev/sdb1重新掛載,并使用mount命令來查看掛載選項;

                2.png

                    但是這種方式不能使設置永久生效,默認掛載選項依然是空;

                3.png

                    可以通過tune2fs命令來添加默認掛載選項

                5.png

    

                6.png

    6.卸載文件系統

        使用umount命令來卸載文件系統

            umount 設備文件名或掛載點

            例3:卸載/dev/sdb1文件系統

                7.png

            有時候文件系統會因為正在使用而無法被卸載,此時可以使用fuser命令來查看正在使用文件系統的用戶,還可以直接將占用用戶踢掉,然后卸載文件系統。

                使用umount卸載/dev/sdb1無法完成;                

            8.png    

                查看哪些用戶正在使用/dev/sdb1;  

             9.png

                將用戶user5使用的進程殺掉,卸載成功;

             10.png              

    7.交換分區(swap)

        交換分區是指用于當物理內存不足時充當內存的分區空間。

        1)創建交換分區

        使用fdisk命令來創建交換分區,下面在/dev/sdb磁盤上創建交換分區;           

        按照前面的方法創建一個512M的分區,但需要改變分區的類型,使用t命令來修改分區類型,使用L來查看各種分區類型所對應的代碼,swap對應82;

        1.png

        2.png

         3.png

        使用p查看分區結果,并且保存退出。

        使用mkswap命令來格式化swap分區;

     4.png

        使用free命令來查看一下當前的swap空間;

     5.png

        -m:表示使用MB來表示空間大??;

        加載新的swap空間到系統中;

     6.png

        使用swapon命令來加載swap空間;使用swapon -s命令也可以查看swapon的使用情況;

     7.png

        2)關閉交換分區

        使用swapoff命令來關閉交換分區

      8.png

六.設置開機自動掛載文件系統

    使用mount手動掛載的文件系統在系統重啟后就會消失,需要反復進行掛載,我們可以將需要掛載的文件系統寫入/etc/fstab文件,實現開機自動掛載文件系統。

    先來看一下/etc/fstab文件的格式;

      9.png

         文件中對應的項目含義如下:

         掛載設備     掛載點       文件格式   掛載選項    轉儲頻率       自檢次序

            掛載設備:可以是設備文件、卷標、UUID;

            掛載點:文件系統掛載到的目錄;

            掛載選項:掛載選項可以有多個,彼此間使用逗號分隔;

            轉儲頻率:

               0:從不轉儲

               1:每天轉儲

               2:每隔一天

            自檢次序:

               0:不自檢,額外創建的文件系統都無須自動自檢

               1:首先自檢,通常只有根文件系統需要首先自檢

               2:次級自檢,不同的設備可以使用同一個自檢次序

            例如:實現/dev/sdb1分區開機自動掛載到/mnt/sdb1目錄中,并且要求支持acl;

            10.png

            使用命令mount -a來測試能否掛載成功;

            1.png

            先卸載/dev/sdb1,再進行掛載測試。

七.磁盤修復及參數修改

    1.磁盤檢驗:fsck

      因進程意外中止或系統崩潰等情況導入寫入操作非正常中止時,可能會導致文件損壞;此時,應該修復文件系統;

      格式:fsck -t 文件系統 -a -r 設備名稱

            -t:指定文件系統類型,可省略,系統可以自動判斷其分類型;        

            -a:自動修復錯誤;

            -r:交互式修改錯誤;

        e2fsck:專用于修復ext系列文件系統

            -y:對問題自動回答為yes; 

            -f:強制進行檢測。

    2.顯示塊設備屬性

        blkid 文件系統

        1.png

    3.查看超級塊信息

        tune2fs -l 設備文件 

        dumpe2fs -h 設備文件

    4.修改卷標

        e2label 設備文件 卷標

        tune2fs -L 卷標 設備文件 

    5.tune2fs命令常用參數

        -j:ext2升級為ext3;

         -L LABEL:修改卷標;

         -m #:修改預留空間百分比,默認為5;

         -O [^]FEATURE:啟用指定特性,特性前加”^”表示關閉此種特性;

         -o:設置默認掛載選項。

原創文章,作者:petmaster,如若轉載,請注明出處:http://www.www58058.com/1985

(0)
petmasterpetmaster
上一篇 2015-04-02
下一篇 2015-04-02

相關推薦

  • Mariadb數據庫復制系列(三):半同步復制

       實驗三:半同步復制的實現 默認情況下,主從復制的結構中,主從節點之間復制操作是異步的,這樣就有可能造成主從節點之間數據不一致的情況發生,所謂版同步復制就是指在一主多從的場景中,我們設定主節點與其中一個或多個從節點(一般是一個)的數據復制是同步進行的,從而保證了該從節點和主節點之間的數據的一致性。故當主節點發生故障時,就可以基于其他方式將該從節點提升為主…

    Linux干貨 2016-11-24
  • RAID+LVM詳解

                                        一.RAID篇 一.什么是RAID   磁盤陣列全名是『Redundant Arrays…

    Linux干貨 2016-09-07
  • 第五周博客作業

    1、顯示當前系統上root、fedora或user1用戶的默認shell; [root@localhost ~]# grep -E "^(root|fedora|user1)\>" /etc/passwd | cut -d: -f1,7 roo…

    Linux干貨 2017-01-07
  • LAMP快速部署及LAMP組合深入講解-1

      lamp php php: 腳本編程語言、嵌入到html中的嵌入式web程序開發語言;基于zend編譯成opcode(二進制格式的字節碼,重復運行,可省略編譯環境) 一、PHP簡介 PHP是通用服務器端腳本編程語言,其主要用于web開發以實現動態web頁面,它也是最早實現將腳本嵌入HTML源碼文檔中的服務器端腳本語言之一。同時,php還提供了一…

    Linux干貨 2017-06-04
  • linux文件權限

    一、前言 在linux中,每個目錄或者文件都有相對應的權限,linux通過文件屬主(user),文件屬組(group),其它人(order)對一個文件或者目錄控制讀寫執行權限,當然在這些基本權限之外還有特殊權限,facl(file access control list)等。 二、文件基本權限    2.1:屬主、屬組、order概念 &…

    Linux干貨 2015-08-17

評論列表(2條)

  • stanley
    stanley 2015-04-02 22:14

    你又找到新辦法來使自己的博客更優美的展示了,贊! xshell底色調整后黑色會顯得更專業而且有益保護眼睛

    • petmaster
      petmaster 2015-04-03 00:10

      @stanley謝謝!

欧美性久久久久