{
  "slug": "pvmove",
  "term": "LVM pvmove",
  "aliases": [
    "pvmove",
    "LVM extent relocation"
  ],
  "definition": "LVM pvmove relocates selected allocated physical extents within a volume group while preserving their logical-volume addresses.",
  "note": "Selection can cover a source PV, one LV's extents on that PV, or a physical-extent range. Other extents of the same LV can remain elsewhere. LVM supports relocation while volumes are in use. [pvmove-manual] [pvmove-tests] [lvm-online]\n\nAn ordinary move uses temporary mirrors and records completed segment relocations in VG metadata. After an interruption, the documented restart resumes from a checkpoint. Restarting and aborting are different choices. [pvmove-algorithm] [pvmove-manual]\n\nWithout --atomic, abort leaves completed segments at the destination and unfinished segments at the source. With --atomic selected when the move starts, abort retains the source placement for the selected movement. This is a placement contract, not a rollback of application writes or a point-in-time snapshot. [pvmove-options] [pvmove-algorithm]\n\nBackground mode can return before relocation finishes. Check actual completion and remaining allocations before treating a source PV as evacuated. A relocation needs eligible destination extents; free space reported inside a filesystem is not destination space in the VG. A sufficient free-extent count can still fail the allocation policy; normal allocation avoids placing parallel stripes on the same PV. [pvmove-manual] [pvmove-options]\n\nThe 2001 Volume Managers in Linux paper describes online extent relocation but warns of crash problems in that implementation. This historical warning is not a test result for modern LVM2; the checkpoint and abort contracts above come from the separately versioned LVM2 sources. [lvm-history-2001]",
  "status": "shipping",
  "advantages": [],
  "limitations": [],
  "related": [
    "lvm",
    "physical-volume",
    "logical-volume",
    "volume-group"
  ],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "citations": [
    {
      "id": "pvmove-manual",
      "title": "LVM2 pvmove(8): extent selection, checkpoints, abort and background completion",
      "url": "https://man7.org/linux/man-pages/man8/pvmove.8.html",
      "accessed": "2026-11-09"
    },
    {
      "id": "pvmove-algorithm",
      "title": "LVM2 v2_03_35: pvmove temporary mirrors and placement checkpoints",
      "url": "https://github.com/lvmteam/lvm2/blob/v2_03_35/man/pvmove.8_end",
      "accessed": "2026-11-09"
    },
    {
      "id": "pvmove-options",
      "title": "LVM2 v2_03_35: abort and atomic option contracts",
      "url": "https://github.com/lvmteam/lvm2/blob/v2_03_35/tools/args.h",
      "accessed": "2026-11-09"
    },
    {
      "id": "pvmove-tests",
      "title": "LVM2 v2_03_35: ordinary and atomic pvmove range-selection tests",
      "url": "https://github.com/lvmteam/lvm2/blob/v2_03_35/test/shell/pvmove-basic.sh",
      "accessed": "2026-11-09"
    },
    {
      "id": "lvm-online",
      "title": "Red Hat Enterprise Linux 10: LVM architecture and online data relocation",
      "url": "https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/configuring_and_managing_logical_volumes/overview-of-logical-volume-management",
      "accessed": "2026-11-09"
    },
    {
      "id": "lvm-history-2001",
      "title": "Teigland and Mauelshagen, Volume Managers in Linux, USENIX ATC FREENIX 2001, sections 3 and 3.1.3",
      "url": "https://www.usenix.org/legacy/event/usenix01/freenix01/full_papers/teigland/teigland_html/",
      "accessed": "2026-11-09"
    }
  ],
  "updated": "2026-11-09",
  "provenance": [
    "Source synthesis of LVM2 v2_03_35 and the current upstream manual, cross-checked against Red Hat Enterprise Linux 10 documentation; no native migration, crash or latency experiment.",
    "The upstream selection tests were inspected, not executed. Atomicity is scoped to the selected relocation, not every extent of an affected LV or a transaction on application data.",
    "Historical context: Teigland and Mauelshagen, USENIX ATC FREENIX 2001, sections 3 and 3.1.3. The paper is an architecture/usage survey, not a modern crash-recovery benchmark."
  ]
}
