1. 程式人生 > >Linux系統磁碟與分割槽管理(7)

Linux系統磁碟與分割槽管理(7)

Linux最傳統的磁碟檔案系統(filesystem)使用的是EXT4格式,所以要了解檔案系統就得要由認識EXT4開始,而檔案系統是建立在硬碟上面的,因此我們得了解硬碟的物理組成才行,下面我們回來詳細談一談磁碟,inode,block還有superblock等檔案系統,的理論知識.

關於磁碟與分割槽

目前在市場中磁碟的分類也是五花八門,一般在主機中使用的磁碟無外乎,以下幾種,包括常用的構造,我們在這裡說明.

介面分類:IDE、SATA、SCSI、SAS、光纖通道介面等
構造分類:機械硬碟(HDD)、固態硬碟(SSD)、混合硬碟(HHD)
製造廠商:希捷、西部資料、東芝、三星、英特爾、閃迪
尺寸大小:3.5英寸、2.5 英寸、1.8英寸、1.3/1.0/0.85英寸

磁碟的常用引數,有以下幾種形式:

容量:MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB
轉速:桌上型電腦(7200rpm)、筆記本(5400rpm)、伺服器(10000rpm,15000rpm)
傳輸速度: STAT3(500M/s)、SCSI(320M/s)、SAS(500M/s)、PCI-E(1200M/s)
快取:硬碟控制器的記憶體晶片,內部儲存和介面的快取

接下來我們在說明一下磁碟的物理組成,整個磁碟的組成主要有:

● 圓形的碟片(主要記錄資料的部分)
● 機械手臂與手臂上的磁頭(用來讀寫碟片上的資料)
● 主軸馬達,可以轉動碟片,讓機械臂在碟片上都寫

從上面我們知道資料儲存與讀取的重點在於磁碟的碟片,而碟片上的物理組成則為,以下構造:

● 扇區(Sector):為最小的物理儲存單位,每個扇區為512bytes
● 柱面(Cylinder):將扇區組成一個圓就是柱面,柱面是分割槽(partition)的最小單位
● 第一個扇區最重要,裡面記錄著硬碟主引導記錄(MBR)以及分割槽表(PT),其中MBR佔446bytes,而PT則佔用64bytes

所謂的磁碟分割槽指的是告訴作業系統 『我這塊磁碟在此分割槽可以訪問的區域是,由A柱面到B柱面之間的塊』,如此一來作業系統就能夠知道,他可以在所指定的區塊內進行檔案資料的讀/寫/查詢等操作,也就是說,磁碟分割槽意即指定分割槽的起始於結束柱面就可以.

因為分割槽表僅有64bytes而已,因此最多隻能記錄四條分割槽的記錄,這四條分割槽記錄我們稱為主分割槽(primary)或擴充套件分割槽(extended),其中擴充套件分割槽還可以再分出邏輯分割槽(logical),而能被格式化的則僅有主分割槽和邏輯分割槽.

最後我們再把分割槽的定義拿出來說明一下:

1.主分割槽與擴充套件分割槽最對可以有4個(硬碟限制)
2.擴充套件分割槽最多隻有一個(作業系統的限制)
3.邏輯分割槽是由擴充套件分割槽持續分出來的分割槽
4.只有邏輯分割槽能被格式化,擴充套件分割槽無法格式化
5.邏輯分割槽在Linux系統中,IDE硬碟最多59個,SATA硬碟最多11個

關於檔案系統的特性

我們都知道磁碟分割槽完畢後還需要進行格式化(format),之後作業系統才能夠使用這個分割槽,為什麼需要進行『格式化』呢? 這是因為每種作業系統所配置的檔案屬性/許可權並不相同,為了存放這些檔案所需的資料,因此就需要將分割槽進行格式化,以成為作業系統能夠利用的『檔案系統格式(filesystem)』.

那麼檔案系統是如何執行的呢? 這與作業系統的檔案資料有關,較新的作業系統的檔案資料除了檔案實際內容外,通常含有非常多的屬性,例如 Linux 作業系統的檔案許可權(rwx)與檔案屬性(擁有者、群組、時間引數等),檔案系統通常會將這兩部份的資料分別存放在不同的區塊,許可權與屬性放置到 inode 中,至於實際資料則放置到 data block 區塊中,另外,還有一個超級區塊 (superblock) 會記錄整個檔案系統的整體資訊,包括 inode 與 block 的總量、使用量、剩餘量等.

superblock:記錄此檔案系統的整體資訊,包括inode/block的總量、使用量、剩餘量,以及檔案系統的格式與相關資訊等
inode:記錄檔案的屬性,一個檔案佔用一個inode,同時記錄此檔案的資料所在的 block 號碼
block:實際記錄檔案的內容,若檔案太大時,會佔用多個 block

由於每個 inode 與 block 都有編號,而每個檔案都會佔用一個 inode,inode 內則有檔案資料放置的 block 號,因此我們可以知道的是,如果能夠找到檔案的 inode 的話,那麼自然就會知道這個檔案所放置資料的 block 號,當然也就能夠讀出該檔案的實際資料了,這是個比較有效率的作法,因為如此一來我們的磁碟就能夠在短時間內讀取出全部的資料,讀寫的效率非常好.

data block 真正儲存資料的地方

data block 是用來放置檔案內容資料地方,在 Ext4 檔案系統中所支援的 block 大小有 1K, 2K 及 4K 三種而已,在格式化時 block 的大小就固定了,且每個 block 都有編號,以方便 inode 的記錄,不過要注意的是,由於 block 大小的差異,會導致該檔案系統能夠支援的最大磁碟容量與最大單一檔案容量並不相同。,因為 block 大小而產生的 Ext4 檔案系統限制如下:

Block大小            1KB        2KB         4KB
最大單一檔案限制            16GB          256GB       2TB
最大檔案系統總容量      2TB        8TB         16TB

除此之外 Ext4 檔案系統的 block 還有什麼限制呢? 有的!基本限制如下:

● 原則上block的大小與數量在格式化完就不能夠再改變了(除非重新格式化)
● 每個block內最多隻能夠放置一個檔案的資料
● 承上如果檔案大於block的大小則一個檔案會佔用多個 block 數量
● 承上若檔案小於block則該block的剩餘容量就不能夠再被使用了(磁碟空間會浪費)

Superblock 超級塊記錄

Superblock 是記錄整個檔案系統分配的地方,沒有 Superblock 就沒有這個檔案系統了,他記錄的資訊主要有:

● block 與 inode 的總量
● 未使用與已使用的 inode / block 數量
● block 與 inode 的大小 (block 為 1, 2, 4K,inode 為 128 bytes)
● 檔案系統的掛載時間、最近一次寫入資料的時間、最近一次檢驗磁碟 (fsck) 的時間等檔案系統的相關資訊
● 一個 valid bit 數值若此檔案系統已被掛載,則 valid bit 為 0 若未被掛載則 valid bit 為 1

Superblock 是非常重要的,因為我們這個檔案系統的基本資訊都寫在這裡,因此如果 superblock 死掉了,你的檔案系統可能就需要花費很多時間去挽救,一般來說 superblock 的大小為 1024bytes.

關於主引導記錄的解釋

主引導記錄(MBR,Main Boot Record)是位於磁碟最前邊的一段引導(Loader)程式碼,它負責磁碟作業系統(DOS)對磁碟進行讀寫時分割槽合法性的判別、分割槽引導資訊的定位,它由磁碟作業系統(DOS)在對硬碟進行初始化時產生的.

主引導記錄在磁碟最前邊的一段引導程式碼,佔用了磁碟的第一個分割槽,結構為:

● 主載入程式(boot loader)佔用了446byte
● 分割槽表(Partition table)佔用了64byte
● 有效標誌符(magic number)佔用了2byte(55AAH代表有效)

主引導扇區的讀取流程是 ?

● BIOS 加電自檢 ( Power On Self Test -- POST )BIOS執行記憶體地址的跳轉指令,跳轉到固化在ROM中的自檢程式,對系統硬體(包括記憶體)進行檢查
● 讀取主引導記錄(MBR),當BIOS檢查到硬體正常並與 CMOS 中的設定相符後,按照 CMOS 中對啟動裝置的設定順序檢測可用的啟動裝置,BIOS將相應啟動裝置的第一個扇區(也就是MBR扇區)讀入記憶體
● 檢查MBR的結束標誌位是否等於55AAH,若不等於則轉去嘗試其他啟動裝置,如果沒有啟動裝置滿足要求則顯示“NO ROM BASIC”然後宕機
● 當檢測到有啟動裝置滿足要求後,BIOS將控制權交給相應啟動裝置,啟動裝置的MBR將自己複製到0000:0600H處,然後繼續執行
● 根據MBR中的引導程式碼啟動載入程式,進入下一個引導環節

關於MBR分割槽表的介紹

主引導記錄(Master Boot Record,縮寫:MBR)又叫做主引導扇區,是計算機開機後訪問硬碟時所必須要讀取的首個扇區,它在硬碟上的三維地址為(柱面,磁頭,扇區)=(0,0,1).

MBR是由分割槽程式(如Fdisk,Parted)所產生的,它不依賴任何作業系統,而且硬碟載入程式也是可以改變的,從而能夠實現多系統引導.

從主引導記錄的結構可以知道,它僅僅包含一個64個位元組的硬碟分割槽表,由於每個分割槽資訊需要16個位元組,所以對於採用MBR型分割槽結構的硬碟(其磁碟卷標型別為MS-DOS),最多隻能識別4個主要分割槽,所以對於一個採用此種分割槽結構的硬碟來說,想要得到4個以上的主要分割槽是不可能的,這裡就需要引出擴充套件分割槽了,擴充套件分割槽也是主分割槽(Primary partition)的一種,但它與主分割槽的不同在於理論上可以劃分為無數個邏輯分割槽,每一個邏輯分割槽都有一個和MBR結構類似的擴充套件引導記錄(EBR),在MBR分割槽表中最多4個主分割槽或者3個主分割槽+1個擴充套件分割槽,也就是說擴充套件分割槽只能有一個,然後可以再細分為多個邏輯分割槽.

在Linux系統中,硬碟分割槽命名為sda1-sda4或者hda1-hda4(其中a表示硬碟編號可能是a、b、c等等),在MBR硬碟中,分割槽號1-4是主分割槽(或者擴充套件分割槽),邏輯分割槽號只能從5開始.

在MBR分割槽表中,一個分割槽最大的容量為2T,且每個分割槽的起始柱面必須在這個disk的前2T內,你有一個3T的硬碟,根據要求你至少要把它劃分為2個分割槽,且最後一個分割槽的起始扇區要位於硬碟的前2T空間內,如果硬碟太大則必須改用GPT.

關於GPT分割槽表的介紹

全域性唯一標識分割槽表(GUID Partition Table,縮寫:GPT)是一個實體硬碟的分割槽結構,它是EFI(可擴充套件韌體介面標準)的一部分,用來替代BIOS中的主引導記錄分割槽表,但因為MBR分割槽表不支援容量大於2.2TB(2.2 × 1012位元組)的分割槽,所以也有一些BIOS系統為了支援大容量硬碟而用GPT分割槽表取代MBR分割槽表.

在MBR硬碟中,分割槽資訊直接儲存於主引導記錄(MBR)中(主引導記錄中還儲存著系統的載入程式),但在GPT硬碟中,分割槽表的位置資訊儲存在GPT頭中,但出於相容性考慮,硬碟的第一個扇區仍然用作MBR,之後才是GPT頭.

與支援最大卷為2 TB(Terabytes)並且每個磁碟最多有4個主分割槽(或3個主分割槽,1個擴充套件分割槽和無限制的邏輯驅動器)的MBR磁碟分割槽的樣式相比,GPT磁碟分割槽樣式支援最大卷為18 EB(Exabytes)(1EB=1048576TB)並且每磁碟的分割槽數沒有上限,只受到作業系統限制(由於分割槽表本身需要佔用一定空間,最初規劃硬碟分割槽時,留給分割槽表的空間決定了最多可以有多少個分割槽,IA-64版Windows限制最多有128個分割槽,這也是EFI標準規定的分割槽表的最小尺寸),與MBR分割槽的磁碟不同,至關重要的平臺操作資料位於分割槽,而不是位於非分割槽或隱藏扇區.另外,GPT分割槽磁碟有備份分割槽表來提高分割槽資料結構的完整性.

其中轉換為GPT的時候可以建立兩個隱藏分割槽,ESP和MSR.ESP是efi系統分割槽用於儲存引導檔案,MSR是微軟的保留分割槽,用於安裝作業系統.

MBR與GPT,兩種分割槽的小總結

  1. MBR分割槽表:Master Boot Record,即硬碟主引導記錄分割槽表,只支援容量在 2.1TB 以下的硬碟,超過2.1TB的硬碟只能管理2.1TB,最多隻支援4個主分割槽或三個主分割槽和一個擴充套件分割槽,擴充套件分割槽下可以有多個邏輯分割槽。

  2. GPT分割槽表:GPT,全域性唯一標識分割槽表(GUID Partition Table),與MBR最大4個分割槽表項的限制相比,GPT對分割槽數量沒有限制,但Windows最大僅支援128個GPT分割槽,GPT可管理硬碟大小達到了18EB。只有基於UEFI平臺的主機板才支援GPT分割槽引導啟動。

  3. GPT分割槽表下的隱藏分割槽:

①. ESP分割槽:EFI system partition,該分割槽用於採用了EFI BIOS的電腦系統,用來啟動作業系統。分割槽記憶體放引導管理程式、驅動程式、系統維護工具等。如果電腦採用了EFI系統,或當前磁碟用於在EFI平臺上啟動作業系統,則應建議ESP分割槽。

②. MSR分割槽:即微軟保留分割槽,是GPT磁碟上用於保留空間以備用的分割槽,例如在將磁碟轉換為動態磁碟時需要使用這些分割槽空間。

  1. 兩種硬碟分割槽模式分別對應的BIOS啟動方式:

硬碟分割槽格式為MBR格式,啟動模式應該為Legacy;
硬碟分割槽格式為GUID(GPT)格式,啟動模式應該為UEFI。

  1. MBR分割槽表的構成:

⦁主載入程式(boot loader)佔用了446byte
⦁分割槽表(Partition table)佔用了64byte
⦁有效標誌符(magic number)佔用了2byte(55AAH代表有效)

  1. GPT分割槽表的構成:

⦁LBA 0 :GPT分割槽的最開頭,考慮相容性問題,開頭仍然存放MBR分割槽表,只是裡面存放的是指向GPT的指標。防止有一些系統不識別GPT分割槽表。

⦁LBA 1 :儲存了硬碟的總儲存空間,以及GPT分割槽表的資訊,定義最多能建立128個分割槽,每個分資訊佔用的空間是128位元組;128個分割槽中有一個是用來儲存備份分割槽表的,所以可以手動指定的分割槽數為127個分割槽。

⦁LBA 2-33:每個分割槽資訊存放的位置,上邊說了每個分資訊佔用的空間是128位元組。2-33正好是32個扇區。32*512=16384,每個分割槽資訊佔用了128位元組,16384/128=128個分割槽。

磁碟管理命令

◆dumpe2fs 查詢磁碟引數◆

dumpe2fs命令用於列印 ext2/ext3/ext4 檔案系統的超級塊和塊組資訊,其實它可以查詢磁碟的很多引數,下面我們先來看一下它的具體引數吧.

[[email protected] ~]# dumpe2fs --help

命令語法:[ dumpe2fs [選項] 磁碟路徑 ]

        -b              #列印檔案系統中預留的塊資訊
        -h              #僅顯示超級塊資訊
        -i              #從指定的檔案系統映像檔案中讀取檔案系統資訊
        -x              #以16進位制格式列印資訊塊成員
        -ob 超級塊      #指定檢查檔案系統時使用的超級塊
        -OB 塊大小      #檢查檔案系統時使用的指定的塊大小

例項:通過dumpe2fs -h顯示指定/dev/sdb分割槽的詳細引數

[[email protected] ~]# dumpe2fs -h /dev/sdb
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   <none>                  #檔案分割槽的名字(Label)
Last mounted on:          <not available>
Filesystem UUID:          5dc23dc0-8245-4113-b40a-4cb09ad9f4de   #檔案系統的UUID
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash
Default mount options:    user_xattr acl           #預設掛載的引數
Filesystem state:         clean                    #這個檔案系統是沒有問題的(clean)
Errors behavior:          Continue
Filesystem OS type:       Linux                    #檔案系統型別是Linux
Inode count:              1310720                  #Inode的總數
Block count:              5242880                  #Block的總數
Reserved block count:     262144
Free blocks:              5116558                  #剩餘Blocks數量
Free inodes:              1310709                  #剩餘Inodes數量
First block:              0
Block size:               4096                     #每個Block塊的大小
Fragment size:            4096
Group descriptor size:    64
Reserved GDT blocks:      1024
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Flex block group size:    16
Filesystem created:       Sun Nov 18 08:59:48 2018
Last mount time:          Sun Nov 18 08:59:59 2018
Last write time:          Sun Nov 18 08:59:59 2018
Mount count:              1
Maximum mount count:      -1
Last checked:             Sun Nov 18 08:59:48 2018
Check interval:           0 (<none>)
Lifetime writes:          132 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               256                      #每個Inodes塊的大小
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      f00ad08a-e990-4c45-96c3-749116a4e540
Journal backup:           inode blocks
Journal features:         journal_64bit
Journal size:             128M
Journal length:           32768
Journal sequence:         0x00000002
Journal start:            1

◆df 查詢磁碟資訊◆

df命令用於顯示磁碟分割槽上的可使用的磁碟空間,預設顯示單位為KB,可以利用該命令來獲取硬碟被佔用了多少空間,目前還剩下多少空間等資訊,下面我們先來看一下它的具體引數吧.

[[email protected] ~]# df --help

命令語法:[ df [選項] ]

        -a              #列出所有的檔案系統,包括/proc等系統
        -k              #以KB為單位,顯示各檔案系統
        -m              #以MB為單位,顯示各檔案系統
        -h              #以常用單位顯示檔案系統大小
        -H              #以M=1000替代M=1024顯示資料
        -T              #顯示檔案系統型別
        -i              #不用硬碟容量,以Inode數量來顯示

例項:以通用格式顯示系統檔案資訊.

[[email protected] ~]# df -hT
Filesystem            Type      Size  Used Avail Use% Mounted on

/dev/mapper/rhel-root xfs        17G  1.2G   16G   7% /
devtmpfs              devtmpfs   98M     0   98M   0% /dev
tmpfs                 tmpfs     110M     0  110M   0% /dev/shm
tmpfs                 tmpfs     110M  5.5M  104M   6% /run
tmpfs                 tmpfs     110M     0  110M   0% /sys/fs/cgroup
/dev/sr0              iso9660   4.4G  4.4G     0 100% /mnt
/dev/sda1             xfs      1014M  130M  885M  13% /boot
tmpfs                 tmpfs      22M     0   22M   0% /run/user/0
/dev/sdb              ext4       20G   45M   19G   1% /lyshark

◆du 統計檔案大小◆

du命令也是檢視使用空間的,但是與df命令不同的是Linux,du命令是對檔案和目錄磁碟使用的空間的檢視,還是和df命令有一些區別的,下面我們先來看一下它的具體引數吧.

[[email protected] ~]# du --help

命令語法:[ du [選項] 檔案或目錄 ]

        -a              #列出所有的檔案與目錄容量
        -h              #以常用單位顯示容量資訊
        -s              #只列出總容量,而不統計每個個別目錄佔用容量
        -S              #不包括子目錄下的總計,區別於 -s
        -m              #以MB為單位顯示
        -k              #以KB為單位顯示

例項:通過du -sh顯示目錄的總容量.

[[email protected] ~]# du -sh /etc/
31M     /etc/

[[email protected] ~]# du -sh /usr/bin/
63M     /usr/bin/

◆lsblk 查所有可用裝置◆

lsblk命令用於列出所有可用塊裝置的資訊,而且還能顯示他們之間的依賴關係,但是它不會列出RAM盤的資訊,塊裝置有硬碟,快閃記憶體盤,cd-ROM等,lsblk命令包含在util-linux-ng包中,現在該包改名為util-linux,這個包帶了幾個其它工具,如dmesg,要安裝lsblk,請使用 yum install util-linux-ng 來安裝,下面我們先來看一下它的具體引數吧.

[[email protected] ~]# lsblk --hlep

命令語法:[ lsblk [選項] ]

        -a              #顯示所有裝置
        -m              #顯示許可權資訊
        -l              #使用列表格式顯示
        -n              #不顯示標題
        -o 列名         #輸出指定列
        -P              #以鍵和值的方式顯示
        -t              #使用拓展格式輸出
        -r              #使用原始格式輸出

例項:使用lsblk -t顯示磁碟資訊

[[email protected] ~]# lsblk -t
NAME          ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED    RQ-SIZE   RA WSAME
sda                   0    512      0     512     512    1 deadline     128 4096   32M
├─sda1                0    512      0     512     512    1 deadline     128 4096   32M
└─sda2                0    512      0     512     512    1 deadline     128 4096   32M
  ├─rhel-root         0    512      0     512     512    1              128 4096   32M
  └─rhel-swap         0    512      0     512     512    1              128 4096   32M
sdb                   0    512      0     512     512    1 deadline     128 4096    0B
sr0                   0   2048      0    2048    2048    1 deadline     128  128    0B

◆e2label 設定卷標名◆

e2label命令用來設定第二擴充套件檔案系統的卷標,此命令無引數,下面直接看一下使用技巧.

[[email protected] ~]# dumpe2fs -h /dev/sdb |grep "Filesystem volume name"
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   <none>

[[email protected] ~]# e2label /dev/sdb "lyshark desk"

[[email protected] ~]# dumpe2fs -h /dev/sdb |grep "Filesystem volume name"
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   lyshark desk

◆fsck 檢查修復檔案系統◆

fsck命令被用於檢查並且試圖修復檔案系統中的錯誤,當檔案系統發生錯誤,可用fsck指令嘗試加以修復.

[[email protected] ~]# fsck --help

命令語法:[ fsck [選項] 磁碟路徑 ]

        -a              #自動修復檔案系統,不詢問
        -A              #依照/etc/fstab配置檔案的內容,檢查檔案內所列的全部檔案系統
        -t 型別         #指定檢查檔案系統型別
        -V              #顯示指令執行過程

例項:檢查並修復一個檔案系統,應該先解除安裝在檢查.

[[email protected] ~]# fsck -t ext4 -a /dev/sdb

fsck from util-linux 2.23.2
lyshark_desk: clean, 11/1310720 files, 126322/5242880 blocks

◆mkfs 格式化◆

mkfs命令用於在裝置上(通常為硬碟)建立Linux檔案系統,mkfs本身並不執行建立檔案系統的工作,而是去呼叫相關的程式來執行,下面我們先來看一下它的具體引數吧.

[[email protected] ~]# mkfs -help

命令語法:[ mkfs [檔案型別] 磁碟路徑 ]

        -t ext2          #格式化為ext2
        -t ext3          #格式化為ext3
        -t ext4          #格式化為ext4

[[email protected] ~]# mkfs.

mkfs.btrfs   mkfs.cramfs  mkfs.ext2    mkfs.ext3    mkfs.ext4    mkfs.minix   mkfs.xfs

xfs_group

例項:格式化一個分割槽,試一下.

[[email protected] ~]# mkfs -t ext4 /dev/sdb

mke2fs 1.42.9 (28-Dec-2013)
/dev/sdb is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2153775104
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

◆mount/umount 掛載與解除安裝磁碟◆

mount命令用於載入檔案系統到指定的載入點,此命令的最常用於掛載cdrom,使我們可以訪問cdrom中的資料,因為你將光碟插入cdrom中,Linux並不會自動掛載,必須使用Linux mount命令來手動完成掛載,下面老樣子先看引數.

[[email protected] ~]# mount --help

命令語法:[ mount [選項] [原碟符] [掛載到] ]

        -t ext2          #格式化為ext2
        -a               #根據/etc/fstab配置,重新掛載一遍
        -l               #顯示已掛載檔案系統列表
        -t               #指定掛載型別(ext2/ext3/vfat/reiserfs/iso9660)
        -L               #通過檔案系統的卷標名稱進行掛載
        -r               #將檔案系統載入為只讀模式
        -v               #輸出指令執行詳細資訊
        -o               #指定額外掛載引數(ro,rw只讀讀寫/exec,noexec是否可執行/remount 重新掛載)

例項1: 掛載光碟 /dev/sr0 掛載到 /mnt 目錄下

[[email protected] ~]# mount -t iso9660 /dev/sr0 /mnt/

mount: /dev/sr0 is write-protected, mounting read-only

例項2: 掛載硬碟,掛載時指定語系為 iocharset=cp950 掛載到 /mnt/flash

[[email protected] ~]# mount -t vfat -o iocharset=cp950 /dev/sda1 /mnt/flash

例項3: 將根分割槽重新掛載,並加上讀寫許可權

[[email protected] ~]# mount -o remount,rw,auto  /

例項4: 將/home這個目錄,臨時掛載到/tmp/home下

[[email protected] ~]# mount --bind /home/ /tmp/home/

[[email protected] ~]# ll /tmp/home/

例項5: 利用卷標名來掛載

[[email protected] home]# mount -L "LyShark_Disk" /tmp/disk/

例項6: 掛載一個ISO映象,例如Centos.iso

[[email protected] ~]# mount -o loop /root/Centos.iso /mnt/centos_dvd

例項7: 解除安裝磁碟或任意外部介質

[[email protected] home]# umount -v /dev/sr0

umount: /mnt (/dev/sr0) unmounted


磁碟分割槽命令-Fdisk

fdisk命令用於觀察硬碟實體使用情況,也可對硬碟分割槽,它採用傳統的問答式介面,而非類似DOS fdisk的cfdisk互動式操作介面,因此在使用上較為不便,但功能卻絲毫不打折扣.

◆命令引數解釋◆

[[email protected] ~]# fdisk -l                         #檢視系統所有硬碟及分割槽
[[email protected] ~]# fdisk 磁碟裝置名(/dev/sda)        #建立或修改磁碟的分割槽結構

[[email protected] ~]# fdisk /dev/sd*
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): help
h: unknown command
Command action

    p:列印分割槽表
    n:新建一個新分割槽
    d:刪除一個分割槽
    t:更改分割槽型別(82=交換分割槽)
    m:輸出選單
    q:退出不儲存
    w:把分割槽寫進分割槽表,儲存並退出

Command (m for help):


注:若報錯Device or resource busy. The kernel still uses the old table.The new table will be used at the next reboot。則需要重啟系統,重新載入硬碟,才能進一步操作。
        
partprobe   強制讀取所有分割槽

⦁當出現上述情況時,也可不必重啟,問題導致原因為核心正在使用分割槽表,那麼我們可以是用partprobe強制讀取所有分割槽達到不需要重啟從而解決裝置佔用的問題。

命令沒有請安裝:parted-2.*-*-*.rpm

◆fdisk 分割槽例項◆

1.檢視磁碟,檢視是否有新的磁碟且沒有被格式化的.

[[email protected] ~]# ls -l /dev/sd*
brw-rw---- 1 root disk 8,  0 Sep 21 07:26 /dev/sda
brw-rw---- 1 root disk 8,  1 Sep 21 07:26 /dev/sda1
brw-rw---- 1 root disk 8,  2 Sep 21 07:26 /dev/sda2
brw-rw---- 1 root disk 8, 16 Sep 21 07:26 /dev/sdb
[[email protected] ~]# fdisk -l

Disk /dev/sda: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000cc3ff

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    20971519     9436160   8e  Linux LVM

↓ 此處就是我們的新磁碟,且沒有被格式化

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

2.輸入相應碟符進入分割槽介面

[[email protected] ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x5b3d4ae9.

Command (m for help):

3.開始分割槽,下面將逐個解釋其分割槽含義

[[email protected] ~]# fdisk /dev/sdb                                     #指定要分割槽的碟符
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x5b3d4ae9.

Command (m for help): p                                                #列印當前分割槽資訊

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5b3d4ae9

   Device Boot      Start         End      Blocks   Id  System
--------------------------------------------------------------------------------
[劃分主分割槽]

Command (m for help): n                                              #新建一個分割槽
Partition type:
   p   primary (0 primary, 0 extended, 4 free)                       #建立一個主分割槽
   e   extended                                                      #建立一個邏輯分割槽
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-20971519, default 2048): 2048                     #預設從哪裡開始劃分
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +5G   #指定劃分5個GB
Partition 1 of type Linux and of size 5 GiB is set

Command (m for help): p                                               #列印分割槽情況

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5b3d4ae9

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    10487807     5242880   83  Linux        #此處可看到一個主分割槽了
--------------------------------------------------------------------------------
[劃分拓展分割槽]

Command (m for help): n                                              #繼續建立分割槽

Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): e                                                #這次選擇建立邏輯分割槽
Partition number (2-4, default 2): 2                                 #預設從2開始
First sector (10487808-20971519, default 10487808): 10487808         #預設開始無需動
Last sector, +sectors or +size{K,M,G} (10487808-20971519, default 20971519):   #由於是拓展分割槽,所以這裡不能指定大小
Using default value 20971519
Partition 2 of type Extended and of size 5 GiB is set

Command (m for help): p

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5b3d4ae9

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    10487807     5242880   83  Linux
/dev/sdb2        10487808    20971519     5241856    5  Extended        #這裡可以看到已經有一個拓展結構了,接下來分割槽
--------------------------------------------------------------------------------
[在拓展分割槽的基礎上劃分邏輯分割槽]

Command (m for help): n

Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)                                       #這裡選擇l新建邏輯分割槽
Select (default p): l
Adding logical partition 5
First sector (10489856-20971519, default 10489856): 10489856           #預設開始位置
Last sector, +sectors or +size{K,M,G} (10489856-20971519, default 20971519):  #劃分全部空間
Using default value 20971519
Partition 5 of type Linux and of size 5 GiB is set

Command (m for help): w                                              #儲存分割槽表並退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

[[email protected] ~]#

4.接下來使用fdisk -l 可以檢視分割槽情況

[[email protected] ~]# fdisk -l

Disk /dev/sda: 10.7 GB, 10737418240 bytes, 20971520 sectors            #這是/dev/sda邏輯磁碟
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000cc3ff

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    20971519     9436160   8e  Linux LVM

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors            #這是/dev/sdb邏輯磁碟
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5b3d4ae9

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    10487807     5242880   83  Linux          #這就是剛剛劃分的主分割槽
/dev/sdb2        10487808    20971519     5241856    5  Extended       #這是拓展結構
/dev/sdb5        10489856    20971519     5240832   83  Linux          #這是邏輯分割槽


磁碟分割槽命令-Parted

parted命令是由GNU組織開發的一款功能強大的磁碟分割槽和分割槽大小調整工具,與fdisk不同它支援調整分割槽的大小,作為一種設計用於Linux的工具,它沒有構建成處理與fdisk關聯的多種分割槽型別,但是它可以處理最常見的分割槽格式,包括:ext2、ext3、fat16、fat32、NTFS、ReiserFS、JFS、XFS、UFS、HFS以及Linux交換分割槽.

既然有fdisk為啥還出個parted分割槽呢?

1.parted命令可以劃分單個分割槽大於2T的GPT格式的分割槽,也可以劃分普通的MBR分割槽,fdisk命令對於大於2T的分割槽無法劃分.
2.大於2.2TB的儲存空間用fdisk不支援,需要採用parted來分割槽,所以用fdisk無法看到parted劃分的GPT格式的分割槽.

◆parted常用引數◆

[[email protected] ~]# parted
GNU Parted 3.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) help
  align-check TYPE N                       check partition N for TYPE(min|opt) alignment
  help [COMMAND]                           print general help, or help on COMMAND
  mklabel,mktable LABEL-TYPE               建立新的磁碟卷標(分割槽表)
  mkpart PART-TYPE [FS-TYPE] START END     建立一個分割槽
  name NUMBER NAME                         name partition NUMBER as NAME
  print [devices|free|list,all|NUMBER]     列印當前分割槽資訊

  quit                                     exit program
  rescue START END                         rescue a lost partition near START and END

  resizepart NUMBER END                    resize partition NUMBER
  rm NUMBER                                刪除一個分割槽
  select DEVICE                            選擇需要編輯的裝置
  disk_set FLAG STATE                      change the FLAG on selected device
  disk_toggle [FLAG]                       toggle the state of FLAG on selected device
  set NUMBER FLAG STATE                    change the FLAG on partition NUMBER
  toggle [NUMBER [FLAG]]                   切換分割槽表狀態
  unit UNIT                                set the default unit to UNIT
  version                                  display the version number and copyright information of GNU Parted
(parted)

◆parted 分割槽例項◆

1.磁碟引數解釋

--------------------------------------------------------------------------------
[[email protected] ~]# parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print

                          ↓ 磁碟引數
Model: VMware, VMware Virtual S (scsi)

                 ↓ 磁碟大小
Disk /dev/sdb: 10.7GB
                                ↓ 扇區大小
Sector size (logical/physical): 512B/512B

Partition Table: msdos  ← 分割槽表格式
Disk Flags:

   1     2     3    4     5       6            7       
Number  Start  End  Size  Type  File system  Flags

(parted)

1.Number:分割槽號
2.Start:分割槽起始位置,這裡不再像fdisk用柱面表示,而是使用byte更加直觀
3.End:分割槽結束位置
4.Size:分割槽大小
5.Type:分割槽型別
6.FileSystem:檔案系統型別,parted不支援格式化成ext4,但能識別
7.標誌(flags):分割槽標記

--------------------------------------------------------------------------------

2.將分割槽表格式修改成GPT

(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start  End  Size  Type  File system  Flags

(parted) mklabel msdos    #原格式是mbr

Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be
lost. Do you want to continue?

Yes/No? Yes

(parted) p

Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt    #新格式是gpe
Disk Flags:

Number  Start  End  Size  File system  Name  Flags

(parted)

3.建立一個分割槽

(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start  End  Size  File system  Name  Flags

(parted) mkpart                        #建立分割槽
Partition name?  []? disk1             #分割槽名
File system type?  [ext2]? ext2        #分割槽格式,parted只能建立ext2,這裡我們出去格式化吧
Start? 1MB                             #磁碟開始位置
End? 2000MB                            #磁碟結束為止
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name   Flags
 1      1049kB  2000MB  1999MB  ext2         disk1            #此處已建立完成

(parted) q


磁碟分割槽命令-Swap

swap命令用於建立交換空間(包括交換檔案和交換分割槽)

[[email protected] ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           218M        112M         22M        5.1M         82M         69M
Swap:          1.0G        520K        1.0G

[[email protected] ~]# dd if=/dev/zero of=/tmp/swap bs=1024 count=100000
100000+0 records in
100000+0 records out
102400000 bytes (102 MB) copied, 2.6988 s, 37.9 MB/s


[[email protected] ~]# mkswap /tmp/swap
Setting up swapspace version 1, size = 99996 KiB
no label, UUID=7d7f22ed-466e-4205-8efe-1b6184dc5e1b

[[email protected] ~]# swapon /tmp/swap
swapon: /tmp/swap: insecure permissions 0644, 0600 suggested.

[[email protected] ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           218M        109M        3.2M        2.8M        105M         75M
Swap:          1.1G        2.8M        1.1G

[[email protected] ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Tue Sep 18 09:05:06 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=13d5ccc2-52db-4aec-963a-f88e8edcf01c /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0

UUID=7d7f22ed-466e-4205-8efe-1b6184dc5e1b swap swap defaults 0 0


[[email protected] ~]# swapoff /tmp/swap
[[email protected] ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           218M        109M        5.5M        2.8M        103M         75M
Swap:          1.0G        2.7M        1.0G


磁碟的掛載與自動掛載

◆格式化與掛載◆

1.首先格式化一個磁碟.

[[email protected] ~]# ll /dev/sd*
brw-rw---- 1 root disk 8,  0 Sep 21 07:26 /dev/sda
brw-rw---- 1 root disk 8,  1 Sep 21 07:26 /dev/sda1
brw-rw---- 1 root disk 8,  2 Sep 21 07:26 /dev/sda2
brw-rw---- 1 root disk 8, 16 Sep 21 07:50 /dev/sdb
brw-rw---- 1 root disk 8, 17 Sep 21 07:50 /dev/sdb1
brw-rw---- 1 root disk 8, 18 Sep 21 07:50 /dev/sdb2
brw-rw---- 1 root disk 8, 21 Sep 21 07:50 /dev/sdb5
[[email protected] ~]#

[[email protected] ~]# mkfs -t ext4 /dev/sdb1           #格式化一個磁碟
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

2.接著掛載這個磁碟

[[email protected] ~]# mkdir /sdb1                      #建立掛載點

[[email protected] ~]# mount -t ext4 /dev/sdb1 /sdb1/   #將磁碟掛載

[[email protected] ~]# df -h

Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root  8.0G  1.3G  6.8G  16% /
devtmpfs                  98M     0   98M   0% /dev
/dev/sda1               1014M  130M  885M  13% /boot
/dev/sdb1                4.8G   20M  4.6G   1% /sdb1      #這個就是我們的磁碟

◆分割槽的自動掛載◆

1.首先我們要檢視指定磁碟的UUID號

[[email protected] ~]# ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 Sep 21 07:26 13d5ccc2-52db-4aec-963a-f88e8edcf01c -> ../../sda1
lrwxrwxrwx 1 root root  9 Sep 21 07:26 2018-05-03-20-55-23-00 -> ../../sr0
lrwxrwxrwx 1 root root 10 Sep 21 07:56 3439c4dd-d074-4900-a507-126e41b55e26 -> ../../sdb1      #此處就是我們sdb1的UUID
lrwxrwxrwx 1 root root 10 Sep 21 07:26 4604dcf2-da39-455a-9719-e7c5833e566c -> ../../dm-0
lrwxrwxrwx 1 root root 10 Sep 21 07:26 f6a4b420-aa6a-4e66-bbb3-c8e8280a099f -> ../../dm-1

2.開啟/etc/fstab寫入以下內容實現效果,這裡千萬別寫錯

[[email protected] ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Tue Sep 18 09:05:06 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=13d5ccc2-52db-4aec-963a-f88e8edcf01c /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0

UUID=3439c4dd-d074-4900-a507-126e41b55e26 /sdb1  ext4   defaults 0 0

--------------------------------------------------------------------------------
[說明]

1.裝置檔名(UUID)
2.掛載點
3.檔案系統型別
4.掛載特殊選項
5.是否備份: 0不備份 1每天備份 2不定期備份
6.是否檢查磁碟狀態: 0不檢查 1啟動時檢查 2啟動後檢查

3.最後使用mount -a 測試是否能掛載上

[[email protected] ~]# mount -a
[[email protected] ~]#
[[email protected] ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root  8.0G  1.3G  6.8G  16% /
devtmpfs                  98M     0   98M   0% /dev
tmpfs                    110M     0  110M   0% /dev/shm
tmpfs                    110M  5.5M  104M   5% /run
tmpfs                    110M     0  110M   0% /sys/fs/cgroup
/dev/sda1               1014M  130M  885M  13% /boot
tmpfs                     22M     0   22M   0% /run/user/0
/dev/sdb1                4.8G   20M  4.6G   1% /sdb1             #能說明成功