Linux restore命令

简介

restore命令是Linux系统中用于恢复由dump命令创建的备份文件。它是dump/restore备份套件的一部分,专门用于从ext2/ext3/ext4文件系统的备份中恢复文件和目录。

注意:restore命令通常与dump命令配对使用,dump用于创建备份,restore用于恢复备份。它可以恢复整个文件系统或特定文件和目录。

语法格式

restore [选项] [参数]

restore有四种主要模式:

  1. -i 交互模式
  2. -r 恢复整个文件系统
  3. -C 比较备份与磁盘内容
  4. -t 列出备份内容
  5. -x 提取特定文件/目录

常用选项

选项 说明
-b blocksize 指定块大小(单位为KB)
-C 比较备份与磁盘上的文件
-D filesystem 指定要恢复的文件系统
-f file 从指定文件读取备份数据
-h 不恢复符号链接,而是恢复链接指向的文件
-i 进入交互模式
-m 按inode号而不是文件名恢复文件
-r 恢复整个文件系统
-s fileno 跳过磁带上的前fileno个备份文件
-t 列出备份文件中的内容
-v 显示详细的处理信息
-x 从备份中提取指定文件
-y 遇到错误时不询问,直接继续

安装方法

大多数Linux发行版默认安装了dump和restore工具。如果没有安装,可以使用以下命令:

Debian/Ubuntu系统:
sudo apt update
sudo apt install dump
RHEL/CentOS/Fedora系统:
sudo yum install dump

# 或使用dnf(Fedora/RHEL8+)
sudo dnf install dump
Arch Linux系统:
sudo pacman -S dump

使用示例

示例1:创建测试备份文件

首先使用dump命令创建备份文件:

# 创建一个测试目录和文件
mkdir -p /tmp/test_backup
echo "Important data 1" > /tmp/test_backup/file1.txt
echo "Important data 2" > /tmp/test_backup/file2.txt
mkdir /tmp/test_backup/subdir
echo "Subdirectory file" > /tmp/test_backup/subdir/file3.txt

# 使用dump创建备份(0级别,完整备份)
dump -0uf /tmp/backup.dump /tmp/test_backup/

# 查看备份文件
ls -lh /tmp/backup.dump
示例2:列出备份内容

查看备份文件中包含哪些文件和目录:

# 列出备份内容
restore -tf /tmp/backup.dump

# 使用详细模式
restore -vtf /tmp/backup.dump
示例3:提取特定文件

从备份中提取特定文件或目录:

# 创建恢复目录
mkdir /tmp/restored_files

# 进入恢复目录
cd /tmp/restored_files

# 提取file1.txt
restore -xf /tmp/backup.dump ./file1.txt

# 提取整个subdir目录
restore -xf /tmp/backup.dump ./subdir/

# 提取所有文件
restore -xf /tmp/backup.dump
示例4:交互模式恢复

使用交互模式选择性恢复文件:

# 进入交互模式
restore -if /tmp/backup.dump

# 交互模式下常用命令:
# ls [目录]     - 列出目录内容
# cd [目录]     - 切换目录
# pwd          - 显示当前目录
# add [文件]    - 添加要恢复的文件
# delete [文件] - 从恢复列表中删除文件
# extract      - 开始恢复已添加的文件
# quit         - 退出
示例5:比较备份与磁盘内容

比较备份文件与磁盘上的文件差异:

# 修改原始文件
echo "Modified content" > /tmp/test_backup/file1.txt

# 比较备份与当前文件
restore -C -f /tmp/backup.dump -D /tmp/test_backup
示例6:恢复整个文件系统

恢复整个文件系统备份:

# 警告:这通常用于恢复根分区或其他文件系统
# 需要在单用户模式下进行

# 假设我们有一个文件系统备份在/dev/sda1上
# 首先挂载文件系统(如果需要)
mkdir /mnt/restore_point
mount /dev/sda1 /mnt/restore_point

# 切换到挂载点
cd /mnt/restore_point

# 恢复整个文件系统
restore -rf /backup/backup.dump
示例7:从磁带设备恢复

从磁带设备恢复备份:

# 列出磁带设备上的备份内容
restore -tf /dev/nst0

# 从磁带提取文件
restore -xf /dev/nst0 /path/to/extract

# 跳过前2个备份文件
restore -s 2 -tf /dev/nst0

高级用法

1. 恢复多卷备份
# 对于分卷备份,restore会自动提示插入下一卷
restore -rf /dev/st0

# 使用脚本自动化多卷恢复
echo "准备恢复多卷备份..."
restore -rf /dev/nst0 << EOF
yes
EOF
2. 恢复增量备份

dump支持增量备份,restore也支持恢复增量备份链:

# 假设有以下备份链:
# full.dump - 完整备份
# inc1.dump - 第1次增量备份
# inc2.dump - 第2次增量备份

# 首先恢复完整备份
cd /mnt/restore_point
restore -rf /backup/full.dump

# 然后按顺序恢复增量备份
restore -rf /backup/inc1.dump
restore -rf /backup/inc2.dump
3. 使用远程备份文件
# 从远程服务器恢复备份
# 方法1:使用ssh
ssh user@backup-server "cat /backup/backup.dump" | restore -tf -

# 方法2:挂载远程文件系统
mount -t nfs backup-server:/backups /mnt/remote
restore -tf /mnt/remote/backup.dump

交互模式命令参考

在交互模式(restore -i)下,可以使用以下命令:

命令 说明
help 显示可用命令列表
ls [目录] 列出当前或指定目录内容
cd [目录] 切换到指定目录
pwd 显示当前目录路径
add [文件/目录] 添加要恢复的文件或目录
delete [文件/目录] 从恢复列表中删除项目
extract 开始恢复已添加的文件
setmodes 设置文件模式而不提取文件
verbose 切换详细模式
quit 退出交互模式
what 显示已添加的要恢复的项目

常见问题

  • restore:专门用于恢复dump创建的备份,支持文件系统元数据、稀疏文件、增量备份等高级功能
  • tar:通用归档工具,主要用于打包文件,功能更简单通用
  • restore可以恢复文件权限、时间戳、ACL等元数据,更适合系统备份

  1. 检查磁带是否损坏或需要清洁
  2. 使用-y选项跳过错误继续恢复
  3. 尝试使用mt命令重新定位磁带
  4. 如果是远程备份,检查网络连接

  1. 不要向该文件系统写入新数据
  2. 立即卸载文件系统(如果可能)
  3. 使用restore -x或交互模式恢复删除的文件
  4. 如果文件系统损坏严重,可能需要恢复整个备份

恢复备份需要足够的空间来存放:

  • 恢复的文件本身
  • 临时工作空间
  • 建议至少有备份文件大小1.5倍的空间
  • 如果是增量恢复,需要额外的中间存储

最佳实践

  • 在恢复前总是先测试备份文件是否可读(使用restore -t
  • 在恢复生产系统前,先在测试环境中验证恢复过程
  • 定期验证备份的完整性和可恢复性
  • 记录恢复步骤,创建灾难恢复手册
  • 对于关键系统,使用增量备份和完整备份组合策略
  • 恢复完成后,验证文件完整性和权限是否正确

相关命令

dump

创建文件系统备份的命令

tar

通用归档工具,也可用于备份

rsync

远程同步和备份工具