Difference between revisions of "System backup"

From ArchWiki
Jump to: navigation, search
m (Using a script)
m (Using rsync: improve link)
 
(151 intermediate revisions by 46 users not shown)
Line 1: Line 1:
 
[[Category:System recovery]]
 
[[Category:System recovery]]
[[cs:Full System Backup with rsync]]
+
[[cs:Full system backup with rsync]]
{{Article summary start}}
+
[[es:Full system backup with rsync]]
{{Article summary text|Instructions on backing up the root tree, creating a bootable copy of your system, or for transferring your system to a new drive or partition.}}
+
[[ja:Rsync によるフルシステムバックアップ]]
{{Article summary heading|Related}}
+
[[zh-hant:Full system backup with rsync]]
{{Article summary wiki|Backup Programs}}
+
{{Related articles start}}
{{Article summary wiki|rsync}}
+
{{Related|Synchronization and backup programs}}
{{Article summary end}}
+
{{Related|System maintenance#Backup}}
 +
{{Related|Disk cloning}}
 +
{{Related|Migrate installation to new hardware}}
 +
{{Related|File recovery}}
 +
{{Related articles end}}
  
This article is about using [[rsync]] to transfer a copy of your "/" tree, excluding a few select folders. This approach is considered to be better than [[disk cloning]] with {{ic|dd}} since it allows for a different size, partition table and filesystem to be used, and better than copying with {{ic|cp -a}} as well, because it allows greater control over file permissions, attributes, Access Control Lists (ACLs) and extended attributes. [http://www.bestbits.at/acl/about.html]
+
It is important to regularly backup system and user data stored for example in {{ic|/etc}}, {{ic|/home}}, {{ic|/var}} and for server installations, also {{ic|/srv}}.
  
Either method will work even while the system is running. Since it's going to take a while, you may freely browse the web during this time. Worst case scenario you won't get the same opened tabs when you restore the backup (or boot from it) because they weren't saved. Not a big deal.
+
== Using Btrfs snapshots ==
  
== With a single command ==
+
See [[Btrfs#Snapshots]] and [[Snapper]].
  
As root, run:
+
== Using LVM snapshots ==
  
{{Note|If you plan on backing up your system somewhere other than {{ic|/mnt}} or {{ic|/media}}, don't forget to add it to the list, to avoid an infinite loop.}}
+
See [[LVM#Snapshots]] and [[Create root filesystem snapshots with LVM]].
  
# rsync -aAXv /* /path/to/backup/folder --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found,/home/*/.gvfs}
+
== Using rsync ==
  
For information on why these folders were excluded, read the next section.
+
See [[rsync#As a backup utility]].
  
== Using a script ==
+
== Using tar ==
  
Same as in the above method, the system files are transferred in archive mode, ensuring that symbolic links, devices, permissions and ownerships, among other file attributes are preserved, while excluding files that match the patterns from the {{ic|--exclude}} string. On top of that, it shows at the end how much time it took, and it also writes a blank file stating when the backup was created. To learn more about what this script does, read {{ic|man rsync}} and {{ic|man date}}.
+
See [[Full system backup with tar]].
  
{{Note|Again, if you plan on backing up your system somewhere other than {{ic|/mnt}} or {{ic|/media}}, don't forget to add it to the list, to avoid an infinite loop.}}
+
== Bootable backup ==
  
{{hc|$ cd ~/Scripts
+
Having a bootable backup can be useful in case the filesystem becomes corrupt or if an update breaks the system. The backup can also be used as a test bed for updates, with the ''testing'' repo enabled, etc. If you transferred the system to a different partition or drive and you want to boot it, the process is as simple as updating the backup's {{ic|/etc/fstab}} and your bootloader's configuration file.
$ nano backup.sh|<nowiki>
 
#!/bin/sh
 
  
if [ $# -lt 1 ]; then
+
This section assumes that you backed up the system to another drive or partition, that your current bootloader is working fine, and that you want to boot from the backup as well.
    echo "No destination defined. Usage: $0 destination" >&2
 
    exit 1
 
elif [ $# -gt 1 ]; then
 
    echo "Too many arguments. Usage: $0 destination" >&2
 
    exit 1
 
fi
 
  
START=$(date +%s)
+
=== Update the fstab ===
rsync -aAXv /* $1 --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found,/home/*/.gvfs,/var/lib/pacman/sync/*}
 
FINISH=$(date +%s)
 
echo "total time: $(( ($FINISH-$START) / 60 )) minutes, $(( ($FINISH-$START) % 60 )) seconds"
 
  
touch $1/"Backup from $(date '+%A, %d %B %Y, %T')"</nowiki>}}
+
Without rebooting, edit the backup's [[fstab]] by commenting out or removing any existing entries. Add one entry for the partition containing the backup like the example here:
  
  $ chmod +x backup.sh
+
  /dev/sda''X''    /            ''ext4''      defaults                0  1
  
{{Note|The contents of {{ic|/dev}}, {{ic|/proc}}, {{ic|/sys}}, {{ic|/tmp}}, {{ic|/run}} were excluded because they are populated at boot (while the folders themselves are ''not'' created), {{ic|/lost+found}} is filesystem-specific, and {{ic|/home/*/.gvfs}} should be added too, so that it won't complain at the end that "some files/attrs were not transferred". For Arch Linux, {{ic|/var/lib/pacman/sync/*}} can also be excluded. This can save a lot of time on every backup since the directory contains many small files that tend to change quite often. These are description files for every package from the repositories and can be re-generated with {{ic|pacman -Syu}}. Additionally, you may also want to skip {{ic|/home/*/.thumbnails/*}}, {{ic|/home/*/.mozilla/firefox/*.default/Cache/*}} and {{ic|/home/*/.cache/chromium/*}}.}}
+
Remember to use the proper device name and filesystem type.
  
Backing up is easy.
+
=== Update the bootloader's configuration file ===
 
 
While the system is running, open up a terminal and run (as root):
 
 
 
# /home/user/Scripts/backup.sh /some/destination
 
(replace user with username since you created the directory as user in the user's home directory)
 
 
 
You can also replace both {{ic|$1}} instances from the script with the actual destination path, move it to one of the folders from {{ic|echo $PATH}}, and then simply run (as root):
 
 
 
# backup.sh
 
 
 
== Boot requirements ==
 
 
 
Having a bootable backup can be useful in case the filesystem becomes corrupt or if an update breaks the system. The backup can also be used as a test bed for updates, with the [testing] repo enabled, etc. If you transferred the system to a different partition or drive and you want to boot it, the process is as simple as updating the backup's {{ic|/etc/fstab}} and your bootloader's configuration file.
 
  
=== Update the fstab ===
+
For [[Syslinux]], all you need to do is duplicate the current entry, except pointing to a different drive or partition.
  
Without rebooting, edit the backup's [[fstab]] to reflect the changes:
+
{{Tip|Instead of editing {{ic|syslinux.cfg}}, you can also temporarily edit the menu during boot. When the menu shows up, press the {{ic|Tab}} key and change the relevant entries. Partitions are counted from one, drives are counted from zero.}}
{{hc|# nano /path/to/backup/etc/fstab|2=
 
tmpfs        /tmp          tmpfs    nodev,nosuid            0  0
 
  
<font color=#888888><i>/dev/sda1    /boot         ext2      defaults                0  2
+
For [[GRUB]], it is recommended that you automatically [[GRUB#Generate_the_main_configuration_file|re-generate the main configuration file]].  If you want to freshly install all grub files to somewhere other than {{ic|/boot}}, such as {{ic|/mnt/newroot/boot}}, use the {{ic|--boot-directory}} flag.
/dev/sda5    none          swap      defaults                0  0
 
/dev/sda6    /            ext4      defaults                0  1
 
/dev/sda7    /home        ext4      defaults                0  2</i></font>}}
 
  
Because rsync has performed a recursive copy of the ''entire'' root filesystem, all of the {{ic|sda}} mountpoints are problematic and booting the backup will fail. In this example, all of the offending entries are replaced with a single one:
+
Also verify the new menu entry in {{ic|/boot/grub/grub.cfg}}. Make sure the UUID is matching the new partition, otherwise it could still boot the old system. Find the UUID of a partition as follows:
  
{{hc|# nano /path/to/backup/etc/fstab|
+
# lsblk -no NAME,UUID /dev/sdb3
tmpfs        /tmp          tmpfs    nodev,nosuid            0  0
 
 
 
/dev/'''sdb1'''    /            ext4      defaults                0  1}}
 
 
 
Remember to use the proper device name and filesystem type.
 
 
 
=== Update the bootloader's configuration file ===
 
 
 
This section assumes that you backed up the system to another drive or partition, that your current bootloader is working fine, and that you want to boot from the backup as well.
 
  
For [[Syslinux]], all you need to do is duplicate the current entry, except pointing to a different drive or partition:
+
where you substitute the desired partition for /dev/sdb3. To list the UUIDs of partitions grub thinks it can boot, use grep:
  
{{Tip|Instead of editing {{ic|syslinux.cfg}}, you can also temporarily edit the menu during boot. When the menu shows up, press the {{Keypress|Tab}} key and change the relevant entries. Partitions are counted from one, drives are counted from zero.}}
+
# grep UUID= /boot/grub/grub.cfg
  
# nano /boot/syslinux/syslinux.cfg
+
=== First boot ===
  
For [[GRUB]], it's recommended that you automatically re-generate the {{ic|grub.cfg}} file:
+
Reboot the computer and select the right entry in the bootloader. This will load the system for the first time. All peripherals should be detected and the empty folders in {{ic|/}} will be populated.
  
# pacman -S os-prober
+
Now you can re-edit {{ic|/etc/fstab}} to add the previously removed partitions and mount points.
# grub-mkconfig -o /boot/grub/grub.cfg
 

Latest revision as of 11:15, 1 July 2017

It is important to regularly backup system and user data stored for example in /etc, /home, /var and for server installations, also /srv.

Using Btrfs snapshots

See Btrfs#Snapshots and Snapper.

Using LVM snapshots

See LVM#Snapshots and Create root filesystem snapshots with LVM.

Using rsync

See rsync#As a backup utility.

Using tar

See Full system backup with tar.

Bootable backup

Having a bootable backup can be useful in case the filesystem becomes corrupt or if an update breaks the system. The backup can also be used as a test bed for updates, with the testing repo enabled, etc. If you transferred the system to a different partition or drive and you want to boot it, the process is as simple as updating the backup's /etc/fstab and your bootloader's configuration file.

This section assumes that you backed up the system to another drive or partition, that your current bootloader is working fine, and that you want to boot from the backup as well.

Update the fstab

Without rebooting, edit the backup's fstab by commenting out or removing any existing entries. Add one entry for the partition containing the backup like the example here:

/dev/sdaX    /             ext4      defaults                 0   1

Remember to use the proper device name and filesystem type.

Update the bootloader's configuration file

For Syslinux, all you need to do is duplicate the current entry, except pointing to a different drive or partition.

Tip: Instead of editing syslinux.cfg, you can also temporarily edit the menu during boot. When the menu shows up, press the Tab key and change the relevant entries. Partitions are counted from one, drives are counted from zero.

For GRUB, it is recommended that you automatically re-generate the main configuration file. If you want to freshly install all grub files to somewhere other than /boot, such as /mnt/newroot/boot, use the --boot-directory flag.

Also verify the new menu entry in /boot/grub/grub.cfg. Make sure the UUID is matching the new partition, otherwise it could still boot the old system. Find the UUID of a partition as follows:

# lsblk -no NAME,UUID /dev/sdb3

where you substitute the desired partition for /dev/sdb3. To list the UUIDs of partitions grub thinks it can boot, use grep:

# grep UUID= /boot/grub/grub.cfg

First boot

Reboot the computer and select the right entry in the bootloader. This will load the system for the first time. All peripherals should be detected and the empty folders in / will be populated.

Now you can re-edit /etc/fstab to add the previously removed partitions and mount points.