Linux

如何在遠端 ftp 伺服器上壓縮和拆分備份,避免出現空白空間並使用 dd

  • November 20, 2019

案例如下:

我們有兩台伺服器,一台只有 FTP 訪問權限的遠端伺服器和一臺本地伺服器 linux,我們必須在其中配置腳本以使用 dd 命令備份所有系統。備份必須保存在遠端伺服器上。

這是我的腳本

CT=$(fdisk -l | awk '$1 == "/dev/sda1" { print $3 }') dd if=/dev/sda1 bs=512 count=$CT | gzip | /mnt/remoteftp/PATH/sda_$(uname -r).img.gz

腳本有效,但我有一個問題,因為腳本應該避免空白,但實際上結果不同

root@linuxserver:~/# df -h
Filesystem                           Size  Used Avail Use% Mounted on
udev                                 961M     0  961M   0% /dev
tmpfs                                195M  3,1M  192M   2% /run
/dev/sda1                             20G  2,1G   18G  11% /
tmpfs                                973M     0  973M   0% /dev/shm
tmpfs                                5,0M     0  5,0M   0% /run/lock
tmpfs                                973M     0  973M   0% /sys/fs/cgroup
/dev/sda15                           105M  3,6M  101M   4% /boot/efi
tmpfs                                195M     0  195M   0% /run/user/1001
curlftpfs#ftp://ftp.remotesrv.com/   954G     0  954G   0% /mnt/remoteftp

/dev/sda1 磁碟只分配了 2.1GB,所以當我的腳本完成時我期待 3 個文件:

一個文件大小為 1GB,另一個文件大小為 1GB,最後一個文件大小為 100MB。

相反,我有

root@linuxserver:~/batch# ls -lah /mnt/remoteftp/
total 17G
drwxr-xr-x 2 ubuntu ubuntu  4,0K nov 20  2019 .
drwxr-xr-x 7 ubuntu ubuntu  4,0K nov 20 12:02 ..
-rwxr-xr-x 0 ubuntu ubuntu   13G nov 20  2019 .fuse_hidden0000007900000001
-rwxr-xr-x 1 ubuntu ubuntu 1000M nov 20  2019 sda_4.15.0-70-generic.img.gzaa
-rwxr-xr-x 1 ubuntu ubuntu 1000M nov 20  2019 sda_4.15.0-70-generic.img.gzab
-rwxr-xr-x 1 ubuntu ubuntu 1000M nov 20  2019 sda_4.15.0-70-generic.img.gzac
-rwxr-xr-x 1 ubuntu ubuntu 1000M nov 20  2019 sda_4.15.0-70-generic.img.gzad
-rwxr-xr-x 1 ubuntu ubuntu  326M nov 20  2019 sda_4.15.0-70-generic.img.gzae
root@linuxserver:~/batch# ls -lah /mnt/remoteftp/
total 17G
drwxr-xr-x 2 ubuntu ubuntu  4,0K nov 20  2019 .
drwxr-xr-x 7 ubuntu ubuntu  4,0K nov 20 12:02 ..
-rwxr-xr-x 0 ubuntu ubuntu   13G nov 20  2019 .fuse_hidden0000007900000001
-rwxr-xr-x 1 ubuntu ubuntu 1000M nov 20  2019 sda_4.15.0-70-generic.img.gzaa
-rwxr-xr-x 1 ubuntu ubuntu 1000M nov 20  2019 sda_4.15.0-70-generic.img.gzab
-rwxr-xr-x 1 ubuntu ubuntu 1000M nov 20  2019 sda_4.15.0-70-generic.img.gzac
-rwxr-xr-x 1 ubuntu ubuntu 1000M nov 20  2019 sda_4.15.0-70-generic.img.gzad
-rwxr-xr-x 1 ubuntu ubuntu  374M nov 20  2019 sda_4.15.0-70-generic.img.gzae
root@linuxserver:~/batch# 

為什麼會有這種行為?

當您使用時,dd您正在塊級別上複製數據。分區對文件系統或其上的內容一無所知。

如果你在伺服器上複製一個 10GB 的文件,然後馬上刪除它,你只會刪除文件系統中對它的引用。數據本身仍然存在。因此,當您隨後使用 複製分區時dd,您也將複製此“ghost”文件。

要獲得您期望的結果,您實際上需要通過用其他數據覆蓋磁碟上的所有未使用空間來擦除它,最好是可以通過 gzip 輕鬆壓縮的數據。通常你通過用零覆蓋所有內容來做到這一點。

在那之後,結果應該是你所期望的。


就個人而言,我不會在塊設備級別執行備份。我只是使用一個實際知道並使用文件系統的現有備份工具。

引用自:https://serverfault.com/questions/992592