trents_blog/docs/posts/faster-partitioning-with-sgdisk.md
2020-12-15 00:17:03 -08:00

154 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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 youre 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 dont 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