# Parted (简体中文)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

相关文章

- GNU Parted
- Gparted-Live
- Partitioning

翻译状态：本文是 Parted 的翻译。上次翻译日期：2018-12-05。如果英文版本有所更改，则您可以帮助同步翻译。

GNU Parted 是创建和处理分区表的程序。GParted 是 GUI 前端。

## 安装

从官方源安装 软件包 parted, 要使用图像界面，安装 gparted。

## 使用

Parted 有两种模式：命令行和交互，请用下面命令启动：

    # parted device

`device` 是要编辑的硬盘设备(例如 `/dev/sda`)。如果忽略了 `device` 参数，parted 将尝试猜测要使用的设备。

### 命令行模式

在命令行模式下，可以同时执行一个或多个命令：

    # parted /dev/sda mklabel gpt mkpart P1 ext3 1MiB 8MiB

注意： `--help` 等参数只有在命令行中才能指定。

### 交互模式

交互模式简化了分区过程，可以自动对设备执行分区操作。打开需要新建分区表的设备：

    # parted /dev/sdx

命令提示符会从 (`#`) 变成 `(parted)`: 要查看可用的命令：

    (parted) help

完成操作后，用下面命令退出：

    (parted) quit

退出后命令提示符变成 `#`.

如果命令没带参数，Parted 会进行询问：

    (parted) mklabel
    New disk label type? gpt

## 数值设定

很多分区系统有复杂的限制，Parted 可能会对输入的数值进行稍微的修改。例如设定了 10.4Mb，实际会使用 10.352Mb。如果修正后的数值差异太大，Parted 会进行提示确认。用扇区数值("s" 后缀)可以进行精确的数值设置。

parted 2.4 开始，当使用 “MiB”, “GiB”, “TiB” 等 IEC 单位时，parted 会使用精确数值，不进行修正。而使用 “4GB” 这样的设置时，可能会落在前后 500MB 的未知。所以在创建分区时，应该指定比特(“B”)、扇区(“s”)或 IEC 二进制单位 “MiB”，不要使用 “MB”, “GB”。

## Partitioning

### 创建新分区表

如果设备没有分区，或者要改变分区表类型，重建分区结构，需要新建分区表。

用下面命令打开分区：

    # parted /dev/sdx

为 BIOS 系统创建 MBR/msdos 分区表：

    (parted) mklabel msdos

为 UEFI 系统创建 GPT 分区表：

    (parted) mklabel gpt

### 分区方案

您可以决定磁盘应该分为多少个区，每个分区又挂载在系统的哪个目录。将分区如何映射至目录（一般称此为挂载点），取决于您的分区方案。需要满足：

- 至少需要创建一个 `/` (root) 目录，有些分区类型和 启动加载器组合有额外的分区要求：
- BIOS/GPT + GRUB: 需要按照 BIOS 启动分区设置 的方式创建一个 1M 或 2M 的 `EF02` 类型分区.
- UEFI 的主板，需要一个 EFI 系统分区.
- 如果您需要加密磁盘，则必须加以调整分区方案。系统安装后，也可以再配置加密文件夹，容器或 home 目录。

系统需要需要 `/boot`、`/home` 等目录， Arch 文件系统架构 有各目录的详细介绍。如果没有创建单独的`/boot` 或 `/home` 分区，这些目录直接放到了根分区下面。后面会介绍如何创建 交换分区。

在下面的示例中，假定将新的连续分区方案应用于单个设备。 还将为 `/boot` 和 `/home` 目录创建一些可选分区：另请参阅 Arch filesystem hierarchy，那里将解释各个目录的用途。 如果没有为 `/boot` 或 `/home` 等目录创建单独的分区，则这些分区将仅包含在 `/` 分区中。 此外，还将说明为 swap space 创建可选分区的过程。

用下面命令打开 parted 交互模式：

    # parted /dev/sdx

用下面命令创建分区：

    (parted) mkpart part-type fs-type start end

- `part-type` 是分区类型，可以选择 `primary`, `extended` 或 `logical`，仅用于 MBR 分区表.
- `fs-type` 是文件系统类型，支持的类型列表可以通过 `help mkpart` 查看。 mkpart 并不会实际创建文件系统， `fs-type` 参数仅是让 parted 设置一个 1-byte 编码，让启动管理器可以提前知道分区中有什么格式的数据。参阅 Wikipedia:Disk partitioning#PC partition types.

  提示： 大多数 Linux native file systems 对应的分区码相同 (0x83), 所以对一个 ext4 格式的分区使用例如 `ext2` 类型是安全的.

- `start` 是分区的起始位置，可以带单位, 例如 `1M` 指 1MiB.
- `end` 是设备的结束位置(不是 与 `start` 值的差)，同样可以带单位，也可以用百分比，例如 `100%` 表示到设备的末尾。
- 为了不留空隙，分区的开始和结束应该首尾相连。

警告： 分区不相互重叠是很重要的：如果您不想在设备中留下未使用的空间，请确保每个分区从上一个分区的结尾处开始。

如果看到下面警告：

    Warning: The resulting partition is not properly aligned for best performance.
    Ignore/Cancel?

表示分区没对齐，请参照分区对齐进行修正。

下面命令设置 `/boot` 为启动目录：

    (parted) set partition boot on

- `partition` 是分区的编号，从 `print` 命令获取。

#### UEFI/GPT 示例

首先需要一个 EFI 系统分区.如果是和 Windows 双系统启动，此分区已经存在，不要重新创建。

用下面命令创建分区 (建议大小是 512MiB)。

    (parted) mkpart ESP fat32 1M 513M
    (parted) set 1 boot on

剩下的空间可以按需要创建，root 占用全部 100% 剩余空间：

    (parted) mkpart primary ext4 513M 100%

`/` (20GiB)，剩下的给 `/home`：

    (parted) mkpart primary ext4 513M 20.5G
    (parted) mkpart primary ext4 20.5G 100%

创建 `/` (20GiB), swap (4Gib), 剩下给 `/home`：

    (parted) mkpart primary ext4 513M 20.5G
    (parted) mkpart primary linux-swap 20.5G 24.5G
    (parted) mkpart primary ext4 24.5G 100%

#### BIOS/MBR 示例

单根目录分区：

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

20Gib `/` 分区，剩下的给 `/home`：

    (parted) mkpart primary ext4 1M 20G
    (parted) set 1 boot on
    (parted) mkpart primary ext4 20G 100%

`/boot` (100MiB), `/` (20Gib), swap (4GiB) 剩下的给 `/home`:

    (parted) mkpart primary ext4 1M 100M
    (parted) set 1 boot on
    (parted) mkpart primary ext4 100M 20G
    (parted) mkpart primary linux-swap 20G 24G
    (parted) mkpart primary ext4 24G 100%

### 调整分区

警告： 若要调整分区，必须先停止使用并卸载它。如果无法卸载（比如，它被挂载到 `/`，使用安装介质/备用系统。 ）
注意：

- 使用 `parted`，你只能移动分区的末尾.
- 在 parted v4.2 resizepart 可能需要使用#交互模式.[1]
- 这些说明适用于格式为ext2，ext3或ext4文件系统的分区。

如果要扩展分区，则必须先调整分区的大小，然后再调整其上的文件系统的大小; 如果要缩小分区，必须先调整文件系统的大小，再调整分区，以避免数据丢失。

#### 扩展分区

要扩展分区（在 parted 交互模式下）：

    (parted) resizepart number end

其中 `number` 是您正在扩展的分区的编号，而 `end` 是该分区的新末端（需要大于旧的末端）。

然后，扩展此分区上的文件系统：

    # resize2fs /dev/sdaX size

`sdaX` 代表您正在扩展的分区，而 `size` 是分区的新大小。

#### 缩小分区

缩小分区上的文件系统：

    # resize2fs /dev/sdaX size

其中 `sdaX` 代表您要缩小的分区，而 `size` 是该分区的新大小。

然后缩小分区（在 parted 交互模式下）：

    (parted) resizepart number end

其中 `number` 是您要缩小的分区的编号，而 `end` 是该分区的新末端（需要小于旧末端）。

完成后，使用 util-linux 中的 resizepart 命令告诉内核新的分区大小：

    # resizepart device number size

其中 `device` 是保存分区的设备，`number` 是分区的编号， `size` 是分区的新大小。

## Warnings

Parted will always warn you before doing something that is potentially dangerous, unless the command is one of those that is inherently dangerous (viz., rm, mklabel and mkpart).

### Alignment

When creating a partition, parted might warn about improper partition alignment but does not hint about proper alignment. For example:

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

The warning means the partition start is not aligned. Enter "Ignore" to go ahead anyway, print the partition table in sectors to see where it starts, and remove/recreate the partition with the start sector rounded up to increasing powers of 2 until the warning stops. As one example, on a flash drive with 512B sectors, Parted wanted partitions to start on sectors that were a multiple of 2048, which is 1 MiB alignment.

If you want parted to attempt to calculate the correct alignment for you, specify the start position as 0% instead of some concrete value. To make one large ext4 partition, your command would look like this:

    (parted) mkpart primary ext4 0% 100%

## 小技巧

### 双启动 Windows XP

如果您打算将一个同属于启动分区的 Windows XP 分区移动到另一块硬盘，只要将以下的注册表删除，之后就可以用 GParted 轻易地操作，Windows 不会出现任何问题:

    HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices

相关资料参见这里。

### Check alignment

On an already partitioned disk, you can use parted to verify the alignment of a partition on a device. For instance, to verify alignment of partition 1 on `/dev/sda`:

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

Categories:

- File systems (简体中文)
- System recovery (简体中文)