文、專任講師小州

D018.jpg  

前言:
     全新的硬碟購買回來後,通常硬碟需要使用之前都要先經過磁碟分割的動作,並適當的格式化建立檔案系統才可以正常使用。目前許多外接的硬碟,尤其隨身碟這類都已經在出貨之前預先完成這類流程。在 linux 系統環境安裝了適當的硬碟後,通常也會使用適當的磁碟分割工具先完成所需要的自訂分割環境,最終才格式化成為所需要的檔案系統。所以本篇來談談新式 linux 下的磁碟分割工具。


傳統 fdisk 程式:

     傳統大家在 linux 環境下的磁碟分割工具都是使用 fdisk 這個命令,相信許多使用 linux 的管理人員對這個指令都會很熟悉。不過伴隨著目前硬碟製程的進步,單一顆硬碟已經可以高達 2TB 的儲存容量,傳統 MBR 開機磁區內的 Partition Table 的儲存記錄也出現了記錄的定址問題,所以為了解決這個問題就新設計了 GUID Partition Table 磁碟分割表的儲存架構來解決這個問題。不過 linux 環境大家常使用的 fdisk 命令本身並不支援讀取與 建立 GUID 磁碟分割表的格式,所以解決的方式就是使用 GNU 所開發設計的 parted 命令就可以正確支援了。


GNU parted 程式:

      parted 程式本身為 GNU 所開發,雖然說 parted 是一個磁碟分割程式,不過正確來說這個程式本身不單純支援傳統的磁碟分割功能,也支援建立磁碟分割後可以順便格式化建立檔案系統。其他部分也支援分割區的大小調整等功能,是一個完整與多功能複合的磁碟分割整合管理工具。 

     過 parted 命令列方式對許多初學者來說是稍微複雜一點,有一個專案計畫本身為 gparted,本身可以執行於 X 環境下的 parted的圖形介面的程式可以讓操作更簡單達成所需要的目的。詳細可以參考:

http://gparted.sourceforge.net/

GNU parted 程式進入方式:

    本篇使用環境為 RHEL6 環境,所以本篇以該版本 為測試的運作所需環境,執行 parted 程式可以傳入要處理的磁碟的裝置名稱,比方 /dev/sda 與 /dev/hda 等名稱,輸入 help 查看使用的命令,最後使用 quit 結束程式。

             #parted /dev/sda
                .....
                quit

GNU parted 命令項目

     進入 parted 程式後,執行 help 可以列出所有可用的命令項目。不過這邊使用之前需要先告知的是,parted 程式的新增刪除等等命令都是立即進行的,與傳統 fdisk 命令的設計方式不一樣,所以練習時候務必要小心以免遺失資料。這邊簡單介紹相關命令用法,詳細用法部分也可以使用 help 命令,後面傳入要查看的命令說明。比方 help print 這樣使用方式。

        select DEVICE

        可以指定目前工作使用的裝置名稱,比方傳入指定 /dev/sda 與 /dev/sdb 等項目。

        使用範例:select /dev/sdb

        print [devices|free|list,all|NUMBER]

        這是列出相關裝置相關資訊,可以給予不同項目列出不同所需要資訊。
        
        使用範例:print devices

        unit UNIT

指定顯示與處理的單位方式。後面可以傳入 kB, MB, GB, TB, compact, cyl, chs, %, kiB, MiB, GiB, TiB 等單位表示。

        使用範例:unit cyl

        rm NUMBER

 這是刪除指定的分割區項目,後面傳入要刪除的分割區編號。編號可以使用 print 先查看確認。

        使用範例:rm 1

要注意是刪除是邏輯分割區的話,結果後續的編號會往前移動遞補上。比方刪除 11 編號的分割區,原本 12 編號分割區往前為 11

        check NUMBER

    檢查指定分割區內的檔案系統是否故障。通常需要先 umount 該使用的裝置後才可以進行。

        使用範例:check 1

        cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER

        複製指定硬碟內的某個分割區內檔案系統內所有的資料到另外一個分割區內

         使用範例:cp 1 2

        resize NUMBER START END

         將指定的分割區空間縮小或是增大,包含所組成的檔案系統空間內容。

         使用範例:resize 2 100 500

         上面表示把編號 2 該分割區檔案系統大小進行調整。比方本來佔用範圍是 100-800 (700MB),調整成為 100-500 (400MB)


        set NUMBER FLAG STATE 與 toggle [NUMBER [FLAG]]

        設定指定分割區的標籤狀態資訊。FLAG 可以傳入 swap, hidden, raid, lvm, lba 等項目。

        使用範例:set 1 boot on         (把 1 該分割區設定為 active 旗標)        
        使用範例:set 2 lvm on          (把 2 該分割區設定為 linux lvm 代碼 8e 磁區)        
        使用範例:set 3 swap on        (把 3 該分割區設定為 linux swap 代碼 82 磁區)       

        move NUMBER START END

        調整分割區的位置。

        使用範例:move 2 200 500

        比方 2 該分割區檔案系統位置本來為 100MB-500MB。上面表示把編號為 2 該分割區檔案系統的位置移動到由 200MB 開始的位置,結束位置為 500MB


        mklabel,mktable LABEL-TYPE

        建立指定分割表類型。LABEL-TYPE 項目可以傳入 msdos, gpt,... 等等項目

        使用範例:mklabel msdos                (傳統的 msdos 分割表類型)
        
        使用範例:mklabel gpt                    (gpt 格式分割表類型)


        mkpart PART-TYPE [FS-TYPE] START END

        建立分割區項目

PART-TYPE 可以傳入 primary, logical, extended 項目,FS-TYPE 可以傳入 ext4, ext3, ext2, fat32, linux-swap,.. 等等項目

        使用範例:mkpart primary 100 300              (建立 primary 分割區,類型預設為 linux native,大小為 100MB 到 300MB 的範圍,共 200MB)

        使用範例:mkpart primary linux-swap 300 400(建立 primary 分割區,類型 linux swap,大小為 300MB 到 400MB 的範圍,共 100MB)

         使用範例:mkpart primary ext2 400 800         (建立 primary 分割區,類型預設為 linux native,大小為 400MB 到 800MB 的範圍,共 400MB)


        mkpartfs PART-TYPE FS-TYPE START END 
                
         建立分割區並格式化成為指定格式

          PART-TYPE 可以傳入 primary, logical, extended 項目,FS-TYPE 可以傳入 ext4, ext3, ext2, fat32, linux-swap,.. 等等項目

         使用範例:mkpartfs primary linux-swap 100 300        (建立 primary 分割區,類型 linux swap,大小為 100MB 到 300MB 的範圍,共 200MB)

         使用範例:mkpartfs primary ext2 300 800                (建立 primary 分割區,類型預設為 linux native,大小為 300MB 到 800MB 的範圍,共 500MB)


        mkfs NUMBER FS-TYPE

         將指定分割區格式化成為指定格式

         FS-TYPE 可以傳入 ext4, ext3, ext2, fat32, linux-swap,.. 等等項目

         範例:mkfs 1 ext2                (將編號為 1 分割區格式化成為 ext2 檔案系統 )

         範例:mkfs 2 linux-swap        (將編號為 2 分割區格式化成為 linux swap 格式 )

         rescue START END

         傳入指定的範圍,搜尋被刪除的分割區項目並救回

         使用範例:rescue 100 1000        (在 100M 與 1000M 空間範圍內進行搜尋是否有符合被刪除的分割磁區)


GNU parted 實際測試使用:

        目前主機上有兩顆硬碟,分別為 sda 與 sdb。其中 sda 為使用中的硬碟,sdb 為提供測試使用的新硬碟項目。

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

        [root@localhost ~]# parted /dev/sda
        GNU Parted 2.1
        Using /dev/sda
        Welcome to GNU Parted! Type 'help' to view a list of commands.
        (parted)
        (parted) print devices
        /dev/sda (8590MB)
        /dev/sdb (42.9GB)
        /dev/mapper/system-swap (1074MB)
        /dev/mapper/system-root (7407MB)

使用 print devices 可以查看目前系統所有硬碟可用的區塊裝置項目。

-----------------------------------------------------------------------------------------------
       
        (parted) print
        Model: ATA VBOX HARDDISK (scsi)
        Disk /dev/sda: 8590MB
        Sector size (logical/physical): 512B/512B
        Partition Table: msdos

        Number  Start   End     Size    Type     File system  Flags
         1      1049kB  106MB   105MB   primary  ext4         boot
         2      106MB   8590MB  8484MB  primary               lvm

        (parted)

使用單純的 print 查看目前硬碟資訊,這顆硬碟是使用傳統 msdos 分割表類型,全部大約 8G 多,共兩個分割區。

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

        (parted) unit cyl
        (parted) print
        Model: ATA VBOX HARDDISK (scsi)
        Disk /dev/sda: 1044cyl
        Sector size (logical/physical): 512B/512B
        BIOS cylinder,head,sector geometry: 1044,255,63.  Each cylinder is 8225kB.
        Partition Table: msdos

        Number  Start  End      Size     Type     File system  Flags
         1      0cyl   12cyl    12cyl    primary  ext4         boot
         2      12cyl  1044cyl  1031cyl  primary               lvm

使用 unit 命令切換到傳統 cylinder 的模式顯示

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

        (parted) select /dev/sdb
        Using /dev/sdb
        (parted)
        (parted) print
        Model: ATA VBOX HARDDISK (scsi)
        Disk /dev/sdb: 42.9GB
        Sector size (logical/physical): 512B/512B
        Partition Table: msdos

        Number  Start  End  Size  Type  File system  Flags

       
使用 select 切換工作的硬碟,最後使用 print 查看目前硬碟沒有任何分割區建立

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

        (parted) mklabel gpt
        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? y

        (parted) print
        Model: ATA VBOX HARDDISK (scsi)
        Disk /dev/sdb: 42.9GB
        Sector size (logical/physical): 512B/512B
        Partition Table: gpt

        Number  Start  End  Size  File system  Name  Flags

        (parted)

     使用 mklabel 可以指定硬碟使用不同分割表類型,上面為指定 gpt 格式。若是硬碟超過 2TB 的儲存空間要建立適當分割區,通常需要使用 gpt 格式的分割表。不過需要有 OS 支援才可以正確存取。

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

        (parted) mklabel msdos
        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? y

        (parted) print
        Model: ATA VBOX HARDDISK (scsi)
        Disk /dev/sdb: 42.9GB
        Sector size (logical/physical): 512B/512B
        Partition Table: msdos

        Number  Start  End  Size  File system  Name  Flags

        (parted)

使用 mklabel 可以指定硬碟使用不同分割表類型,上面為指定傳統的 msdos 分割表格式

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

        (parted) mkpart primary 100 200
        (parted) mkpart primary 200 300
        (parted) mkpart extended 300 -1
        (parted) mkpart logical 300 500
        (parted) mkpart logical 501 1000

        (parted) print
        Model: ATA VBOX HARDDISK (scsi)
        Disk /dev/sdb: 42.9GB
        Sector size (logical/physical): 512B/512B
        Partition Table: msdos

        Number  Start   End     Size    Type      File system  Flags
         1      99.6MB  200MB   101MB   primary
         2      200MB   300MB   99.6MB  primary
         3      300MB   42.9GB  42.6GB  extended               lba
         5      301MB   500MB   199MB   logical
         6      501MB   1000MB  499MB   logical

分別使用 mkpart 建立 3 個主分割區,最後空間分配建立個延伸分割區,最後再建立 2 個邏輯分割區項目。

這邊附註就是,通常建立分割區時候,空的硬碟第一個分割區建立的位置可以指定 1MB 開始的地方即可使用,上面的操作方式浪費前面快 100MB 的空間沒有使用。

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

        (parted) set 1 boot on
        (parted) set 5 lvm on
        (parted) set 6 raid on
        (parted) print
        Model: ATA VBOX HARDDISK (scsi)
        Disk /dev/sdb: 42.9GB
        Sector size (logical/physical): 512B/512B
        Partition Table: msdos

        Number  Start   End     Size    Type      File system  Flags
         1      99.6MB  200MB   101MB   primary                boot
         2      200MB   300MB   99.6MB  primary
         3      300MB   42.9GB  42.6GB  extended               lba
         5      301MB   500MB   199MB   logical                lvm
         6      501MB   1000MB  499MB   logical                raid


        使用 set 命令,將第 1 個分割區設定 active boot flag,將第 5 個分割區改成 linux lvm 分割區項目,將第 6 個分割區改成 linux raid 分割區項目

        (parted) mkfs
        WARNING: you are attempting to use parted to operate on (mkfs) a file system.
        parted's file system manipulation code is not as robust as what you'll find in
        dedicated, file-system-specific packages like e2fsprogs.  We recommend
        you use parted only to manipulate partition tables, whenever possible.
        Support for performing most operations on most types of file systems
        will be removed in an upcoming release.
        Warning: The existing file system will be destroyed and all data on the partition
        will be lost. Do you want to continue?
        Yes/No? y
        Partition number? 1
        File system type?  [ext2]?
        (parted)

        使用 mkfs 將第 1 個分割區程式化成為 ext2fs。若是直接使用 mkfs 1 ext2 會顯示如下訊息:

        (parted) mkfs 1 ext2
        WARNING: you are attempting to use parted to operate on (mkfs) a file system.
        parted's file system manipulation code is not as robust as what you'll find in
        dedicated, file-system-specific packages like e2fsprogs.  We recommend
        you use parted only to manipulate partition tables, whenever possible.
        Support for performing most operations on most types of file systems
        will be removed in an upcoming release.
        Warning: The existing file system will be destroyed and all data on the partition
        will be lost. Do you want to continue?
        parted: invalid token: 1
        Yes/No?
所以改成 mkfs y 1 ext2 就可以正常使用了。不過畫面內來看 parted 不建議使用 mkfs 該命令直接建立檔案系統,使用 e2progfs 套件包內的 mke2fs 等命令建立會比較能夠符合目前更新現況發展。
 -----------------------------------------------------------------------------------------------
       
        (parted) rm 1
        (parted) rm 2
        (parted) rm 3
        (parted) print
        Model: ATA VBOX HARDDISK (scsi)
        Disk /dev/sdb: 42.9GB
        Sector size (logical/physical): 512B/512B
        Partition Table: msdos

        Number  Start  End  Size  Type  File system  Flags
       
        (parted)
使用 rm 命令,就可以刪除指定分割區項目,所以目前沒有任何建立的分割區項目

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

        (parted) mkpartfs primary ext2 1 200
        (parted) mkpartfs primary linux-swap 200 300
        WARNING: you are attempting to use parted to operate on (mkpartfs) a file system.
        parted's file system manipulation code is not as robust as what you'll find in
        dedicated, file-system-specific packages like e2fsprogs.  We recommend
        you use parted only to manipulate partition tables, whenever possible.
        Support for performing most operations on most types of file systems
        will be removed in an upcoming release.
        (parted)
        (parted) print
        Model: ATA VBOX HARDDISK (scsi)
        Disk /dev/sdb: 42.9GB
        Sector size (logical/physical): 512B/512B
        Partition Table: msdos

        Number  Start   End    Size   Type     File system  Flags
         1      1049kB  200MB  199MB  primary  ext2
         2      200MB   300MB  99.6MB  primary linux-swap(v1)


使用 mkpartfs 可以直接建立指定分割區並格式化分割區建立檔案系統。不過 parted 建議還是                            -----------------------------------------------------------------------------------------------

        (parted) rm 1
        (parted) rescue 1 300
        Information: A ext2 primary partition was found at 1049kB -> 200MB.  Do you want
        to add it to the partition table?
        Yes/No/Cancel? yes
        (parted) print
        Model: ATA VBOX HARDDISK (scsi)
        Disk /dev/sdb: 42.9GB
        Sector size (logical/physical): 512B/512B
        Partition Table: msdos

        Number  Start   End    Size    File system     Name     Flags
         1      1049kB  200MB  199MB   ext2
         2      200MB   300MB  99.6MB  linux-swap(v1)  primary

        (parted)

        最後就是刪除 1 這個分割區,然後透過 rescue 命令進行搜尋,最後有找到刪除的分割區並加以復原。最後:本篇簡單介紹了 gnu parted 程式用法,大致上提供了一些常見命令的使用方式,希望可以讓大家對 parted 有一些認識與了解。

 

延伸閱讀

聯成電腦講師專欄:linux 下使用 Exfat 檔案系統格式的儲存裝置

聯成電腦技術前線:談 Linux 系統環境快速建立大量的使用者帳號

聯成電腦分享:擁抱百萬雲端運算產業 競爭力全面升級 

lccnetvip 發表在 痞客邦 留言(2) 人氣()