Parted

出自 Arch Linux 中文维基

GNU Parted 是創建和處理分區表的程序。GParted 是 GUI 前端。

安裝[編輯 | 編輯原始碼]

安裝下列任一軟件包:

  • parted – 僅命令行版本
  • gpartedparted 的圖形化前端
注意:Wayland 下運行 GParted 同時需要安裝 xorg-xhost 可選包。更多信息請參考 [1]

使用[編輯 | 編輯原始碼]

Parted 有兩種模式:命令行模式和交互模式,請用下面命令啟動:

# parted device

其中 device 是要編輯的 塊設備(例如 /dev/sda/dev/nvme0n1/dev/mmcblk0 等)。如果你缺省了 device 參數,parted 將嘗試猜測要使用的設備。

命令行模式[編輯 | 編輯原始碼]

在命令行模式下,可以同時執行一個或多個命令:

# parted /dev/sda mklabel gpt mkpart P1 ext3 1MiB 8MiB 
注意: --help 等參數只有在命令行中才能指定。

交互模式[編輯 | 編輯原始碼]

交互模式簡化了分區過程,並自動將所有命令應用到指定的設備上,無需反覆指定目標設備。

In order to start operating on a device, execute:

# parted /dev/sdx

命令提示符會從 (#) 變成 (parted):這也意味着無需將新的命令提示符作為命令的一部分進行輸入。

要查看可用的命令,輸入:

(parted) help

完成操作後,或是要對另一個設備創建分區表或格式時,用下面命令退出:

(parted) quit

退出後命令提示符會變回到 #

如果命令沒帶參數,Parted 會進行詢問:

(parted) mklabel
New disk label type? gpt

數值設定[編輯 | 編輯原始碼]

很多分區系統有複雜的限制,Parted 可能會對輸入的數值進行稍微的修改。例如設定了 10.4Mb,實際會使用 10.352Mb。如果修正後的數值差異太大,Parted 會進行提示確認。如果你有需要指定數值,或是想看看 Parted 所做的操作,可以用扇區值加上「s」後綴指定數值,並使用「unit s」命令讓分區信息以扇區值為單位顯示。

從 parted-2.4 開始,當使用 「MiB」, 「GiB」, 「TiB」 等 IEC 單位時,parted 會使用與對應的字節值(即「B」後綴)相同的精確數值,不進行任何修正。而使用「4GB」這樣的值時,可能會落到最大前後相差 500MB 的位置上。因此,在創建分區時,建議使用字節(「B」),扇區(「s」)或是像「MiB」這樣的 IEC 二進制單位,而不是「MB」,「GB」等。

分區[編輯 | 編輯原始碼]

創建新分區表[編輯 | 編輯原始碼]

警吿: 如果你在存有數據的硬盤上創建新分區表,硬盤上所有數據都會被清楚。因此,在進行操作前請再次進行確認。
提示:

如果一個硬盤沒有做過分區,或者是你想要修改分區表的類型,你需要為對應的設備創建/重建分區表。另外,對於分區方案要完全重建的設備來説,重建分區表也很有用。

用下面的命令打開要創建/重建分區表的設備:

# parted /dev/sdx

使用以下命令創建 GUID 分區表

(parted) mklabel gpt

使用下列命令創建 MBR/MS-DOS 分區表:

(parted) mklabel msdos

分區方案[編輯 | 編輯原始碼]

這篇文章的某些內容需要擴充。

原因: 將所有的百分數替換為已對齊的特定 MiB 值,以防止 對齊問題。同時也提醒這一問題。 (在 Talk:Installation guide#Remove parted 中討論)

你可以決定磁盤分區的數量和各自的大小,以及分區應掛載到安裝的系統上哪些文件夾(一般稱為掛載點)。可以在分區#分區方案查看具體需要的分區。

創建分區將用到如下命令:

(parted) mkpart part-type-or-part-label fs-type start end
  • 根據分區表的不同,part-type-or-part-label 有不同的解釋:
    • MBR:參數被用作為分區類型,可選值為 primaryextendedlogical
    • GPT:參數被用作為 part-label,即分區的 PARTLABEL 參數。如果想不設置分區標籤,可以使用引上的空字符("")。
      注意: 網上的很多教程對 GPT 也使用了 mkpart primary 開頭的錯誤命令,這一命令會將分區標籤設置為「primary」。
  • fs-typehelp mkpart 命令顯示的標識符中最接近使用的文件系統的一項。mkpart 命令並不會創建文件系統:fs-type 參數只是簡單地被 parted 用於為 GPT 分區設置分區類型 GUID 或是為 MBR 分區設置分區類型 ID
    提示:parted 將 Linux 原生文件系統都映射為同一「Linux 文件系統」分區類型(GUID 0FC63DAF-8483-4772-8E79-3D69D8477DE4 或是 ID 0x83),所以可以安全地進行例如為 ext4 格式的分區使用 ext2 類型的操作。
  • start 是相對於設備起始位置的分區開始位置,由一個數字加上單位組成,例如 1MiB 值從 1 MiB 的位置開始。
  • end 是相對於設備起始位置的分區結束位置(不是start 的值開始)。它的格式與 start 相同,例如 100% 表示到設備的末端(使用所有剩餘空間)。
提示:
  • 對於使用 MBR 分區表的硬盤,建議在硬盤末端留下至少 33 個 512-byte 扇區(16.5 KiB)的未分區空間,以保證 MBR 與 GPT 間轉換的兼容性。
  • 為了不留空隙,分區的開始和結束應該首尾相連。
注意:
  • parted 不支持指定一個分區相對於前一個分區的開始和結束位置。參見 bug #59176bug #55841.
  • parted 可能會報出以下錯誤:
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel?
在這種情況下,請參考分區#分區對齊並參照#對齊進行修復。

下列命令將包含 /boot 目錄的分區標記為可啟動:

(parted) set partition boot on
  • partition 是要標記的分區編號(參考 print 命令的輸出)。
  • esp 是 GPT 上 boot 的別名。[2]

這篇文章的某些內容需要擴充。

原因: 講解 bootlegacy_bootesp 標記及它們在 MBR 和 GPT 上的不同用例。 (在 Talk:Parted 中討論)

UEFI/GPT 示例[編輯 | 編輯原始碼]

在每一個實例上都需要一個特殊的 EFI 系統分區

首先需要一個 EFI 系統分區.如果是和 Windows 雙系統啟動,此分區已經存在,不要重新創建。

使用如下命令創建新的 EFI 系統分區(建議至少 1 GiB):

(parted) mkpart "EFI system partition" fat32 1MiB 1025MiB
(parted) set 1 esp on

剩下的空間可以隨你決定,例如完全用在根分區上:

(parted) mkpart "root partition" ext4 1025MiB 100%
(parted) type 2 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709

如果要拆分為 swap (4 GiB)和 /(剩餘所有空間)兩個分區:

(parted) mkpart "swap partition" linux-swap 1025MiB 5121MiB
(parted) mkpart "root partition" ext4 5121MiB 100%
(parted) type 3 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709

如果要拆分為 swap(4 GiB),/(32 GiB)和 /home(剩餘所有空間)三個分區:

(parted) mkpart "swap partition" linux-swap 1025MiB 5121MiB
(parted) mkpart "root partition" ext4 5121MiB 37889MiB
(parted) type 3 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709
(parted) mkpart "home partition" ext4 37889MiB 100%
(parted) set 4 linux-home on

BIOS/MBR 示例[編輯 | 編輯原始碼]

最簡單的方案是使用如下命令創建使用所有空間的單一主分區:

(parted) mkpart primary ext4 1MiB 100%
(parted) set 1 boot on

在下面的示例中,將創建一個 4 GiB 的交換分區,然後使用所有剩餘空間創建一個 / 分區:

(parted) mkpart primary linux-swap 1MiB 4097MiB
 parted) mkpart primary ext4 4097MiB 100%
(parted) set 2 boot on

在下面的最後一個示例中,將創建獨立的 /boot (1 GiB)、swap (4 GiB)、/ (32 GiB) 和 /home(所有剩餘空間)分區:

(parted) mkpart primary ext4 1MiB 1025MiB
(parted) set 1 boot on
(parted) set 1 bls_boot on
(parted) mkpart primary linux-swap 1025MiB 5121MiB
(parted) mkpart primary ext4 5121MiB 37889MiB
(parted) mkpart primary ext4 37889MiB 100%

調整分區[編輯 | 編輯原始碼]

警吿: ext2/3/4 分區在調整前需要先卸載並停止使用。編輯使用中的系統的根分區會非常困難和危險,建議使用安裝介質/救援系統進行操作。
注意:
  • parted 只能移動分區的末端。
  • parted v3.2 resizepart 可能需要用到#交互模式[3]
  • 這些説明適用於使用 ext2,ext3 或 ext4 文件系統的分區。

如果要擴展分區,必須先調整分區的大小,然後調整其上文件系統的大小;如果要縮小分區,必須先調整文件系統的大小,再調整分區,以避免數據丟失。

擴展分區[編輯 | 編輯原始碼]

在 parted 交互模式下擴展分區,使用:

(parted) resizepart number end

其中 number 是您正在擴展的分區的編號,而 end 是該分區的新末端(需要大於舊的末端)。

要擴展分區上的 ext2/3/4 文件系統,使用如下命令(如果沒有指定 size,默認值為分區的大小):

# resize2fs /dev/sdaX size

要擴展 Btrfs 文件系統:

# btrfs filesystem resize size /path/to/mount/point

其中 /path/to/mount/point 代表要擴展的分區的掛載點,size 是新大小(格式如 16G)或是修改值(格式如 +1G)。使用 max 可以填充分區中的所有剩餘空間。

縮小分區[編輯 | 編輯原始碼]

縮小分區上的 ext2/3/4 文件系統:

# resize2fs /dev/sdaX size
注意: 與 parted 不同,resize2fs(8) 使用 K,M,G 和 T 指代 KiB,MiB,GiB 和 TiB。注意,e2fsprogs 文檔錯誤地將 kibibytes,mebibytes,gibibytes 和 tebibytes 稱為「kilobytes,megabytes,gigabytes,terabytes 的二次方"。

縮小 Btrfs 文件系統:

# btrfs filesystem resize size /path/to/mount/point

其中 /path/to/mount/point 代表要縮小的分區的掛載點,而 size 是該分區的新大小。

然後在 parted 交互模式下縮小分區:

(parted) resizepart number end

其中 number 是要縮小的分區的編號,而 end 是該分區的新末端(需要小於舊末端)。

完成後,使用 util-linux 中的 resizepart 命令吿訴內核新的分區大小:

# resizepart device number size

其中 device 是保存分區的設備,number 是分區的編號, size 是格式為 512 字節扇區的分區新大小。

已知問題[編輯 | 編輯原始碼]

除非命令本身就具有危險性(例如rmmklabelmkpart),Parted 始終會在進行具有潛在危險性的操作前發出警吿。

對齊[編輯 | 編輯原始碼]

警吿: parted 僅對齊分區起始端,不對齊大小。這一特性不符合 dm-crypt/LUKS 的需求,詳細信息請參考 Advanced Format#Partition alignment

在創建分區時,parted 可能會對分區未對齊發出警吿,但不會對正確對齊的分區發出提示。例如:

(parted) mkpart primary fat16 0 32M
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel?                                                     

這一警吿意味着分區的起始端未對其。輸入「Ignore」來無視警吿,以扇區為格式輸出分區表來查看起始端位置,以捨入到 2 次方的值遞增作為起始端移除並重建分區,直到警吿停止。 舉個例子,在具有 512B 扇區的閃存盤上,Parted 期望扇區的起始位置為 2048 的乘積,即 1 MiB 對齊。

如果你希望 parted 自動計算正確的對齊值,可以使用 0% 而不是特定值作為起始端。例如,如果要創建一個大 ext4 分區,可以使用如下命令:

(parted) mkpart primary ext4 0% 100%

小技巧[編輯 | 編輯原始碼]

Check alignment[編輯 | 編輯原始碼]

警吿: parted 僅驗證分區起始端是否對齊,而不驗證大小。這一特性不符合 dm-crypt/LUKS 的需求,詳細信息請參考 Advanced Format#Partition alignment

在已分區的硬盤上,你可以用 parted 驗證單個分區是否對齊。例如,要驗證 /dev/sda 上的分區 1,可以使用如下命令:

# parted /dev/sda
(parted) align-check optimal 1
1 aligned

參考[編輯 | 編輯原始碼]