I'm quite new to Ubuntu and want to create a backup. I'm really not sure what files and folders to include so that if I restore my system it will be as it is now. I can't seem to find good details of this anywhere. Hopefully someone could help me with this. Is it possible to backup everything as it is now so in the event of a system restore I don't have to reinstall programs and settings?
9 Answers
My backup sets currently contain
/etc
/home
/root
/srv
/usr (/usr/local only, nothing else)
/var (except /var/run, /var/cache, /var/tmp)
Note this is for a server, so backing up things like /etc saves all my configuration for my services, I have web servers in /srv (though if you have them in /var/www, they would still be in this backup set), I have various scripts and things set up in /usr/local, etc. Backing up /home instead of /home/myusername is so that I can preserve all users. If all you want to keep is your user data, you only need your home directory.
Edit: If you have anything in /opt
you probably should include that too. Thanks to @GabrielStaples for pointing that out.
-
-
4It's the home directory of the root user, I keep some sysadmin scripts in there, for backup etc. Though I've moved most of these to
/usr/local/sbin/
Commented Jul 21, 2017 at 11:03 -
1@A.B. recommends backing up
/opt
. Any reason we may or may not want to do this? What does/opt
contain? Commented Jul 9, 2019 at 18:44 -
2Excluding
~/.cache
sounds ok to me. I don't exclude it myself but if you want to cut down on data transfer/sync time, that can be an option. Commented Jul 10, 2019 at 0:03 -
1@GabrielStaples I don't use
/opt
but if you do use it, then you may include it in your backups./opt
tends to be unused by distros themselves leaving it up to the user, but application vendors who provide a Linux system with their third-party app installed on it might use/opt
or if you develop your own software you may have it in/opt
instead of/usr/local
Commented Jul 10, 2019 at 0:06
What you need to backup depends on your particular system*.
So this is going to take a little work on your part to sort out. Start by figuring out what does not need to be backed up. First take a look at your root directory, and then work backwards.
For example, cd /; ls -F
gives me:
bin/ initrd.img@ mnt/ snap/ vmlinuz@
boot/ initrd.img.old@ opt/ srv/ vmlinuz.old@
cdrom/ lib/ proc/ sys/
dev/ lib64/ root/ tmp/
etc/ lost+found/ run/ usr/
home/ media/ sbin/ var/
/cdrom
, /media
, and /mnt
are mount points so don't need backup.
/dev
, /lost+found
, /proc
, /run
, /sys
and /tmp
get auto re-created on reboot. [I'm guessing the links: /initrd.img@
, /initrd.img.old@
, /vmlinuz@
, /vmlinuz.old@ get re-created on boot ubuntu reinstall (I'm not sure which).]
On my system /root
is empty (use sudo -s
to open a shell as root user to view it ... be careful to exit
immediately after you inspect /root
.)
/snap
is also empty. Perhaps it's a mount point.
/var
contains variable data like system logging files, mail and printer spool directories, and transient and temporary files." I now back it up, except for /var/log. ref: http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/var.html)
/bin
, /boot
, /lib
, /lib64
, and /sbin
presumably will get reloaded via a reinstall of Ubuntu unless you are doing system development work or something like that. You can either back these up or rely on a fresh install to recover them.
/home
should be in it's own backup. There will be times when you will want to restore just /home
.
That leaves other changes you've made to your system in /etc
, /opt
, /srv
, and /usr
which you will want to also backup, either together or individually.
Here are a couple of pages that might help understand these directories:
http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/the-root-directory.html http://www.tldp.org/LDP/intro-linux/html/sect_03_01.html#sect_03_01_03
A related line of thinking is: Say you just installed a fresh Ubuntu. What would you need to back up? Answer: nothing. You haven't changed anything yet, so you can simply reinstall Ubuntu. It restores /bin, /etc, /root, /usr, etc.
So the only reason you might want to backup /bin is because you have changed it or added to it. So part of backing up is understanding what is where and when it is created and modified. Just know that the rest of us struggle with this too.
*****And, although you didn't ask, one can make full disk or partition images. These take a lot of time to backup and restore and may leave your system down while that work is proceeding. And it's how I used to backup my Windows systems using Acronis. The one thing they provide you with is a partition map, and images from non-linux partitions. I now make these before I reorganize partitions, and before I test my backup restore functions.
(I'm very open to suggestions as to how I could make this better.)
-
This is great when you're focussed on configurations and don't need the binaries, like you said they can be installed again and this is much lighter to export and than to reinstall askubuntu.com/a/55906/104223– CTS_AECommented Jan 17, 2017 at 4:39
If I reinstall my desktop system, I backup
/etc
/var
, I'm too lazy to exclude some sub-folders/opt
/home
is on a separate partition and has a backup made every day.
After the reinstall, I restore the parts from my backup, which I really need.
With this strategy, all my configurations, local mails and crontab configurations are safe and I have to reinstall my needed applications only.
My personal scripts are saved in my home folder (daily backup, remember?), therefore I don't use /usr/local
.
-
1
-
-
-
In my /opt is software that I would probably need to re-install anyway, especially if I upgraded Ubuntu versions.– qwrCommented Sep 3 at 23:48
Let's collect a list of files here. I've made this post "community wiki."
Of course, it varies from person to person. Mine is used mainly as a web server and NFS server.
mkdir $MY_BACKUP_FOLDER
cd $MY_BACKUP_FOLDER
crontabs
sudo rsync -a --relative /var/spool/cron/crontabs .
NFS shares
sudo rsync -a --relative /etc/exports .
sudoers
sudo rsync -a --relative /etc/sudoers .
apache config
sudo rsync -a --relative /etc/apache2/apache2.conf .
autofs
sudo rsync -a --relative /etc/auto* .
fstab
sudo rsync -a --relative /etc/fstab .
hosts
sudo rsync -a --relative /etc/hosts .
samba
sudo rsync -a --relative /etc/samba/smb.conf .
USB Device (udev) rules
sudo rsync -a --relative /etc/udev .
systemd
mlocate
sudo rsync -a --relative /etc/updatedb.conf .
Ubuntu launcher ("Start Menu") .desktop files, incl. any custom ones you've set up:
sudo rsync -a --relative /usr/share/applications .
home dir can be preserved if you do a ubuntu reinstall
Most people just backup their home directory: /home/$USER/
. If you want to back up the configuration files and settings, those are stored in folders and files in your home directory that start with a . (dot). Make a list of packages that you use (and PPAs) and it will be easy to reinstall all your packages should you need. Or, use the command described in this comment.
Deja Dup Backup is a great tool that comes as a default on Ubuntu. Other options include command line (rsync, rsnapshot, rdiff-backup, etc).
Finally, to backup the whole disk as an image, check out clonezilla.
-
2Also, in addition to what the answer psny linked to, it wouldn't hurt to create a back up of the whole /etc/ directory which stores system wide settings. If you've made some changes there, it would be helpful to have an archive to get those changes from. Commented Dec 1, 2012 at 15:12
-
2If you have any crontabs setup, then backup
/var/spool/cron
too.– Ian DunnCommented Apr 29, 2015 at 7:08
I backup what is important to me which can loosely be defined as my intellectual property plus efforts spent configuring Ubuntu to work perfectly (for me).
I have the backup run every morning at 4:00 am or whenever Laptop resumes from suspend. It is controlled through /etc/cron.daily
script.
The best kind of backup is off-site in case of fire or flood where computer sits so I take advantage of free 15GB gmail.com account and send a compressed daily backup there.
After a couple of years I hit my 15 GB "free" quota so wrote a script to recycle backups into 180 days, 78 weeks, 36 months and 100 yearly backups.
Here is the daily backup script of what's important to me:
#!/bin/bash
# NAME: daily-backup.sh
# PATH: /mnt/e/bin
# DESC: Backup scripts, documents and configuration files to .tar
# DATE: July 11, 2017. Modified July 7, 2019.
HomeDir="/home/USER_NAME" # Required for cron compatibility
EmailAddr="[email protected]"
# PARM: 1=backup file name. Extension .tar.gz automatically appended.
# NOTE: To include MBR (Master Boot Record) in backup create an image using:
# sudo dd if=/dev/sda of="$HOME/.mbr.sav" bs=512 count=1
# NOTE: CLONE CURRENT INSTALLATION TO NEW MACHINE
# =========================================
# To restore use Live USB to install Ubuntu alongside Windows 10
# Connect to network with password xxxxxxxxx
# Install Google Chrome
# (https://askubuntu.com/questions/510056/how-to-install-google-chrome):
# wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub
# | sudo apt-key add
# echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/
# stable main' | sudo tee /etc/apt/sources.list.d/google-chrome.list
# sudo apt update
# sudo apt install google-chrome-stable
# Open gmail.com and download attachment `$1` which is usually called
# Backup-yymmdd-DayOfWeekName.tar
# Make missing home/bin directory which tar doesn't create automatically:
# mkdir ~/bin
# Restore the daily backup using:
# sudo tar -xvf Backup-yymmdd-DayFfWeekName.tar -C /
# yar -xvf Backup-yymmdd-DayFfWeekName.tar -C /
# Patch /etc/default/grub with new machine parameters, ie for nvme use:
# acpiphp.disable=1
# Use `sudo apt install aptitude-common`
# Clone packages using `aptitude-create-state-bundle` on Source
# Copy state-bundle.tar file from Source to Target machine
# Restore packages using `aptitude-run-state-bundle` on Target
# Manually copy ~/Pictures, ~/Videos, etc. not in daily backup.
# sudo update-grub # NVMe suspend/resume acpiphp.disable=1
# sudo update-initramfs # to get plymouth sunrise splash screen
if [[ $# -ne 1 ]]; then
echo 'One argument required for file name, e.g. "Backup-2017-10-21-Saturday"'
echo '.tar will automatically be added as a file extension'
exit 1
fi
Filename="$1.tar"
cd $HomeDir ||
exit 1
dpkg --get-selections > .packages # List of installed applications
tar -cvpf "$Filename" bin # create .tar & add user scripts
tar -rvpf "$Filename" .config/autostart # autostart programs configuration
tar -rvpf "$Filename" /usr/local/bin # add global root-based scripts
tar -rvpf "$Filename" /etc/cron* # crontab, cron.d, cron.daily, etc
tar -rvpf "$Filename" /etc/system* # systemd files: login.conf, etc.
tar -rvpf "$Filename" /lib/systemd/system-sleep
tar -rvpf "$Filename" /etc/rc.local # Startup script: calls zaprestore.
tar -rvpf "$Filename" /etc/sudoers # 120 minute sudo, stars in password
tar -rvpf "$Filename" /etc/environment # PATH backup
tar -rvpf "$Filename" /etc/default/grub # bootstrap loader
#July 20, 2018 - /boot/grub takes 5MB+
#tar -rvpf "$Filename" /boot/grub # Custom grub fonts and splash...
tar -rvpf "$Filename" /usr/share/plymouth # ... screen (plymouth)
#included above tar -rvpf "$Filename" /usr/share/plymouth/themes/earth-sunrise/
tar -rvpf "$Filename" /usr/share/grub/themes/Tuxkiller2/
tar -rvpf "$Filename" /etc/grub.d # 00_header, etc. changes
tar -rvpf "$Filename" Desktop # files and links on desktop
tar -rvpf "$Filename" Documents/*.od* # Libre Office: *.ods, *.odt, etc.
# Trusted keys to install from third party PPAs
tar -rvpf "$Filename" /etc/apt/trusted.gpg
tar -rvpf "$Filename" /etc/apt/trusted.gpg.d
# Sources for repositories - 1) Main single file - 2) directory of files
tar -rvpf "$Filename" /etc/apt/sources.list
tar -rvpf "$Filename" /etc/apt/sources.list.d
# find all $HOME/.config files and add to .tar
find .* -maxdepth 0 -type f -exec tar -rvf "$Filename" {} +
# Nautilus custom scripts
tar -rvpf "$Filename" .local/share/nautilus/scripts
# /etc/udev rules
tar -rvpf "$Filename" /etc/udev/rules.d
# /etc/rc.local
tar -rvpf "$Filename" /etc/rc.local
# /etc/X11/xorg.conf.d
tar -rvpf "$Filename" /etc/X11/xorg.conf.d
# /mnt/e - shared WSL + Linux
tar -rvpf "$Filename" /mnt/e/bin
tar -rvpf "$Filename" /mnt/e/Documents
# ~/eyesome - Development version
tar -rvpf "$Filename" eyesome
# ~/gmail - Python and Bash scripts but NOT huge data files
tar -rvpf "$Filename" gmail/*.py
tar -rvpf "$Filename" gmail/*.sh
tar -rvpf "$Filename" gmail/go
tar -rvpf "$Filename" gmail/BackupSets
tar -rvpf "$Filename" gmail/BackupDays
echo "Complete file list with sizes..."
tar -tvf "$Filename" > BackupLog # list filenames and sizes
chmod a+w BackupLog # give user delete access
echo "Compressing with gzip..."
gzip "$Filename"
Filename="$Filename.gz"
echo "Emailing: $EmailAddr"
# From: https://internetlifeforum.com/gmail/2251-gmail-some-file-types-blocked-fix-how-go-around/
# cat archive.tar.gz | base64 > file
# then i sent the file via email:
# echo "Base64 encoded file" | mutt -a file -s subject -- [email protected]
# then mail was delivered properly! Then when one need to get readable archive
# again, he need to decode it by base64. In my case i do it via linux command line:
# cat file | base64 -d > decodedarchive.tar.gz
Filename64="$Filename.64"
cat "$Filename" | base64 > "$Filename64"
mail -a "$Filename64" -s "$Filename64" "$EmailAddr" < BackupLog
ls -la "$Filename" "$Filename64"
rm "$Filename" "$Filename64"
exit 0
Just a reminder if you're using DejaDup (or anything else really), also exclude any cloud storage folders (likely in your home), such as Dropbox. If you're paying for s3 storage this could be a bad mistake.
The most important is /home
, which is where most user data is stored, unless you primarily work elsewhere on the machine.
Optional: To cut down on size and file count, exclude .cache
and .local/Trash
. For long-term backups, I also manually cleanup some unneeded files beforehand with baobab and du -h --max-depth=1
.
Use Deja Dup backup. It is provided by default. Go to settings and keep only root folder (/
) as "folders to include" and add media folder (/media
) in "folders to ignore".
Because of this, all your programs will be backed up in case of system damage (rare) except your other drives which normally remain unaffected.
ncdu
command and usetar
to exclude unnecessary files.