Linux
如何在遠端 ftp 伺服器上壓縮和拆分備份,避免出現空白空間並使用 dd
案例如下:
我們有兩台伺服器,一台只有 FTP 訪問權限的遠端伺服器和一臺本地伺服器 linux,我們必須在其中配置腳本以使用 dd 命令備份所有系統。備份必須保存在遠端伺服器上。
- 為此,我們將遠端伺服器作為本地磁碟安裝在 /mnt/remoteftp
- 為了掛載 ftp 伺服器,我們使用 curlftps: How to mount remote ftp directory host local into linux filesystem
- 對於備份,我們使用了 dd: 如何在整個磁碟上使用 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 輕鬆壓縮的數據。通常你通過用零覆蓋所有內容來做到這一點。
在那之後,結果應該是你所期望的。
就個人而言,我不會在塊設備級別執行備份。我只是使用一個實際知道並使用文件系統的現有備份工具。