文、專任講師小州
前言:
全新的硬碟購買回來後,通常硬碟需要使用之前都要先經過磁碟分割的動作,並適當的格式化建立檔案系統才可以正常使用。目前許多外接的硬碟,尤其隨身碟這類都已經在出貨之前預先完成這類流程。在 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 檔案系統格式的儲存裝置
留言列表