LVM: Difference between revisions

Axka (talk | contribs)
Converted type descriptions to a definition list
Axka (talk | contribs)
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) The Logical Volume Manager] (LVM) provides means to dynamically organize partitions.
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 three types:


; Physical volume (PV) : Space reservation consisting of a disk partition, a whole disk, a meta device, or a loopback file.
LVM manages four basic building blocks:
; Volume group (VG) : Group of physical volumes.
; Logical volume (LV) : Space reservation inside a volume group, which may be laid across multiple physical volumes.


=== Create a logical volume ===
; 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.


<syntaxHighlight lang=bash>
=== Create an LV ===
# formats the partion into a physical volume (check with pvdisplay)
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
# creates a new volume group named pool (check with vgdisplay)
# create a new volume group named pool (check with vgdisplay)
vgcreate pool /dev/sda2
vgcreate pool /dev/sda2
# creates a new logical volume named "home" with the size of 10GB (check with lvdisplay)
# 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>
</syntaxhighlight>


=== Use the Logical Volume ===
=== Use the LV ===
in your <code>configuration.nix</code>:
Mount the filesystem on the logical volume by adding an entry to the {{Nixos:option|fileSystems}} NixOS option.
 
{{File|3=fileSystems."/home" = {
<syntaxHighlight lang=nix>
fileSystems."/home" = {
   device = "/dev/pool/home";
   device = "/dev/pool/home";
   fsType = "ext4";
   fsType = "ext4";
};
};|name=/etc/nixos/configuration.nix|lang=nix}}
</syntaxHighlight>


== Booting with special LVM Modes ==
== Booting with special LVM Modes ==
LVM provides a number of special features such as creating snapshots, raid for single Logical Volumes 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 {{Issue|33646}}) . This is a non-exhaustive list of features and the corresponding kernel module and other options to put into your <code>configuration.nix</code>:
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:
<syntaxHighlight lang=nix>
 
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}}
</syntaxHighlight>


== Automated Partitioning ==
== Automated Partitioning ==
Line 47: Line 45:


=== NixOps ===
=== NixOps ===
NixOps can repartition Hetzner Physical Machines, see [[https://nixos.org/nixops/manual/#idm140737318354032 NixOps Manual]].
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]]