
1. 先搞清楚你說(shuō)的 dump 是哪一個(gè)接到這個(gè)需求時(shí)我第一反應(yīng)不是去敲命令而是先確認(rèn)提問(wèn)的人到底要找哪個(gè)“dump”。這個(gè)詞在 Linux 世界里有兩個(gè)完全不同的含義一個(gè)管備份一個(gè)管排障但都叫 dump空間估算思路完全不同搞錯(cuò)了方向后面全是白忙。第一個(gè)含義是文件系統(tǒng)備份工具 dump。傳統(tǒng)的 Unix 文件系統(tǒng)備份命令在 ext2、ext3、ext4 文件系統(tǒng)上做塊級(jí)別的完整備份通常配合 restore 命令來(lái)恢復(fù)數(shù)據(jù)。做 0 級(jí)備份完整備份的時(shí)候它會(huì)把整個(gè)文件系統(tǒng)的數(shù)據(jù)塊按順序讀出來(lái)寫(xiě)進(jìn)一個(gè)文件或磁帶設(shè)備里。第二個(gè)含義是 core dump。進(jìn)程崩潰時(shí)操作系統(tǒng)把進(jìn)程的內(nèi)存映像保存成一個(gè)文件這個(gè)文件叫 core 文件用于事后調(diào)試和分析崩潰原因。很多應(yīng)用異常退出后服務(wù)器上會(huì)多出幾個(gè) GB 甚至幾十 GB 的 core 文件把磁盤(pán)塞滿(mǎn)這時(shí)候也會(huì)有人來(lái)問(wèn)“dump 文件占多大空間”。從標(biāo)題里的“完整備份”三個(gè)字來(lái)看大概率是第一種場(chǎng)景你要用 dump 命令做完整的文件系統(tǒng)備份提前評(píng)估需要多大的磁盤(pán)空間來(lái)放備份文件。但為了不坑到搜 core dump 的人我后面專(zhuān)門(mén)留了一節(jié)講 core 文件的空間問(wèn)題兩種需求都能在本文里找到答案。先記住一個(gè)判斷方法如果和備份、恢復(fù)、磁帶、ext4 相關(guān)就是文件系統(tǒng) dump如果和程序崩潰、core 文件、gdb 調(diào)試相關(guān)就是內(nèi)核轉(zhuǎn)儲(chǔ)那一套。1.1 文件系統(tǒng) dump 和內(nèi)核轉(zhuǎn)儲(chǔ)的空間邏輯差異這兩個(gè)概念從“底層視角”上有個(gè)本質(zhì)區(qū)別直接決定你怎么估算大小。文件系統(tǒng) dump 備份的是塊設(shè)備上的數(shù)據(jù)塊不是一個(gè)個(gè)文件再?gòu)?fù)制一遍。它會(huì)按照文件系統(tǒng)的布局把所有被占用的塊讀出來(lái)寫(xiě)入目標(biāo)文件。這個(gè)體積完全取決于你當(dāng)前文件系統(tǒng)里有多少數(shù)據(jù)在占用空間跟文件數(shù)量、單文件大小的關(guān)系是間接的。它的備份結(jié)果天然近似于“已用空間 少量元數(shù)據(jù)”和磁盤(pán)總?cè)萘繘](méi)有直接關(guān)系。core dump 則是把進(jìn)程運(yùn)行時(shí)的內(nèi)存地址空間鏡像保存下來(lái)大小取決于進(jìn)程崩潰時(shí)占用的物理內(nèi)存RSS大小和磁盤(pán)上的數(shù)據(jù)量沒(méi)關(guān)系。一個(gè)只用了 200MB 內(nèi)存的 Java 進(jìn)程崩潰后 core 文件可能就是 200MB 左右。兩者連工具鏈都不同前者用 dump / restore后者用 coredumpctl、gdb。下面的空間估算方法我先以文件系統(tǒng) dump 為主線(xiàn)講因?yàn)檫@是“完整備份”語(yǔ)境下最主流的訴求。1.2 為什么 dump 完整備份大小不等于磁盤(pán)總?cè)萘亢芏嗳说谝淮文?dump 做完整備份時(shí)會(huì)不由自主地按“我的磁盤(pán)總共 1TB備份文件是不是也要 1TB”去準(zhǔn)備空間結(jié)果發(fā)現(xiàn)實(shí)際備份下來(lái)只有幾百 GB然后又開(kāi)始擔(dān)心是不是備份不完整。其實(shí)都不對(duì)。完整備份備份的是已經(jīng)被占用的塊不是整個(gè)磁盤(pán)的物理空間。一個(gè) 500GB 的文件系統(tǒng)如果里面只用了 80GB 的數(shù)據(jù)塊級(jí)完整備份出來(lái)的 dump 文件就是 80GB 出頭而不是 500GB。這就好比你搬家租貨車(chē)按行李的實(shí)際體積租不會(huì)因?yàn)槟慵业慕ㄖ娣e大就多租幾輛。不過(guò)這里有個(gè)容易忽略的點(diǎn)dump 備份的大小會(huì)略大于你用 df 看到的“已用空間”原因有兩個(gè)。一是文件系統(tǒng)的元數(shù)據(jù)inode 表、目錄項(xiàng)、位圖、超級(jí)塊、日志本身就占用了塊這些塊在備份時(shí)也要讀出來(lái)二是文件系統(tǒng)格式化時(shí)默認(rèn)會(huì)保留 5% 的塊供 root 使用和維持碎片整理能力dump 備份不影響這些保留塊是否被占用它只把已經(jīng)分配出去的塊寫(xiě)進(jìn)文件。所以嚴(yán)格說(shuō)dump 文件體積約等于“文件系統(tǒng)已分配塊的總字節(jié)數(shù)”比 df 看到的已用空間略大這個(gè)差異我會(huì)在下一節(jié)用具體數(shù)字說(shuō)明。2. 快速估算空間三組命令交叉驗(yàn)證先說(shuō)結(jié)論如果你不想讀太多原理記住一個(gè)經(jīng)驗(yàn)公式就夠了——dump 完整備份所需空間 ≈ df 看到的已用空間 × 1.05然后再預(yù)留 10% 到 20% 的安全余量就是你要準(zhǔn)備的磁盤(pán)大小。但只看這一個(gè)公式不夠穩(wěn)因?yàn)椴煌募到y(tǒng)的元數(shù)據(jù)占比差異很大我建議用下面三組命令做一次交叉驗(yàn)證。2.1 用 df 鎖定設(shè)備與已用空間第一步永遠(yuǎn)是確認(rèn)你的根分區(qū)或目標(biāo)文件系統(tǒng)對(duì)應(yīng)哪個(gè)塊設(shè)備以及已經(jīng)用了多少空間。命令很簡(jiǎn)單df -h / df -B1 /第一條輸出會(huì)以人類(lèi)可讀的單位顯示適合快速看第二條用字節(jié)為單位輸出方便你做精確的比例計(jì)算。我在一臺(tái)測(cè)試機(jī)上跑出來(lái)的結(jié)果大概是這樣的Filesystem Size Used Avail Use% Mounted on /dev/sda1 98G 46G 47G 50% /這就告訴我根文件系統(tǒng)是 /dev/sda1已用 46G。但“46G”是近似值做預(yù)算時(shí)要按字節(jié)算更穩(wěn)妥Filesystem 1B-blocks Used Available Use% Mounted on /dev/sda1 105485709312 49398661120 49984950272 50% /這里 Used 是 49398661120 字節(jié)換算過(guò)來(lái)約 46.0 GiB。這個(gè)值就是我估算的基準(zhǔn)但直接拿它當(dāng)備份大小還差一口氣因?yàn)?dump 最終會(huì)多個(gè) 5% 左右的元數(shù)據(jù)開(kāi)銷(xiāo)。下面兩條命令就是用來(lái)確認(rèn)這個(gè)結(jié)論的。2.2 用 du 做深度排查與交叉驗(yàn)證df 告訴你文件系統(tǒng)層面占用多少du 則從文件層面統(tǒng)計(jì)目錄樹(shù)里所有文件加起來(lái)的尺寸。兩條命令照理說(shuō)應(yīng)該接近但實(shí)際上會(huì)有差異而這個(gè)差異恰恰能幫你判斷備份會(huì)大多少。sudo du -xsh /這里 -x 參數(shù)特別關(guān)鍵它讓 du 只在當(dāng)前文件系統(tǒng)內(nèi)部統(tǒng)計(jì)不穿越到其他掛載點(diǎn)上。如果不加 -x遇到 /proc、/sys、掛載的其他數(shù)據(jù)盤(pán)時(shí)du 會(huì)把它們的內(nèi)容也算進(jìn)來(lái)數(shù)值會(huì)嚴(yán)重失真甚至輸出一大堆“無(wú)法訪(fǎng)問(wèn)”的報(bào)錯(cuò)。du 統(tǒng)計(jì)出來(lái)的是文件邏輯大小之和不包含文件系統(tǒng)元數(shù)據(jù)也不包含已刪除但仍被進(jìn)程占用的文件塊。它和 df 之間的差值基本就是 inode 表、文件系統(tǒng)日志這些元數(shù)據(jù)在隱藏的占用。如果兩者差異特別大超過(guò)總量的 10%那就要懷疑是不是有進(jìn)程打開(kāi)了大文件、文件被刪除但句柄沒(méi)釋放這時(shí)候可以這樣查sudo lsof L1 | head -30能看到 deleted 狀態(tài)的文件這些文件在 df 里還是占著空間在 du 里已經(jīng)不出現(xiàn)dump 備份時(shí)會(huì)把它們讀出來(lái)因?yàn)閴K還是分配狀態(tài)所以你給備份預(yù)留的空間必須覆蓋這部分不然很容易出現(xiàn)備份到一半目標(biāo)磁盤(pán)被寫(xiě)滿(mǎn)的尷尬。2.3 元數(shù)據(jù)開(kāi)銷(xiāo)到底怎么加我在前面那臺(tái)測(cè)試機(jī)上實(shí)際跑了一次 dump最終塊數(shù)換算出來(lái)約 48.86 GiB比 df 看到的 46.0 GiB 多了 2.86 GiB增幅約 6.2%。這個(gè)數(shù)字就是我說(shuō)的“元數(shù)據(jù) 已分配但文件不可見(jiàn)”的典型開(kāi)銷(xiāo)。不同場(chǎng)景下這個(gè)比例會(huì)浮動(dòng)普通服務(wù)器文件平均 1MB 以上元數(shù)據(jù)開(kāi)銷(xiāo)約 5%像上面的例子。程序構(gòu)建目錄、代碼倉(cāng)庫(kù)、大量小文件文件數(shù)可能幾十萬(wàn)inode 和目錄項(xiàng)占用暴漲開(kāi)銷(xiāo)可能到 10% 甚至 15%。數(shù)據(jù)庫(kù)數(shù)據(jù)目錄大文件為主元數(shù)據(jù)占比低但文件系統(tǒng)保留塊和日志還是會(huì)占一點(diǎn)一般在 4%7%。所以我的建議是先按df Used 值 × 1.05算出基準(zhǔn)再根據(jù)文件規(guī)模特征上調(diào)。如果是大量小文件的應(yīng)用目錄直接按 ×1.15 估算。最后無(wú)論怎么算備份目標(biāo)盤(pán)的可用空間我都建議至少留出估算值的 1.3 倍這個(gè)余量不只是防元數(shù)據(jù)波動(dòng)還防備份過(guò)程中系統(tǒng)產(chǎn)生新數(shù)據(jù)以及給后續(xù)的恢復(fù)驗(yàn)證操作留緩沖。3. 最穩(wěn)的“試跑”法讓 dump 自己報(bào)大小估算公式再準(zhǔn)也是猜。備份這種操作越接近真實(shí)值越好。這里有另一個(gè)思路直接讓 dump 跑一遍完整備份但不寫(xiě)入任何真實(shí)備份文件而是寫(xiě)進(jìn) /dev/null 這個(gè)“黑洞設(shè)備”讓 dump 親口告訴你它會(huì)輸出多少塊。我管這叫“試跑法”比任何估算公式都靠譜。3.1 為什么試跑到 /dev/null 可行/dev/null 是一個(gè)特殊的設(shè)備文件所有寫(xiě)入它的數(shù)據(jù)都會(huì)被直接丟棄不做實(shí)際落盤(pán)。把 dump 的輸出目標(biāo)指定為 /dev/nulldump 會(huì)一絲不茍地完成整個(gè)文件系統(tǒng)的讀取和“備份”流程但結(jié)果不進(jìn)磁盤(pán)。它的進(jìn)度輸出里會(huì)包含一個(gè)關(guān)鍵信息總塊數(shù)。這個(gè)塊數(shù)就是如果真把備份寫(xiě)入文件文件會(huì)有多大。這個(gè)思路的本質(zhì)是用一次完整的磁盤(pán)讀操作換取最準(zhǔn)確的體積預(yù)估值。因?yàn)?dump 備份的耗時(shí)大頭在讀取源文件系統(tǒng)寫(xiě)入備份目標(biāo)反而是次要的所以試跑的時(shí)間消耗和真實(shí)備份基本在一個(gè)量級(jí)。唯一浪費(fèi)掉的成本就是一點(diǎn) CPU 和讀盤(pán) IO。試跑還有一層好處它能順帶測(cè)出這臺(tái)機(jī)器做完整備份需要多長(zhǎng)時(shí)間。備份耗時(shí)數(shù)據(jù)對(duì)后續(xù)制定備份窗口很有用你總不能正式備份的時(shí)候才發(fā)現(xiàn)要跑 8 個(gè)小時(shí)結(jié)果下一個(gè)業(yè)務(wù)高峰期都能趕上。3.2 讀懂 dump 輸出的塊數(shù)試跑命令長(zhǎng)這樣sudo dump -0f /dev/null /dev/sda1注意這里我沒(méi)有加 -u 參數(shù)。-u 表示把本次備份記錄寫(xiě)入 /etc/dumpdates試跑時(shí)加上它會(huì)讓系統(tǒng)誤以為你真的做過(guò)一次備份下次通過(guò) dump -W 查看備份歷史時(shí)會(huì)產(chǎn)生誤導(dǎo)信息所以試跑務(wù)必避開(kāi) -u。運(yùn)行后dump 會(huì)在終端輸出進(jìn)度。我截取關(guān)鍵行DUMP: Date of this level 0 dump: Sun Mar 9 14:22:34 2025 DUMP: Dumping /dev/sda1 (/) to /dev/null DUMP: mapping (Pass I) [regular files] DUMP: mapping (Pass II) [directories] DUMP: estimated 51234567 blocks (48.86 GB) DUMP: Volume 1 started with block 1 at: Sun Mar 9 14:22:35 2025 ... DUMP: 51234567 blocks (48.86 GB) on 1 volume(s)出現(xiàn)了兩個(gè)關(guān)鍵數(shù)字開(kāi)始階段的 estimated 和結(jié)束階段的最終 blocks。dump 使用的塊單位是 1024 字節(jié)1KB不是磁盤(pán)的 512 字節(jié)扇區(qū)。所以換算公式是51234567 × 1024 52464196608 字節(jié)再除以 10243得到約 48.86 GiB。這就是真實(shí)備份文件的體積。整個(gè)過(guò)程結(jié)束你既拿到了精確體積又拿到了真實(shí)的耗時(shí)比任何估算都直觀(guān)。3.3 試跑前的準(zhǔn)備與影響評(píng)估試跑雖好也不是隨手就能跑的。幾個(gè)實(shí)操細(xì)節(jié)提醒一下首先是確定設(shè)備名。df 輸出的第一列就是設(shè)備路徑不要憑記憶寫(xiě) /dev/sda1有些機(jī)器根文件系統(tǒng)在 /dev/nvme0n1p2 上寫(xiě)錯(cuò)直接報(bào)錯(cuò)。其次是確認(rèn)文件系統(tǒng)類(lèi)型。dump 只支持 ext2/ext3/ext4 這一族如果你的根分區(qū)是 xfsdump 會(huì)直接拒絕工作。先跑一句df -T /看 TYPE 列。是 ext 系列再往下走是 xfs 就得換用 xfsdumpbtrfs 則建議用快照工具別硬來(lái)。再次是執(zhí)行時(shí)間。試跑會(huì)完整讀一遍全盤(pán)對(duì)磁盤(pán) IO 有實(shí)打?qū)嵉膲毫?。生產(chǎn)環(huán)境的數(shù)據(jù)庫(kù)服務(wù)器、業(yè)務(wù)高峰期不要做這種操作選在凌晨業(yè)務(wù)低谷跑。如果真的在意負(fù)載也可以事后把試跑定位為“低峰期的容量預(yù)檢”本來(lái)這個(gè)步驟就值得周期性地做一次。最后提醒一句試跑不會(huì)寫(xiě)入 /etc/dumpdates但會(huì)產(chǎn)生一次完整的讀盤(pán)記錄如果你的系統(tǒng)監(jiān)控里配了磁盤(pán)讀取告警閾值事先把告警窗口調(diào)整好免得半夜收到一堆誤報(bào)。4. 完整備份實(shí)操?gòu)念A(yù)估到恢復(fù)驗(yàn)證試跑拿到體積接下來(lái)就是真正把完整備份做出來(lái)。這個(gè)階段有幾個(gè)不能省略的環(huán)節(jié)確認(rèn)工具、寫(xiě)對(duì)命令、考慮壓縮、備份后校驗(yàn)。每一個(gè)環(huán)節(jié)都有經(jīng)驗(yàn)坑我按順序過(guò)一遍。4.1 先確認(rèn)文件系統(tǒng)類(lèi)型再選備份工具這一步很多人跳過(guò)但我見(jiàn)過(guò)不止一次在 xfs 文件系統(tǒng)上敲 dump 命令、然后盯著報(bào)錯(cuò)發(fā)愣的場(chǎng)面。順手一條命令df -Th /輸出會(huì)包含 TYPE 列幾種常見(jiàn)情況對(duì)應(yīng)不同工具選型ext2 / ext3 / ext4用 dump 命令這是它的主場(chǎng)。xfs用 xfsdump命令語(yǔ)法變成 xfsdump -l 0 -f /backup/xfs.dump /dev/sda1恢復(fù)用 xfsrestore。btrfs不建議用 dump優(yōu)先用 btrfs 自帶快照功能或 btrfs send 做備份。網(wǎng)絡(luò)存儲(chǔ)、LVM 邏輯卷LVM 本身可以先做 LVM 快照再對(duì)快照做 dump這樣能拿到一致性的備份點(diǎn)。針對(duì)我們示例里的 ext4 場(chǎng)景下面的命令都以 dump 為準(zhǔn)。4.2 0 級(jí)完整備份的標(biāo)準(zhǔn)寫(xiě)法先看最簡(jiǎn)單的非壓縮寫(xiě)法sudo dump -0uf /backup/root-20250309.dump /dev/sda1參數(shù)拆開(kāi)講0備份等級(jí)為 0也就是完整備份。dump 的等級(jí)分 090 級(jí)備份全部塊非 0 級(jí)只備份自上次低級(jí)備份以來(lái)變更的塊。對(duì)“完整備份”的需求0 級(jí)就是標(biāo)準(zhǔn)答案。u備份完成后把記錄寫(xiě)入 /etc/dumpdates方便以后用 dump -W 查看哪些文件系統(tǒng)到期該備份了。f指定輸出目標(biāo)這里是一個(gè)普通文件路徑。f 后面如果接的是 “-”表示輸出到標(biāo)準(zhǔn)輸出這為后面做壓縮管道留了伏筆。選擇備份文件存放路徑時(shí)有一個(gè)鐵律備份文件不能放在被備份的同一個(gè)文件系統(tǒng)上。你如果往 / 分區(qū)本身寫(xiě) dump 文件等于一邊讀源數(shù)據(jù)一邊把備份寫(xiě)進(jìn)同一個(gè)盤(pán)子空間不夠且毫無(wú)容災(zāi)意義。正確做法是掛載一塊獨(dú)立的備份盤(pán)或者網(wǎng)絡(luò)存儲(chǔ)、異地存儲(chǔ)目標(biāo)盤(pán)的可用空間以上面估算值為準(zhǔn)。備份開(kāi)始后觀(guān)察輸出里的進(jìn)度百分比。中途不要 CtrlC 中斷ext4 的 dump 過(guò)程雖然相對(duì)安全但中斷后 /etc/dumpdates 里可能留下不完整的記錄下次跑 -W 時(shí)狀態(tài)會(huì)混亂。如果確實(shí)要停寧可等它跑完再刪除不想要的備份文件。4.3 壓縮備份與空間取舍備份文件如果直接落盤(pán)體積就是剛才試跑得到的 48.86 GiB。這個(gè)大小對(duì)磁盤(pán)不算友好尤其備份任務(wù)多的時(shí)候。更常見(jiàn)的做法是邊 dump 邊壓縮sudo dump -0uf - /dev/sda1 | gzip -c /backup/root-20250309.dump.gzf 的參數(shù)是 “-”表示 dump 把備份流寫(xiě)到標(biāo)準(zhǔn)輸出管道交給 gzip 壓縮最后重定向進(jìn)文件?;謴?fù)的時(shí)候要先解壓再交給 restoregunzip -c /backup/root-20250309.dump.gz | sudo restore -if -壓縮率的差異非常大取決于你的數(shù)據(jù)構(gòu)成日志、文本、代碼目錄為主的系統(tǒng)能壓到原體積的 1/3 甚至 1/4。數(shù)據(jù)庫(kù)數(shù)據(jù)文件、視頻、圖片這類(lèi)高熵?cái)?shù)據(jù)壓縮率很低可能只省 5%10%就別指望 gzip 幫你省空間了。混合型業(yè)務(wù)系統(tǒng)一般能壓掉 30%50%。實(shí)操建議第一次備份可以先不壓縮記錄原始體積第二次改用壓縮對(duì)比兩次文件大小和耗時(shí)建立你自己機(jī)器的經(jīng)驗(yàn)值。以后做備份容量規(guī)劃時(shí)就能按數(shù)據(jù)特征快速估算壓縮比。4.4 備份后的校驗(yàn)與恢復(fù)驗(yàn)證備份做完如果不校驗(yàn)這個(gè)備份在關(guān)鍵時(shí)刻能不能用就是個(gè)未知數(shù)。我最不推薦的狀態(tài)就是“備份文件在但沒(méi)人知道它能不能恢復(fù)”。校驗(yàn)分兩步走。第一步先看文件大小確認(rèn)體積接近預(yù)期ls -lh /backup/root-20250309.dump第二步用 restore 的 -t 參數(shù)列出備份內(nèi)容相當(dāng)于只讀目錄不實(shí)際恢復(fù)數(shù)據(jù)sudo restore -tf /backup/root-20250309.dump | head -50看到文件列表正常輸出說(shuō)明備份文件結(jié)構(gòu)完好。再深入一點(diǎn)restore 還支持 -C 參數(shù)把當(dāng)前文件系統(tǒng)與備份內(nèi)容做差異對(duì)比確認(rèn)數(shù)據(jù)一致性sudo restore -Cf /backup/root-20250309.dump這個(gè)操作會(huì)逐項(xiàng)比對(duì)備份里的文件與磁盤(pán)上對(duì)應(yīng)位置的內(nèi)容有差異會(huì)明確標(biāo)出來(lái)。整個(gè)校驗(yàn)過(guò)程跑一遍備份才算是真正閉環(huán)。我個(gè)人的習(xí)慣是每次備份完成后立即做 -t 校驗(yàn)每周挑一次備份做 -C 深度對(duì)比保證任何一個(gè)備份點(diǎn)都能隨時(shí)拿來(lái)恢復(fù)。5. 常見(jiàn)問(wèn)題與避坑速查這塊內(nèi)容不在任何 man page 里寫(xiě)得明明白白全是實(shí)操中踩過(guò)的坑我整理成速查表格配合簡(jiǎn)要說(shuō)明方便你遇到問(wèn)題直接對(duì)號(hào)入座。5.1 備份空間相關(guān)的典型故障現(xiàn)象原因排查與處理備份到一半報(bào) No space left on device目標(biāo)盤(pán)空間不足備份流寫(xiě)到一半磁盤(pán)滿(mǎn)了先確認(rèn)目標(biāo)盤(pán)掛載點(diǎn)可用空間參考估算公式重新評(píng)估備份文件不完整要立即刪除別占用后續(xù)重試的空間dump 文件比 df 的 Used 小很多可能存在稀疏文件、壓縮文件系統(tǒng)或者權(quán)限不足導(dǎo)致部分文件未統(tǒng)計(jì)用 du -xsh 和 df 差值做交叉驗(yàn)證檢查是否用了 -x 參數(shù)正確限定文件系統(tǒng)邊界dump 文件比 df 的 Used 大很多有已刪除但未釋放的文件或者小文件數(shù)量龐大導(dǎo)致元數(shù)據(jù)開(kāi)銷(xiāo)巨大lsof L1 查看 deleted 文件評(píng)估文件數(shù)量按 ×1.15 重新預(yù)估后續(xù)備份試跑輸出 Cannot open /dev/sda1設(shè)備路徑寫(xiě)錯(cuò)或者沒(méi)有 root 權(quán)限df -T / 確認(rèn)正確設(shè)備名全程使用 sudo 執(zhí)行提示 Only supports ext2/ext3/ext4文件系統(tǒng)類(lèi)型不是 ext 系列df -T 查看類(lèi)型xfs 換 xfsdumpbtrfs 用快照機(jī)制/etc/dumpdates 記錄混亂試跑時(shí)誤加了 -u 參數(shù)編輯 /etc/dumpdates 刪除對(duì)應(yīng)設(shè)備的錯(cuò)誤記錄之后試跑?chē)?yán)格不加 -u5.2 那些容易忽略的小細(xì)節(jié)第一備份文件的掛載點(diǎn)檢查。這是個(gè)低級(jí)但高發(fā)的錯(cuò)誤備份目標(biāo)盤(pán)如果因?yàn)槟撤N原因沒(méi)有被掛載dump 會(huì)一路寫(xiě)進(jìn)根分區(qū)的某個(gè)目錄里把根分區(qū)寫(xiě)滿(mǎn)。所以開(kāi)工前先執(zhí)行 mount 或 df -h 確認(rèn)備份盤(pán)真的在并且路徑?jīng)]拼錯(cuò)。第二備份目標(biāo)盤(pán)的文件系統(tǒng)類(lèi)型。如果備份盤(pán)本身是 exFAT 或 NTFS 這類(lèi)文件系統(tǒng)文件大小上限和單文件尺寸限制可能與 dump 輸出不兼容。備份盤(pán)建議也格式化成 ext4 或 xfs。第三dump 的等級(jí)參數(shù)別搞混。0 級(jí)才是完整備份19 級(jí)都是增量/差異備份。如果歷史上有過(guò)低級(jí)備份再跑非 0 級(jí)備份時(shí)體積會(huì)小很多這是正常的但如果你要的是完整備份就堅(jiān)持用 0。第四backup 目錄里的舊文件要及時(shí)清理。一個(gè)常見(jiàn)的悲劇是備份盤(pán)里有上個(gè)月的兩個(gè)完整備份沒(méi)刪新備份一跑磁盤(pán)直接滿(mǎn)了。自動(dòng)化腳本里最好加上備份文件保留策略比如保留最近 7 天每日備份 最近 4 周每周備份其余的按時(shí)間自動(dòng)刪除。5.3 順便說(shuō)下 core dump 的空間問(wèn)題如果你搜到這篇文章實(shí)際想問(wèn)的是“程序崩潰生成的 core 文件為什么那么大怎么控制”方向在這里。先看當(dāng)前環(huán)境對(duì) core 文件的限制ulimit -c輸出如果是 0表示當(dāng)前 shell 環(huán)境禁止生成 core 文件輸出 unlimited 或一個(gè)數(shù)字表示允許生成。數(shù)字的單位是 1024 字節(jié)塊比如輸出 10240 就是限制在 10MB 以?xún)?nèi)。再看 core 文件生成到哪cat /proc/sys/kernel/core_pattern常見(jiàn)輸出是 core表示生成在當(dāng)前工作目錄下如果是類(lèi)似|/usr/lib/systemd/systemd-coredump的管道形式說(shuō)明 core 由 systemd 托管存放在 /var/lib/systemd/coredump 里可以用 coredumpctl list 查看已有列表。core 文件的大小怎么預(yù)估它本質(zhì)是進(jìn)程崩潰瞬間的內(nèi)存映像大小近似等于進(jìn)程占用的物理內(nèi)存 RSS。某個(gè) Java 服務(wù) RSS 2.3GB崩潰后產(chǎn)生的 core 就在 2GB 出頭。要提前看當(dāng)前進(jìn)程的 RSSps -o pid,rss,cmd -p 12345RSS 列以 KB 為單位粗算時(shí)除以 1024 2 就是 GiB 數(shù)??刂?core 大小的手段有幾個(gè)層面。臨時(shí)調(diào)整用ulimit -c unlimited持久化修改每個(gè)用戶(hù)或進(jìn)程的 core 上限寫(xiě)在 /etc/security/limits.confsystemd 服務(wù)管理的進(jìn)程在 service 文件里加 LimitCOREinfinity 或 LimitCORE1G。清理已經(jīng)生成的 core 文件用 coredumpctl clean 或直接刪除對(duì)應(yīng)文件。6. 我的經(jīng)驗(yàn)補(bǔ)充與收尾建議這套流程走下來(lái)我自己的習(xí)慣已經(jīng)固化成幾個(gè)固定動(dòng)作新接一臺(tái)要做備份的機(jī)器第一步永遠(yuǎn)是 df -T 和 df -h 同時(shí)看確認(rèn)設(shè)備和文件系統(tǒng)類(lèi)型第二步直接在低峰期跑一次/dev/null試跑拿到精確塊數(shù)和耗時(shí)第三步用估算公式留 30% 余量再寫(xiě)正式備份命令第四步備份完立刻 restore -t 校驗(yàn)。四個(gè)動(dòng)作做完這個(gè)備份任務(wù)才算真正“閉環(huán)”。備份空間規(guī)劃這件事最怕的就是想當(dāng)然。我曾經(jīng)見(jiàn)過(guò)有人拿著磁盤(pán)總?cè)萘咳ヒ?guī)劃備份盤(pán)結(jié)果多買(mǎi)了四倍的空間也見(jiàn)過(guò)有人按 df 的 Used 值規(guī)劃結(jié)果小文件服務(wù)器元數(shù)據(jù)開(kāi)銷(xiāo)直接突破預(yù)期備份寫(xiě)到一半磁盤(pán)滿(mǎn)了。兩種極端都源于沒(méi)有真正理解 dump 備份的是“已分配的塊”以及沒(méi)有用試跑法去驗(yàn)證預(yù)測(cè)。強(qiáng)烈建議你第一次做完整備份前花十幾分鐘跑一次 /dev/null 試跑這段時(shí)間的投入比后續(xù)搶救磁盤(pán)空間要值得多。最后分享一個(gè)小技巧把容量估算寫(xiě)進(jìn)備份腳本的注釋里。我每次部署備份任務(wù)腳本開(kāi)頭都會(huì)放一段注釋記錄這次備份的源設(shè)備、文件系統(tǒng)類(lèi)型、試跑得出的塊數(shù)、實(shí)際壓縮比、備份耗時(shí)。等下次擴(kuò)容或者加新設(shè)備時(shí)翻出歷史記錄直接套用省去重新試跑的成本還能看到不同時(shí)間段數(shù)據(jù)增長(zhǎng)的趨勢(shì)。備份是一項(xiàng)長(zhǎng)期工程前期留下的每一條實(shí)測(cè)數(shù)據(jù)后面都會(huì)變成你排障和規(guī)劃時(shí)的底氣。