Add new post
This commit is contained in:
		
							parent
							
								
									8deb7e7ab9
								
							
						
					
					
						commit
						75f0d50d75
					
				
							
								
								
									
										75
									
								
								_posts/sysadm/2023-09-15-lvm-cheat-sheet.tl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								_posts/sysadm/2023-09-15-lvm-cheat-sheet.tl
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,75 @@
 | 
			
		||||
---
 | 
			
		||||
layout: default
 | 
			
		||||
title: LVM cheat sheet
 | 
			
		||||
date: 2023-09-15 22:23 +0200
 | 
			
		||||
---
 | 
			
		||||
Example commands for common LVM related tasks.
 | 
			
		||||
 | 
			
		||||
h2. RAID
 | 
			
		||||
 | 
			
		||||
h3. Convert existing LV to RAID1
 | 
			
		||||
 | 
			
		||||
Extend VG containing the LV with additional PV before conversion.
 | 
			
		||||
{% highlight bash %}
 | 
			
		||||
# vgextend vgdev /dev/nvme0n1p2
 | 
			
		||||
# lvconvert --type raid1 --mirrors 1 vgdev/backup /dev/nvme0n1p2
 | 
			
		||||
{% endhighlight %}
 | 
			
		||||
 | 
			
		||||
List currently used devices and sync status:
 | 
			
		||||
{% highlight bash %}
 | 
			
		||||
# lvs -a -o fullname,devices,sync_percent
 | 
			
		||||
{% endhighlight %}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
h3. Rebuild RAID1 LV with integrity layer
 | 
			
		||||
 | 
			
		||||
As of LVM tools 2.03.21(2) (2023-04-21) @man lvmraid@ says:
 | 
			
		||||
 | 
			
		||||
bq. Integrity limitations
 | 
			
		||||
<br><br>
 | 
			
		||||
[...] The following are not yet permitted on RAID LVs with integrity: lvreduce,
 | 
			
		||||
pvmove, snapshots, splitmirror, raid syncaction commands, raid rebuild.
 | 
			
		||||
 | 
			
		||||
That means commands like @lvchange --syncaction repair@ or @lvchange --rebuild@
 | 
			
		||||
won't work as expected.
 | 
			
		||||
 | 
			
		||||
If RAID1 with integrity LV requires refresh (partial synchronization) due to
 | 
			
		||||
e.g.  device write errors, but both PVs are otherwise available, take the
 | 
			
		||||
following steps to fix it:
 | 
			
		||||
 | 
			
		||||
* remove integrity layer:
 | 
			
		||||
{% highlight bash %}
 | 
			
		||||
# lvconvert --raidintegrity n vgdev/backup
 | 
			
		||||
{% endhighlight %}
 | 
			
		||||
 | 
			
		||||
* if it is known which PV failed, rebuild it:
 | 
			
		||||
{% highlight bash %}
 | 
			
		||||
# lvchange --rebuild /dev/sda vgdev/backup
 | 
			
		||||
{% endhighlight %}
 | 
			
		||||
and re-add integrity layer to finish. Otherwise split RAID1 into single LVs.
 | 
			
		||||
@lvchange --synaction repair@ could theoretically refresh RAID1. But due to
 | 
			
		||||
lack of integrity layer, it cannot tell which drive contains uncorrupted data,
 | 
			
		||||
so the process must be performed manually:
 | 
			
		||||
{% highlight bash %}
 | 
			
		||||
# lvconvert --splitmirrors 1 --name backup_split vgdev/backup
 | 
			
		||||
{% endhighlight %}
 | 
			
		||||
 | 
			
		||||
* check integrity of both RAID1 parts:
 | 
			
		||||
** whether they differ at all:
 | 
			
		||||
{% highlight bash %}
 | 
			
		||||
# sha512sum /dev/vgdev/backup /dev/vgdev/backup_split
 | 
			
		||||
{% endhighlight %}
 | 
			
		||||
** if LVs differ, check filesystems:
 | 
			
		||||
{% highlight bash %}
 | 
			
		||||
# fsck.ext4 -n -f /dev/vgdev/backup
 | 
			
		||||
# fsck.ext4 -n -f /dev/vgdev/backup_split
 | 
			
		||||
{% endhighlight %}
 | 
			
		||||
** once filesystems are fixed and can be mounted, compare file content to
 | 
			
		||||
determine which mirror is valid:
 | 
			
		||||
{% highlight bash %}
 | 
			
		||||
# mount /dev/vgdev/backup /mnt/mirror1
 | 
			
		||||
# mount /dev/vgdev/backup_split /mnt/mirror1
 | 
			
		||||
# rsync -d /mnt/mirror1 /mnt/mirror2
 | 
			
		||||
{% endhighlight %}
 | 
			
		||||
 | 
			
		||||
* finally remove invalid mirror, recreate RAID1 and re-add integrity layer
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user