Difference between revisions of "Create root filesystem snapshots with LVM"

From ArchWiki
Jump to: navigation, search
Line 1: Line 1:
[[Category:System recovery]]
<!-- [[Category:System recovery]] -->
{{Article summary start}}
{{Article summary start}}
{{Article summary text|This article will show you how to setup LVM snapshot creation during system start.
{{Article summary text|This article will show you how to setup LVM snapshot creation during system start.

Revision as of 14:09, 27 April 2013

Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary text Template:Article summary heading Template:Article summary wiki Template:Article summary wiki Template:Article summary end


You need a system with LVM root filesystem and systemd. Check if LVM snapshots are correctly setup.


During system start a clean snapshot of the root volume is created using a new service. Create /etc/systemd/system/mk-lvm-snapshots.service containing:

Descriptionm=ake LVM snapshots


ExecStart=/usr/sbin/lvcreate -L10G -n snap-root -s lvmvolume/root

Adapt the lvcreate command to match your root volume group and volume name. Adjust the snapshot size if necessary.

Create a new systemd target /etc/systemd/system/make-snapshots.target with this service:

Description=Make Snapshots

Adapt the base target, if multi-user.target is not your default target.

Enable the new service with systemctl enable mk-lvm-snapshots.service.

If the system is started with the new target, LVM snapshot(s) are created just after mounting the local filesystems. To get a grub menu entry starting this target create /boot/grub/custom.cfg based on the grub.cfg entry for your normal startup. The kernel command line is extended to start the new make-snapshots.target:

### make snapshots ###
menuentry 'Arch GNU/Linux, make snapshots' --class arch --class gnu-linux --class gnu --class os {
        echo    'Loading Linux core repo kernel ...'
        linux   /boot/vmlinuz-linux root=/dev/mapper/lvmvolume-root ro systemd.unit=make-snapshots.target
        echo    'Loading initial ramdisk ...'
        initrd  /boot/initramfs-linux.img

Remember to adjust custom.cfg if grub.cfg changes.

After restarting the system with this grub entry lvs should show up the newly created snapshot.

Tip: To get the messages of the new service use journalctl -u mk-lvm-snapshots.service.



To use this functionality for a full system backup, restart your system with the snapshot creation target. Mount the snapshot volume (and further volumes, if required), preferably using the read only (-o) option. Then backup your system, for example with tar as described in Full_System_Backup_with_tar.

During backup you can continue to use your system normally, since all changes to your regular volumes are invisible in the snapshots. Do not forget to delete the snapshot volume after the backup -- changes to your regular volume will use up space in the snapshot due to the copy-on-write operations. If the snapshot space becomes fully used LVM will deny further writes to your regular volumes, which should be avoided.

Revert updates

An other use for LVM snapshots is testing and reverting of updates. In this case create a snapshot for the system in a known good state and perform updates or changes afterwards.

If you want to permantly stick to the updates just drop the snapshot. If you want to revert to the snapshotted state issue a lvchange --merge for the snapshot. During the next restart of the system the snapshot is merged back into your regular volume. All changes to the volume happened after the snapshot are undone.

Known issues

Due to bug 681582 shutting down the system with active snapshots may hang for some time.