使用tar进行Linux完整备份需排除虚拟文件系统并保留权限,关键在于正确排除目录、备份到独立介质,并定期测试恢复。

在Linux系统中,要实现文件系统的完整备份,
tar
tar
使用
tar
tar
首先,你需要一个目标位置来存放你的备份文件,这个位置最好是一个独立于被备份文件系统的存储介质,比如外置硬盘、网络共享存储(NFS/SMB挂载点)或另一块独立的内部硬盘。
# 假设我们要备份根文件系统 (/) 到 /mnt/backup_drive/system_backup.tar.gz
# 切换到根目录,确保tar能正确处理相对路径,并避免路径问题
cd /
# 执行备份命令
# -c: 创建新的归档文件
# -z: 使用gzip进行压缩,可以替换为-j (bzip2) 或 -J (xz) 以获得更高压缩率
# -v: 显示处理的文件名,方便查看进度
# -p: 保留文件权限、所有者和时间戳等属性,这对于系统备份至关重要
# -f: 指定归档文件名
# --exclude=: 排除不应包含在备份中的目录。这些目录通常是虚拟文件系统、临时文件或挂载点,
# 它们要么不包含实际数据,要么在恢复时会被系统自动重新生成。
# 排除 /mnt 和 /media 是为了避免备份外部挂载点的内容,以及避免将备份文件本身包含进去。
# 排除 /sys, /proc, /dev, /run 是因为它们是虚拟文件系统,不应被备份。
# 排除 /tmp 是因为它是临时文件目录。
# 排除 /lost+found 是因为它是文件系统恢复工具使用的目录。
# 排除 /var/cache/apt/archives/ 和 /var/lib/apt/lists/ 是为了减小备份大小,这些可以重新下载。
# 排除 /var/tmp 是另一个临时目录。
# 排除 /var/log/*, /var/spool/*, /var/run/*, /var/lock/* 是一些日志、队列、运行状态或锁文件,通常不需要备份。
sudo tar -czvpf /mnt/backup_drive/system_backup_$(date +%Y%m%d).tar.gz \
--exclude=/proc \
--exclude=/sys \
--exclude=/dev \
--exclude=/run \
--exclude=/mnt \
--exclude=/media \
--exclude=/tmp \
--exclude=/lost+found \
--exclude=/var/cache/apt/archives \
--exclude=/var/lib/apt/lists \
--exclude=/var/tmp \
--exclude=/var/log/* \
--exclude=/var/spool/* \
--exclude=/var/run/* \
--exclude=/var/lock/* \
.这里我用了
.
/
/
tar
在我看来,使用
tar
最佳实践:
sudo
tar
/proc
/sys
/dev
/run
/tmp
/var/tmp
/mnt/backup_drive
/mnt
tar -tvf /path/to/backup.tar.gz
tar
tar
cron
常见误区:
tar
-p
/proc
/sys
/dev
/run
/mnt
/media
backup.tar.gz
tar
tar
说实话,
tar
tar
tar
--listed-incremental
tar
命令示例:
# 第一次完整备份并创建快照文件
sudo tar -czvpf /mnt/backup_drive/full_backup_$(date +%Y%m%d).tar.gz \
--listed-incremental=/mnt/backup_drive/snapshot.file \
--exclude=/proc --exclude=/sys --exclude=/dev ... .
# 几天后的增量备份
sudo tar -czvpf /mnt/backup_drive/incremental_backup_$(date +%Y%m%d).tar.gz \
--listed-incremental=/mnt/backup_drive/snapshot.file \
--exclude=/proc --exclude=/sys --exclude=/dev ... .tar
tar
其他更适合的工具:
在我看来,如果你的需求超出了简单的完整归档,或者需要更高效、更灵活的增量/差异备份,那么以下工具会是更好的选择:
rsync
rsync
sudo rsync -avz --delete --exclude="/proc" / /mnt/backup_drive/system_backup/
duplicity
rsync
borgbackup
borgbackup
tar
rsync
tar
rsync
tar
从
tar
基本恢复(针对部分文件或目录):
如果你只是需要恢复某个丢失的文件或目录,并且系统仍然能够正常运行,那么这相对简单:
# 查看备份内容,确认文件路径 tar -tvf /path/to/backup.tar.gz | grep "your_file_or_directory" # 恢复单个文件到当前目录 tar -xvpf /path/to/backup.tar.gz path/to/original/file.conf # 恢复整个目录到指定位置 # -C 选项指定解压到的目录,确保目标目录存在且有写入权限 tar -xvpf /path/to/backup.tar.gz -C /target/directory path/to/original/directory/
面对系统完全崩溃时的恢复(例如更换了硬盘):
这是最复杂也最关键的场景。你需要一个可引导的Live CD/USB(比如Ubuntu Live CD、SystemRescueCD或任何你熟悉的Linux发行版Live环境)。
准备恢复环境:
fdisk
gdisk
parted
mkfs.ext4
mkfs.xfs
/
swap
/boot
/home
/mnt/newroot
/boot
/home
/mnt/newroot
/mnt/newroot/boot
sudo mount /dev/sda1 /mnt/newroot # 假设sda1是新的根分区 # 如果有单独的/boot分区 # sudo mount /dev/sda2 /mnt/newroot/boot
/mnt/backup_source
解压备份文件:
cd /mnt/newroot sudo tar -xvpf /mnt/backup_source/system_backup_YYYYMMDD.tar.gz
ls -F
/mnt/newroot
bin/
etc/
home/
恢复后关键步骤(重中之重!):
tar
/proc
/sys
/dev
/run
sudo mount --bind /dev /mnt/newroot/dev sudo mount --bind /sys /mnt/newroot/sys sudo mount --bind /proc /mnt/newroot/proc sudo mount --bind /run /mnt/newroot/run # 如果原系统有/run
chroot
sudo chroot /mnt/newroot /bin/bash # 进入chroot环境后,你的提示符可能会改变,表示你正在操作新系统
/etc/fstab
/etc/fstab
blkid
# 在chroot环境中 nano /etc/fstab # 根据blkid的输出更新UUID,或者使用/dev/sdaX这样的路径(不推荐,UUID更稳定)
# 在chroot环境中 grub-install /dev/sda # 假设/dev/sda是你的主硬盘 update-grub
initramfs
initramfs
# 在chroot环境中 update-initramfs -u -k all # 或者根据你系统中的内核版本指定
chroot
exit # 退出chroot环境 sudo umount -R /mnt/newroot # 递归卸载所有挂载点 sudo reboot
整个过程需要非常细致和耐心,任何一步出错都可能导致系统无法启动。因此,在恢复前,务必确保你理解每一步的含义,并且手边有Live CD/USB、备份文件以及一份清晰的步骤清单。实践出真知,多练习几次,你就能熟练掌握了。
以上就是如何在Linux中备份文件系统 Linux tar完整备份方案的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号