Answers:
我的备份集当前包含
/etc
/home
/root
/srv
/usr (/usr/local only, nothing else)
/var (except /var/run, /var/cache, /var/tmp)
请注意,这是用于服务器的,因此备份/ etc之类的内容会保存我的服务的所有配置,我的Web服务器位于/ srv中(尽管如果它们位于/ var / www中,它们仍将位于此备份集中) ,我在/ usr / local等中设置了各种脚本和设置。备份/ home而不是/ home / myusername是为了保留所有用户。如果您只想保留用户数据,则只需要主目录。
/usr/local/sbin/
.cache
在每个用户的主目录(~/.cache
)中包含该文件夹,或者我们也可以忽略吗?它可以是成千上万的文件和数千兆字节的数据。我的理解是,如果我们不包含它,那仅意味着应用程序下次运行时必须重新生成临时的,缓存的文件,这会增加运行时间和启动时间,但无害,对吗?
~/.cache
我的声音。我不会自己排除它,但是如果您想减少数据传输/同步时间,那可以选择。
/opt
,但如果你使用它,那么你可以将其包含在您的备份。 /opt
往往会因发行版本身而未被使用,而是由用户自己使用,但是提供Linux系统并安装了第三方应用程序的应用程序供应商可能会使用,/opt
或者如果您开发自己的软件,则可以使用它来/opt
代替/usr/local
您需要备份的内容取决于您的特定系统*。
因此,这需要您花点时间进行整理。搞清楚什么开始并不需要进行备份。首先查看您的根目录,然后向后工作。
例如,cd /; ls -F
给我:
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
和/mnt
是挂载点,因此不需要备份。
/dev
,/lost+found
,/proc
,/run
,/sys
和/tmp
GET汽车在重启时重新创建。[我猜这些链接:/initrd.img@
,,/initrd.img.old@
/ /vmlinuz@
vmlinuz.old@在重新启动ubuntu时重新创建(我不确定是哪个)。
在我的系统上/root
是空的(用于sudo -s
以root用户身份打开外壳以查看它... exit
在检查之后,请当心/root
。)
/snap
也为空。也许这是一个挂载点。
/var
包含可变数据,例如系统日志文件,邮件和打印机假脱机目录以及临时和临时文件。”现在,我将其备份,除了/ var / log。参考:http : //www.tldp.org/LDP/Linux- Filesystem-Hierarchy / html / var.html)
/bin
,/boot
,/lib
,/lib64
,和/sbin
可能会得到通过的Ubuntu重新安装,除非你正在做系统开发工作,或者类似的东西重新加载。您可以备份这些文件,也可以依赖全新安装来恢复它们。
/home
应该在它自己的备份中。有时候您只想还原/home
。
你已经在你的系统所做的叶子之外的变化/etc
,/opt
,/srv
和/usr
你将要还备份共同或单独。
以下几页可能有助于您了解这些目录:
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
一个相关的思路是: 假设您刚刚安装了新的Ubuntu。您需要备份什么?答:没有。您尚未进行任何更改,因此只需重新安装Ubuntu。它恢复/ bin,/ etc,/ root,/ usr等。
因此,您可能想要备份/ bin的唯一原因是因为您已对其进行更改或添加。因此,备份的一部分是了解在何处以及何时创建和修改它。只知道我们其他人也为此感到挣扎。
*****而且,尽管您没有要求,但您可以制作完整的磁盘或分区映像。这些备份和还原会花费大量时间,并且在进行此工作时可能会使系统瘫痪。这就是我过去使用Acronis备份Windows系统的方式。他们为您提供的一件事是分区图和非Linux分区中的映像。现在,在重新组织分区之前以及在测试备份还原功能之前,请先进行这些操作。
(对于如何使它变得更好,我很乐于接受建议。)
如果我重新安装桌面系统,我将进行备份
/etc
/var
,我懒得排除一些子文件夹/opt
/home
是在一个单独的分区上,每天都有一个备份。
重新安装后,我从备份中还原了我真正需要的部分。
使用此策略,我所有的配置,本地邮件和crontab配置都是安全的,我只需要重新安装所需的应用程序即可。
我的个人脚本保存在主文件夹中(每天备份,还记得吗?),因此我不使用/usr/local
。
/opt
我们需要什么?即:为什么要备份?
大多数人只是备份其主目录:/home/$USER/
。如果要备份配置文件和设置,这些文件和设置将存储在主目录中以开头的文件夹和文件中。(点)。列出您使用的软件包(和PPA),如果需要,可以很容易地重新安装所有软件包。或者,使用此注释中描述的命令。
Deja Dup Backup是Ubuntu上的默认工具。其他选项包括命令行(rsync,rsnapshot,rdiff-backup等)。
最后,要将整个磁盘作为映像备份,请检出clonezilla。
/var/spool/cron
也要备份。
让我们在这里收集文件列表。我把这篇文章设为“社区维基”。
当然,因人而异。我的主要用作Web服务器和NFS服务器。
mkdir $MY_BACKUP_FOLDER
cd $MY_BACKUP_FOLDER
sudo rsync -a --relative /var/spool/cron/crontabs .
sudo rsync -a --relative /etc/exports .
sudo rsync -a --relative /etc/sudoers .
sudo rsync -a --relative /etc/apache2/apache2.conf .
sudo rsync -a --relative /etc/auto* .
sudo rsync -a --relative /etc/fstab .
sudo rsync -a --relative /etc/hosts .
sudo rsync -a --relative /etc/samba/smb.conf .
sudo rsync -a --relative /etc/udev .
sudo rsync -a --relative /etc/updatedb.conf .
sudo rsync -a --relative /usr/share/applications .
我备份了对我来说很重要的东西,这些东西可以粗略地定义为我的知识产权,以及为使Ubuntu完美工作(对我而言)而付出的努力。
我每天早上4:00或每台笔记本电脑从暂停状态恢复时都运行备份。它通过/etc/cron.daily
脚本控制。
最好的备份类型是在发生火灾或计算机淹没的地方进行异地备份,因此我利用免费的15GB gmail.com帐户并向其发送压缩的每日备份。
几年后,我达到了15 GB的“免费”配额,因此编写了一个脚本,将备份回收到180天,78周,36个月和100个年度备份中。
这是对我重要的每日备份脚本:
#!/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_NAME@gmail.com"
# 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 -- mymail@gmail.com
# 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