[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#883735: Re: Bug#883735: initramfs-tools: automatic resume doesn't work for lvm swap partitions



Control: reopen -1
Control: tag -1 patch moreinfo

On Thu, 2017-12-07 at 00:22 +0000, James Cowgill wrote:
> Hi,
> 
> On 07/12/17 00:06, Ben Hutchings wrote:
> > On Wed, 2017-12-06 at 23:48 +0000, James Cowgill wrote:
> > > Package: initramfs-tools
> > > Version: 0.130
> > > Severity: normal
> > > 
> > > Hi,
> > > 
> > > I had noticed this bug for quite a while now, but since I rarely turn my
> > > machine off I left investigating what the problem was until now.
> > 
> > [...]
> > > Is it possible (and a good idea) to store the /dev/mapper path instead
> > > of the blkid when the swap partition is on LVM?
> > > 
> > > I managed to solve my specific issue by manually setting RESUME to the
> > > correct /dev/mapper path.
> > 
> > This is the correct way to refer to LVs used as root, /usr or resume
> > partition.  The reason for this is that lvm2 only activates VGs that
> > are definitely needed, and there is no way to determine whether a
> > filesystem UUID or label refers to an LV (or which VG it's in).
> 
> Ok, but I don't understand why this can't be fixed. Why can't you
> convert the /dev/dm-* path from /proc/swaps into a /dev/mapper path when
> you generate the initramfs and store that instead?

Oh I see, I failed to parse 'automatic resume' as meaning automatic
selection of the resume device.

Does the attached patch fix this for you?

Ben.

-- 
Ben Hutchings
Beware of programmers who carry screwdrivers. - Leonard Brandwein
diff --git a/hooks/resume b/hooks/resume
index 1032f7b19e77..3c0bef56a89f 100755
--- a/hooks/resume
+++ b/hooks/resume
@@ -46,11 +46,17 @@ else
 	# Try to autodetect the RESUME partition, using biggest swap?
 	resume_auto=$(grep ^/dev/ /proc/swaps | sort -rnk3 | head -n 1 | cut -d " " -f 1)
 	if [ -n "$resume_auto" ]; then
-		UUID=$(blkid -s UUID -o value "$resume_auto" || true)
+		if dm_name="$(dmsetup info -c --noheadings -o name "$resume_auto" 2>/dev/null)"; then
+			resume_auto_canon="/dev/mapper/$dm_name"
+		elif UUID=$(blkid -s UUID -o value "$resume_auto"); then
+			resume_auto_canon="UUID=$UUID"
+		else
+			resume_auto_canon=
+		fi
 		report_auto "The initramfs will attempt to resume from $resume_auto"
-		if [ -n "$UUID" ]; then
-			report_auto "(UUID=$UUID)"
-			resume_auto="UUID=$UUID"
+		if [ -n "$resume_auto_canon" ]; then
+			report_auto "($resume_auto_canon)"
+			resume_auto="$resume_auto_canon"
 		fi
 		report_auto "Set the RESUME variable to override this."
 	fi

Attachment: signature.asc
Description: This is a digitally signed message part


Reply to: