# lvm2

This directory contains scripts for managing LVM2 systems.

## Scripts

- backupLV: Creates an LVM snapshot of a source logical volume, streams it into a timestamped xz-compressed image file in a target backup directory, optionally removes older matching backups by retention age, and supports dry-run and quiet modes for operational safety and cron use.

## backupLV usage

Command formats:

```bash
perl /home/users/rodolico/scripts/sysadmin_scripts/lvm2/backupLV --lv vg/lv_name [--lv vg/lv_name ...] --target /path/to/dir [options]
perl /home/users/rodolico/scripts/sysadmin_scripts/lvm2/backupLV --lv-list-file /path/to/lvList.txt --target /path/to/dir [options]
perl /home/users/rodolico/scripts/sysadmin_scripts/lvm2/backupLV -l vg/lv_name [-l vg/lv_name ...] -t /path/to/dir [options]
```

Parameters:

- --lv, -l vg/lv_name: Required unless --lv-list-file is used. May be repeated.
- --lv-list-file, -L /path/to/lvList.txt: Optional. Read LV entries from a file (one per line).
- --default-vg, -g vg0: Optional. Default volume group for bare LV names from --lv or --lv-list-file.
- --target, -t /path/to/dir: Required. Destination directory for generated .img.xz files.
- --snap-size, -s 10G: Optional. Snapshot size used by lvcreate. Default is 10G.
- --keeptime, -k 5: Optional. Delete matching backup files older than N days.
- --xz-level, -z 9: Optional. xz compression level from 0 to 9. Default is 9.
- --xz-threads, -T N: Optional. Explicit xz thread count.
- --xz-cpu-percent, -p 90: Optional. CPU percentage used to derive xz threads when --xz-threads is not provided. Default is 90.
- --dry-run, -n: Optional. Print planned actions and summary without making changes.
- --quiet, -q: Optional. Reduce output for cron runs and print summary/error only.
- --help, -h: Optional. Show built-in help text.

Examples:

```bash
perl /home/users/rodolico/scripts/sysadmin_scripts/lvm2/backupLV --lv vg0/data --target /backups/lv --snap-size 10G --keeptime 5
perl /home/users/rodolico/scripts/sysadmin_scripts/lvm2/backupLV -l data -l router -g vg0 -t /backups/lv -q
perl /home/users/rodolico/scripts/sysadmin_scripts/lvm2/backupLV --lv vg0/data --lv vg0/router --target /backups/lv --quiet
perl /home/users/rodolico/scripts/sysadmin_scripts/lvm2/backupLV --lv-list-file /root/lvsToBackUp --default-vg vg0 --target /backups/lv --keeptime 7 --quiet
perl /home/users/rodolico/scripts/sysadmin_scripts/lvm2/backupLV --lv vg0/data --target /backups/lv --dry-run
perl /home/users/rodolico/scripts/sysadmin_scripts/lvm2/backupLV -l vg0/data -t /backups/lv -q
```

Sample /root/lvsToBackUp file (bare LV names used with -default-vg):

```text
router
web.example.org
```

You can also place fully qualified vg/lv entries in the list file, in which case --default-vg is not required.

Example cron entry (daily at 02:30):

```cron
30 2 * * * perl /home/users/rodolico/scripts/sysadmin_scripts/lvm2/backupLV --lv vg0/data --target /backups/lv --keeptime 7 --quiet
```