wordpress meta
title: 'Restic recover OS'
date: '2020-03-04T09:02:22-06:00'
status: publish
permalink: /restic-recover-os
author: admin
excerpt: ''
type: post
id: 1457
category:
- restic
tag:
- restic
post_format: []
title: 'Restic recover OS'
date: '2020-03-04T09:02:22-06:00'
status: publish
permalink: /restic-recover-os
author: admin
excerpt: ''
type: post
id: 1457
category:
- restic
tag:
- restic
post_format: []
My test to recover an Ubuntu server OS from a backup.
Note the following:
- I used Ubuntu 20.04 (focal) which is still beta at the time of this POC. In theory Ubuntu 18.04 should work the same or better.
- For an OS recovery I documented the backup elsewhere. It was something like this for me and yours will vary of course:
*restic --exclude={/dev/,/media,/mnt/,/proc/,/run/,/sys/,/tmp/,/var/tmp/,/swapfile} backup / /dev/{console,null}** - For the partition recovery I saved it on the source server to a file for easy copy/paste during the recovery: sfdisk -d > /tmp/partition-table
- I tested restic repo\'s with both sftp and AWS s3.
- Used a Virtualbox VM named u20.04-restic-os-restored. Made the recover server disk 15G (5G larger than the original 10G where backup was done)
- My POC consist of a very simple disk layout ie one ext4 partition only. It was just the default install from this Ubuntu 20.04 desktop install. Complicated boot disk layouts may be very different. I am not interested in recovering servers with complicated OS disk layouts. To me that does not fit with modern infrastructure and concepts like auto scaling. Boot disks should be lean and easily recovered/provisioned through scripting; and configuration applied with configuration management tools.
- boot liveCD, set ubuntu user password and install and start ssh so we can ssh into and easier to copy/paste etc.
- Abbreviated commands (removed most output to shorten)
```bash $ ssh ubuntu@192.168.1.160 $ sudo -i
export AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=
export RESTIC_PASSWORD=
export RESTIC_REPOSITORY=sftp:rr@192.168.1.111:/ARCHIVE/restic-os-restore-poc
cd /usr/local/bin/
wget https://github.com/restic/restic/releases/download/v0.9.6/restic_0.9.6_linux_amd64.bz2
bzip2 -d restic_0.9.6_linux_amd64.bz2
mv restic_0.9.6_linux_amd64 restic
chmod +x restic
mkdir /mnt/restore
sfdisk -d /dev/sda < partition-table
mkfs.ext4 /dev/sda1
mkdir /mnt/restore/
mount /dev/sda1 /mnt/restore/
/usr/local/bin/restic snapshots
time /usr/local/bin/restic restore latest -t /mnt/restore --exclude '/etc/fstab' --exclude '/etc/crypttab' --exclude '/boot/grub/grub.cfg' --exclude '/etc/default/grub'
mount --bind /dev /mnt/restore/dev
mount -t sysfs sys /mnt/restore/sys
mount -t proc proc /mnt/restore/proc
mount -t devpts devpts /mnt/restore/dev/pts
mount -t tmpfs tmp /mnt/restore/tmp
mount --rbind /run /mnt/restore/run
mount -t tmpfs tmp /mnt/restore/tmp
chroot /mnt/restore /bin/bash
lsblk | grep sda
grub-install /dev/sda
update-grub
blkid | grep sda
UUID=$(blkid | grep sda | cut -d' ' -f2 | cut -d\ -f2)
echo $UUID / ext4 errors=remount-ro 0 1 > /etc/fstab
sync
exit
init 0
````
Note:
New server booted and worked but graphics (GNOME login) login for ubuntu account stalled on login. This fixed it: dconf reset -f /org/gnome/
My restic backup command works but just for reference since restic has no include flag rsync seem to have a better exclude/include functionality syntax like this: *rsync --include=/dev/{console,null} --exclude={/dev/,/proc/,/sys/,/tmp/,/run/,/mnt/,/media/,/lost+found}