Re: [linux-lvm] Problem with UUID, vgscan, vgcfgrestore

From: Andreas Dilger <adilger turbolinux com>

To: linux-lvm sistina com

Subject: Re: [linux-lvm] Problem with UUID, vgscan, vgcfgrestore

Date: Mon, 2 Apr 2001 15:00:44 -0600 (MDT)

Diederick van Dijk writes:
> I've a LVM of 8 physical volumes that I've created with LVM 0.9.1 beta 2.
> I've the know problem that vgscan reports that it can't find my VG.
> So I upgraded to LVM 0.9.1 beta 6 (tools and kernel) and runned on each
> physical disk a vgcfgrestore. Unfortunately I didn't solve the problem.
> Attached is the output of the commands vgdisplay -v and a pvdata -U for each
> physical disk. Debug logs a very huge so I won't attach them.
OK, I have figured out why vgcfgrestore doesn't work properly with broken
UUIDs. It is because vgcfgrestore only restores the backup VGDA data to
each disk separately. This means it is not possible to have consistent
UUIDs generated for all PVs in a VG when vgcfgrestore is run.
You can try the following (experimental) procedure to fix the UUIDs:
Check each PV with "pvdata -PP /dev/hdX" to ensure it has a valid
UUID assigned. Also get the PV numbers (starting with 1) for each of
the PVs. Finally, check the pv_uuidlist_on_disk.base for each PV.
It will normally be 6144, but it does not have to be.
for each PV (in PV# order)
dd if=/dev/hdX bs=1 skip=44 count=128 >> /tmp/uuids
This should create a file /tmp/uuids which has all of the PV UUIDs in it.
Make sure there are as many UUIDs in the file ("od -a /tmp/uuids" is good)
as you have PVs (8 in your case).
Now, we want to write the UUID list back to the PVs so vgscan is happy:
for each PV (in any order)
dd if=/tmp/uuids of=/dev/hdX bs=1 seek=<pv_uuidlist_on_disk.base for hdX>
example:
dd if=/tmp/uuids of=/dev/hda2 bs=1 seek=6144
Now vgscan should be able to detect all of the disks and work properly.
Cheers, Andreas
--
Andreas Dilger \ "If a man ate a pound of pasta and a pound of antipasto,
\ would they cancel out, leaving him still hungry?"
http://www-mddsp.enel.ucalgary.ca/People/adilger/ -- Dogbert