未分類

如何透過 ftp 自動遠端備份?

在 Linux 中,一般備份的話,可以備份到第二顆硬碟,就是一台機器的第二顆硬碟,或者透過NFS、SMB/CIFS(網路芳鄰) mount 到其他機器的硬碟,再把資料定期丟進去備份,這個也是我比較常用的。

好,接下來要介紹如何透過 ftp 自動把備份資料丟過去,一開始我來執行一下正常手動的方式:

[root@localhost ~]# ftp -n
ftp> open 192.168.1.10
Connected to 192.168.1.10.
220 Serv-U FTP Server v6.3 for WinSock ready…
500 ‘AUTH’: command not understood.
500 ‘AUTH’: command not understood.
KERBEROS_V4 rejected as an authentication type
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> user
(username) smallken
331 User name okay, need password.
Password:
230 User logged in, proceed.
ftp> binary
200 Type set to I.
ftp> put backup.tar.gz
local: backup.tar.gz remote: backup.tar.gz
227 Entering Passive Mode (195,168,1,10,13,56)
150 Opening BINARY mode data connection for backup.tar.gz.
226 Transfer complete.
22873 bytes sent in 0.02 seconds (1.1e+03 Kbytes/s)
ftp> by
221 Goodbye!

ok,藍色部分是指令,這樣是手動把 backup.tar.gz 這個備份檔透過 ftp 丟到遠端,那我們怎麼自動來執行這些指令呢?

# vi backup.sh

echo “open 192.168.1.10
user smallken 替換成密碼
binary
rename backup.3.tar.gz backup.4.tar.gz
rename backup.2.tar.gz backup.3.tar.gz
rename backup.1.tar.gz backup.2.tar.gz
rename backup.tar.gz backup.1.tar.gz
put backup.tar.gz
bye” | ftp -n

我們用 echo 指令把 ftp -n 指令該有的 input,一個接著一個丟給它,中間 binary 是使用二進制傳檔,這樣傳檔非ASCII的文字檔才會失誤,再來我們利用 rename 來保留之前的備份檔最多保存到第5份,也就是 backup.4.tar.gz,第5份之後就自動消失了。

那這裡有幾點要注意,這個 script 檔 backup.sh 權限要留意,不可以讓其他使用者看到,因為裡面含有ftp的帳號/密碼
# chown root.root backup.sh
# chmod 700 backup.sh

我印象中好像有幾套 Windows 中比較陽春的 ftp server 不支援這樣的方式喔,但是我測試過 linux 中的 vsftpd 跟 Windows 中的 Serv-U 都可以,其他大家還要再測試看看。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *