2022-07-22 08:48:52 +01:00
|
|
|
---
|
2022-09-06 13:26:44 +01:00
|
|
|
tags:
|
2022-07-22 08:48:52 +01:00
|
|
|
- disks
|
2024-06-16 18:15:03 +01:00
|
|
|
- Linux
|
|
|
|
- procedural
|
2022-07-22 08:48:52 +01:00
|
|
|
---
|
|
|
|
|
2024-05-06 13:20:05 +01:00
|
|
|
# Linux disk partitions
|
2022-07-22 08:48:52 +01:00
|
|
|
|
2024-05-06 13:20:05 +01:00
|
|
|
A disk is divided up into partitions which are subsections of the overall disk.
|
|
|
|
The kernel presents each partition as a [block device](Devices.md#Devices) as it
|
|
|
|
would with an entire disk.
|
2022-07-22 08:48:52 +01:00
|
|
|
|
2024-02-02 15:58:13 +00:00
|
|
|
The disk dedicates a small part of its contents to a **partition table**: this
|
|
|
|
defines the different partitions that comprise the total disk space.
|
2022-07-22 08:48:52 +01:00
|
|
|
|
|
|
|
## Viewing current partitions
|
2022-09-06 13:26:44 +01:00
|
|
|
|
2024-02-02 15:58:13 +00:00
|
|
|
Whenever you install a Linux distribution on a real or virtual machine, you must
|
|
|
|
partition the drive. There are three main tools to choose from: `parted`,
|
|
|
|
`g(raphical)parted`, `fdisk`.
|
2022-07-22 08:48:52 +01:00
|
|
|
|
2024-02-02 15:58:13 +00:00
|
|
|
For a top-level overview of your disks and their main partitions you can run
|
|
|
|
`lsblk` (_list block devices_):
|
2022-07-22 08:48:52 +01:00
|
|
|
|
|
|
|
```bash
|
|
|
|
$ lsblk
|
|
|
|
|
|
|
|
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
|
2022-09-06 13:26:44 +01:00
|
|
|
sda 8:0 0 465.7G 0 disk
|
|
|
|
├─sda1 8:1 0 200M 0 part
|
2022-07-22 08:48:52 +01:00
|
|
|
└─sda2 8:2 0 465.4G 0 part /run/media/thomas/ganesh
|
2022-09-06 13:26:44 +01:00
|
|
|
nvme0n1 259:0 0 476.9G 0 disk
|
|
|
|
├─nvme0n1p1 259:1 0 488M 0 part
|
2022-07-22 08:48:52 +01:00
|
|
|
├─nvme0n1p2 259:2 0 27.9G 0 part /
|
|
|
|
└─nvme0n1p3 259:3 0 448.5G 0 part /home
|
|
|
|
```
|
|
|
|
|
|
|
|
We can use `parted -l` to view the partition table for the current machine:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
Model: SKHynix_HFS512GDE9X081N (nvme)
|
|
|
|
Disk /dev/nvme0n1: 512GB
|
|
|
|
Sector size (logical/physical): 512B/512B
|
|
|
|
Partition Table: gpt
|
2022-09-06 13:26:44 +01:00
|
|
|
Disk Flags:
|
2022-07-22 08:48:52 +01:00
|
|
|
|
|
|
|
Number Start End Size File system Name Flags
|
|
|
|
1 1049kB 513MB 512MB fat32 boot, esp
|
|
|
|
2 513MB 30.5GB 30.0GB ext4
|
|
|
|
3 30.5GB 512GB 482GB ext4
|
|
|
|
```
|
|
|
|
|
|
|
|
We can use `fdisk -l` to get slightly more info:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
disk /dev/nvme0n1: 476.94 GiB, 512110190592 bytes, 1000215216 sectors
|
2022-09-06 13:26:44 +01:00
|
|
|
Disk model: SKHynix_HFS512GDE9X081N
|
2022-07-22 08:48:52 +01:00
|
|
|
Units: sectors of 1 * 512 = 512 bytes
|
|
|
|
Sector size (logical/physical): 512 bytes / 512 bytes
|
|
|
|
I/O size (minimum/optimal): 512 bytes / 512 bytes
|
|
|
|
Disklabel type: gpt
|
|
|
|
Disk identifier: 08175E77-CB9F-C34A-9032-DF29A3F8F0FE
|
|
|
|
|
|
|
|
Device Start End Sectors Size Type
|
|
|
|
/dev/nvme0n1p1 2048 1001471 999424 488M EFI System
|
|
|
|
/dev/nvme0n1p2 1001472 59594751 58593280 27.9G Linux filesystem
|
|
|
|
/dev/nvme0n1p3 59594752 1000214527 940619776 448.5G Linux filesystem
|
|
|
|
```
|
2022-09-06 13:26:44 +01:00
|
|
|
|
2024-05-06 13:50:04 +01:00
|
|
|
## Standard Linux partitions
|
|
|
|
|
2024-02-02 15:58:13 +00:00
|
|
|
The two tools disclose that the main harddrive is `/dev/nvme0n1` (equivalent to
|
|
|
|
`sda` on older machines running Linux) and it has the standard three partitions:
|
2022-09-06 13:26:44 +01:00
|
|
|
|
|
|
|
- Boot partition (`/dev/nvme0n1p1`)
|
|
|
|
- Root dir (`/dev/nvme0n1p2`)
|
|
|
|
- Home dir (`/dev/nvme0n1p3`)
|
2024-05-06 13:50:04 +01:00
|
|
|
|
|
|
|
### Boot partition
|
|
|
|
|
2024-05-06 14:20:04 +01:00
|
|
|
- Takes up the smallest amount of space
|
2024-05-06 13:50:04 +01:00
|
|
|
- Contains the Linux kernel and the bootloader (GRUB, usually) and any other
|
|
|
|
files required for booting.
|
|
|
|
- Once the BIOS has initialized the hardware components it hands control to the
|
|
|
|
bootloader stored in this partition.
|
|
|
|
- The bootloader loads the kernel contained in its partition, into memory
|
|
|
|
|
2024-05-06 14:20:04 +01:00
|
|
|
### Root partition (`/`)
|
|
|
|
|
|
|
|
- This houses everything to do with the operation of the operating system apart
|
|
|
|
from the initial booting process. Once the kernel is in memory it accesses the
|
|
|
|
resources in the root partition to get the OS up and running. These resources
|
|
|
|
include system libraries, utilities, system-wide configs and application
|
|
|
|
software.
|
|
|
|
|
|
|
|
- The root partition is vital for the system's functionality. Without it, the
|
|
|
|
system cannot boot or operate. It needs to be
|
|
|
|
large enough to accommodate the operating system, installed programs, and system
|
|
|
|
libraries, but it doesn't need to store user data or
|
|
|
|
additional applications, which can be located on other partitions.
|
|
|
|
|
2024-05-06 13:50:04 +01:00
|
|
|
- This is the domain of the [superuser](User_Space.md#root-user-superuser). The
|
|
|
|
part of the filesystem that you need sudo priveleges to access and where you
|
|
|
|
manage users
|
|
|
|
|
2024-05-06 14:20:04 +01:00
|
|
|
### Home partition
|
|
|
|
|
|
|
|
- This is presented as `/home/`, i.e. that it is a descendent of `/`. But this
|
|
|
|
is because the Linux file system is hierarchical. Typically `/home/` is
|
|
|
|
usually its own partition.
|
|
|
|
- Separating user data and system data in this way protects user data during
|
|
|
|
upgrades or reinstallation. Reinstalling or upgrading the OS can be done
|
|
|
|
without affecting these files.
|
|
|
|
- Each user has their own directory off of `/home`, e.g `/home/thomas`.
|
|
|
|
- While the root partition (`/`) is essential for the operation of the OS,
|
|
|
|
placing `/home` on a separate partition allows for better management of user
|
|
|
|
data, enhancing the system's flexibility and the user's control over their own
|
|
|
|
files, without compromising the integrity or performance of the OS. This
|
|
|
|
approach exemplifies the Linux philosophy of giving the user control while
|
|
|
|
maintaining a clear distinction between system
|
|
|
|
resources and user data.
|
2022-07-22 08:48:52 +01:00
|
|
|
|
|
|
|
## Types of partition table
|
2022-09-06 13:26:44 +01:00
|
|
|
|
2024-02-02 15:58:13 +00:00
|
|
|
In the Linux world there are two main types: MBR and GPT. The type of table used
|
|
|
|
determines how the OS boots. So although partition tables are also responsible
|
|
|
|
for the partitioning of non-bootable sectors of a disk, **they are distinguished
|
|
|
|
by the boot system they implement**. If we look at the output from `parted` and
|
|
|
|
`fdisk` above we see that the harddrive uses the GPT partition type.
|
2022-07-22 08:48:52 +01:00
|
|
|
|
|
|
|
#### Primary, extended and logical partitions
|
|
|
|
|
2024-02-02 15:58:13 +00:00
|
|
|
Most standard partition tables allow for primary, extended and logical
|
|
|
|
partitions. The primary partition is the part of the harddisk that contains the
|
|
|
|
operating system and is thus described as 'bootable' and may be called the 'boot
|
|
|
|
partition'. During the bootstrapping process this is injected into memory as the
|
2024-06-16 18:30:03 +01:00
|
|
|
[kernel](The_kernel.md).
|
2022-09-06 13:26:44 +01:00
|
|
|
|
2024-02-02 15:58:13 +00:00
|
|
|
The extended partition is basically everything other than the primary partition.
|
|
|
|
This is typically subdivided into other partitions that are called _logical_
|
|
|
|
partitions. This is because they physically reside in the same sector of the
|
|
|
|
disk (the extended partition) but are treated as virtual and independent disks.
|
2022-07-22 08:48:52 +01:00
|
|
|
|
|
|
|
In our example above:
|
|
|
|
|
2022-09-06 13:26:44 +01:00
|
|
|
- `/dev/nvme0n1p1` is the primary/boot partition
|
2024-02-02 15:58:13 +00:00
|
|
|
- `/dev/nvme0n1p2` and `/dev/nvme0n1p3` comprise the extended partition and by
|
|
|
|
themselves are each logical partitions.
|
2022-07-22 08:48:52 +01:00
|
|
|
|
|
|
|
<dl>
|
|
|
|
<dt>MBR</dt>
|
|
|
|
<dd>
|
|
|
|
<ul>
|
|
|
|
<li>Stands for Master Boot Record</li>
|
|
|
|
<li>Uses BIOS in the boot process</li>
|
|
|
|
<li>Can only works with disks up to 2TB in size</li>
|
|
|
|
<li>Only supports 4 primary partitions. This means the number of operating systems you install is limitied to this number.</li>
|
|
|
|
<li>This is the first 512 bytes of a storage device, preceding the first partition.</li>
|
|
|
|
</ul>
|
|
|
|
</dd>
|
|
|
|
<dt>GPT</dt>
|
|
|
|
<dd>
|
|
|
|
<ul>
|
|
|
|
<li>Stands for GUID Partition Table </li>
|
|
|
|
<li>Gradually replacing MBR</li>
|
|
|
|
<li>Uses UEFI instead of BIOS</li>
|
|
|
|
<li>As name indicates, every partition on disk has its own globally-unique identifier</li>
|
|
|
|
<li>Vastly more partitions available than with MBR (dependent on operating system)</li>
|
|
|
|
<li>Offers greater recovery options and anti-corruption safeguards</li>
|
|
|
|
</ul>
|
|
|
|
</dd>
|
|
|
|
</dl>
|
|
|
|
|
2024-05-06 13:40:05 +01:00
|
|
|
## Related notes
|
2022-07-22 08:48:52 +01:00
|
|
|
|
2024-05-06 13:40:05 +01:00
|
|
|

|