『學了就忘』Linux文件系統管理 — 61、使用parted命令進行分區

1、parted命令介紹

我們Linux系統中有兩種常見的分區表,MBR分區表(主引導記錄分區表)和GPT分區表(GUID分區表,也叫全局唯一標識分區表),其中:

  • MBR分區表:支援的最大分區是2TB(1TB=1024GB)(超過2TB不識別多出來的空間);最多支援4個主分區,或3個主分區1個擴展分區。
  • GPT分區表:支援最大18EB的分區(1EB=1024PB=1024*1024TB);最多支援128個分區,其中1個系統保留分區,127個用戶自定義分區。

我們前邊所說的fdisk命令,只識別MBR分區表。如果需要對GPT分區表進行分區,需要使用parted命令。

注意:parted命令也有點小問題,就是命令自身分區的時候只能格式化成ext2文件系統,不支援ext3文件系統,那就更不用說ext4文件系統了(截止到CentOS6.8還是這樣,這裡只是指不能用parted命令把分區格式化成ext4文件系統,但是parted命令還是可以識別ext4文件系統的)。不過這沒有太多的影響,因為我們可以先用parted命令分區格式化,再退出parted命令,用mkfs命令進行格式化成ext4文件系統。

parted命令感覺還不是太成熟,命令看文檔會用就可以了。

一個硬碟的分區表改變了,原來的分區就會全部消失,該硬碟在/etc/fstab文件中配置的自動掛載的配置要提前全部刪除掉,否則下次啟動系統的時候就會報錯。

這裡要注意一點:刪除分區和建立分區是完全相反的流程。

  • 建立分區:先加入一個新硬碟,fdisk命令進行分區設置,mkfs命令對分區進行格式化,之後mount命令進行分區掛載,最後修改/etc/fstab文件進行分區自動掛載。
  • 刪除分區:先取消掉/etc/fstab文件的分區自動掛載,在umount命令取消分區掛載,卸載沒有格式化,之後把分區刪除掉,然後在移除硬碟。

所以執行parted命令前一定要刪除分區的自動掛載。(這個練習只進行新添加的硬碟用parted命令分區,對創建Linux系統初始的硬碟不用parted命令分區,所以只刪除新增硬碟的自動掛載就可以。)

2、parted交互模式

執行命令:[root@localhost ~]# parted /dev/sdb(不用寫分區號)

命令結果如下,會開啟一個交互模式,並告知你可以通過help查看命令列表。

# 用`parted`命令劃分/dev/sdb 硬碟
[root@localhost ~]# parted /dev/sdb 
GNU Parted 2.1
使用 /dev/sdb 
Welcome to GNU Parted!Type'help'to view a list of commands.
(parted)(等待輸入交互命令的位置)

輸入help。結果如下:

image

parted交互命令說明:

  • check NUMBER:做一次簡單的文件系統檢測。
  • cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER:複製文件系統到另外一個分區。
  • help [COMMAND]:顯示所有的命令幫助。
  • mklabel,mktable LABEL-TYPE:創建新的磁碟卷標(分區表)。
  • mkfs NUMBER FS-TYPE:在分區上建立文件系統。
  • mkpart PART-TYPE [FS-TYPE] START END :創建一個分區。
  • mkpartfs PART-TYPE FS-TYPE START END:創建分區,並建立文件系統。
  • move NUMBER START END:移動分區。
  • name NUMBER NAVME:給分區命名。
  • print [devices|free|list,all|NUMBER]:顯示分區表,活動設備,空閑空間,所有分區。
  • quit:退出。
  • rescue START END:修復丟失的分區。
  • resize NUMBER START END:修改分區大小。
  • rm NUMBER:刪除分區。
  • select DEVICE:選擇需要編輯的設備。
  • set NUMBER FLAG STATE:改變分區標記。
  • toggle [NUMBER [FLAG]]:切換分區表的狀態。
  • unit UNIT:設置默認的單位。
  • Version:顯示版本。

3、建立分區

(1)查看分區

命令: print [devices|free|list,all|NUMBER]:使用print命令可以查看分區表資訊,包括硬碟參數,硬碟大小,扇區大小,分區表類型和分區資訊。

結果如下:

image

可以看到sdb硬碟大小是21.5GB,文件系統是msdosmsdos文件系統是Windows下的文件系統,在parted命令交互中就是表示MBR分區表)。

分區資訊總共七列,分別是:

  • Number:分區號。
  • Start:分區起始位置,這裡不再像fdisk用柱面表示,而是使用Byte更加直觀。
  • End:分區結束位置。
  • Size:分區大小。
  • Type:分區類型。
  • File system:文件系統類型。我不是說parted不支援ext4文件系統嗎?注意,我一直都是說parted不能直接把分區,直接格式化成ext4文件系統,但是它是可以識別的。
  • 標誌:Flags,就是分區的標記。

(2)修改成GPT分區表

把硬碟由MBR分區表,改成GPT分區表,使用的命令如下:

mklabel,mktable LABEL-TYPE:創建新的磁碟卷標(分區表)。

image

(如果要由GPT分區表改成MBR分區表,命令為mklabel msdos

修改了分區表,如果這塊硬碟已經有分區了,那麼原有分區和分區中的數據都會消失,而且需要重啟系統才會生效。

我們在查看一下當前硬碟分區表情況,如下圖所示:

image

可以看到分區表已經變成GPT分區表,並且之前硬碟的分區資訊已經沒有了。

注意:在說一下,一定要把/etc/fstab文件中和原有分區的內容刪除掉(就是修改的硬碟的分區的自動掛載),才能重啟動,要不系統啟動就一定會報錯的。

之後quit退出parted命令交互,執行reboot命令重啟電腦。

image

重啟完電腦才能執行之後的操作。(不重啟後續操作是無法完成的)

(3)建立分區

因為修改過了分區表,所以/dev/sdb硬碟中的所有數據都消失了,所以我們可以重新對這塊硬碟分區了。

執行parted命令,進入硬碟分區。

image

執行分區命令,對硬碟進行分區,命令如下:

mkpart PART-TYPE [FS-TYPE] START END :創建一個分區。

image

注意:建立分區時,默認文件系統就只能建立成ext2了。

查看硬碟的分區情況,如下圖所示:

image

已顯示剛剛創建好的分區disk1。因為沒有格式化,所以File system:文件系統類型是空著的。

不知道大家注意到了嗎?

我們現在的print查看的分區,和第一次查看MBR分區表的分區時有些不一樣了,少了Type這個欄位,也就是分區類型的欄位,多了Name分區名欄位。分區類型是標識主分區、擴展分區和邏輯分區的,不過這種標識只在MBR分區表中使用,我們現在已經變成了GPT分區表了,所以就不再有Type類型了。也就說折磨我們很久的主分區、擴展分區和邏輯分區的概念不再用了(其實就是突破一個硬碟只有四個分區的限制)。

(4)建立文件系統(格式化)

分區分完了,我們還需要對分區進行格式化。不過我們已經知道如果使用parted交互命令格式化的話,只能格式化成ext2文件系統。我們這裡是要演示下parted命令的格式化方法。

parted交互命令的格式化命令為mkfs,命令如下:

mkfs NUMBER FS-TYPE:在分區上建立文件系統。

image

再查看硬碟的分區情況,如下圖所示:

image

退出,執行quit命令。

image

上圖提示你,如果需要讓分區自動掛載,需要手動修改etc/fstab文件。

如果要把硬碟格式化成ext4文件系統,需要執行mkfs命令,重新對硬碟進行格式化。(注意不是parted交互命令中的mkfs命令,而是系統命令mkfs)!

執行[root@localhost ~]# mkfs -t ext4 /dev/sdb1

image

sdb1分區格式化為ext4文件系統之後,就可以進行分區的掛載了。

如下圖:

image

如果你需要開機自動掛載,手動修改etc/fstab文件即可。

(5)調整分區大小

parted命令還有一大優勢,就是可以調整分區的大小(Windows中也可以實現,不過需要轉換成動態磁碟,要不就需要依賴第三方工具,如硬碟分區魔術師)。起始Linux中LVM和RAID是可以支援分區調整的,不過這兩種方法也可以看成是動態磁碟方法。使用parted命令調整分區大小要更加簡單。

注意:parted調整已經掛載使用的分區時,是不會影響分區中的數據的,也就是說數據不會丟失。但是一定要先卸載分區,再調整分區大小,否則數據是會出現問題的(有一定幾率)。還有要調整大小的分區必須已經建立了文件系統(格式化),否則會報錯。

  • 卸載硬碟分區sdb1
    [root@localhost ~]# umount /dev/sdb1
  • 使用parted命令調整分區大小,執行resize命令。
    resize NUMBER START END:修改分區大小。
    [root@localhost ~]# parted /dev/sdb(parted 命令不能加分區號)
    image

    注意:使用parted命令調整分區大小,文件系統必須是ext2,否則命令執行不了。我們上邊把sdb1分區格式化成ext4,是不行的。(這個知道就可以了,如果需要調整分區大小,用LVM調整就好。)

(6)刪除分區

刪除分區前提,要先把分區的自動掛載在/etc/fstab文件刪除,然後用umount卸載掉分區的掛載。在執行parted命令的刪除分區命令。

rm NUMBER:刪除分區。

image

還有件事要注意,parted中所有的操作都是立即生效,沒有保存生效的概念。這點和fdisk交互命令明顯不同,所以所做的所有操作大家要倍加小心。

那麼到底使用fdisk命令進行分區,還是parted命令進行分區呢?這個完全看個人習慣,我更加習慣fdisk命令。