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