LVM: Difference between revisions
Converted type descriptions to a definition list |
Tidy up text and code blocks. |
||
| (One intermediate revision by the same user not shown) | |||
| Line 1: | Line 1: | ||
[https://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux) | Linux's '''[https://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux) Logical Volume Manager] (LVM)''' provides means to dynamically organize partitions. For example, partitions can be created, moved, resized and deleted regardless of fragmentation on disk. | ||
== Basic Setup == | == Basic Setup == | ||
LVM manages four basic building blocks: | |||
; Physical volume (PV) : Unix block device node reserved for use by LVM. Examples: a disk partition, a whole disk (i.e. without a partition table), a meta device, or a loopback file. | |||
; Volume group (VG) : Group of PVs for allocating PEs to LVs. | |||
; Logical volume (LV) : "Virtual partition" composed of PEs inside a VG. | |||
; Physical extent (PE) : The smallest contiguous [[wikipedia:Extent (file systems)|extent]] (default 4 MiB) in the physical volume that can be allocated to an LV. | |||
< | === Create an LV === | ||
# | Below are shell commands to setup a PV, a VG and an LV from scratch. LVM comes enabled by default on NixOS.<syntaxhighlight lang="shell"> | ||
# format the partion into a physical volume (check with pvdisplay) | |||
pvcreate /dev/sda2 | pvcreate /dev/sda2 | ||
# | # create a new volume group named pool (check with vgdisplay) | ||
vgcreate pool /dev/sda2 | vgcreate pool /dev/sda2 | ||
# | # create a new logical volume named "home" with the size of 10GB (check with lvdisplay) | ||
# makes /dev/pool/home available | # makes /dev/pool/home available | ||
lvcreate --size 10G --name home pool | lvcreate --size 10G --name home pool | ||
# finally, create a filesystem inside the logical volume | |||
mkfs.ext4 /dev/pool/home | mkfs.ext4 /dev/pool/home | ||
</ | </syntaxhighlight> | ||
=== Use the | === Use the LV === | ||
Mount the filesystem on the logical volume by adding an entry to the {{Nixos:option|fileSystems}} NixOS option. | |||
{{File|3=fileSystems."/home" = { | |||
fileSystems."/home" = { | |||
device = "/dev/pool/home"; | device = "/dev/pool/home"; | ||
fsType = "ext4"; | fsType = "ext4"; | ||
}; | };|name=/etc/nixos/configuration.nix|lang=nix}} | ||
== Booting with special LVM Modes == | == Booting with special LVM Modes == | ||
LVM provides a number of special features such as creating snapshots, | LVM provides a number of special features such as creating snapshots, RAID for single LVs and much more. If you want to use these devices on bootup, the associated <code>dm-*</code> kernel module must be provided in the initrd (see for example Nixpkgs issue {{Issue|33646}}). Here is a non-exhaustive list of features and the corresponding kernel module and other options to put into your NixOS configuration: | ||
boot.initrd.kernelModules = [ | {{File|3=boot.initrd.kernelModules = [ | ||
"dm-snapshot" # when you are using snapshots | "dm-snapshot" # when you are using snapshots | ||
"dm-raid" # e.g. when you are configuring raid1 via: `lvconvert -m1 /dev/pool/home` | "dm-raid" # e.g. when you are configuring raid1 via: `lvconvert -m1 /dev/pool/home` | ||
| Line 40: | Line 39: | ||
]; | ]; | ||
services.lvm.boot.thin.enable = true; # when using thin provisioning or caching | services.lvm.boot.thin.enable = true; # when using thin provisioning or caching|name=/etc/nixos/configuration.nix|lang=nix}} | ||
== Automated Partitioning == | == Automated Partitioning == | ||
| Line 47: | Line 45: | ||
=== NixOps === | === NixOps === | ||
NixOps can repartition Hetzner Physical Machines, see | NixOps can repartition Hetzner Physical Machines, see [https://nixos.org/nixops/manual/#idm140737318354032 NixOps Manual]. | ||
=== Disko === | === Disko === | ||
[[Disko]] provides means to automatically generate the creation and configuration of logical volumes, see https://github.com/nix-community/disko | [[Disko]] provides means to automatically generate the creation and configuration of logical volumes, see https://github.com/nix-community/disko | ||
== See also == | |||
* [https://wiki.archlinux.org/title/LVM The corresponding ArchWiki page] | |||
[[Category:Filesystem]] | [[Category:Filesystem]] | ||