Parted - Arch Linux 中文维基

跳至內容

# Parted

出自 Arch Linux 中文维基
翻譯狀態：

- 本文（或部分內容）譯自 Parted，最近一次同步於 2024-05-22，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

相關文章

- fdisk
- gdisk
- 分區

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

## 安裝

安裝下列任一軟體包：

- parted包 – 僅命令行版本
- gparted包 – parted 的圖形化前端

注意：在 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」等。

## 分區

### 創建新分區表

警告：如果你在存有數據的硬碟上創建新分區表，硬碟上所有數據都會被清除。因此，在進行操作前請再次進行確認。
提示：

- 在分區前，檢查你的 NVMe 硬碟和先進格式硬碟是否使用了最佳邏輯扇區大小。
- 在對固態硬碟進行分區之前，考慮執行存儲單元清理（英語：Solid state drive/Memory cell clearing）。

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

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

    # 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：參數被用作為`分區類型`，可選值為 `primary`，`extended` 或 `logical`。
  - GPT：參數被用作為 `part-label`，即分區的 PARTLABEL 參數。如果想不設置分區標籤，可以使用引上的空字符（`""`）。
    注意：網上的很多教程對 GPT 也使用了 `mkpart primary` 開頭的錯誤命令，這一命令會將分區標籤設置為「primary」。
- `fs-type` 是 `help 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 #59176 和 bug #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]

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

原因：講解 `boot`，`legacy_boot` 和 `esp` 標記及它們在 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 字節扇區的分區新大小。

## 已知問題

除非命令本身就具有危險性（例如rm，mklabel 和 mkpart），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

## 參考

- GNU parted - Parted 用戶手冊
- How to align partitions for best performance using parted
- 調整 ext3/ext4 分區大小
- GParted 官方論壇

分類：​

- 文件系統
- 系統恢復
- 命令
- GNU

Parted
新增話題