On Wed, Jun 30, 2010 at 8:31 AM, Chris Mason <chris.ma...@oracle.com> wrote: > On Sun, Jun 27, 2010 at 07:44:12PM -0500, C Anthony Risinger wrote: >> On Sat, Jun 26, 2010 at 12:25 PM, Daniel Baumann <dan...@debian.org> wrote: >> > Hi, >> > >> > this is basically a forward from >> > http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=587253 >> > >> > "rename(2) allows for the atomic replacement of files. Being able to >> > atomically replace subvolume snapshots would be equally invaluable, >> > since it would permit lock-free replacement of subvolumes. >> > >> > % btrfs subvolume snapshot <src> <dest> >> > >> > creates dest as a snapshot of src. However, if I want to do the >> > converse, >> > >> > % btrfs subvolume snapshot <dest> <src> >> > >> > then <dest> is snapshotted as <src>/<dest>, i.e. not replacing the >> > original subvolume, but going inside the original subvolume. >> > >> > Use case 1: >> > I have a subvolume of data under active use, which I want to >> > periodically update. I'd like to do this by atomically >> > replacing its contents. I can replace the content right now >> > by deleting the old subvolume and then snapshotting the new >> > on in its place, but it's racy. It really needs to be >> > replaced in a single operation, or else there's a small window >> > where there is no data, and I'd need to resort to some external >> > locking to protect myself. > > I'm not sure I understand use case #1. The problem is that you'll have > files open in the subvolume and you can't just pull the rug out from > under them. Could you tell me a little more about what you're trying to > do? > >> > >> > Use case 2: >> > In schroot, we create btrfs subvolume snapshots to get copy-on- >> > write chroots. This works just fine. We also provide direct >> > access to the "source" subvolume, but since it could be >> > snapshotted in an inconsistent state while being updated, we >> > want to do the following: >> > >> > · snapshot source subvolume >> > · update snapshot >> > · replace source volume with updated snapshot" >> > >> > Please keep roger in the cc for any replies, thanks. >> >> i am also looking for functionality similar to this, except i would >> like to be able to replace the DEFAULT subvolume, with an empty or >> existing subvolume, and put the original default subvolume INSIDE the >> new root (or drop it completely), outlined by this post and the thread >> it's in: >> >> http://www.mail-archive.com/linux-btrfs@vger.kernel.org/msg05278.html >> >> is there any feedback on these actions? no one seems to even respond :-( >> >> it would seem we need ways to swap subvolumes around, _including_ the >> default, providing the on-disk format supports such operations. > > Moving 'default' generally involves a reboot for the same reasons. We > have to worry about open files and their view of the filesystem. mv on > a directory won't affect file handles that are open, and renaming > subvolumes needs to follow a similar model.
could we fail if the user tries to replace a subvolume while it's being used? what if the root device is _not_ the default (".") subvolume, then can it be swapped? in my use case, i am running in initramfs, so the root device has not even been mounted or pivoted to; it should be safe to do whatever i want to the filesystem. i want to move the user's installation to a dedicated subvolume. what about this: would it be possible to have TWO subvolumes by "default"? the regular one (current directory, "."): mount -o subvol=. <btrfs_dev> /mnt would behave as it does now. BUT... there would then be a special, permanent (like "." is right now) subvol, say "parent directory" (".."): mount -o subvol=.. <btrfs_dev> /mnt TWO dots would mount the parent of ".", where i could then swap out the real default ("."). would that work? C Anthony -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html