[buildd-tools-devel] Btrfs snapshots!

Roger Leigh rleigh at codelibre.net
Sun Jun 13 22:40:04 UTC 2010


Hi folks,

An exciting new feature added to schroot this weekend is the ability
to use a new chroot type, "btrfs-snapshot".  This is akin to the
existing LVM snapshot functionality, but using snapshots of Btrfs
subvolumes instead.  This promises to be faster and more reliable
than LVM snapshotting if Btrfs lives up to its expectations.

An example of it in action follows at the end of the mail.  The
manual pages document the new options, mainly in schroot.conf(5).

I'm very interested in feedback about this, so would appreciate
any comments and suggestions from anyone who would like to try
it out.  It's currently on schroot.git (master branch).  I think
it's mostly complete, some minor details needing attention are:

1) --info output doesn't skip reporting unset properties
2) --info output doesn't include btrfs properties in cloned
   sessions
3) we currently use a single mounted btrfs filesystem for source
   subvolume and snapshots; would it be better to mount the
   subvolume directly with "-o subvol" rather than bind mounting,
   or is this more inflexible and fragile?

Once it's tested and any kinks are ironed out, this should be OK
to backport to the 1.4 branch for squeeze.


Regards,
Roger

[bsnap]
type=btrfs-snapshot
description=Debian sid btrfs snapshot
btrfs-source-subvolume=/srv/chroot/btrsnap/sid-snap
btrfs-snapshot-directory=/srv/chroot/btrsnap/snapshots
priority=3
groups=root,sbuild
root-groups=root,sbuild
source-groups=root,sbuild
source-root-groups=root,sbuild

ravenclaw% schroot -i -c bsnap
  ─── Chroot ───
  Name                      bsnap
  Description               Debian sid btrfs snapshot
  Type                      btrfs-snapshot
  Priority                  3
  Users                     
  Groups                    root sbuild
  Root Users                
  Root Groups               root sbuild
  Aliases                   
  Environment Filter        ^(BASH_ENV|CDPATH|ENV|HOSTALIASES|IFS|KRB5_CONFIG|KRBCONFDIR|KRBTKFILE|KRB_CONF|LD_.*|LOCALDOMAIN|NLSPATH|PATH_LOCALE|RES_OPTIONS|TERMINFO|TERMINFO_DIRS|TERMPATH)$
  Run Setup Scripts         true
  Script Configuration      default/config
  Session Managed           true
  Session Cloned            true
  Session Purged            false
  Btrfs Source Subvolume    /srv/chroot/btrsnap/sid-snap
  Btrfs Snapshot Directory  /srv/chroot/btrsnap/snapshots
  Btrfs Snapshot Name       
  Personality               undefined
  Source Users              
  Source Groups             root sbuild
  Source Root Users         
  Source Root Groups        root sbuild
ravenclaw% schroot -i -c bsnap-source
  ─── Chroot ───
  Name                   bsnap-source
  Description            Debian sid btrfs snapshot (source chroot)
  Type                   directory
  Priority               3
  Users                  
  Groups                 root sbuild
  Root Users             
  Root Groups            root sbuild
  Aliases                
  Environment Filter     ^(BASH_ENV|CDPATH|ENV|HOSTALIASES|IFS|KRB5_CONFIG|KRBCONFDIR|KRBTKFILE|KRB_CONF|LD_.*|LOCALDOMAIN|NLSPATH|PATH_LOCALE|RES_OPTIONS|TERMINFO|TERMINFO_DIRS|TERMPATH)$
  Run Setup Scripts      true
  Script Configuration   default/config
  Session Managed        true
  Session Cloned         false
  Session Purged         false
  Directory              /srv/chroot/btrsnap/sid-snap
  Personality            undefined
  Filesystem union type  none


ravenclaw% schroot -v -c bsnap
I: Executing ‘00check setup-start ok’
I: 00check: AUTH_USER=rleigh
I: 00check: AUTH_RUSER=rleigh
I: 00check: AUTH_RGROUP=rleigh
I: 00check: AUTH_UID=1000
I: 00check: AUTH_GID=1000
I: 00check: AUTH_RUID=1000
I: 00check: AUTH_RGID=1000
I: 00check: AUTH_HOME=/home/rleigh
I: 00check: AUTH_SHELL=/usr/bin/zsh
I: 00check: AUTH_VERBOSITY=verbose
I: 00check: MOUNT_DIR=/var/lib/schroot/mount
I: 00check: LIBEXEC_DIR=/usr/lib/schroot
I: 00check: PID=27185
I: 00check: HOST=x86_64-pc-linux-gnu
I: 00check: HOST_OS=linux-gnu
I: 00check: HOST_VENDOR=pc
I: 00check: HOST_CPU=x86_64
I: 00check: PLATFORM=linux
I: 00check: SESSION_ID=bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e
I: 00check: CHROOT_TYPE=btrfs-snapshot
I: 00check: CHROOT_NAME=bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e
I: 00check: CHROOT_DESCRIPTION=Debian sid btrfs snapshot (session chroot)
I: 00check: CHROOT_SCRIPT_CONFIG=/etc/schroot/default/config
I: 00check: CHROOT_MOUNT_LOCATION=/var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e
I: 00check: CHROOT_LOCATION=
I: 00check: CHROOT_PATH=/var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e
I: 00check: CHROOT_BTRFS_SOURCE_SUBVOLUME=/srv/chroot/btrsnap/sid-snap
I: 00check: CHROOT_BTRFS_SNAPSHOT_DIRECTORY=%CHROOT_BTRFS_SNAPSHOT_DIRECTORY
I: 00check: CHROOT_BTRFS_SNAPSHOT_NAME=/srv/chroot/btrsnap/snapshots/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e
I: 00check: CHROOT_SESSION_CREATE=false
I: 00check: CHROOT_SESSION_CLONE=false
I: 00check: CHROOT_SESSION_PURGE=true
I: 00check: FSTAB=/etc/schroot/default/fstab
I: 00check: NSSDATABASES=/etc/schroot/default/nssdatabases
I: Executing ‘05btrfs setup-start ok’
I: 05btrfs: Creating snapshot /srv/chroot/btrsnap/snapshots/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e from subvolume /srv/chroot/btrsnap/sid-snap
I: 05btrfs: Create a snapshot of '/srv/chroot/btrsnap/sid-snap' in '/srv/chroot/btrsnap/snapshots/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e'
I: Executing ‘05file setup-start ok’
I: Executing ‘05lvm setup-start ok’
I: Executing ‘05union setup-start ok’
I: Executing ‘10mount setup-start ok’
I: 10mount: Mounting /srv/chroot/btrsnap/snapshots/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e on /var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e
I: 10mount: /srv/chroot/btrsnap/snapshots/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e on /var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e type none (rw,bind)
I: 10mount: proc on /var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e/proc type proc (rw)
I: 10mount: /dev/pts on /var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e/dev/pts type none (rw,bind)
I: 10mount: /dev/shm on /var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e/dev/shm type none (rw,bind)
I: 10mount: /home on /var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e/home type none (rw,bind)
I: 10mount: /tmp on /var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e/tmp type none (rw,bind)
I: Executing ‘15killprocs setup-start ok’
I: Executing ‘20copyfiles setup-start ok’
I: 20copyfiles: `/etc/resolv.conf' -> `/var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e/etc/resolv.conf'
I: Executing ‘20nssdatabases setup-start ok’
I: 20nssdatabases: Copying passwd database to /var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e/etc/passwd
I: 20nssdatabases: Copying shadow database to /var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e/etc/shadow
I: 20nssdatabases: Copying group database to /var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e/etc/group
I: 20nssdatabases: Copying services database to /var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e/etc/services
I: 20nssdatabases: Copying protocols database to /var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e/etc/protocols
I: 20nssdatabases: Copying networks database to /var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e/etc/networks
I: 20nssdatabases: Copying hosts database to /var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e/etc/hosts
I: Executing ‘25nssdatabases setup-start ok’
I: Executing ‘50chrootname setup-start ok’
I: 50chrootname: Setting chroot name to bsnap
I: Executing ‘99builddsourceslist setup-start ok’
I: Executing ‘99check setup-start ok’
W: Shell ‘/usr/bin/zsh’ not available: /usr/bin/zsh: Failed to stat file: No such file or directory
W: Falling back to shell ‘/bin/sh’
I: [bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e chroot] Running login shell: ‘/bin/sh’
$ ls
dchroot-dsa_1.5.0-1_amd64.deb	 schroot-dbg_1.5.0-1_amd64.deb
dchroot_1.5.0-1_amd64.deb	 schroot_1.5.0-1.debian.tar.gz
libsbuild-dev_1.5.0-1_amd64.deb  schroot_1.5.0-1.dsc
libsbuild-doc_1.5.0-1_all.deb	 schroot_1.5.0-1_amd64.changes
schroot-1.5.0			 schroot_1.5.0-1_amd64.deb
schroot-common_1.5.0-1_all.deb	 schroot_1.5.0.orig.tar.bz2
$ 
I: Executing ‘99check setup-stop ok’
I: 99check: AUTH_USER=rleigh
I: 99check: AUTH_RUSER=rleigh
I: 99check: AUTH_RGROUP=rleigh
I: 99check: AUTH_UID=1000
I: 99check: AUTH_GID=1000
I: 99check: AUTH_RUID=1000
I: 99check: AUTH_RGID=1000
I: 99check: AUTH_HOME=/home/rleigh
I: 99check: AUTH_SHELL=/usr/bin/zsh
I: 99check: AUTH_VERBOSITY=verbose
I: 99check: MOUNT_DIR=/var/lib/schroot/mount
I: 99check: LIBEXEC_DIR=/usr/lib/schroot
I: 99check: PID=27185
I: 99check: HOST=x86_64-pc-linux-gnu
I: 99check: HOST_OS=linux-gnu
I: 99check: HOST_VENDOR=pc
I: 99check: HOST_CPU=x86_64
I: 99check: PLATFORM=linux
I: 99check: SESSION_ID=bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e
I: 99check: CHROOT_TYPE=btrfs-snapshot
I: 99check: CHROOT_NAME=bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e
I: 99check: CHROOT_DESCRIPTION=Debian sid btrfs snapshot (session chroot)
I: 99check: CHROOT_SCRIPT_CONFIG=/etc/schroot/default/config
I: 99check: CHROOT_MOUNT_LOCATION=/var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e
I: 99check: CHROOT_LOCATION=
I: 99check: CHROOT_PATH=/var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e
I: 99check: CHROOT_BTRFS_SOURCE_SUBVOLUME=/srv/chroot/btrsnap/sid-snap
I: 99check: CHROOT_BTRFS_SNAPSHOT_DIRECTORY=%CHROOT_BTRFS_SNAPSHOT_DIRECTORY
I: 99check: CHROOT_BTRFS_SNAPSHOT_NAME=/srv/chroot/btrsnap/snapshots/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e
I: 99check: CHROOT_SESSION_CREATE=false
I: 99check: CHROOT_SESSION_CLONE=false
I: 99check: CHROOT_SESSION_PURGE=true
I: 99check: FSTAB=/etc/schroot/default/fstab
I: 99check: NSSDATABASES=/etc/schroot/default/nssdatabases
I: Executing ‘99builddsourceslist setup-stop ok’
I: Executing ‘50chrootname setup-stop ok’
I: Executing ‘25nssdatabases setup-stop ok’
I: Executing ‘20nssdatabases setup-stop ok’
I: Executing ‘20copyfiles setup-stop ok’
I: Executing ‘15killprocs setup-stop ok’
I: 15killprocs: Killing processes run inside /var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e
I: Executing ‘10mount setup-stop ok’
I: 10mount: Unmounting /var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e/tmp
I: 10mount: Unmounting /var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e/home
I: 10mount: Unmounting /var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e/dev/shm
I: 10mount: Unmounting /var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e/dev/pts
I: 10mount: Unmounting /var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e/proc
I: 10mount: Unmounting /var/lib/schroot/mount/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e
I: Executing ‘05union setup-stop ok’
I: Executing ‘05lvm setup-stop ok’
I: Executing ‘05file setup-stop ok’
I: Executing ‘05btrfs setup-stop ok’
I: 05btrfs: Deleting snapshot /srv/chroot/btrsnap/snapshots/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e
I: 05btrfs: Delete subvolume '/srv/chroot/btrsnap/snapshots/bsnap-bc44cfcf-6d4a-4ee3-8a1d-eec3e2cf056e'
I: Executing ‘00check setup-stop ok’

-- 
  .''`.  Roger Leigh
 : :' :  Debian GNU/Linux             http://people.debian.org/~rleigh/
 `. `'   Printing on GNU/Linux?       http://gutenprint.sourceforge.net/
   `-    GPG Public Key: 0x25BFB848   Please GPG sign your mail.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: Digital signature
URL: <http://lists.alioth.debian.org/pipermail/buildd-tools-devel/attachments/20100613/50acf950/attachment.pgp>


More information about the Buildd-tools-devel mailing list