Linux restore命令详解:从dump备份到文件系统恢复实战 搞Linux运维的迟早会和restore打个照面。平时它像系统里的一个透明工具安静地躺在dump包里直到哪天真把重要目录删了、或者磁盘报错你才会发现这个老朋友有多关键。restore命令是配合dump备份工具使用的恢复端命令——dump把某个文件系统的数据连同权限、所有者、稀疏文件、扩展属性一起写进备份镜像restore就负责把这个镜像按原样倒回磁盘。和tar比它更接近“整盘级恢复”的思路适合系统管理员、备份运维的同学深入掌握。下面我直接讲restore怎么用从原理说到实战再讲我踩过的坑。1. restore命令的角色与使用场景1.1 dump与restore的分工逻辑要搞懂restore先要理解它和dump的关系。dump是备份端restore是恢复端两者就像录音和播放的关系。dump备份时并不像tar那样逐层遍历目录、逐个文件拷贝而是直接读取文件系统的底层数据结构把inode、目录项、数据块按磁盘上的原始组织方式打包成镜像。restore拿到这个镜像后不是简单解包而是根据镜像中的目录树和inode信息重建文件结构。这个设计带来了几个实打实的好处。第一点是备份速度快因为跳过了大量内核文件系统接口调用直接走底层数据块第二点是元数据保留得全除了常规的权限和所有者文件ACL、扩展属性、稀疏文件都能一并搞定第三点是天然支持增量备份dump用0到9共十个级别表示备份深度restore可以按级别顺序把全量和增量一层层叠回去。用生活化的类比解释tar像是把抽屉里的东西一件件拿出来如实装箱运输方便但要记清楚每样东西原本放在哪格而dump更像是对整个抽屉做三维扫描restore则按扫描图纸把抽屉重新搭出来。如果只是临时拷贝几个文件tar够用但要追求“恢复完和原来一模一样”restore才是对口的工具。1.2 什么场景必须用restorerestore的应用场景其实很集中主要围绕“整个文件系统级别的恢复”展开常见的有这么几类裸机恢复系统盘损坏启动到急救盘或Live环境把备份的分区镜像通过restore -r还原到新硬盘上。文件误删后的精准捞取在不知道完整路径或想看一眼备份里有什么时用交互模式挑文件恢复。跨机器的文件系统迁移新旧机器都是同类型文件系统比如都是ext4用restore能把整个分区结构搬过去。历史磁带数据读取很多单位还有老磁带库里面就是dump格式备份现在依然要靠restore来读。这里要提醒一句restore不是万能的。它救的是“文件系统层面的文件和目录”救不了数据库在线日志这种需要一致性快照的东西。如果你对数据库所在分区直接执行dump最好先把数据库停掉或保证处于冷备份状态否则恢复出来的文件可能处于不一致状态数据库起不来。1.3 四种工作模式先混个脸熟restore的全部功能围绕四个模式展开每个模式对应一种恢复粒度-t列出备份内容相当于打开备份看一眼。-x按指定文件名提取适合明确知道要捞哪些文件时使用。-i交互式恢复先进入一个命令行界面浏览备份目录树挑选好文件再一次性导出。-r完整重建整个文件系统是裸机恢复的核心参数。很多人上来就直接找-r用我觉得这是错误的打开方式。日常用得最多的其实是-t和-x搞清楚备份里有什么才能决定要不要上大招。接下来我把每个模式讲透。2. restore命令核心语法与选项拆解2.1 命令格式与最常用选项restore的基本格式是restore [选项] [文件...]其中-f用来指定备份源可以是一个普通备份文件也可以是磁带设备比如/dev/st0。如果不写-frestore默认从标准输入读取备份流这在配合磁带机或管道时很有用。常用参数我列了一个速查表参数作用-t列出备份中的文件清单-x按指定路径提取文件到当前目录-i进入交互式恢复模式-r重建完整文件系统-f file指定备份文件或设备-d dir部分版本支持指定恢复目标目录-y所有提问都默认yes不做询问-v输出更详细信息调试时用-C部分新版本支持对比备份与当前目录的一致性我个人的习惯是能用cd就尽量不依赖-d参数。因为不同发行版打包的restore版本有差异-d行为未必完全一致而切到目标目录再执行restore在任何版本上都是稳妥的。2.2 四种模式怎么选-t模式主要用于侦察。它会把备份中的所有文件路径打印到标准输出可以配合管道做搜索restore -t -f /backups/web-server-full.dump | less restore -t -f /backups/web-server-full.dump ./etc/nginx/nginx.conf注意文件名路径前面通常带./前缀。这是dump镜像内部的表示方式提取时最好保留这个前缀写法否则容易匹配不上。-x模式适合精准提取。你明确知道要恢复哪些文件比如nginx配置cd /data/recovery restore -x -f /backups/web-server-full.dump ./etc/nginx/nginx.conf命令执行完/data/recovery下会出现./etc/nginx/nginx.conf这一条完整路径。如果想把多个文件一网打尽直接在命令后面罗列即可。-i模式适合不确定路径时手动挑。进入一个类似shell的交互界面用cd切换目录、ls查看文件、add选择要恢复的文件最后extract统一导出。-r模式是大招。它会把备份中的整个文件系统逐块重建到当前目录执行前必须确保当前工作目录是目标文件系统的挂载点或一个干净的目录。裸机恢复时通常先挂载新分区到/mnt/restore再在这个目录下执行restore。别在系统根目录下直接跑-r那等于把自己正在运行的文件系统覆盖掉后果很严重。2.3 交互模式里那些命令咋用进入交互模式非常简单restore -i -f /backups/web-server-full.dump看到restore 提示符后可以用下面这些命令操作命令作用ls列出当前备份目录层级的文件cd切换当前浏览目录注意只能往下走pwd查看当前在备份中的路径add把当前文件或目录加入待恢复列表delete从待恢复列表里移除extract开始恢复已选择的文件setmods恢复时手动设置所有者和权限verbose切换详细信息输出help查看帮助这个模式最实用的地方在于你可以先ls看一圈再用add把某个目录整体勾选最后extract一次搞定。放到生产环境最怕的就是背路径交互模式能有效避免这种低级失误。3. 实操从备份文件恢复文件的完整流程3.1 准备工作先确认备份格式与空间恢复之前先做三件事。第一步确认备份文件确实是dump格式file /backups/web-server-full.dump如果输出类似“dump data file, version 8”之类的字样说明这份备份可以被restore识别。如果输出是“gzip compressed data”那你应该先解压再恢复或者直接用tar处理别让restore读错类型。第二步建一个干净的恢复目录。比如mkdir -p /data/recovery cd /data/recovery第三步检查磁盘空间。备份文件可能只有几十GB但恢复出来的数据可能远大于单卷大小尤其包含稀疏文件时更是如此。用df -h /data/recovery确认剩余空间充足否则恢复中途才报空间不足人会非常被动。3.2 查看备份里到底有什么先别急着恢复用-t看一眼备份内容心里才有数restore -t -f /backups/web-server-full.dump | less如果只想确认某个特定文件是否存在restore -t -f /backups/web-server-full.dump ./etc/nginx/nginx.conf看到对应路径打印出来说明这份备份里有这个文件。这里我想强调一下备份内容预览这一步极其重要不仅能确认备份没坏还能帮你决定用-x还是-i避免恢复完发现路径不对或版本不对。3.3 按文件名提取到指定目录假设我要恢复nginx配置和网站的首页文件执行cd /data/recovery restore -x -f /backups/web-server-full.dump ./etc/nginx/nginx.conf ./var/www/html/index.html命令结束后检查一下目录树find /data/recovery/etc -type f find /data/recovery/var -type f正常情况下/data/recovery/etc/nginx/nginx.conf和/data/recovery/var/www/html/index.html都会存在。这里有个容易踩的坑如果你没先cd到目标目录直接在任意位置执行恢复文件会被撒到你执行命令时的当前目录下恢复结果就会散落一地。3.4 交互式挑选文件恢复如果记不住完整路径交互模式就派上用场了。操作过程大概是这样[roothost recovery]# restore -i -f /backups/web-server-full.dump restore ls ./etc ./var ./usr restore cd ./etc/nginx restore ls ./nginx.conf restore add ./nginx.conf restore cd / restore cd ./var/www/html restore add index.html restore extract You have selected the following files: ./etc/nginx/nginx.conf ./var/www/html/index.html Set owner/mode after extraction? [y] y restore quit注意最后那个Set owner/mode after extraction?它是在问你恢复出来的文件要不要把备份里的所有者和权限一并写回。默认选y前提是你用root执行。如果你用的是普通用户这里极大概率会报权限错误所以交互恢复也建议先切root。3.5 用-r重建整个文件系统用-r做裸机恢复完整的步骤大概是这样的启动急救系统挂载目标硬盘分区到/mnt/restore比如mount /dev/sdb1 /mnt/restore。切到该目录cd /mnt/restore。先恢复全量备份0级restore -r -f /backups/web-server-full.dump。再按顺序恢复各级增量备份restore -r -f /backups/web-server-incr1.dump、restore -r -f /backups/web-server-incr2.dump。每执行完一次-r当前目录会生成一个restoresymtable文件这个文件是增量恢复的关键上下文千万别手贱删掉。如果你中途发现恢复顺序搞错了比如在没恢复全量的情况下先恢复增量restore会报增量级别太低之类的错误这时候必须从全量卷重新开始。执行完毕后退出目标目录对分区做一次卸载再重新挂载确认文件都正常。这里再提醒一句-r恢复的是整个文件系统恢复后的机器可能还要单独处理引导程序那是另一个话题但restore这一步的重建工作已经完成了。3.6 恢复之后做一次快速校验文件恢复完别急着宣布完工。我习惯用下面几种方式验证用ls -l抽查几个关键文件的权限和所有者是否符合预期。用du -sh /data/recovery对比原文件的预估大小。如果备份里包含服务配置恢复完成后直接启动对应服务试运行。部分版本的restore支持-C参数做备份与当前目录的对比用法是restore -C -f /backups/web-server-full.dump如果你的版本不支持也没关系用diff -r对比关键目录也能达到效果。重点是“恢复完必须验证”这一步很多人会省省掉之后出了事再回头代价往往翻倍。4. 常见问题与排查技巧实录4.1 提示打不开备份文件或设备执行restore时最常见的报错是restore: Cannot open tape解决思路很直接先确认-f后面的路径对不对。普通文件要存在且可读磁带设备要先通电且驱动器里有磁带。如果备份文件本身损坏通常看到的是Invalid dump header或bad magic number。这时候用file命令再确认一次格式再用ls -l看文件权限基本能定位问题。还有一个容易忽略的场景如果备份是写到磁带上的而restore没有指定-f /dev/st0它会尝试从标准输入读结果就是卡在那里等数据看起来像死机一样。所以-f参数在这种场景下绝不能漏。4.2 恢复出来的文件权限不对劲普通用户执行restore恢复出来的文件所有者和权限往往无法还原会看到一大堆约束权限或奇怪的属主。原因就是设置文件属主、ACL这类操作需要root权限。遇到这种情况切换到root或者用sudo -i提权后再执行。需要特别说明的是dump和restore从设计上就是面向管理员的操作工具不是普通用户数据备份的小玩具。想用restore恢复别人的系统文件没有root资质就别指望全须全尾地还原权限。4.3 增量恢复顺序出错导致失败用-r恢复增量备份时顺序是个致命点。必须遵循“先低级别、后高级别”的顺序。比如全量是0级那先恢复0级接着恢复1级、2级……以此类推。如果跳级或者顺序反了restore会报restore: Incremental dump volume too low遇到这个错误补救办法是重新开始rm -f restoresymtable restoretape等临时文件从全量卷重新执行一遍。这个过程很耗时间所以我现在的习惯是恢复前先写清楚编号顺序按顺序放好备份文件再动手。4.4 版本或文件系统类型不匹配restore只能读dump生成的备份不同发行版打包的dump/restore版本可能有差异偶尔会出现Incompatible dump date或无法解析文件头的现象。处理思路是优先用备份时同一套工具或机器上的restore版本如果不行尝试找一台兼容的旧系统做中转恢复。还要注意文件系统类型的对应关系。传统dump/restore主要面向ext2、ext3、ext4这类ex系列文件系统。如果你用的是xfs那就得用xfsdump和xfsrestore别拿restore硬碰。恢复之前看一眼备份文件出自哪种文件系统可以省很多事。4.5 实战教训速查表我把平时遇到的几个高频问题整理成了表格方便大家直接对照现象可能原因处理办法Cannot open tape备份文件路径错误或设备不可用检查路径、文件权限、设备连接Invalid dump header文件不是dump格式或已损坏用file确认格式重新获取备份Incremental dump volume too low增量恢复顺序错误删除临时文件从全量重新恢复cannot chmod/chown非root执行切换到root再恢复恢复后的文件不完整目标分区空间不足提前用df -h检查空间出现./lostfound not found目标分区不是全新文件系统手动创建lostfound目录继续恢复这表格里的内容都是我自己实打实踩过的不是从文档里抄来的。尤其是第一条我见过有人把一个压缩包塞给restore最后卡了半小时才发现文件类型不对。5. dump/restore与tar等工具的选型分析5.1 dump/restore的优势在哪里再说说选型的问题。选择dump/restore的典型动机有三点。第一恢复精度高。它保留下来的不只是文件内容还有文件系统层面的结构信息恢复后目录顺序、inode关联、稀疏文件空洞都能最大程度还原。对于跑数据库、中间件的机器来说这种细节差异可能直接影响启动成败。第二全量加增量的组合策略成熟。dump的0到9级增量体系很清晰0级是全量数字越大代表距离上次更低级别备份以来的变更。restore -r配合这个体系恢复策略从“每天全量”进化成“周期全量每日增量”备份窗口压力小很多。第三整机恢复时效率高。因为restore是文件系统级别的重建批量恢复大量文件时比逐个文件跑一遍要更稳。5.2 局限与注意点但dump/restore也有明显的局限。它只能操作文件系统级别的内容一旦超出这个范围比如备份某个应用自己维护的裸数据文件dump就无能为力了。另外它需要root权限不是普通用户随便跑的工具。还有一个现实问题目前主流发行版对dump包的维护力度不如tar和rsync新装系统可能压根没有内置restore。CentOS系要用yum install dumpDebian/Ubuntu系要用apt install dump并且只对ext系列分区支持得比较好。xfs文件系统请改用xfsdump/xfsrestore。5.3 与tar工具的直观对比对比项dump/restoretar备份粒度文件系统级文件/目录级权限与所有权还原完整还原常用-p可保留稀疏文件处理原生支持依赖版本和选项增量备份默认0-9级别策略清晰不直接支持需额外脚本叠加跨文件系统备份不支持支持裸机恢复友好度高低使用门槛较高较低系统内置度部分发行版需额外安装基本都内置从表格可以看出来这俩不是一个维度的工具。tar的舒适区是“把目录归档、传递、迁移”restore的舒适区是“把整个文件系统按原样重建”。日常备份可以两者混用但关键时刻裸机恢复我绝对把票投给dump/restore。5.4 什么时候别用restore也有不该用restore的场景。比如你只是想备份用户个人目录目标存储是NAS或对象存储云桶那tar或rsync明显更合适。再比如你的分区是xfs或者没有root权限硬上restore就是给自己找麻烦。但即便平时不用我也建议你把restore的用法记牢。很多老单位的数据中心里还躺着成堆的dump磁带哪天要找回历史数据能读磁带的往往就是restore命令。这属于“平时用不上、一用就要救命”的冷门工具。我在实际维护中遇到过一起磁盘损坏事故靠一份三个月前的restore备份把一台无盘启动的服务器拉了回来。过程并不顺利因为第一次恢复时忘了按增量顺序执行折腾了不少时间。自那以后我把restore的用法打印成一张A4纸贴在机柜边备份完成后一定先做一次-t确认备份可读每个季度挑一台离线机器做一次完整的恢复演练。这套流程虽然土但关键时刻是真的能救命。