[linux-lvm] Altering a Physical Volume's UUID on SATA hard drives [solved]

A.Lizard alizard at ecis.com
Sat Aug 18 22:10:43 UTC 2007


I bit-copied a backup LVM disk using dd from a Knoppix LiveCD (based on 
Debian) and wound up with duplicate volume and uuids, meaning I couldn't 
mount both the main and backup volumes simultaneously at the same time for 
subsequent backups. Of course, vgrename is ineffective to allow 
simultaneous mounting without changing the uuids.

My system hardware is:
Biostar Geforce 6100 AM2, with the usual IDE setup and 2 SATA channels. 
Note that if a drive is plugged into the JSATA2 connector in the absence of 
anything plugged into JSATA1, it appears to the OS as SDA, NOT SDB. I don't 
know if that's normal for SATA or not. It is disconcerting.

My main and backup hard drives are Samsung SATA2 HD403LJ, the backup drive 
is plugged into a mobile rack.

NOTE: I'd really like to see a specific Linux LVM command that will change 
uuids for an LVM volume without manual intervention.

However, the workaround in the "HOW TO ALTER SATA LVM VOLUME UUIDs" section 
below will keep SATA users going in the meantime, readers in a hurry should 
scroll down to that part of this post.

When I used the recommended method described in
Re: Altering a Physical Volume's UUID [solved]
( http://www.spinics.net/lists/lvm/msg16090.html ) involving extracting the 
uuids via vcfgbackup and incrementing them all by 1, creating a physical 
volume via pvcreate, then writing it back via vgcfgrestore from a Knoppix 
LiveCD on a pair of SATA hard drives.

It failed as below:

original terrarium.cfg file:
# Generated by LVM2: Thu Aug 16 16:24:03 2007

contents = "Text Format Volume Group"
version = 1

description = "vgcfgbackup -f terrarium.cfg terrarium"

creation_host = "terrarium"	# Linux terrarium 2.6.21-2-k7 #1 SMP Wed Jul 11 
04:29:08 UTC 2007 i686
creation_time = 1187306643	# Thu Aug 16 16:24:03 2007

terrarium {
	id = "gX4iKn-9GCb-TKSG-mKQE-dqc0-Kt1Q-FAo1Ne"
	seqno = 3
	status = ["RESIZEABLE", "READ", "WRITE"]
	extent_size = 8192		# 4 Megabytes
	max_lv = 0
	max_pv = 0

	physical_volumes {

		pv0 {
			id = "5fmUbT-7liU-DUoI-6C0z-98Pq-uDE4-d3zkuL"
			device = "/dev/sda5"	# Hint only

			status = ["ALLOCATABLE"]
			pe_start = 384
			pe_count = 95327	# 372.371 Gigabytes
		}
	}

	logical_volumes {

		root {
			id = "hZBRED-nxBj-v1xU-8TFP-le4B-ye16-fWyn5e"
			status = ["READ", "WRITE", "VISIBLE"]
			segment_count = 1

			segment1 {
				start_extent = 0
				extent_count = 94664	# 369.781 Gigabytes

				type = "striped"
				stripe_count = 1	# linear

				stripes = [
					"pv0", 0
				]
			}
		}

		swap_1 {
			id = "dQ248n-d62X-G6Dn-E9iJ-aHSA-cFbp-4hFuYW"
			status = ["READ", "WRITE", "VISIBLE"]
			segment_count = 1

			segment1 {
				start_extent = 0
				extent_count = 663	# 2.58984 Gigabytes

				type = "striped"
				stripe_count = 1	# linear

				stripes = [
					"pv0", 94664
				]
			}
		}
	}
}
After incrementing the uuids by one, I got:

root at 1[knoppix]#  pvcreate -ff --uuid 
gX4iKn-9GCb-TKSG-mKQE-dqc0-Kt1Q-FAo1Nf --restorefile terrarium.cfg /dev/loop2
   Found duplicate PV 5fmUbT7liUDUoI6C0z98PquDE4d3zkuL: using /dev/sda5 not 
/dev/loop0
   Found duplicate PV 5fmUbT7liUDUoI6C0z98PquDE4d3zkuL: using /dev/loop0 
not /dev/sda5
   Found duplicate PV 5fmUbT7liUDUoI6C0z98PquDE4d3zkuL: using /dev/sda5 not 
/dev/loop0
   Found duplicate PV 5fmUbT7liUDUoI6C0z98PquDE4d3zkuL: using /dev/loop0 
not /dev/sda5
   Found duplicate PV 5fmUbT7liUDUoI6C0z98PquDE4d3zkuL: using /dev/sda5 not 
/dev/loop0
   Couldn't find device with uuid '5fmUbT-7liU-DUoI-6C0z-98Pq-uDE4-d3zkuM'.
   Can't find uuid gX4iKn-9GCb-TKSG-mKQE-dqc0-Kt1Q-FAo1Nf in backup file 
terrarium.cfg

While "can't find" is what I expected, nothing wrote back when I tried 
vgcfgrestore, all I got was an error message.

There's at least one other variation of this basic method that doesn't 
involve loop mounting, and it also fails. What appears to be going on is 
that at least in an SATA vgcfgrestore , the copy one tried to modify is 
checked against the original and fails.

HOW TO ALTER SATA LVM VOLUME UUIDs

I got this working by using LVM commands to change uuids for PV 
(physical_volume) and for VG (volume group), then manually incremented the 
LV (logical_volume) uuids. As far as I can see, this should work for either 
IDE or SATA HDs. The original uuids are different from the above because I 
did some experimentation with this before submitting this solution to the list.

In the example below, replace "terrarium" with the actual volume name 
you're using, /dev/sda5 with the actual disk partition you're trying to 
use. In-line comments marked with *** .

Only the drive you are trying to change UUIDs for should be plugged in at 
this point.
DO NOT LVM-MOUNT IT USING vgchange -ay .

root at 1[knoppix]# pvchange -u /dev/sda5
   Physical volume "/dev/sda5" changed
   1 physical volume changed / 0 physical volumes not changed
root at 1[knoppix]# vgchange -u terrarium
   Volume group "terrarium" successfully changed
root at 1[knoppix]# vgcfgbackup -f terrarium.cfg terrarium
   Volume group "terrarium" successfully backed up.
*** This creates a LVM configuration file that can be manually edited 
containing the above uuid changes produced by pvchange -u and vgchange -u.

root at 1[knoppix]# nano terrarium.cfg

*** At this point, open with a text editor (in this example, nano) and 
increment the last character in each of the "logical_volumes" uuids by 1 , 
f becomes g, 4 becomes 5, etc. In the example configuration files below, 
this would be the uuids for root and swap_1, e.g.
root {
                         id = "hZBRED-nxBj-v1xU-8TFP-le4B-ye16-fWyn5f"
becomes                 id = "hZBRED-nxBj-v1xU-8TFP-le4B-ye16-fWyn5g"
DO NOTHING WITH THE ID and PV uuids at this stage. Apparently, only the 
volume ID and PV ID uuids are checked against the original.

root at 1[knoppix]# pvcreate -ff --uuid jEzDgz-S7nH-oTeU-nmWk-kTSM-tmpo-7O4Ryp 
--restorefile terrarium.cfg /dev/sda5
   Can't find uuid jEzDgz-S7nH-oTeU-nmWk-kTSM-tmpo-7O4Ryp in backup file 
terrarium.cfg

*** This error message is usual, and not a problem as long as vgcfgrestore 
returns as below:

root at 1[knoppix]# vgcfgrestore -f terrarium.cfg terrarium
   Restored volume group terrarium

*** This writes the LVM configuration file back to the disk's LVM 
configuration.-

*** At this point, you can use vgrename:
# vgrename terrarium terrarium-back

*** At this point, you have successfully changed the uuids and volume name 
now have a backup drive volume that will mount simultaneously with your 
main drive.

*** original cfg
-----------------------------------------------------
# Generated by LVM2: Sat Aug 18 09:23:35 2007
segment1 {
contents = "Text Format Volume Group"
version = 1

description = "vgcfgbackup -f terrarium.cfg terrarium"

creation_host = "Knoppix"       # Linux Knoppix 2.6.17 #4 SMP PREEMPT
Wed May 1$
creation_time = 1187443415      # Sat Aug 18 09:23:35 2007

terrarium {
         id = "tOezwV-ZnrW-wPM9-I3D1-4zjj-KDY2-Ikz1O4"
         seqno = 14
         status = ["RESIZEABLE", "READ", "WRITE"]
         extent_size = 8192              # 4 Megabytes
         max_lv = 0
         max_pv = 0

         physical_volumes {

   pv0 {
                         id = "GOe7U8-fU7p-xC0V-btvK-q1mh-sotC-0qqzht"
                         device = "/dev/sda5"    # Hint only

                         status = ["ALLOCATABLE"]
                         pe_start = 384
                         pe_count = 95327        # 372.371 Gigabytes
                 }
         }

         logical_volumes {

                 root {
                         id = "hZBRED-nxBj-v1xU-8TFP-le4B-ye16-fWyn5f"
                         status = ["READ", "WRITE", "VISIBLE"]
                         segment_count = 1

                         segment1 {
  start_extent = 0
                                 extent_count = 94664    # 369.781 Gigabytes

                                 type = "striped"
                                 stripe_count = 1        # linear

                                 stripes = [
                                         "pv0", 0
                                 ]
                         }
                 }

                 swap_1 {
                         id = "dQ248n-d62X-G6Dn-E9iJ-aHSA-cFbp-4hFuYX"
                         status = ["READ", "WRITE", "VISIBLE"]
                         segment_count = 1

                               segment1 {
                                 start_extent = 0
                                 extent_count = 663      # 2.58984 Gigabytes

                                 type = "striped"
                                 stripe_count = 1        # linear

                                 stripes = [
                                         "pv0", 94664
                                 ]
                         }
                 }
         }
}
-----------------------------------------------------
*** AFTER uuid change to verify that it worked (i.e. are the IDs changed 
from the original?):

root at 1[knoppix]# vgcfgbackup -f terrarium.cfg terrarium
   Volume group "terrarium" successfully backed up.

nano terrarium.cfg

*** modified cfg
---------------------------------------------------
description = "vgcfgbackup -f terrarium.cfg terrarium"

creation_host = "Knoppix"       # Linux Knoppix 2.6.17 #4 SMP PREEMPT
Wed May 1$
creation_time = 1187444082      # Sat Aug 18 09:34:42 2007

terrarium {
         id = "jEzDgz-S7nH-oTeU-nmWk-kTSM-tmpo-7O4Ryp"
         seqno = 17
         status = ["RESIZEABLE", "READ", "WRITE"]
         extent_size = 8192              # 4 Megabytes
         max_lv = 0
         max_pv = 0

         physical_volumes {


                 pv0 {
                         id = "lk7nC4-13Bo-YbhF-PiPD-f146-MP6V-lcArz1"
                         device = "/dev/sda5"    # Hint only

                         status = ["ALLOCATABLE"]
                         pe_start = 384
                         pe_count = 95327        # 372.371 Gigabytes
                 }
         }

         logical_volumes {

                 root {
                         id = "hZBRED-nxBj-v1xU-8TFP-le4B-ye16-fWyn5g"
                         status = ["READ", "WRITE", "VISIBLE"]
                         segment_count = 1

                         segment1 {
  start_extent = 0
                                 extent_count = 94664    # 369.781 Gigabytes

                                 type = "striped"
                                 stripe_count = 1        # linear

                                 stripes = [
                                         "pv0", 0
                                 ]
                         }
                 }

                 swap_1 {
                         id = "dQ248n-d62X-G6Dn-E9iJ-aHSA-cFbp-4hFuYY"
                         status = ["READ", "WRITE", "VISIBLE"]
                         segment_count = 1

                         segment1 {
  start_extent = 0
                                 extent_count = 663      # 2.58984 Gigabytes

                                 type = "striped"
                                 stripe_count = 1        # linear

                                 stripes = [
                                         "pv0", 94664
                                 ]
                         }
                 }
         }
}
--------------------------------
at this point, you can rename the volume.
member The Internet Society (ISOC), The HTML Writers Guild.
"You can't have in a democracy various groups with arms - you have to have 
the state with a monopoly on power." Condoleeza Rice, US Secretary of State
Personal Website http://www.ecis.com/~alizard
business Website http://www.reptilelabs.com
backup address (if ALL else fails) alizard at gmail.com
PGP 8.0 key available by request or keyserver. Download PGP from:
http://www.pgpi.org for e-mail privacy.
Disaster prep info: http://www.ecis.com/~alizard/y2k.html
***Looking for INTELLIGENT new technology public policy 
alternatives?***               http://www.ecis.com/~alizard/technology.html




More information about the linux-lvm mailing list