mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-24 19:28:53 +03:00
Add bootfs.snapshot and bootfs.rollback kernel parameters
Unlike other filesystems, snapshots and rollbacks of bootfs need to be done from a rescue environment. This patch makes it possible to snap- shot or rollback the bootfs simply by specifying bootfs.snapshot or bootfs.rollback on the kernel command line. The operation will be performed by dracut just before bootfs is mounted. Reviewed-by: Antonio Russo <antonio.e.russo@gmail.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Gregory Bartholomew <gregory.lee.bartholomew@gmail.com> Closes #10198
This commit is contained in:
committed by
GitHub
parent
3d93161b01
commit
9052e3d70b
@@ -7,3 +7,5 @@ zfs-lib.sh
|
||||
zfs-load-key.sh
|
||||
zfs-needshutdown.sh
|
||||
zfs-env-bootfs.service
|
||||
zfs-snapshot-bootfs.service
|
||||
zfs-rollback-bootfs.service
|
||||
|
||||
@@ -10,7 +10,9 @@ pkgdracut_SCRIPTS = \
|
||||
zfs-lib.sh
|
||||
|
||||
pkgdracut_DATA = \
|
||||
zfs-env-bootfs.service
|
||||
zfs-env-bootfs.service \
|
||||
zfs-snapshot-bootfs.service \
|
||||
zfs-rollback-bootfs.service
|
||||
|
||||
EXTRA_DIST = \
|
||||
$(top_srcdir)/contrib/dracut/90zfs/export-zfs.sh.in \
|
||||
@@ -21,7 +23,9 @@ EXTRA_DIST = \
|
||||
$(top_srcdir)/contrib/dracut/90zfs/zfs-load-key.sh.in \
|
||||
$(top_srcdir)/contrib/dracut/90zfs/zfs-needshutdown.sh.in \
|
||||
$(top_srcdir)/contrib/dracut/90zfs/zfs-lib.sh.in \
|
||||
$(top_srcdir)/contrib/dracut/90zfs/zfs-env-bootfs.service.in
|
||||
$(top_srcdir)/contrib/dracut/90zfs/zfs-env-bootfs.service.in \
|
||||
$(top_srcdir)/contrib/dracut/90zfs/zfs-snapshot-bootfs.service.in \
|
||||
$(top_srcdir)/contrib/dracut/90zfs/zfs-rollback-bootfs.service.in
|
||||
|
||||
$(pkgdracut_SCRIPTS) $(pkgdracut_DATA) :%:%.in
|
||||
-$(SED) -e 's,@bindir\@,$(bindir),g' \
|
||||
|
||||
@@ -109,5 +109,11 @@ install() {
|
||||
ln -s ../zfs-import.target "${initdir}/$systemdsystemunitdir/initrd.target.wants"/zfs-import.target
|
||||
type mark_hostonly >/dev/null 2>&1 && mark_hostonly @systemdunitdir@/zfs-import.target
|
||||
fi
|
||||
for _service in zfs-snapshot-bootfs.service zfs-rollback-bootfs.service ; do
|
||||
inst "${moddir}"/$_service "${systemdsystemunitdir}"/$_service
|
||||
if ! [ -L "${initdir}/$systemdsystemunitdir/initrd.target.wants"/$_service ]; then
|
||||
ln -s ../$_service "${initdir}/$systemdsystemunitdir/initrd.target.wants"/$_service
|
||||
fi
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
[Unit]
|
||||
Description=Rollback bootfs just before it is mounted
|
||||
Requisite=zfs-import.target
|
||||
After=zfs-import.target zfs-snapshot-bootfs.service
|
||||
Before=dracut-mount.service
|
||||
DefaultDependencies=no
|
||||
ConditionKernelCommandLine=bootfs.rollback
|
||||
|
||||
[Service]
|
||||
# ${BOOTFS} should have been set by zfs-env-bootfs.service
|
||||
Type=oneshot
|
||||
ExecStartPre=/bin/sh -c 'test -n "${BOOTFS}"'
|
||||
ExecStart=/bin/sh -c '. /lib/dracut-lib.sh; SNAPNAME="$(getarg bootfs.rollback)"; /sbin/zfs rollback -Rf "${BOOTFS}@${SNAPNAME:-%v}"'
|
||||
RemainAfterExit=yes
|
||||
@@ -0,0 +1,14 @@
|
||||
[Unit]
|
||||
Description=Snapshot bootfs just before it is mounted
|
||||
Requisite=zfs-import.target
|
||||
After=zfs-import.target
|
||||
Before=dracut-mount.service
|
||||
DefaultDependencies=no
|
||||
ConditionKernelCommandLine=bootfs.snapshot
|
||||
|
||||
[Service]
|
||||
# ${BOOTFS} should have been set by zfs-env-bootfs.service
|
||||
Type=oneshot
|
||||
ExecStartPre=/bin/sh -c 'test -n "${BOOTFS}"'
|
||||
ExecStart=-/bin/sh -c '. /lib/dracut-lib.sh; SNAPNAME="$(getarg bootfs.snapshot)"; /sbin/zfs snapshot "${BOOTFS}@${SNAPNAME:-%v}"'
|
||||
RemainAfterExit=yes
|
||||
Reference in New Issue
Block a user