* [linux-lvm] Creation of snapshots failing with `in use' errors
@ 2006-08-27 17:57 Nix
2006-08-27 20:27 ` Alasdair G Kergon
0 siblings, 1 reply; 3+ messages in thread
From: Nix @ 2006-08-27 17:57 UTC (permalink / raw)
To: linux-lvm
(This is with kernel 2.6.17.11, device-mapper 1.02.09, and lvm 2.02.09.)
I'm trying to create a snapshot-the-whole-visible-filesystem-tree script
to use in backup scripts, which makes readonly[1] mounts of network
filesystems and non-LVMed block devices, remounts pseudo-filesystems
(other than /dev which gets bind-mounted), re-binds bind mounts, and
creates and mounts snapshots of LVMed filesystems, before chrooting
into the resulting tree, running some command in there, and then
reversing all its work.
But the apparent asychronousness of LVM is throwing me off.
Specifically, snapshot creation randomly fails if you've recently done
another LVM command. The command might be another snapshot creation
(since they seem to be asynchronous): or it might be much simpler. By
its very nature this script creates (or removes) about a dozen snapshots
in quick succession, first using lvs(8) to determine the size of the
original filesystem, since LVM maintains a snapshot percentage counter
but doesn't appear to expose it in the commands (at least if it does
it's not documented) and I want these snapshots to have a fixed
percentage of their source available for expansion.
Here's an example:
loki:~# lvs; lvcreate --size 600M --name snap-packages.bin-oKHOHQzu --snapshot /dev/raid/packages.bin
LV VG Attr LSize Origin Snap% Move Log Copy%
music disks -wi-ao 17.50G
news disks -wn-ao 912.00M
news-bofh disks -wn-ao 1.00G
spam disks -wi-ao 1.00G
swap0 disks -wc-ao 592.00M
swap1 disks -wc-ao 608.00M
swap2 disks -wc-ao 608.00M
doc raid -wi-ao 1.00G
home raid -wi-ao 6.00G
mirror raid -wi-ao 1.00G
non-free raid -wi-ao 1.00G
packages raid -wi-ao 20.00G
packages.bin raid -wi-ao 6.00G
root raid -wi-ao 200.00M
usr raid -wi-ao 6.00G
var raid -wi-ao 1.00G
LV raid/snap-packages.bin-oKHOHQzu in use: not deactivating
Couldn't deactivate new snapshot.
This has not only not worked for no good reason (it's not in use! it's
brand new!) but has then proceed to leave a sort of garbage LV behind,
not marked as a snapshot but no good as anything else either:
loki:~# lvs
LV VG Attr LSize Origin Snap% Move Log Copy%
music disks -wi-ao 17.50G
news disks -wn-ao 912.00M
news-bofh disks -wn-ao 1.00G
spam disks -wi-ao 1.00G
swap0 disks -wc-ao 592.00M
swap1 disks -wc-ao 608.00M
swap2 disks -wc-ao 608.00M
doc raid -wi-ao 1.00G
home raid -wi-ao 6.00G
mirror raid -wi-ao 1.00G
non-free raid -wi-ao 1.00G
packages raid -wi-ao 20.00G
packages.bin raid -wi-ao 6.00G
root raid -wi-ao 200.00M
snap-packages.bin-oKHOHQzu raid -wi-a- 600.00M
usr raid -wi-ao 6.00G
var raid -wi-ao 1.00G
Is there any way I can arrange for lvcreate and lvremove to actually
*work* consistently such that I can usefully use them in scripts like
this? I'd have no objection to lvcreate/lvremove blocking until whatever
it is that's locking the VG is completed, but dying and leaving debris
behind seems a bit off.
[1] when 2.6.18 comes out so readonly mounts work
--
`In typical emacs fashion, it is both absurdly ornate and
still not really what one wanted.' --- jdev
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [linux-lvm] Creation of snapshots failing with `in use' errors
2006-08-27 17:57 [linux-lvm] Creation of snapshots failing with `in use' errors Nix
@ 2006-08-27 20:27 ` Alasdair G Kergon
2006-08-28 11:18 ` Nix
0 siblings, 1 reply; 3+ messages in thread
From: Alasdair G Kergon @ 2006-08-27 20:27 UTC (permalink / raw)
To: LVM general discussion and development
On Sun, Aug 27, 2006 at 06:57:37PM +0100, Nix wrote:
> Specifically, snapshot creation randomly fails if you've recently done
> another LVM command.
See if it's the usual udev problem: completely disable udev for your
lvm devices. [Common problem is udev causing the device to be opened to
look for a label - then lvm command fails because it needs exclusive
access.]
> original filesystem, since LVM maintains a snapshot percentage counter
lvm2 doesn't maintain it, but while a device is active, kernel dm tells
userspace lvm2 the percentage full.
> This has not only not worked for no good reason (it's not in use! it's
> brand new!)
udev is probably using it.
Old udev packages used to work OK, but something got changed - we never
discovered what (ref. an old debian bug) - and this started to break.
Some people at suse are working on a proper fix for this problem (so kernel
will inform udev when device is usable, instead of udev running too early as
it can now; udev will inform lvm2 when it has finished whatever pointless
things it wants to do and lvm2 will wait for that message).
Alasdair
--
agk@redhat.com
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [linux-lvm] Creation of snapshots failing with `in use' errors
2006-08-27 20:27 ` Alasdair G Kergon
@ 2006-08-28 11:18 ` Nix
0 siblings, 0 replies; 3+ messages in thread
From: Nix @ 2006-08-28 11:18 UTC (permalink / raw)
To: LVM general discussion and development
On Sun, 27 Aug 2006, Alasdair G. Kergon uttered the following:
> On Sun, Aug 27, 2006 at 06:57:37PM +0100, Nix wrote:
>> Specifically, snapshot creation randomly fails if you've recently done
>> another LVM command.
>
> See if it's the usual udev problem: completely disable udev for your
> lvm devices. [Common problem is udev causing the device to be opened to
> look for a label - then lvm command fails because it needs exclusive
> access.]
I knew about this but did I remember about it? I did not. `Oh, look at
the idiots not disabling udev' I said as I lurked, and then I set up
a new system, and, whoops...
I need a holiday. (Oh, look, a bank holiday. How convenient.)
Of course, it'd be nice to keep udev active for my non-snapshot devices:
the /dev/disk/* persistent naming really *is* useful (pretty much
critically so on one of my systems, with hot-pluggable devices with an
LVM VG on them). I just don't need it for snapshots.
Which leads me to another problem. Creation of a snapshot creates at least
one temporary block device, but it gets removed so fast that I can't tell
anything about its characteristics to get udev to ignore it:
UEVENT[1156762986.267714] remove@/block/dm-16
UEVENT[1156762990.264106] add@/block/dm-16
UEVENT[1156762990.418076] remove@/block/dm-16
UEVENT[1156762990.592966] add@/block/dm-16
UEVENT[1156762990.606790] add@/block/dm-17
UEVENT[1156762990.609193] add@/block/dm-18
However, that's not all that problematic as there's nothing about dm-16
to dm-18 that tells me they're part of a snapshot either. It looks like
the latter dm-16 is a -real device, while -18 is a -cow, but again
there's absolutely nothing about the -16 that I can sensibly key off: it
doesn't even have all-zero SYSFS{stat} like the snapshot devices do.
It'd be nice if we had a sysfs key that we could use to determine `this
is a snapshot', or an event which was fired to indicate that the device
can be safely opened because lvcreate is finished with it. Right now we
can't even do a dmsetup ls or an lvs from a udev rule to attempt to
determine if the new device is a snapshot, because there's no obvious
way to get from that -cow device, say, to the LV name, and because the
LV isn't even *marked* as a snapshot until a short time after creation.
... hah! Got one, although it's a vile hack. If `dmsetup deps' indicates
a dependency on other device-mapper devices (assuming `major 16' is
enough to tell) then this is a snapshot or mirror some other class of
derived device, and udev should either hands-off it or go to sleep for a
few seconds to let lvcreate or whatever do its job. (That's assuming
that the dependencies are set up at creation time. If they aren't, udev
will see no dependencies, and I'm right back where I started. Let's
see...)
>> original filesystem, since LVM maintains a snapshot percentage counter
>
> lvm2 doesn't maintain it, but while a device is active, kernel dm tells
> userspace lvm2 the percentage full.
Ah. That explains the absence of setters :)
>> This has not only not worked for no good reason (it's not in use! it's
>> brand new!)
>
> udev is probably using it.
> Old udev packages used to work OK, but something got changed - we never
> discovered what (ref. an old debian bug) - and this started to break.
Well, I'm using handwritten udev rules, so it's perfectly likely that
this is the problem.
> Some people at suse are working on a proper fix for this problem (so kernel
> will inform udev when device is usable, instead of udev running too early as
> it can now; udev will inform lvm2 when it has finished whatever pointless
> things it wants to do and lvm2 will wait for that message).
Yep, that's what we're looking for :)
--
`In typical emacs fashion, it is both absurdly ornate and
still not really what one wanted.' --- jdev
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2006-08-28 11:19 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-08-27 17:57 [linux-lvm] Creation of snapshots failing with `in use' errors Nix
2006-08-27 20:27 ` Alasdair G Kergon
2006-08-28 11:18 ` Nix
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).