mirror of https://github.com/digint/btrbk
Merge b35735ec84
into b4ec8d32a5
commit
92d98bb9d9
12
README.md
12
README.md
|
@ -121,7 +121,7 @@ When playing around with config-files, it is highly recommended to
|
||||||
check the output using the `dryrun` command before executing the
|
check the output using the `dryrun` command before executing the
|
||||||
backups:
|
backups:
|
||||||
|
|
||||||
btrbk -c myconfig -v dryrun
|
btrbk -c /path/to/myconfig -v dryrun
|
||||||
|
|
||||||
This will read all btrfs information on the source/target filesystems
|
This will read all btrfs information on the source/target filesystems
|
||||||
and show what actions would be performed (without writing anything to
|
and show what actions would be performed (without writing anything to
|
||||||
|
@ -135,11 +135,15 @@ Example: laptop with usb-disk for backups
|
||||||
|
|
||||||
In this example, we assume you have a laptop with:
|
In this example, we assume you have a laptop with:
|
||||||
|
|
||||||
* a disk having a btrfs volume mounted as `/mnt/btr_pool`,
|
* a disk having a btrfs root subvolume (subvolid=5) mounted on `/mnt/btr_pool`,
|
||||||
containing a subvolume `rootfs` for the root filesystem and a
|
containing a subvolume `rootfs` for the root filesystem (i.e. mounted on `/`) and a
|
||||||
subvolume `home` for the user data.
|
subvolume `home` for the user data.
|
||||||
* a backup disk having a btrfs volume mounted as `/mnt/btr_backup`,
|
* a backup disk having a btrfs volume mounted as `/mnt/btr_backup`,
|
||||||
containing a subvolume `mylaptop` for the incremental backups.
|
containing a subvolume or directory `mylaptop` for the incremental backups.
|
||||||
|
|
||||||
|
Make sure that you have `/mnt/btr_pool/btrbk_snapshots` subvolume or create it:
|
||||||
|
|
||||||
|
btrfs subvolume create btrbk_snapshots
|
||||||
|
|
||||||
Retention policy:
|
Retention policy:
|
||||||
|
|
||||||
|
|
54
doc/FAQ.md
54
doc/FAQ.md
|
@ -42,13 +42,13 @@ btrbk is designed to never alter your source subvolume. In the config
|
||||||
above, the btrbk snapshots would be created *inside* the source
|
above, the btrbk snapshots would be created *inside* the source
|
||||||
subvolume, altering it.
|
subvolume, altering it.
|
||||||
|
|
||||||
The same applies to **any "btrfs root" mount point** (subvolid=0). In
|
The same applies to **any "btrfs root" mount point** (subvolid=5). In
|
||||||
the example below, you will **not be able to backup** `/mnt/data`
|
the example below, you will **not be able to backup** `/mnt/data`
|
||||||
using btrbk:
|
using btrbk:
|
||||||
|
|
||||||
/etc/fstab:
|
/etc/fstab:
|
||||||
|
|
||||||
/dev/sda1 /mnt/data btrfs subvolid=0 [...]
|
/dev/sda1 /mnt/data btrfs subvolid=5 [...]
|
||||||
|
|
||||||
btrbk is designed to operate on the subvolumes *within* `/mnt/data`.
|
btrbk is designed to operate on the subvolumes *within* `/mnt/data`.
|
||||||
The recommended way is to split your data into subvolumes, e.g.:
|
The recommended way is to split your data into subvolumes, e.g.:
|
||||||
|
@ -75,11 +75,11 @@ The btrbk configuration for this would be:
|
||||||
|
|
||||||
### Tech Answer
|
### Tech Answer
|
||||||
|
|
||||||
While *btrfs root* (subvolid=0) is a regular subvolume, it is still
|
While *btrfs root* (subvolid=5) is a regular subvolume, it is still
|
||||||
special: being the root node, it does not have a "name" inside the
|
special: being the root node, it does not have a "name" inside the
|
||||||
subvolume tree.
|
subvolume tree.
|
||||||
|
|
||||||
Here, `/mnt/btr_pool` is mounted with `subvolid=0`:
|
Here, `/mnt/btr_pool` is mounted with `subvolid=5`:
|
||||||
|
|
||||||
# btrfs sub show /mnt/btr_pool/
|
# btrfs sub show /mnt/btr_pool/
|
||||||
/mnt/btr_data is toplevel subvolume
|
/mnt/btr_data is toplevel subvolume
|
||||||
|
@ -105,7 +105,7 @@ a good entry point.
|
||||||
|
|
||||||
If your linux root filesystem is btrfs, I recommend booting linux from
|
If your linux root filesystem is btrfs, I recommend booting linux from
|
||||||
a btrfs subvolume, and use the btrfs root only as a container for
|
a btrfs subvolume, and use the btrfs root only as a container for
|
||||||
subvolumes (i.e. NOT booting from "subvolid=0"). This has the big
|
subvolumes (i.e. NOT booting from "subvolid=5"). This has the big
|
||||||
advantage that you can choose the subvolume in which to boot by simply
|
advantage that you can choose the subvolume in which to boot by simply
|
||||||
switching the `rootflags=subvol=<subvolume>` kernel boot option.
|
switching the `rootflags=subvol=<subvolume>` kernel boot option.
|
||||||
|
|
||||||
|
@ -124,7 +124,7 @@ have to create a run-time (rw) snapshot before booting into it:
|
||||||
# btrfs subvolume snapshot /mnt/btr_pool/backup/btrbk/rootfs-20150101 /mnt/btr_pool/rootfs_testing
|
# btrfs subvolume snapshot /mnt/btr_pool/backup/btrbk/rootfs-20150101 /mnt/btr_pool/rootfs_testing
|
||||||
|
|
||||||
|
|
||||||
How do I convert '/' (subvolid=0) into a subvolume?
|
How do I convert '/' (subvolid=5) into a subvolume?
|
||||||
---------------------------------------------------
|
---------------------------------------------------
|
||||||
|
|
||||||
There's several ways to achieve this, the solution described below is
|
There's several ways to achieve this, the solution described below is
|
||||||
|
@ -132,7 +132,7 @@ that it guarantees not to create new files (extents) on disk.
|
||||||
|
|
||||||
### Step 1: make a snapshot of your root filesystem
|
### Step 1: make a snapshot of your root filesystem
|
||||||
|
|
||||||
Assuming that '/' is mounted with `subvolid=0`:
|
Assuming that '/' is mounted with `subvolid=5`:
|
||||||
|
|
||||||
# btrfs subvolume snapshot / /rootfs
|
# btrfs subvolume snapshot / /rootfs
|
||||||
|
|
||||||
|
@ -140,26 +140,37 @@ Note that this command does NOT make any physical copy of the files of
|
||||||
your subvolumes within "/", it will only add some metadata.
|
your subvolumes within "/", it will only add some metadata.
|
||||||
|
|
||||||
|
|
||||||
### Step 2: make sure that "/rootfs/etc/fstab" is ok.
|
### Step 2: (OPTIONAL) make sure that "/rootfs/etc/fstab" mounts your toplevel subvolume.
|
||||||
|
|
||||||
Add mount point for subvolid=0 to fstab, something like this:
|
Add mount point for subvolid=5 to fstab, something like this:
|
||||||
|
|
||||||
/rootfs/etc/fstab:
|
/rootfs/etc/fstab:
|
||||||
|
|
||||||
/dev/sda1 /mnt/btr_pool btrfs subvolid=0,noatime 0 0
|
/dev/sda1 /mnt/btr_pool btrfs subvolid=5,noatime 0 0
|
||||||
|
|
||||||
|
> This step is not critical for a proper root change, but will save your time by preventing
|
||||||
|
> further configurations/reboots and manually mounting the toplevel subvolume.
|
||||||
|
|
||||||
### Step 3: boot from the new subvolume "rootfs".
|
### Step 3: boot from the new subvolume "rootfs".
|
||||||
|
|
||||||
Either add `rootflags=subvol=rootfs` to grub.cfg, or set subvolume
|
Either add `rootflags=subvol=rootfs` to grub.cfg , or set subvolume
|
||||||
"rootfs" as default:
|
"rootfs" as default (**recommended**):
|
||||||
|
|
||||||
# btrfs subvolume set-default <subvolid> /
|
# btrfs subvolume set-default <subvolid> /
|
||||||
|
|
||||||
|
> You can obtain `<subvolid>` via `btrfs subvolume show /rootfs | grep "Subvolume ID"`
|
||||||
|
|
||||||
|
> Editing grub.cfg manually may lead you some troubles if you perform some actions that will
|
||||||
|
> fire `grub-mkconfig`.
|
||||||
|
|
||||||
|
|
||||||
### Step 4: after reboot, check if everything went fine:
|
### Step 4: after reboot, check if everything went fine:
|
||||||
|
|
||||||
First check your **system log** for btrfs errors, then:
|
First check your **system log** for btrfs errors:
|
||||||
|
|
||||||
|
cat /var/log/messages | grep btrfs | grep "error" | tail
|
||||||
|
|
||||||
|
then check if current `/` is our new subvolume:
|
||||||
|
|
||||||
# btrfs subvolume show /
|
# btrfs subvolume show /
|
||||||
Name: rootfs
|
Name: rootfs
|
||||||
|
@ -167,24 +178,19 @@ First check your **system log** for btrfs errors, then:
|
||||||
|
|
||||||
Great, this tells us that we just booted into our new snapshot!
|
Great, this tells us that we just booted into our new snapshot!
|
||||||
|
|
||||||
# mount /mnt/btr_pool
|
|
||||||
# btrfs subvolume show /mnt/btr_pool
|
# btrfs subvolume show /mnt/btr_pool
|
||||||
/mnt/btr_pool is btrfs root
|
/mnt/btr_pool is toplevel subvolume
|
||||||
|
|
||||||
This means that the root volume (subvolid=0) is correctly mounted.
|
This means that the root volume (subvolid=5) is correctly mounted.
|
||||||
|
|
||||||
|
|
||||||
### Step 5: delete old (duplicate) files
|
### Step 5: delete old (duplicate) files
|
||||||
|
|
||||||
Carefully delete all old files from `/mnt/btr_pool`, except "rootfs"
|
Carefully delete all old files from `/mnt/btr_pool`, except "rootfs"
|
||||||
and all other subvolumes within "/". You can list all these by typing:
|
and any other subvolumes within "/mnt/btr_pool".
|
||||||
|
|
||||||
# btrfs subvolume list -a /mnt/btr_pool
|
In other words, delete any folders in `/mnt/btr_pool` that are
|
||||||
|
**NOT LISTED** by `btrfs subvolume list -a /mnt/btr_pool`:
|
||||||
Make sure you do NOT delete anything within the directories listed
|
|
||||||
here!
|
|
||||||
|
|
||||||
something like:
|
|
||||||
|
|
||||||
# cd /mnt/btr_pool
|
# cd /mnt/btr_pool
|
||||||
# rm -rf bin sbin usr lib var ...
|
# rm -rf bin sbin usr lib var ...
|
||||||
|
|
Loading…
Reference in New Issue