日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux文件刪除的底層原理和恢復(fù)方法

馬哥Linux運(yùn)維 ? 來(lái)源:馬哥Linux運(yùn)維 ? 2026-02-11 09:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

誤刪文件恢復(fù)指南:rm -rf 后的 3 種"后悔藥"

一、概述

1.1 背景介紹

rm -rf大概是 Linux 世界里殺傷力最大的命令,沒(méi)有之一。手一抖、路徑一錯(cuò)、通配符一飄,幾個(gè) G 的數(shù)據(jù)就沒(méi)了。更要命的是 Linux 默認(rèn)沒(méi)有回收站機(jī)制,rm刪掉的文件不會(huì)像 Windows 那樣安靜地躺在回收站里等你反悔——它直接就沒(méi)了。

但"沒(méi)了"這個(gè)說(shuō)法并不完全準(zhǔn)確。從文件系統(tǒng)的底層機(jī)制來(lái)看,rm命令做的事情遠(yuǎn)沒(méi)有大多數(shù)人想象的那么徹底。理解這一點(diǎn),是文件恢復(fù)的理論基礎(chǔ)。這篇文章從 Linux 文件刪除的底層原理講起,覆蓋三種主流的恢復(fù)方法,以及更重要的——怎么從根本上避免這種事故發(fā)生。

1.2 技術(shù)特點(diǎn)

原理驅(qū)動(dòng):從 inode 和 dentry 層面解釋為什么刪除的文件有可能恢復(fù)

場(chǎng)景分級(jí):根據(jù)文件系統(tǒng)類(lèi)型(ext4/XFS/Btrfs)和刪除后的狀態(tài),選擇不同的恢復(fù)策略

工具鏈覆蓋:從 /proc 文件系統(tǒng)到 extundelete、testdisk,覆蓋從簡(jiǎn)單到復(fù)雜的恢復(fù)場(chǎng)景

預(yù)防優(yōu)先:trash-cli、LVM 快照、3-2-1 備份策略,把事故消滅在發(fā)生之前

1.3 適用場(chǎng)景

場(chǎng)景一:誤刪文件但相關(guān)進(jìn)程仍在運(yùn)行(如刪了正在被 Nginx 寫(xiě)入的日志文件)

場(chǎng)景二:ext4 文件系統(tǒng)上的文件被刪除,需要通過(guò)文件系統(tǒng)級(jí)工具恢復(fù)

場(chǎng)景三:不確定文件類(lèi)型和位置,需要對(duì)整個(gè)分區(qū)進(jìn)行數(shù)據(jù)恢復(fù)掃描

場(chǎng)景四:XFS 文件系統(tǒng)上的文件恢復(fù)(比 ext4 難度更大)

1.4 環(huán)境要求

組件 版本要求 說(shuō)明
操作系統(tǒng) Ubuntu 24.04 LTS / RHEL 9.x 內(nèi)核 6.8+
extundelete 0.2.4+ ext3/ext4 文件恢復(fù)工具
ext4magic 0.3.2+ ext4 高級(jí)恢復(fù)工具
testdisk 7.2+ 分區(qū)和文件恢復(fù)
photorec 7.2+ 基于文件簽名的恢復(fù)
trash-cli 0.23+ 安全刪除替代方案

二、文件刪除的底層原理

在動(dòng)手恢復(fù)之前,必須先搞清楚 Linux 刪除文件到底做了什么。不理解原理,恢復(fù)操作就是盲人摸象。

2.1 inode、dentry 和數(shù)據(jù)塊的關(guān)系

Linux 文件系統(tǒng)(以 ext4 為例)存儲(chǔ)一個(gè)文件涉及三個(gè)核心概念:

inode(索引節(jié)點(diǎn)):存儲(chǔ)文件的元數(shù)據(jù)——權(quán)限、屬主、時(shí)間戳、數(shù)據(jù)塊指針。每個(gè)文件對(duì)應(yīng)一個(gè)唯一的 inode 編號(hào)

dentry(目錄項(xiàng)):存儲(chǔ)文件名到 inode 的映射關(guān)系。目錄本質(zhì)上就是一張 dentry 表

data block(數(shù)據(jù)塊):存儲(chǔ)文件的實(shí)際內(nèi)容

三者的關(guān)系可以這樣理解:

目錄 dentry 表     inode 表       數(shù)據(jù)塊
+----------------+   +----------------+   +----------------+
| config.yml → 42|---->| inode#42   |---->| 實(shí)際文件內(nèi)容  |
| app.log → 108 |   | size: 4096   |   | server:    |
| data.db → 256 |   | blocks: 1   |   |  port: 8080  |
+----------------+   | nlink: 1    |   +----------------+
           +----------------+

2.2 rm 命令到底做了什么

執(zhí)行rm時(shí),內(nèi)核做了以下操作:

刪除 dentry:從父目錄的目錄項(xiàng)表中移除文件名到 inode 的映射

inode 引用計(jì)數(shù)減 1(nlink - 1):如果還有硬鏈接指向這個(gè) inode,文件數(shù)據(jù)不會(huì)被釋放

檢查引用計(jì)數(shù):當(dāng) nlink 降到 0沒(méi)有進(jìn)程持有該文件的文件描述符時(shí),內(nèi)核才會(huì)釋放 inode 和數(shù)據(jù)塊

關(guān)鍵點(diǎn)在第 3 步:**數(shù)據(jù)塊被"釋放"不等于數(shù)據(jù)被"擦除"**。釋放只是把這些塊標(biāo)記為"可用",寫(xiě)回 block bitmap。實(shí)際的數(shù)據(jù)內(nèi)容還躺在磁盤(pán)上,直到有新數(shù)據(jù)寫(xiě)入覆蓋這些塊。

# 查看文件的 inode 信息
stat/etc/hostname

# 輸出示例
 File: /etc/hostname
 Size: 12       Blocks: 8     IO Block: 4096  regular file
Device: 252,1  Inode: 131073   Links: 1
Access: (0644/-rw-r--r--) Uid: (  0/  root)  Gid: (  0/  root)
Access: 2026-02-06 0800.000000000 +0800
Modify: 2026-01-15 1000.000000000 +0800
Change: 2026-01-15 1000.000000000 +0800

2.3 兩個(gè)恢復(fù)窗口

基于上面的原理,文件刪除后存在兩個(gè)恢復(fù)窗口:

窗口一:進(jìn)程仍持有文件描述符(黃金窗口)

如果有進(jìn)程還在讀寫(xiě)這個(gè)文件(比如日志文件被刪了但寫(xiě)日志的進(jìn)程還在跑),文件的 inode 和數(shù)據(jù)塊都不會(huì)被釋放。這時(shí)候通過(guò)/proc//fd可以完整恢復(fù)文件內(nèi)容,成功率 100%。

窗口二:數(shù)據(jù)塊尚未被覆蓋(白銀窗口)

如果沒(méi)有進(jìn)程持有文件描述符,inode 和數(shù)據(jù)塊已經(jīng)被標(biāo)記為可用,但只要沒(méi)有新數(shù)據(jù)寫(xiě)入覆蓋,數(shù)據(jù)還在磁盤(pán)上。這時(shí)候需要用 extundelete、testdisk 等工具掃描磁盤(pán)來(lái)恢復(fù),成功率取決于覆蓋程度。

這就是為什么誤刪文件后第一件事是停止對(duì)該分區(qū)的一切寫(xiě)入操作。每多寫(xiě)一個(gè)字節(jié),恢復(fù)的概率就降低一分。

三、方法一:從 /proc/pid/fd 恢復(fù)(黃金窗口)

這是最簡(jiǎn)單、成功率最高的恢復(fù)方法。前提條件是:被刪文件仍有進(jìn)程持有其文件描述符。

3.1 原理說(shuō)明

Linux 的/proc//fd/目錄下保存了進(jìn)程打開(kāi)的所有文件描述符的符號(hào)鏈接。即使文件已經(jīng)被rm刪除(dentry 已移除),只要進(jìn)程沒(méi)有關(guān)閉這個(gè) FD,內(nèi)核就不會(huì)釋放 inode 和數(shù)據(jù)塊。通過(guò)/proc//fd/可以直接訪問(wèn)文件內(nèi)容。

被刪除但仍被進(jìn)程持有的文件,在ls -la輸出中會(huì)顯示(deleted)標(biāo)記:

ls -la /proc/12345/fd/
# ...
lr-x------ 1 root root 64 Feb 6 10:00 5 -> /var/log/app/access.log (deleted)

3.2 實(shí)戰(zhàn)操作步驟

步驟一:找到持有文件的進(jìn)程

# 方法 1:用 lsof 查找被刪除但仍被打開(kāi)的文件
lsof +L1 2>/dev/null | grep deleted

# 輸出示例
nginx  12345 root 5r REG 252,1 1048576 0 131073 /var/log/app/access.log (deleted)
java  23456 app  8w REG 252,1 5242880 0 262144 /data/app/important.dat (deleted)

# 方法 2:如果知道文件名,直接搜索
lsof 2>/dev/null | grep"access.log"

# 方法 3:搜索特定目錄下被刪除的文件
find /proc/*/fd -ls 2>/dev/null | grep'(deleted)'| grep'/var/log'

從 lsof 輸出中提取關(guān)鍵信息:

PID:12345(進(jìn)程 ID)

FD:5r(文件描述符編號(hào) 5,r 表示讀模式)

SIZE:1048576(文件大小,約 1MB)

步驟二:確認(rèn)文件內(nèi)容

# 先確認(rèn)文件內(nèi)容是否完整(查看前幾行)
head -5 /proc/12345/fd/5

# 查看文件大小
stat/proc/12345/fd/5

步驟三:恢復(fù)文件

# 直接復(fù)制文件內(nèi)容到新位置
cp /proc/12345/fd/5 /var/log/app/access.log.recovered

# 或者用 cat 重定向(適合大文件,可以看到進(jìn)度)
cat /proc/12345/fd/5 > /var/log/app/access.log.recovered

# 驗(yàn)證恢復(fù)結(jié)果
md5sum /proc/12345/fd/5
md5sum /var/log/app/access.log.recovered

# 確認(rèn)文件大小一致
ls -la /var/log/app/access.log.recovered

步驟四:恢復(fù)到原始路徑

# 確認(rèn)原始路徑的目錄還在
ls -la /var/log/app/

# 移動(dòng)恢復(fù)的文件到原始位置
mv /var/log/app/access.log.recovered /var/log/app/access.log

# 恢復(fù)原始權(quán)限(根據(jù)實(shí)際情況調(diào)整)
chown root:root /var/log/app/access.log
chmod 644 /var/log/app/access.log

3.3 批量恢復(fù)腳本

當(dāng)誤刪了一個(gè)目錄下的多個(gè)文件,且多個(gè)進(jìn)程仍持有這些文件時(shí),手動(dòng)一個(gè)個(gè)恢復(fù)效率太低。下面這個(gè)腳本可以批量處理:

#!/bin/bash
# recover_from_proc.sh - 從 /proc/pid/fd 批量恢復(fù)被刪除的文件
# 用法: ./recover_from_proc.sh <恢復(fù)目標(biāo)目錄> [過(guò)濾關(guān)鍵詞]

RECOVER_DIR="${1:?用法: $0 <恢復(fù)目標(biāo)目錄> [過(guò)濾關(guān)鍵詞]}"
FILTER="${2:-}"

mkdir -p"$RECOVER_DIR"

echo"=== 掃描被刪除但仍被進(jìn)程持有的文件 ==="

lsof +L1 2>/dev/null | grep'(deleted)'| grep"$FILTER"|whileread-r line;do
  PID=$(echo"$line"| awk'{print $2}')
  FD_RAW=$(echo"$line"| awk'{print $4}')
  FD_NUM=$(echo"$FD_RAW"| tr -dc'0-9')
  FILENAME=$(echo"$line"| awk'{print $NF}')

 # 跳過(guò)特殊文件
  [["$FILENAME"== /dev/* ]] &&continue
  [["$FILENAME"== /proc/* ]] &&continue
  [["$FILENAME"== /tmp/.* ]] &&continue

  BASENAME=$(basename"$FILENAME")
  DEST="$RECOVER_DIR/${PID}_${BASENAME}"

 if[ -e"/proc/$PID/fd/$FD_NUM"];then
   echo"[恢復(fù)] PID=$PIDFD=$FD_NUM->$DEST"
    cp"/proc/$PID/fd/$FD_NUM""$DEST"2>/dev/null
   if[ $? -eq 0 ];then
      SIZE=$(stat-c%s"$DEST"2>/dev/null)
     echo" 成功:$(numfmt --to=iec-i --suffix=B $SIZE)"
   else
     echo" 失敗: 復(fù)制出錯(cuò)"
   fi
 fi
done

echo"=== 恢復(fù)完成,文件保存在$RECOVER_DIR==="
ls -lh"$RECOVER_DIR"

3.4 局限性

這個(gè)方法雖然簡(jiǎn)單可靠,但有明確的適用邊界:

進(jìn)程必須還在運(yùn)行:如果進(jìn)程已經(jīng)退出或重啟,F(xiàn)D 就釋放了,這個(gè)方法失效

只能恢復(fù)進(jìn)程打開(kāi)的文件:如果文件刪除前沒(méi)有被任何進(jìn)程打開(kāi),/proc 里找不到

日志輪轉(zhuǎn)場(chǎng)景:有些日志框架會(huì)先 close 再 open 新文件,中間窗口期如果 rm 了舊文件就沒(méi)法用這個(gè)方法

容器環(huán)境注意:容器內(nèi)的 /proc 是隔離的,需要在宿主機(jī)上通過(guò)容器的 PID namespace 找到對(duì)應(yīng)的宿主機(jī) PID

# 容器環(huán)境下找到宿主機(jī) PID
# 先找到容器的 PID
docker inspect --format'{{.State.Pid}}'

# 或者通過(guò) crictl(containerd 環(huán)境)
crictl inspect  | jq'.info.pid'

四、方法二:extundelete / ext4magic 恢復(fù) ext4 文件系統(tǒng)

當(dāng)進(jìn)程已經(jīng)退出、/proc 里找不到文件句柄時(shí),就需要從文件系統(tǒng)層面動(dòng)手了。這個(gè)方法專(zhuān)門(mén)針對(duì) ext3/ext4 文件系統(tǒng)。

4.1 恢復(fù)前的關(guān)鍵操作:停止寫(xiě)入

這一步比任何恢復(fù)工具都重要。誤刪文件后,必須立即減少對(duì)目標(biāo)分區(qū)的寫(xiě)入操作:

# 第一步:確認(rèn)被刪文件所在的分區(qū)
df -h /data/

# 輸出示例
Filesystem   Size Used Avail Use% Mounted on
/dev/sda2    100G  45G  55G 45% /data

# 第二步:如果條件允許,立即將分區(qū)重新掛載為只讀
mount -o remount,ro /data

# 如果是根分區(qū)無(wú)法 remount,至少停掉所有非必要的寫(xiě)入服務(wù)
systemctl stop rsyslog
systemctl stop nginx
systemctl stop application.service

如果被刪文件在根分區(qū)(/),沒(méi)法直接 remount 為只讀,建議用 Live CD/USB 啟動(dòng)系統(tǒng),然后掛載目標(biāo)磁盤(pán)進(jìn)行恢復(fù)操作。這樣可以完全避免對(duì)目標(biāo)分區(qū)的寫(xiě)入。

4.2 extundelete 恢復(fù)

extundelete 是最經(jīng)典的 ext3/ext4 文件恢復(fù)工具,通過(guò)解析 ext 文件系統(tǒng)的 journal(日志)來(lái)找回被刪除的 inode 信息。

安裝

# Ubuntu/Debian
apt install extundelete

# RHEL/CentOS(需要 EPEL 源)
dnf install epel-release
dnf install extundelete

# 從源碼編譯(如果包管理器里沒(méi)有)
apt install e2fslibs-dev build-essential
wget https://sourceforge.net/projects/extundelete/files/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
tar xjf extundelete-0.2.4.tar.bz2
cdextundelete-0.2.4
./configure && make && make install

恢復(fù)操作

# 確保目標(biāo)分區(qū)已卸載或只讀掛載
umount /data
# 如果提示 busy,找出占用進(jìn)程
fuser -mv /data

# 查看可恢復(fù)的 inode 列表
extundelete /dev/sda2 --inode 2

# 恢復(fù)指定文件(需要知道文件的相對(duì)路徑)
extundelete /dev/sda2 --restore-file data/app/config.yml

# 恢復(fù)指定目錄下的所有文件
extundelete /dev/sda2 --restore-directory data/app/

# 恢復(fù)所有可恢復(fù)的文件(大分區(qū)會(huì)很慢)
extundelete /dev/sda2 --restore-all

# 按時(shí)間范圍恢復(fù)(恢復(fù)指定時(shí)間之后刪除的文件)
# 時(shí)間格式為 Unix 時(shí)間戳
extundelete /dev/sda2 --restore-all --after $(date -d'2026-02-06 0800'+%s)

恢復(fù)的文件會(huì)保存在當(dāng)前目錄下的RECOVERED_FILES/目錄中。注意:不要把恢復(fù)的文件寫(xiě)到被刪文件所在的同一個(gè)分區(qū),否則可能覆蓋還沒(méi)恢復(fù)的數(shù)據(jù)。

# 正確做法:在另一個(gè)分區(qū)上執(zhí)行恢復(fù)
cd/tmp # 確保 /tmp 不在 /dev/sda2 上
extundelete /dev/sda2 --restore-all
ls -la RECOVERED_FILES/

4.3 ext4magic 恢復(fù)

ext4magic 是 extundelete 的增強(qiáng)版,對(duì) ext4 文件系統(tǒng)的 extent tree 支持更好,恢復(fù)大文件的成功率更高。

安裝

# Ubuntu/Debian
apt install ext4magic

# 從源碼編譯
apt install libext2fs-dev libmagic-dev libbz2-dev zlib1g-dev
gitclonehttps://github.com/ext4magic/ext4magic.git
cdext4magic && ./configure && make && make install

恢復(fù)操作

# 列出指定目錄下最近 24 小時(shí)內(nèi)刪除的文件
ext4magic /dev/sda2 -f /data/app -l

# 恢復(fù)指定目錄下最近刪除的文件
ext4magic /dev/sda2 -f /data/app -r -d /recovery/

# 按時(shí)間范圍恢復(fù)
# -a: after(起始時(shí)間) -b: before(結(jié)束時(shí)間)
ext4magic /dev/sda2 -f /data/app 
 -a $(date -d'2026-02-06 0800'+%s) 
 -b $(date -d'2026-02-06 1200'+%s) 
 -r -d /recovery/

# 深度恢復(fù)模式(-m 參數(shù),掃描 journal 和 block bitmap)
# 當(dāng)普通模式恢復(fù)不了時(shí)使用,速度更慢但成功率更高
ext4magic /dev/sda2 -f /data/app -m -d /recovery/

# 恢復(fù)所有可恢復(fù)的文件
ext4magic /dev/sda2 -M -d /recovery/

4.4 extundelete vs ext4magic 對(duì)比

特性 extundelete ext4magic
支持的文件系統(tǒng) ext3/ext4 ext3/ext4
extent tree 支持 基礎(chǔ) 完善
大文件恢復(fù) 一般 較好
按時(shí)間過(guò)濾 支持 after 支持 after/before
深度掃描模式 無(wú) 有(-m/-M)
journal 解析 基礎(chǔ) 深度
維護(hù)狀態(tài) 停止維護(hù) 社區(qū)維護(hù)
推薦場(chǎng)景 小文件快速恢復(fù) 大文件/復(fù)雜場(chǎng)景

實(shí)際操作中建議兩個(gè)都試:先用 extundelete 快速掃一遍,恢復(fù)不了的再用 ext4magic 的深度模式。

4.5 局限性

僅支持 ext3/ext4:XFS、Btrfs、ZFS 等文件系統(tǒng)無(wú)法使用

依賴(lài) journal:如果文件系統(tǒng)掛載時(shí)使用了data=writeback模式,journal 中可能沒(méi)有足夠的恢復(fù)信息

大文件碎片化:如果被刪文件的數(shù)據(jù)塊分散在磁盤(pán)各處且部分已被覆蓋,恢復(fù)出來(lái)的文件可能不完整

ext4 的 extent 機(jī)制:ext4 刪除文件時(shí)會(huì)清除 inode 中的 extent 信息,這比 ext3 的間接塊指針更難恢復(fù)

五、方法三:testdisk / photorec 通用數(shù)據(jù)恢復(fù)

當(dāng)不知道文件系統(tǒng)類(lèi)型、或者 extundelete/ext4magic 都恢復(fù)不了時(shí),testdisk 和 photorec 是最后的手段。它們不依賴(lài)特定文件系統(tǒng)的元數(shù)據(jù),而是直接掃描磁盤(pán)上的數(shù)據(jù)塊。

5.1 testdisk:分區(qū)和文件恢復(fù)

testdisk 主要用于兩個(gè)場(chǎng)景:恢復(fù)丟失的分區(qū)表、從損壞的文件系統(tǒng)中復(fù)制文件。

安裝

# Ubuntu/Debian
apt install testdisk

# RHEL/CentOS
dnf install epel-release
dnf install testdisk

恢復(fù)文件操作

# 啟動(dòng) testdisk(交互式界面)
testdisk /dev/sda

# 操作流程:
# 1. 選擇磁盤(pán) -> /dev/sda
# 2. 選擇分區(qū)表類(lèi)型 -> [Intel] (通常自動(dòng)檢測(cè))
# 3. 選擇 [Advanced]
# 4. 選擇目標(biāo)分區(qū)
# 5. 選擇 [List] 列出文件
# 6. 找到被刪除的文件(紅色標(biāo)記)
# 7. 按 c 復(fù)制文件到其他位置

testdisk 的交互界面雖然是字符終端,但操作邏輯很清晰。被刪除的文件會(huì)用紅色高亮顯示,選中后按c鍵就能復(fù)制到指定目錄。

命令行模式(適合腳本化)

# 直接掃描分區(qū)并列出可恢復(fù)的文件
testdisk /list /dev/sda2

# 將掃描結(jié)果輸出到日志
testdisk /log/dev/sda2
# 日志保存在 testdisk.log

5.2 photorec:基于文件簽名的恢復(fù)

photorec 是 testdisk 套件中的另一個(gè)工具,采用完全不同的恢復(fù)策略:基于文件簽名(file carving)。它不依賴(lài)文件系統(tǒng)的元數(shù)據(jù)(inode、目錄項(xiàng)),而是直接掃描磁盤(pán)上的數(shù)據(jù)塊,通過(guò)識(shí)別文件頭部的 magic number 來(lái)找到文件。

這意味著即使文件系統(tǒng)已經(jīng)嚴(yán)重?fù)p壞、inode 全部丟失,只要數(shù)據(jù)塊還在,photorec 就有可能恢復(fù)文件。

支持的文件類(lèi)型

photorec 支持超過(guò) 480 種文件格式的簽名識(shí)別,常見(jiàn)的包括:

類(lèi)別 格式
文檔 doc/docx, xls/xlsx, pdf, odt
圖片 jpg, png, gif, bmp, tiff, raw
視頻 mp4, avi, mkv, mov
音頻 mp3, flac, wav, ogg
壓縮包 zip, tar, gz, bz2, 7z
數(shù)據(jù)庫(kù) sqlite, mysql frm/ibd
配置 xml, json, yaml

恢復(fù)操作

# 交互式模式
photorec /dev/sda2

# 操作流程:
# 1. 選擇磁盤(pán)和分區(qū)
# 2. 選擇文件系統(tǒng)類(lèi)型 [ext2/ext3/ext4] 或 [Other]
# 3. 選擇掃描范圍 [Free] 只掃描空閑空間 / [Whole] 掃描整個(gè)分區(qū)
# 4. 選擇恢復(fù)文件的保存目錄(必須在其他分區(qū)上)
# 5. 等待掃描完成

# 命令行模式(非交互式)
photorec /d /recovery/output /dev/sda2

# 只恢復(fù)特定類(lèi)型的文件(比如只恢復(fù) jpg 和 pdf)
# 在交互界面中按 s 進(jìn)入文件類(lèi)型選擇,取消不需要的類(lèi)型

恢復(fù)結(jié)果處理

photorec 恢復(fù)的文件有一個(gè)問(wèn)題:文件名全部丟失。恢復(fù)出來(lái)的文件會(huì)按照f(shuō)0000001.jpg、f0000002.pdf這樣的格式命名,保存在recup_dir.1/、recup_dir.2/等目錄中。

# 查看恢復(fù)結(jié)果
ls -la /recovery/output/recup_dir.*/

# 按文件類(lèi)型整理
cd/recovery/output
mkdir -p sorted/{images,documents,databases,archives,others}

find . -name"*.jpg"-o -name"*.png"-o -name"*.gif"| 
 xargs -I{} mv {} sorted/images/
find . -name"*.pdf"-o -name"*.doc*"-o -name"*.xls*"| 
 xargs -I{} mv {} sorted/documents/
find . -name"*.sql"-o -name"*.sqlite"-o -name"*.ibd"| 
 xargs -I{} mv {} sorted/databases/
find . -name"*.tar*"-o -name"*.zip"-o -name"*.gz"| 
 xargs -I{} mv {} sorted/archives/

# 統(tǒng)計(jì)恢復(fù)結(jié)果
echo"=== 恢復(fù)文件統(tǒng)計(jì) ==="
fordirinsorted/*/;do
  count=$(find"$dir"-typef | wc -l)
  size=$(du -sh"$dir"| awk'{print $1}')
 echo"$(basename $dir):$count個(gè)文件, 共$size"
done

5.3 testdisk vs photorec 選擇指南

文件被刪除了
  |
  v
文件系統(tǒng)結(jié)構(gòu)是否完整?
  |
  +-- 是 --> testdisk(可以保留文件名和目錄結(jié)構(gòu))
  |
  +-- 否 --> 文件系統(tǒng)是否為 ext4?
         |
         +-- 是 --> 先試 extundelete/ext4magic,不行再用 photorec
         |
         +-- 否 --> photorec(文件名會(huì)丟失,但支持幾乎所有文件系統(tǒng))

5.4 局限性

photorec 丟失文件名:恢復(fù)出來(lái)的文件全部重新編號(hào),需要人工辨認(rèn)

碎片化文件:如果文件的數(shù)據(jù)塊不連續(xù)(碎片化嚴(yán)重),photorec 可能只恢復(fù)到第一個(gè)碎片

加密文件系統(tǒng):LUKS 加密分區(qū)上的文件,如果沒(méi)有解密密鑰,任何工具都無(wú)法恢復(fù)

SSD TRIM:如果 SSD 啟用了 TRIM(現(xiàn)代 Linux 默認(rèn)啟用),被刪除文件的數(shù)據(jù)塊可能已經(jīng)被 SSD 控制器物理擦除,任何軟件工具都無(wú)法恢復(fù)

掃描時(shí)間長(zhǎng):對(duì)大容量磁盤(pán)進(jìn)行全盤(pán)掃描可能需要數(shù)小時(shí)甚至數(shù)天

六、XFS 文件系統(tǒng)恢復(fù)方案

RHEL/CentOS 7 之后默認(rèn)文件系統(tǒng)就是 XFS,很多生產(chǎn)環(huán)境都在用。但 XFS 的文件恢復(fù)比 ext4 難度大得多,因?yàn)?XFS 在刪除文件時(shí)會(huì)更徹底地清除 inode 中的元數(shù)據(jù)信息。

6.1 XFS 恢復(fù)的困境

XFS 刪除文件時(shí),會(huì)將 inode 中的數(shù)據(jù)塊指針(extent 信息)清零。這意味著即使 inode 還在,也無(wú)法通過(guò) inode 找到對(duì)應(yīng)的數(shù)據(jù)塊。這是 XFS 和 ext4 在恢復(fù)難度上的根本區(qū)別。

# 確認(rèn)文件系統(tǒng)類(lèi)型
df -Th /data
# Filesystem   Type Size Used Avail Use% Mounted on
# /dev/sdb1   xfs  500G 200G 300G 40% /data

# XFS 文件系統(tǒng)信息
xfs_info /data

6.2 XFS 上的可行恢復(fù)手段

方法一:/proc/pid/fd(同樣適用)

前面講的 /proc 方法不依賴(lài)文件系統(tǒng)類(lèi)型,XFS 上同樣有效。如果進(jìn)程還持有文件句柄,這是最靠譜的方式。

方法二:xfs_metadump + photorec

# 先做一份元數(shù)據(jù)備份(不包含實(shí)際數(shù)據(jù),僅用于分析)
xfs_metadump /dev/sdb1 /tmp/sdb1_meta.dump

# 用 photorec 掃描整個(gè)分區(qū)
# photorec 基于文件簽名,不依賴(lài) XFS 的 inode 信息
photorec /dev/sdb1

方法三:xfsdump 歷史備份恢復(fù)

如果之前配置了 xfsdump 定期備份,可以從備份中恢復(fù):

# 查看可用的 xfsdump 備份
xfsrestore -I

# 從備份中恢復(fù)指定文件
xfsrestore -f /backup/xfsdump_level0 -s data/app/config.yml /recovery/

# 交互式恢復(fù)(可以瀏覽備份內(nèi)容選擇性恢復(fù))
xfsrestore -f /backup/xfsdump_level0 -i /recovery/

6.3 XFS 恢復(fù)的現(xiàn)實(shí)

說(shuō)實(shí)話,XFS 上的文件恢復(fù)成功率遠(yuǎn)低于 ext4。如果沒(méi)有進(jìn)程持有文件句柄、也沒(méi)有 xfsdump 備份,基本只能靠 photorec 碰運(yùn)氣。這也是為什么在 XFS 文件系統(tǒng)上,預(yù)防措施比恢復(fù)手段重要得多。

七、debugfs 底層恢復(fù)操作

debugfs 是 e2fsprogs 套件自帶的 ext2/ext3/ext4 文件系統(tǒng)調(diào)試工具,可以直接操作文件系統(tǒng)的底層數(shù)據(jù)結(jié)構(gòu)。在 extundelete 和 ext4magic 都搞不定的時(shí)候,debugfs 是手動(dòng)恢復(fù)的最后手段。

7.1 基本用法

# 以只讀模式打開(kāi)文件系統(tǒng)(安全起見(jiàn))
debugfs -R"ls -d /data/app/"/dev/sda2

# 交互模式
debugfs /dev/sda2

# 常用命令
debugfs: ls -d /data/app/     # 列出目錄內(nèi)容(包括已刪除的文件)
debugfs: lsdel           # 列出所有已刪除的 inode
debugfs: stat<131073>       # 查看指定 inode 的詳細(xì)信息
debugfs: cat <131073>       # 查看 inode 對(duì)應(yīng)的文件內(nèi)容
debugfs: dump <131073> /tmp/recovered_file # 導(dǎo)出文件
debugfs: quit

7.2 實(shí)戰(zhàn)恢復(fù)流程

# 第一步:列出所有已刪除的 inode
debugfs -R"lsdel"/dev/sda2 2>/dev/null | head -30

# 輸出示例
# Inode Owner Mode  Size  Blocks Time deleted
# 131073   0 100644 4096  1/1   Thu Feb 6 1000 2026
# 262144 1000 100644 1048576 256/256 Thu Feb 6 1000 2026

# 第二步:根據(jù)大小、時(shí)間、權(quán)限等信息判斷哪個(gè)是目標(biāo)文件
# 比如要恢復(fù)的文件大小約 1MB,對(duì)應(yīng) inode 262144

# 第三步:查看 inode 詳細(xì)信息確認(rèn)
debugfs -R"stat <262144>"/dev/sda2

# 第四步:導(dǎo)出文件
debugfs -R"dump <262144> /tmp/recovered_file"/dev/sda2

# 第五步:驗(yàn)證恢復(fù)結(jié)果
file /tmp/recovered_file
ls -la /tmp/recovered_file

7.3 批量恢復(fù)腳本

#!/bin/bash
# debugfs_batch_recover.sh - 使用 debugfs 批量恢復(fù)已刪除文件
# 用法: ./debugfs_batch_recover.sh <設(shè)備> <恢復(fù)目錄> [最小文件大小(字節(jié))]

DEVICE="${1:?用法: $0 <設(shè)備> <恢復(fù)目錄> [最小文件大小]}"
RECOVER_DIR="${2:?請(qǐng)指定恢復(fù)目錄}"
MIN_SIZE="${3:-1024}"

mkdir -p"$RECOVER_DIR"

echo"=== 掃描$DEVICE上已刪除的 inode ==="

debugfs -R"lsdel""$DEVICE"2>/dev/null | 
 awk -v min="$MIN_SIZE"'NR>1 && $4 >= min {print $1, $4}'| 
whileread-r INODE SIZE;do
  DEST="$RECOVER_DIR/inode_${INODE}_$(numfmt --to=iec-i $SIZE)"
 echo"[恢復(fù)] inode=$INODEsize=$SIZE->$DEST"
  debugfs -R"dump <$INODE>$DEST""$DEVICE"2>/dev/null

 # 用 file 命令識(shí)別文件類(lèi)型并添加擴(kuò)展名
  FTYPE=$(file -b --mime-type"$DEST"2>/dev/null)
 case"$FTYPE"in
    text/plain)    mv"$DEST""${DEST}.txt";;
    application/json) mv"$DEST""${DEST}.json";;
    application/gzip) mv"$DEST""${DEST}.gz";;
    image/jpeg)    mv"$DEST""${DEST}.jpg";;
    image/png)    mv"$DEST""${DEST}.png";;
    application/pdf) mv"$DEST""${DEST}.pdf";;
 esac
done

echo"=== 恢復(fù)完成 ==="
ls -lhS"$RECOVER_DIR"| head -20

7.4 注意事項(xiàng)

debugfs 默認(rèn)以讀寫(xiě)模式打開(kāi)文件系統(tǒng),操作不當(dāng)可能造成更大的損壞。建議加-R參數(shù)執(zhí)行單條命令,或者先對(duì)分區(qū)做 dd 鏡像再操作

lsdel列出的 inode 可能非常多(尤其是長(zhǎng)期運(yùn)行的系統(tǒng)),需要根據(jù)文件大小和刪除時(shí)間過(guò)濾

ext4 刪除文件時(shí)會(huì)清除 extent 信息,debugfs 的dump命令可能無(wú)法恢復(fù)完整內(nèi)容

八、預(yù)防措施:別等出事再后悔

恢復(fù)手段再多,也不如一開(kāi)始就不出事。下面三個(gè)預(yù)防措施,從輕量到重量級(jí),覆蓋不同規(guī)模的場(chǎng)景。

8.1 trash-cli:給 rm 加一道保險(xiǎn)

trash-cli 實(shí)現(xiàn)了 FreeDesktop.org 的 Trash 規(guī)范,把rm的"直接刪除"變成"移到回收站"。

安裝和配置

# Ubuntu/Debian
apt install trash-cli

# RHEL/CentOS
dnf install trash-cli

# pip 安裝(適合沒(méi)有系統(tǒng)包的環(huán)境)
pip install trash-cli

基本用法

# 刪除文件(移到回收站)
trash-put config.yml
trash-put -v *.log# -v 顯示詳細(xì)信息

# 查看回收站內(nèi)容
trash-list

# 輸出示例
# 2026-02-06 1000 /data/app/config.yml
# 2026-02-06 1000 /data/app/access.log

# 恢復(fù)文件(交互式選擇)
trash-restore

# 清空回收站
trash-empty    # 清空所有
trash-empty 30  # 清空 30 天前的文件

用 alias 替代 rm

在/etc/profile.d/safe-rm.sh中添加全局配置:

#!/bin/bash
# /etc/profile.d/safe-rm.sh
# 用 trash-put 替代 rm,防止誤刪

aliasrm='trash-put'

# 如果確實(shí)需要真正刪除,使用 /bin/rm 或 
m
# 例如: 
m -rf /tmp/cache/

這樣所有用戶(hù)執(zhí)行rm時(shí)實(shí)際調(diào)用的是trash-put,文件會(huì)進(jìn)入回收站而不是直接刪除。需要真正刪除時(shí)用 m或/bin/rm繞過(guò) alias。

服務(wù)器環(huán)境的注意事項(xiàng)

# 回收站默認(rèn)在 ~/.local/share/Trash/
# 服務(wù)器上建議配置定期清理,避免磁盤(pán)空間被回收站占滿(mǎn)

# crontab 定期清理 7 天前的回收站文件
echo"0 3 * * * trash-empty 7"| crontab -

# 監(jiān)控回收站大小
du -sh ~/.local/share/Trash/ 2>/dev/null

8.2 文件系統(tǒng)快照:秒級(jí)回滾

快照是比回收站更強(qiáng)大的保護(hù)機(jī)制。它可以在任意時(shí)間點(diǎn)創(chuàng)建文件系統(tǒng)的"存檔點(diǎn)",誤操作后直接回滾到快照時(shí)刻的狀態(tài)。

LVM 快照

LVM 快照是最通用的方案,不依賴(lài)特定文件系統(tǒng)類(lèi)型。

# 前提:數(shù)據(jù)分區(qū)必須在 LVM 邏輯卷上,且 VG 有剩余空間
# 查看 VG 剩余空間
vgs
# VG  #PV#LV#SNAttr  VSize  VFree
# data   1  1  0 wz--n- 500.00g 100.00g

# 創(chuàng)建快照(分配 10G 空間存儲(chǔ)變化的數(shù)據(jù)塊)
lvcreate -L 10G -s -n data_snap /dev/data/lv_data

# 查看快照狀態(tài)
lvs
# LV    VG  Attr    LSize  Origin Snap%
# data_snap data swi-a-s--- 10.00g lv_data 0.00

# 從快照恢復(fù)單個(gè)文件
mkdir /mnt/snap
mount -o ro /dev/data/data_snap /mnt/snap
cp /mnt/snap/app/config.yml /data/app/config.yml
umount /mnt/snap

# 整卷回滾(危險(xiǎn)操作,會(huì)丟失快照之后的所有變更)
umount /data
lvconvert --merge /dev/data/data_snap
mount /data

Btrfs 快照

如果文件系統(tǒng)是 Btrfs,快照操作更加輕量:

# 創(chuàng)建只讀快照
btrfs subvolume snapshot -r /data /data/.snapshots/$(date +%Y%m%d_%H%M%S)

# 查看快照列表
btrfs subvolume list -s /data

# 從快照恢復(fù)文件
cp /data/.snapshots/20260206_100000/app/config.yml /data/app/config.yml

# 自動(dòng)快照腳本(配合 crontab 每小時(shí)執(zhí)行)
cat > /usr/local/bin/btrfs-auto-snapshot.sh <

ZFS 快照

ZFS 的快照能力是所有文件系統(tǒng)中最強(qiáng)的:

# 創(chuàng)建快照
zfs snapshot datapool/appdata@before_deploy

# 查看快照列表
zfs list -t snapshot

# 從快照恢復(fù)單個(gè)文件
# ZFS 快照自動(dòng)掛載在 .zfs/snapshot/ 目錄下
cp /datapool/appdata/.zfs/snapshot/before_deploy/config.yml /datapool/appdata/config.yml

# 整卷回滾
zfs rollback datapool/appdata@before_deploy

# 自動(dòng)快照(推薦使用 zfs-auto-snapshot)
# Ubuntu: apt install zfs-auto-snapshot
# 默認(rèn)策略:每 15 分鐘/每小時(shí)/每天/每周/每月各保留一定數(shù)量

8.3 備份策略:3-2-1 原則

快照保護(hù)的是"手滑刪錯(cuò)",但保護(hù)不了磁盤(pán)故障、機(jī)房火災(zāi)、勒索軟件加密。真正的數(shù)據(jù)保護(hù)需要遵循 3-2-1 備份原則:

3 份數(shù)據(jù):原始數(shù)據(jù) + 2 份備份

2 種介質(zhì):至少使用兩種不同的存儲(chǔ)介質(zhì)(如本地磁盤(pán) + 對(duì)象存儲(chǔ))

1 份異地:至少一份備份存放在異地(不同機(jī)房/不同地域)

實(shí)現(xiàn)方案示例

# 第 1 層:本地快照(保護(hù)誤操作,秒級(jí)恢復(fù))
# LVM/Btrfs/ZFS 快照,每小時(shí)一次,保留 48 小時(shí)

# 第 2 層:本地備份服務(wù)器(保護(hù)單機(jī)故障,分鐘級(jí)恢復(fù))
# 使用 rsync 增量同步到備份服務(wù)器
rsync -avz --delete 
 --backup --backup-dir="/backup/incremental/$(date +%Y%m%d)"
 /data/ backup-server:/backup/data/

# 第 3 層:異地對(duì)象存儲(chǔ)(保護(hù)機(jī)房級(jí)故障,小時(shí)級(jí)恢復(fù))
# 使用 restic 加密備份到 S3 兼容存儲(chǔ)
restic -r s3:s3.amazonaws.com/my-backup-bucket init
restic -r s3:s3.amazonaws.com/my-backup-bucket backup /data/
restic -r s3:s3.amazonaws.com/my-backup-bucket forget --keep-daily 30 --keep-weekly 12 --keep-monthly 24 --prune

備份驗(yàn)證(最容易被忽略的環(huán)節(jié))

備份不驗(yàn)證等于沒(méi)備份。定期執(zhí)行恢復(fù)演練:

# restic 驗(yàn)證備份完整性
restic -r s3:s3.amazonaws.com/my-backup-bucket check

# 定期恢復(fù)演練(建議每月一次)
restic -r s3:s3.amazonaws.com/my-backup-bucket restore latest --target /tmp/restore_test/
diff -rq /data/app/ /tmp/restore_test/data/app/
rm -rf /tmp/restore_test/

九、企業(yè)級(jí)數(shù)據(jù)保護(hù)方案

個(gè)人服務(wù)器搞個(gè) trash-cli + 定時(shí)快照基本夠用了。但在企業(yè)生產(chǎn)環(huán)境中,數(shù)據(jù)保護(hù)需要更系統(tǒng)化的方案。

9.1 權(quán)限管控:從源頭減少誤操作

最小權(quán)限原則

# 生產(chǎn)環(huán)境關(guān)鍵目錄設(shè)置 immutable 屬性(即使 root 也無(wú)法直接刪除)
chattr +i /data/app/config.yml
chattr +i /data/database/

# 查看文件屬性
lsattr /data/app/config.yml
# ----i--------e-- /data/app/config.yml

# 需要修改時(shí)先解除保護(hù)
chattr -i /data/app/config.yml
# 修改完成后重新加鎖
chattr +i /data/app/config.yml

safe-rm:rm 命令的安全包裝

# 安裝 safe-rm
apt install safe-rm

# 配置保護(hù)路徑列表
cat > /etc/safe-rm.conf <

sudo 審計(jì)和限制

# /etc/sudoers.d/restrict-rm
# 禁止通過(guò) sudo 執(zhí)行 rm -rf /
Cmnd_Alias DANGEROUS = /bin/rm -rf /, /bin/rm -rf /*
ALL ALL=(ALL) !DANGEROUS

# 開(kāi)啟 sudo 命令審計(jì)日志
Defaults logfile="/var/log/sudo.log"
Defaults log_input, log_output
Defaults iolog_dir="/var/log/sudo-io/%{user}"

9.2 自動(dòng)化快照策略

在 Kubernetes 環(huán)境中,結(jié)合 CSI 快照控制器實(shí)現(xiàn) PV 級(jí)別的自動(dòng)快照:

# VolumeSnapshotClass 定義
apiVersion:snapshot.storage.k8s.io/v1
kind:VolumeSnapshotClass
metadata:
name:csi-snapshot-class
driver:ebs.csi.aws.com# 根據(jù)實(shí)際 CSI 驅(qū)動(dòng)調(diào)整
deletionPolicy:Retain
parameters:
tagSpecification_1:"Environment=production"

---
# 創(chuàng)建 PV 快照
apiVersion:snapshot.storage.k8s.io/v1
kind:VolumeSnapshot
metadata:
name:data-snapshot-20260206
namespace:production
spec:
volumeSnapshotClassName:csi-snapshot-class
source:
 persistentVolumeClaimName:app-data-pvc

CronJob 自動(dòng)快照

apiVersion:batch/v1
kind:CronJob
metadata:
name:pv-snapshot-cronjob
namespace:production
spec:
schedule:"0 */6 * * *"# 每 6 小時(shí)
jobTemplate:
 spec:
  template:
   spec:
    serviceAccountName:snapshot-manager
    containers:
    -name:snapshot-creator
     image:bitnami/kubectl:1.32
     command:
     -/bin/sh
     --c
     -|
       SNAP_NAME="data-snap-$(date +%Y%m%d-%H%M%S)"
       kubectl apply -f - <

9.3 數(shù)據(jù)庫(kù)專(zhuān)項(xiàng)保護(hù)

數(shù)據(jù)庫(kù)文件不能簡(jiǎn)單地用文件級(jí)工具恢復(fù)——即使文件恢復(fù)了,數(shù)據(jù)一致性也可能已經(jīng)被破壞。數(shù)據(jù)庫(kù)有自己的保護(hù)機(jī)制:

# MySQL/MariaDB:binlog 點(diǎn)恢復(fù)
# 確認(rèn) binlog 已開(kāi)啟
mysql -e"SHOW VARIABLES LIKE 'log_bin';"

# 從全量備份 + binlog 恢復(fù)到指定時(shí)間點(diǎn)
mysqlbinlog --stop-datetime="2026-02-06 1000"
 /var/lib/mysql/binlog.000042 | mysql -u root -p

# PostgreSQL:WAL 歸檔 + PITR
# postgresql.conf 配置
# archive_mode = on
# archive_command = 'cp %p /backup/wal/%f'

# 恢復(fù)到指定時(shí)間點(diǎn)
cat > /var/lib/postgresql/16/main/recovery.signal << EOF
EOF
# postgresql.conf 中設(shè)置
# restore_command = 'cp /backup/wal/%f %p'
# recovery_target_time = '2026-02-06 1000'

十、恢復(fù)操作注意事項(xiàng)

工具和方法都講完了,但恢復(fù)操作本身也有不少坑。下面這些注意事項(xiàng)是從各種翻車(chē)現(xiàn)場(chǎng)總結(jié)出來(lái)的,每一條都對(duì)應(yīng)一個(gè)真實(shí)的教訓(xùn)。

10.1 第一原則:立即停止寫(xiě)入

這一點(diǎn)怎么強(qiáng)調(diào)都不過(guò)分。誤刪文件后,對(duì)目標(biāo)分區(qū)的每一次寫(xiě)入都在降低恢復(fù)成功率。

# 緊急操作清單(按優(yōu)先級(jí)排序)

# 1. 如果可能,立即將分區(qū)重新掛載為只讀
mount -o remount,ro /data

# 2. 如果無(wú)法 remount(比如根分區(qū)),停掉所有非必要服務(wù)
systemctl stop nginx
systemctl stop application
systemctl stop rsyslog
systemctl stop cron

# 3. 禁用 swap(swap 分區(qū)的寫(xiě)入也可能覆蓋數(shù)據(jù))
swapoff -a

# 4. 如果是 SSD,立即禁用 TRIM(防止控制器擦除數(shù)據(jù)塊)
# 臨時(shí)禁用 fstrim.timer
systemctl stop fstrim.timer
# 檢查 fstab 中是否有 discard 掛載選項(xiàng)
grep discard /etc/fstab

10.2 先做磁盤(pán)鏡像再操作

在對(duì)磁盤(pán)做任何恢復(fù)操作之前,先用 dd 做一份完整的磁盤(pán)鏡像。這樣即使恢復(fù)操作搞砸了,還有原始數(shù)據(jù)可以重來(lái)。

# 創(chuàng)建分區(qū)的完整鏡像(確保目標(biāo)位置在其他分區(qū)上)
ddif=/dev/sda2 of=/backup/sda2.img bs=4M status=progress conv=noerror,sync

# 如果磁盤(pán)空間不夠,可以壓縮
ddif=/dev/sda2 bs=4M status=progress conv=noerror,sync | 
 gzip -c > /backup/sda2.img.gz

# 后續(xù)所有恢復(fù)操作都在鏡像上進(jìn)行,不碰原始磁盤(pán)
# 掛載鏡像文件進(jìn)行恢復(fù)
losetup /dev/loop0 /backup/sda2.img
extundelete /dev/loop0 --restore-all
losetup -d /dev/loop0

10.3 恢復(fù)文件的驗(yàn)證

文件恢復(fù)出來(lái)不代表就完事了,必須驗(yàn)證文件的完整性和可用性。

# 基礎(chǔ)驗(yàn)證:文件大小是否合理
ls -la recovered_file
# 大小為 0 的文件顯然恢復(fù)失敗了

# 文件類(lèi)型驗(yàn)證
file recovered_file
# 如果顯示 "data" 而不是預(yù)期的文件類(lèi)型,說(shuō)明文件可能損壞

# 文本文件:檢查內(nèi)容是否可讀
head -20 recovered_file
tail -20 recovered_file

# 壓縮文件:驗(yàn)證完整性
gzip -t recovered_file.gz
tar -tzf recovered_file.tar.gz > /dev/null

# 數(shù)據(jù)庫(kù)文件:用對(duì)應(yīng)工具驗(yàn)證
sqlite3 recovered.db"PRAGMA integrity_check;"
mysqlcheck -u root -p --all-databases # MySQL

# 計(jì)算校驗(yàn)和(如果有原始文件的校驗(yàn)和記錄)
sha256sum recovered_file

10.4 不同場(chǎng)景的恢復(fù)策略選擇

誤刪文件了!
  |
  v
進(jìn)程還在運(yùn)行嗎?(lsof +L1 檢查)
  |
  +-- 是 --> /proc/pid/fd 恢復(fù)(成功率 100%)
  |
  +-- 否 --> 文件系統(tǒng)類(lèi)型是什么?
        |
        +-- ext4 --> extundelete/ext4magic(成功率 60-80%)
        |       |
        |       +-- 失敗 --> debugfs 手動(dòng)恢復(fù)
        |       |
        |       +-- 仍然失敗 --> photorec(丟失文件名)
        |
        +-- XFS --> photorec(成功率 30-50%)
        |
        +-- Btrfs --> btrfs restore 命令
        |
        +-- ZFS --> zfs rollback(如果有快照)

10.5 SSD 與 HDD 的恢復(fù)差異

這是很多人忽略的關(guān)鍵點(diǎn)。SSD 和 HDD 在數(shù)據(jù)恢復(fù)上有本質(zhì)區(qū)別:

特性 HDD(機(jī)械硬盤(pán)) SSD(固態(tài)硬盤(pán))
刪除后數(shù)據(jù)保留 數(shù)據(jù)塊內(nèi)容保留直到被覆蓋 TRIM 命令可能導(dǎo)致數(shù)據(jù)被物理擦除
恢復(fù)窗口 較長(zhǎng)(取決于寫(xiě)入量) 可能極短(TRIM 后幾秒內(nèi)擦除)
photorec 效果 通常較好 取決于 TRIM 是否已執(zhí)行
建議 標(biāo)準(zhǔn)恢復(fù)流程即可 立即禁用 TRIM,盡快操作

# 檢查 SSD 是否啟用了 TRIM
# 方法 1:檢查 fstab 中的 discard 選項(xiàng)
grep discard /etc/fstab

# 方法 2:檢查 fstrim.timer 是否活躍
systemctl is-active fstrim.timer

# 方法 3:檢查設(shè)備是否支持 TRIM
lsblk --discard /dev/sda
# DISC-GRAN 和 DISC-MAX 非零表示支持 TRIM

十一、總結(jié)

11.1 三種恢復(fù)方法速查表

方法 適用條件 成功率 恢復(fù)速度 保留文件名 文件系統(tǒng)要求
/proc/pid/fd 進(jìn)程仍持有文件句柄 100% 秒級(jí) 任意
extundelete/ext4magic 文件系統(tǒng)為 ext4,數(shù)據(jù)未被覆蓋 60-80% 分鐘級(jí) ext3/ext4
testdisk 文件系統(tǒng)結(jié)構(gòu)基本完整 50-70% 分鐘級(jí) 多數(shù)文件系統(tǒng)
photorec 數(shù)據(jù)塊未被覆蓋 40-60% 小時(shí)級(jí) 任意
debugfs ext4 文件系統(tǒng),需要手動(dòng)操作 30-50% 分鐘級(jí) ext2/ext3/ext4

11.2 技術(shù)要點(diǎn)回顧

理解原理是恢復(fù)的基礎(chǔ):rm刪除的是 dentry 和 inode 引用,數(shù)據(jù)塊內(nèi)容在被覆蓋之前一直存在。搞清楚 inode、dentry、data block 三者的關(guān)系,才能判斷用哪種方法恢復(fù)

時(shí)間就是數(shù)據(jù):誤刪后的每一秒都在增加數(shù)據(jù)被覆蓋的風(fēng)險(xiǎn)。立即停止寫(xiě)入、remount 為只讀、禁用 TRIM,這些操作的優(yōu)先級(jí)高于任何恢復(fù)工具

先鏡像再恢復(fù):對(duì)目標(biāo)分區(qū)做 dd 鏡像是恢復(fù)操作的安全網(wǎng)。在鏡像上操作,原始數(shù)據(jù)永遠(yuǎn)有退路

SSD 是恢復(fù)的天敵:TRIM 機(jī)制會(huì)讓 SSD 控制器主動(dòng)擦除已刪除文件的數(shù)據(jù)塊,軟件層面無(wú)法阻止已經(jīng)執(zhí)行的 TRIM 操作

XFS 恢復(fù)難度遠(yuǎn)高于 ext4:XFS 刪除文件時(shí)清除 extent 指針,導(dǎo)致 inode 級(jí)恢復(fù)基本不可行,只能依賴(lài) photorec 的文件簽名掃描

11.3 預(yù)防體系總結(jié)

恢復(fù)永遠(yuǎn)是亡羊補(bǔ)牢,預(yù)防才是正道。按照投入產(chǎn)出比排序:

層級(jí) 措施 成本 保護(hù)范圍 恢復(fù)速度
L0 trash-cli 替代 rm 幾乎為零 誤操作 秒級(jí)
L1 chattr +i 保護(hù)關(guān)鍵文件 關(guān)鍵配置文件 即時(shí)
L2 safe-rm 黑名單 系統(tǒng)關(guān)鍵路徑 即時(shí)
L3 文件系統(tǒng)快照(LVM/Btrfs/ZFS) 整個(gè)分區(qū) 秒到分鐘級(jí)
L4 本地備份服務(wù)器(rsync) 單機(jī)故障 分鐘級(jí)
L5 異地加密備份(restic + S3) 中高 機(jī)房級(jí)故障 小時(shí)級(jí)
L6 數(shù)據(jù)庫(kù) PITR(binlog/WAL) 數(shù)據(jù)庫(kù)誤操作 分鐘到小時(shí)級(jí)
L7 K8s CSI 快照 + CronJob 容器化存儲(chǔ) 分鐘級(jí)

生產(chǎn)環(huán)境建議至少覆蓋 L0 + L3 + L5,也就是 trash-cli + 文件系統(tǒng)快照 + 異地備份。數(shù)據(jù)庫(kù)環(huán)境額外加上 L6。

11.4 進(jìn)階學(xué)習(xí)方向

文件恢復(fù)本質(zhì)上是在和熵增做對(duì)抗——數(shù)據(jù)一旦被覆蓋就徹底不可逆。與其把精力花在恢復(fù)技術(shù)上,不如把防線前移到快照和備份層面。以下幾個(gè)方向值得深入研究。

1. 文件系統(tǒng)級(jí)快照:ZFS 和 Btrfs

ZFS 的 COW(Copy-On-Write)機(jī)制天然支持零成本快照。zfs snapshot pool/data@before-deploy一條命令就能凍結(jié)當(dāng)前狀態(tài),回滾只需要zfs rollback,整個(gè)過(guò)程在秒級(jí)完成。Btrfs 的子卷快照也是類(lèi)似的思路,btrfs subvolume snapshot創(chuàng)建快照幾乎不占額外空間。對(duì)于數(shù)據(jù)敏感的業(yè)務(wù),把根分區(qū)和數(shù)據(jù)分區(qū)分別放在 ZFS/Btrfs 上,配合定時(shí)快照策略(比如每小時(shí)一次、保留 24 個(gè)),能覆蓋絕大多數(shù)誤操作場(chǎng)景。需要注意的是 ZFS 在 Linux 上的內(nèi)核模塊兼容性問(wèn)題,RHEL 系發(fā)行版需要通過(guò) DKMS 或 kABI 模塊安裝,升級(jí)內(nèi)核前務(wù)必確認(rèn)模塊兼容。

2. 企業(yè)級(jí)備份方案:Restic 和 Velero

Restic 是目前最值得關(guān)注的開(kāi)源備份工具之一。它原生支持加密、去重、增量備份,后端可以對(duì)接 S3、B2、SFTP 等多種存儲(chǔ)。restic backup+restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6就能實(shí)現(xiàn)一套完整的 3-2-1 備份策略中的異地備份環(huán)節(jié)。在 Kubernetes 環(huán)境下,Velero 是事實(shí)上的標(biāo)準(zhǔn)備份方案,它能備份集群資源定義和持久卷數(shù)據(jù),配合 CSI 快照驅(qū)動(dòng)可以實(shí)現(xiàn)應(yīng)用一致性備份。建議在生產(chǎn)環(huán)境中把 Restic 用于傳統(tǒng)主機(jī)備份、Velero 用于 K8s 集群備份,兩條線互不干擾。

3. 3-2-1 備份原則的落地實(shí)踐

3-2-1 原則說(shuō)起來(lái)簡(jiǎn)單(3 份副本、2 種介質(zhì)、1 份異地),落地時(shí)最容易踩的坑是"以為備份了但恢復(fù)時(shí)才發(fā)現(xiàn)不可用"。定期做恢復(fù)演練比備份本身更重要。建議每季度至少做一次全量恢復(fù)測(cè)試,驗(yàn)證備份數(shù)據(jù)的完整性和恢復(fù)流程的可操作性。另外,備份鏈路本身也需要監(jiān)控——Restic 的restic check可以驗(yàn)證倉(cāng)庫(kù)完整性,配合 Prometheus 的 pushgateway 把備份狀態(tài)推送到監(jiān)控系統(tǒng),備份失敗時(shí)能第一時(shí)間告警。

11.5 參考資料

ext4 文件系統(tǒng)官方文檔- 內(nèi)核文檔中關(guān)于 ext4 數(shù)據(jù)結(jié)構(gòu)的權(quán)威說(shuō)明

extundelete 項(xiàng)目主頁(yè)- extundelete 使用文檔和原理說(shuō)明

testdisk / photorec 官方文檔- CGSecurity 維護(hù)的數(shù)據(jù)恢復(fù)工具套件

restic 備份工具- 現(xiàn)代化的加密增量備份方案

trash-cli GitHub- FreeDesktop.org Trash 規(guī)范的命令行實(shí)現(xiàn)

Linux VFS 層文件刪除流程- 內(nèi)核虛擬文件系統(tǒng)層的 unlink 實(shí)現(xiàn)細(xì)節(jié)

OpenZFS 文檔- ZFS 快照、復(fù)制、管理的官方指南

Btrfs Wiki- Btrfs 子卷和快照管理文檔

Velero 官方文檔- Kubernetes 集群備份和遷移方案

附錄

A. 誤刪文件應(yīng)急命令速查表

# ========== 第一時(shí)間:停止寫(xiě)入 ==========
mount -o remount,ro /data          # 目標(biāo)分區(qū)只讀掛載
systemctl stop fstrim.timer         # 禁用 SSD TRIM 定時(shí)器
swapoff -a                 # 關(guān)閉 swap

# ========== 方法一:/proc/pid/fd 恢復(fù) ==========
lsof +L1 2>/dev/null | grep deleted     # 查找被刪除但仍被打開(kāi)的文件
cp /proc//fd/ /recovery/file    # 從進(jìn)程 FD 復(fù)制文件

# ========== 方法二:ext4 文件系統(tǒng)恢復(fù) ==========
extundelete /dev/sda2 --restore-all     # extundelete 恢復(fù)所有文件
ext4magic /dev/sda2 -M -d /recovery/    # ext4magic 深度恢復(fù)

# ========== 方法三:通用數(shù)據(jù)恢復(fù) ==========
testdisk /dev/sda              # testdisk 交互式恢復(fù)
photorec /dev/sda2             # photorec 文件簽名恢復(fù)

# ========== debugfs 底層操作 ==========
debugfs -R"lsdel"/dev/sda2        # 列出已刪除的 inode
debugfs -R"dump  /tmp/file"/dev/sda2 # 導(dǎo)出指定 inode

# ========== 磁盤(pán)鏡像(恢復(fù)前必做) ==========
ddif=/dev/sda2 of=/backup/sda2.img bs=4M status=progress # 完整鏡像

六、總結(jié)

6.1 技術(shù)要點(diǎn)回顧

Linux 下誤刪文件的恢復(fù),本質(zhì)上是一場(chǎng)和磁盤(pán)寫(xiě)入搶時(shí)間的競(jìng)賽。整篇文章覆蓋的內(nèi)容可以歸結(jié)為三條核心結(jié)論:

三種恢復(fù)方法存在明確的優(yōu)先級(jí):/proc/pid/fd是成本最低、成功率最高的手段,前提是刪除文件的進(jìn)程還活著,文件描述符還在,直接cp出來(lái)就行,零依賴(lài)零風(fēng)險(xiǎn)。如果進(jìn)程已經(jīng)退出,退而求其次用 extundelete 或 ext4magic 從文件系統(tǒng)的 journal 和 inode 元數(shù)據(jù)中嘗試恢復(fù),這一層對(duì) ext4 文件系統(tǒng)有較強(qiáng)的針對(duì)性,恢復(fù)效果取決于 inode 是否被覆蓋。最后的兜底方案是 testdisk/photorec,它們不依賴(lài)文件系統(tǒng)元數(shù)據(jù),靠文件簽名做暴力掃描,適用范圍最廣但恢復(fù)出來(lái)的文件沒(méi)有原始文件名和目錄結(jié)構(gòu)。實(shí)際操作中按這個(gè)優(yōu)先級(jí)逐級(jí)嘗試,能省掉大量無(wú)效折騰。

恢復(fù)黃金法則必須刻進(jìn)肌肉記憶:發(fā)現(xiàn)誤刪的第一反應(yīng)不是去找恢復(fù)工具,而是立即停止對(duì)目標(biāo)分區(qū)的一切寫(xiě)入操作。mount -o remount,ro把分區(qū)切成只讀,關(guān)掉 swap,停掉 fstrim 定時(shí)器,這些動(dòng)作要在 30 秒內(nèi)完成。然后對(duì)整個(gè)分區(qū)做一次dd鏡像,所有恢復(fù)操作都在鏡像副本上進(jìn)行,絕不碰原始分區(qū)。這套流程看起來(lái)多了一步,但它把"恢復(fù)失敗導(dǎo)致數(shù)據(jù)徹底丟失"的風(fēng)險(xiǎn)降到了零。

預(yù)防體系的投入產(chǎn)出比遠(yuǎn)高于事后恢復(fù):用 trash-cli 替代 rm 是最簡(jiǎn)單的第一道防線,刪除操作變成了移動(dòng)到回收站,誤刪后直接trash-restore就能找回。往上一層,LVM 快照、Btrfs/ZFS 的原生快照機(jī)制能提供分鐘級(jí)的數(shù)據(jù)回滾能力,配合 cron 做定時(shí)快照,覆蓋絕大多數(shù)"剛才還好好的突然就沒(méi)了"的場(chǎng)景。再往上就是 3-2-1 備份原則的完整落地——3 份副本、2 種介質(zhì)、1 份異地,用 Restic 或 BorgBackup 做加密增量備份,定期驗(yàn)證備份可恢復(fù)性。這三層防線疊加起來(lái),能把數(shù)據(jù)丟失的概率壓到接近于零。

6.2 進(jìn)階學(xué)習(xí)方向

ZFS/Btrfs 快照自動(dòng)化管理:生產(chǎn)環(huán)境中手動(dòng)打快照不現(xiàn)實(shí),需要借助 sanoid(ZFS)或 snapper(Btrfs)實(shí)現(xiàn)快照的自動(dòng)創(chuàng)建、保留策略和過(guò)期清理。重點(diǎn)關(guān)注快照對(duì)存儲(chǔ)空間的影響以及 COW 機(jī)制在高 IO 場(chǎng)景下的性能表現(xiàn),這兩個(gè)問(wèn)題處理不好會(huì)反過(guò)來(lái)變成生產(chǎn)事故的根源。

企業(yè)級(jí)備份方案的選型與落地:Velero 解決 Kubernetes 集群的備份問(wèn)題,Restic 和 BorgBackup 覆蓋傳統(tǒng)主機(jī)場(chǎng)景。實(shí)際落地時(shí)需要關(guān)注備份窗口、網(wǎng)絡(luò)帶寬、存儲(chǔ)成本之間的平衡,以及備份數(shù)據(jù)的加密和訪問(wèn)控制。建議從 Restic + S3 兼容存儲(chǔ)的組合入手,它的去重和加密能力能覆蓋大多數(shù)中小規(guī)模場(chǎng)景。

災(zāi)難恢復(fù)演練(DR Drill)常態(tài)化:備份方案的可靠性不是靠設(shè)計(jì)文檔保證的,而是靠定期演練驗(yàn)證的。建議每季度做一次全量恢復(fù)測(cè)試,把恢復(fù)時(shí)間(RTO)和恢復(fù)點(diǎn)(RPO)的實(shí)際值記錄下來(lái),和 SLA 承諾做對(duì)比。演練中發(fā)現(xiàn)的問(wèn)題(備份損壞、恢復(fù)腳本過(guò)期、權(quán)限不足等)往往比真實(shí)故障中暴露出來(lái)的更有價(jià)值,因?yàn)檫@時(shí)候還有時(shí)間修。

6.3 參考資料

ext4 文件系統(tǒng)內(nèi)核文檔- ext4 磁盤(pán)布局、journal 機(jī)制和 inode 結(jié)構(gòu)的權(quán)威說(shuō)明,理解文件刪除后數(shù)據(jù)殘留的底層原理離不開(kāi)這份文檔

testdisk / photorec 官方文檔- CGSecurity 維護(hù)的數(shù)據(jù)恢復(fù)工具套件,包含支持的文件簽名列表和各平臺(tái)的使用指南

《數(shù)據(jù)恢復(fù)技術(shù)深度揭秘》 - 系統(tǒng)講解磁盤(pán)數(shù)據(jù)結(jié)構(gòu)、文件系統(tǒng)原理和恢復(fù)算法,適合需要深入理解恢復(fù)工具工作機(jī)制的讀者

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11822

    瀏覽量

    219600
  • 文件系統(tǒng)
    +關(guān)注

    關(guān)注

    0

    文章

    305

    瀏覽量

    21050
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    759

    瀏覽量

    23981

原文標(biāo)題:誤刪文件恢復(fù)指南:rm -rf 后的 3 種"后悔藥"

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Linux文件的復(fù)制、刪除和移動(dòng)命令

    Linux文件的復(fù)制、刪除和移動(dòng)命令 Linux文件的復(fù)制、刪除和移動(dòng)命令  cp命令  功能
    發(fā)表于 01-18 12:45 ?1451次閱讀

    Linux文件系統(tǒng)的反刪除方法

    Linux文件系統(tǒng)的反刪除方法 作為一個(gè)多用戶(hù)、多任務(wù)的操作系統(tǒng),Linux下的文件一旦被
    發(fā)表于 03-29 10:39 ?877次閱讀

    恢復(fù)Unix系統(tǒng)被刪除文件

    恢復(fù)Unix系統(tǒng)被刪除文件 與DOS/Windows不同,Unix文件刪除后很難恢復(fù),這是
    發(fā)表于 01-11 11:53 ?1132次閱讀

    數(shù)據(jù)恢復(fù)方法有哪些

    本視頻主要詳細(xì)介紹了數(shù)據(jù)恢復(fù)方法有哪些,分別是硬盤(pán)數(shù)據(jù)恢復(fù)、硬盤(pán)物理故障、U盤(pán)數(shù)據(jù)恢復(fù)、Unix數(shù)據(jù)恢復(fù)。
    的頭像 發(fā)表于 02-23 11:28 ?9616次閱讀

    你會(huì)在Linux系統(tǒng)中恢復(fù)刪除文件?

    當(dāng)用戶(hù)意外地刪除了一個(gè)仍然需要的文件時(shí),大多數(shù)情況下,是沒(méi)有簡(jiǎn)便的方法可以重新找回或重建這個(gè)文件。不過(guò),幸運(yùn)的是文件是可以通過(guò)一些
    發(fā)表于 05-13 09:26 ?1747次閱讀

    【服務(wù)器數(shù)據(jù)恢復(fù)LINUX刪除、誤格式化怎么恢復(fù)數(shù)據(jù)?

    Linux刪除及誤格式化的數(shù)據(jù)恢復(fù)方案針對(duì)的文件系統(tǒng)。
    的頭像 發(fā)表于 11-23 11:34 ?2871次閱讀

    linux誤刪文件后的恢復(fù)方法

    對(duì)于linux下誤刪的文件,我們是否真的無(wú)法通過(guò)軟件進(jìn)行恢復(fù)呢?
    的頭像 發(fā)表于 02-09 09:51 ?3266次閱讀

    服務(wù)器數(shù)據(jù)恢復(fù)-LINUX下誤刪除/格式化的數(shù)據(jù)恢復(fù)方

    服務(wù)器數(shù)據(jù)恢復(fù)環(huán)境: 基于EXT2/EXT3/EXT4/Reiserfs/Xfs文件系統(tǒng)的Linux操作系統(tǒng)。 服務(wù)器故障: LINUX操作系統(tǒng)下誤
    的頭像 發(fā)表于 09-15 15:29 ?1881次閱讀

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)-數(shù)據(jù)庫(kù)文件刪除/分區(qū)被格式化的SQL SERVER數(shù)據(jù)恢復(fù)方

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)-數(shù)據(jù)庫(kù)文件刪除/分區(qū)被格式化的SQL SERVER數(shù)據(jù)恢復(fù)方
    的頭像 發(fā)表于 09-21 14:34 ?1719次閱讀

    linux刪除文件的命令

    Linux中,可以使用 rm 命令來(lái)刪除文件。該命令有多個(gè)參數(shù)和選項(xiàng)可供使用,以根據(jù)不同的情況進(jìn)行文件刪除操作。例如: rm 命令后面跟上
    的頭像 發(fā)表于 11-08 14:11 ?3080次閱讀

    linux刪除文件命令rm

    Linux系統(tǒng)中,可以使用rm命令來(lái)刪除文件或目錄。該命令的功能是刪除一個(gè)目錄中的一個(gè)或多個(gè)文件或目錄,也可以將某個(gè)目錄及其下的所有
    的頭像 發(fā)表于 11-13 16:42 ?2131次閱讀

    Oracle數(shù)據(jù)恢復(fù)—Oracle刪除數(shù)據(jù)不用怕!這些數(shù)據(jù)恢復(fù)方法了解一下

    相信有很多oracle數(shù)據(jù)庫(kù)用戶(hù)都遇到過(guò)在操作Oracle數(shù)據(jù)庫(kù)時(shí)誤刪除某些重要數(shù)據(jù)的情況,這個(gè)時(shí)候如果數(shù)據(jù)庫(kù)沒(méi)有備份且數(shù)據(jù)十分重要的,怎么才能恢復(fù)刪除的數(shù)據(jù)呢?北亞企安數(shù)據(jù)恢復(fù)工程
    的頭像 發(fā)表于 07-19 16:40 ?1521次閱讀

    ubuntu刪除文件怎么恢復(fù)

    在Ubuntu系統(tǒng)中,刪除文件可以通過(guò)多種方法進(jìn)行恢復(fù)。本文將詳細(xì)介紹Ubuntu系統(tǒng)中刪除文件
    的頭像 發(fā)表于 08-30 15:10 ?4699次閱讀

    Oracle數(shù)據(jù)恢復(fù)—Oracle數(shù)據(jù)庫(kù)delete刪除的數(shù)據(jù)恢復(fù)方法

    刪除Oracle數(shù)據(jù)庫(kù)數(shù)據(jù)一般有以下2種方式:delete、drop或truncate。下面針對(duì)這2種刪除oracle數(shù)據(jù)庫(kù)數(shù)據(jù)的方式探討一下oracle數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)方法(不考慮全庫(kù)備份和利用歸檔日志)。
    的頭像 發(fā)表于 09-11 11:45 ?1479次閱讀

    使用lsof實(shí)現(xiàn)對(duì)linux文件的誤刪除恢復(fù)練習(xí)

    本文記錄使用lsof實(shí)現(xiàn)對(duì)linux文件的誤刪除恢復(fù)練習(xí)。題目如下: 1.確保當(dāng)前nginx進(jìn)程運(yùn)行中 2.刪除日志
    的頭像 發(fā)表于 11-24 11:14 ?1342次閱讀
    使用lsof實(shí)現(xiàn)對(duì)<b class='flag-5'>linux</b><b class='flag-5'>文件</b>的誤<b class='flag-5'>刪除</b><b class='flag-5'>恢復(fù)</b>練習(xí)
    衡山县| 汕尾市| 宁明县| 英山县| 襄汾县| 安图县| 宜都市| 兰州市| 太和县| 依兰县| 榆中县| 宝清县| 淳化县| 麻城市| 天气| 兰州市| 桐城市| 颍上县| 孝昌县| 平舆县| 南平市| 湘潭县| 仁寿县| 昭觉县| 芮城县| 张掖市| 嵩明县| 岳阳市| 乌鲁木齐市| 东台市| 海淀区| 樟树市| 庄河市| 阆中市| 青龙| 乐亭县| 娱乐| 阳城县| 淳安县| 铜鼓县| 吴江市|