154 lines
4.5 KiB
Markdown
154 lines
4.5 KiB
Markdown
|
---
|
|||
|
title: "Faster Partitioning With sgdisk"
|
|||
|
date: 2019-02-11T04:23:52-08:00
|
|||
|
draft: false
|
|||
|
tags: ["command-line","gdisk","partition","sgdisk"]
|
|||
|
authors: ["trent"]
|
|||
|
---
|
|||
|
date: 2019-02-11T04:23:52-08:00
|
|||
|
|
|||
|
## **Disclaimer**
|
|||
|
If any of this is wrong, let me know so I can fix it. No actual hard drives were harmed in the production of this blog post.
|
|||
|
|
|||
|
The examples are easier to read if you turn your smart phone sideways.
|
|||
|
|
|||
|
## **Command Line Is Faster**
|
|||
|
Sure you can partition your discs using a GUI disk management application or an interactive,
|
|||
|
menu-driven terminal interface. But the command line is faster.
|
|||
|
|
|||
|
## **gdisk vs sgdisk**
|
|||
|
`sgdisk` is the scriptable version of `gdisk` (gptfdisk).
|
|||
|
|
|||
|
## **[what the manpage says](https://manpages.debian.org/stretch/gdisk/sgdisk.8.en.html){target=_blank}**
|
|||
|
If you’re familiar with `gdisk`, you probably know how to interactively set the partition size and type.
|
|||
|
If you look at the man page for `sgdisk` you see that the relevant flags are `-n` and `-t`. The beginning and ending numbers
|
|||
|
are absolute, unless you prepend them with a `+` or `-` sign, in which case they become relative.
|
|||
|
```console
|
|||
|
# For New Partition:
|
|||
|
-n, --new=partnum:start:end
|
|||
|
```
|
|||
|
```console
|
|||
|
# Change partition type:
|
|||
|
-t, --typecode=partnum:{hexcode|GUID}
|
|||
|
```
|
|||
|
## **Example with Separate EFI and / Partitions**
|
|||
|
BTW, `gdisk` is a partitioning tool intended to be used with a gpt partition table, so the assumption is that you would want an efi partition,
|
|||
|
|
|||
|
(although the efi partition does not have to be on the disk you are partitioning or even on the same disk where your other system partitions are).
|
|||
|
|
|||
|
1. Wipe any leftover filesystem metadata with wipefs.
|
|||
|
```console
|
|||
|
wipefs --all /dev/sdx
|
|||
|
```
|
|||
|
1. Create a new GPT partition table.
|
|||
|
```console
|
|||
|
sgdisk /dev/sdx -o
|
|||
|
```
|
|||
|
1. Create an efi partition of 512MB by specifying the end of the partition (relative) and the partition type, `ef00`.
|
|||
|
```console
|
|||
|
sgdisk /dev/sdx -n 1::+512MiB -t 1:ef00
|
|||
|
```
|
|||
|
1. Create an `/` partition using the remainder of the disk, by not specifying the end or the beginning or partition type, which defaults to 8300.
|
|||
|
```console
|
|||
|
sgdisk /dev/sdx -n 2
|
|||
|
```
|
|||
|
1. Format the efi partition fat 32.
|
|||
|
```console
|
|||
|
mkfs.vfat -F32 /dev/sdx1
|
|||
|
```
|
|||
|
1. Format the `/` partition ext4.
|
|||
|
```console
|
|||
|
mkfs.ext4 /dev/sdx2
|
|||
|
```
|
|||
|
## **Practice With A Sparse Image**
|
|||
|
If you don’t want to partition a real hard drive, you can practice using an sparse image file, instead.
|
|||
|
```console
|
|||
|
# create a sparse image file
|
|||
|
truncate -S 100G practiceImage.img
|
|||
|
# partition the image file with sgdisk
|
|||
|
sgdisk practiceImage.img -o
|
|||
|
# etc
|
|||
|
```
|
|||
|
## **Example with Separate /boot, EFI, and luks-encrypted / Partitions**
|
|||
|
|
|||
|
1. Wipe any leftover filesystem metadata with `wipefs`.
|
|||
|
```console
|
|||
|
wipefs --all /dev/sdx
|
|||
|
```
|
|||
|
1. Create a new GPT partition table.
|
|||
|
```console
|
|||
|
sgdisk /dev/sdx -o
|
|||
|
```
|
|||
|
1. Create an efi partition of 512MB by specifying the end of the partition (relative) and the partition type, `ef00`.
|
|||
|
```console
|
|||
|
sgdisk /dev/sdx -n 1::+512MiB -t 1:ef00
|
|||
|
```
|
|||
|
1. Create a `/boot` partition of 1GB, by specifying the end of the partition (relative), but not specifying the partition type which defaults to `8300`.
|
|||
|
```console
|
|||
|
sgdisk /dev/sdx -n 2::+1GiB
|
|||
|
```
|
|||
|
1. Create an `/` partition using the remainder of the disk, by not specifying the end or the beginning or partition type, which defaults to `8300`.
|
|||
|
```console
|
|||
|
sgdisk /dev/sdx -n 3
|
|||
|
```
|
|||
|
1. Format the efi partition fat 32.
|
|||
|
```console
|
|||
|
mkfs.vfat -F32 /dev/sdx1
|
|||
|
```
|
|||
|
1. Format the `/boot` partition ext4.
|
|||
|
```console
|
|||
|
mkfs.ext4 /dev/sdx2
|
|||
|
```
|
|||
|
1. Encrypt the `/` partition.
|
|||
|
```console
|
|||
|
cryptsetup -y -v luksFormat --type luks2 /dev/sdx3
|
|||
|
```
|
|||
|
1. Decrypt the `/` device.
|
|||
|
```console
|
|||
|
cryptsetup open /dev/sdx3 cryptroot
|
|||
|
```
|
|||
|
1. Format the `/` device.
|
|||
|
```console
|
|||
|
mkfs.xfs /dev/mapper/cryptroot
|
|||
|
```
|
|||
|
## **What About Swap?**
|
|||
|
I prefer to use a swap file inside the luks-encrypted / partition. But you can make a separate swap partition if you like.
|
|||
|
## **Example with 2GB swap partition**
|
|||
|
|
|||
|
1. Wipe the disc.
|
|||
|
```console
|
|||
|
wipefs --all /dev/sdx
|
|||
|
```
|
|||
|
1. Create a new GPT partition table.
|
|||
|
```console
|
|||
|
sgdisk /dev/sdx -o
|
|||
|
```
|
|||
|
1. Create an EFI partition.
|
|||
|
```console
|
|||
|
sgdisk /dev/sdx -n 1::+512MiB -t 1:ef00
|
|||
|
```
|
|||
|
1. Create a `/boot` partition.
|
|||
|
```console
|
|||
|
sgdisk /dev/sdx -n 2::+1GiB
|
|||
|
```
|
|||
|
1. Create a `/` partition with a relative negative end.
|
|||
|
```console
|
|||
|
sgdisk /dev/sdx -n 3::-2GiB
|
|||
|
```
|
|||
|
1. Create a swap partion type `8200`.
|
|||
|
```console
|
|||
|
sgdisk /dev/sdx -n 4 -t 4:8200
|
|||
|
```
|
|||
|
1. format the partitions.
|
|||
|
```console
|
|||
|
mkfs.vfat -F32 /dev/sdx1
|
|||
|
mkfs.ext4 /dev/sdx2
|
|||
|
mkfs.xfs /dev/sdx3
|
|||
|
mkswap /dev/sdx4
|
|||
|
```
|
|||
|
## **Conclusion**
|
|||
|
|
|||
|
* Good luck to you.
|
|||
|
* Backup your data first.
|
|||
|
* Kind Regards, Trent
|