LVM: Difference between revisions

imported from old wiki
Axka (talk | contribs)
Tidy up text and code blocks.
 
(4 intermediate revisions by 2 users not shown)
Line 1: Line 1:
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 volumes - directly on a physical partition
LVM manages four basic building blocks:
* volume groups - a group of physical volumes
* logical 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 39: 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 46: 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]]