一般來說,系統與資料備份是防範資料遺失最好的方法,無論儲存體是否有做磁碟陣列的RAID 方法(RAID,https://en.wikipedia.org/wiki/RAID,https://en.wikipedia.org/wiki/Standard_RAID_levels)。而備份的儲存地點,又可分為近端(或本地端)與遠端(異地端),近端可能備份於同一個機器內,如 /dev/sda1 掛載到 /media/sda1 的資料,備份到 /dev/sdb1 掛載的 /media/sdb1,為不同硬碟間的備份。或是同一個機房間的,但同儲存環境間的備份,如備份到同電腦主機外接的 Thuderbolt、USB、光纖儲存裝置、或是同機房內的 NAS。遠端則透過網路、網際網路,可以備分到其他機房,不同區域或國家的方法。備份的複製方法,可分為鏡像備份、增量備份、差異備份,可依需求、備份總量與時間來做複製策略的調整。通常備份最方便的方法為利用指令 cp ,假設您已插上USB外接硬碟,其掛載為 /media/sdc1 ,且可讓一般使用者備份,則可使用指令如以下:
@cp
$cp -ru ~/bin /media/sdc1/backup/
/* 將您放在~/bin 資料夾下,自己寫的執行檔,連同 ~/bin 資料夾,備份到 /media/sdc1/backup/ 資料夾下,則會在 /media/sdc1/backup 產生一個資料夾名為 bin, 若路徑無 backup 資料夾,可先用 mkdir /media/sdc1/backup。參數 -r (recursive) 為複製資料夾與以下所有子資料夾與子檔案,參數 -u (update)為若目的位置內已經有相同檔名的檔案,若來源的檔案較新,則使用覆蓋原本檔案,否則便不需複製。 */
CentOS 7.X若不想一直詢問已經存在之檔案,則使用以下,使用參數v顯示複製狀態
$cp -runv ~/bin /media/sdc1/backup/
$ cp -rudpv /etc /home/backup/ | tee ~/backup.log
/* 記得要備分 /etc 或 /var 等 root 權限擁有者的資料夾,請先 su - 轉為 root。參數 -r 為複製資料夾,參數 -d ,為複製後依然保持為連結,而非連結的檔案或資料夾。參數 -p ,為所複製的檔案與資料夾,要維持相同的擁有者與擁有群組,並且讀取、執行與寫入權限皆不變,若無加此參數,則複製後的檔案或資料夾,會同於下指令的帳號與其所屬群組。 如用 root 複製後,目的檔案與資料夾的擁有者就變為 root 。 -v 為列出所有複製的過程,筆者再利用指令 tee,除螢幕輸出外,多存一份到 ~/backup.log 檔 */
如要用 tee 備份過程的錯誤訊息(standerr),可利用以下
$ cp -rudp /etc /home/backup/ |& tee ~/backup.log
或
$ cp -rudp /etc/home/backup/ 2>&1 | ~/backup.log
讀者或也可使用 tar 來壓縮並備份至 /home/backup,如圖3-104,因參數 -v 會逐一列出複製狀況,筆者為了截圖,先不使用:
$ tar jcf /home/backup/etc.tar.bz2 /etc
若要用較佳的壓縮率格式 xz 來壓縮,則可以使用以下指令
$ tar Jcf /home/backup/etc.tar.xz /etc # 參數給為大寫 J
解開 xz 格式則參數換成以下( c 意指compress壓縮,x意指 extract 解壓縮,在 tar 下各種壓縮格式皆同 )
$ tar Jxf /home/backup/etc.tar.xz
(圖3-104)
除 tar 可壓縮之外,亦有些跟Windows交換檔案的使用者,習慣使用 rar 壓縮,故我們需先去rarlab( http://www.rarlab.com/download.htm )下載 ,解開後利用 make 跟 make install,就可以使用 unrar 與 rar 指令。或可利用 yum 方式安裝 rpmfusion 的 Free and Nonfree Repositories(其中一包含有 exfat 與其他有用工具套件),如下(https://rpmfusion.org/Configuration,參章之參亦有介紹 rpmfusion repository的安裝方式):
$ yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-6.noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-6.noarch.rpm
$ yum install unrar
如此一來,就可以使用 unrar 來解 .rar 壓縮檔,或使用 rar 來壓縮成 .rar檔案了。
@rsync
除此之外,亦可以利用指令 rsync 來完整的複製:
$ rsync -av /etc/ /home/backup/
/* 參數 -a 代表 archive,-v 代表 verbose,備份方式為新增至 /home/backup,故為增量備份。 */
$ rynsc -av --delete /etc /home/backup/
/* 加上參數 --delete 後,則來源若有檔案被移除,則目的資料夾亦移除一樣的檔案,此為鏡像備份。 */
rsync 亦有遠端備份的功能,但筆者通常會先利用 mount 掛載遠端的機器磁碟,如 NFS 或SAMBA 網路磁碟,掛載後,再從此電腦主機下 cp 或是 rsync 來備份,備份後再 umount 該網路磁碟,或是可利用 autofs (https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/s2-nfs-config-autofs.html) 令其自動掛載與卸載。其他詳細參數,有興趣的讀者可 man rsync,如 sync 亦可利用參數 -e ssh 來進行 ssh 的加密式連線複製,但自動化時,還是需要再設定檔預先輸入 ssh 密碼,筆者認為這是很不好的作法,故須先配合 ssh 金鑰對認證的無須輸入密碼之登入方式,這筆者要會於下篇介紹。
@ dd
除此之外,若要備份整個硬碟資料變成映象檔,則使用指令 dd :
$ dd if=/dev/sda1 | bzip2 > /home/mysda1.img.bz2
/* 備份 /dev/sda1 分割 ,並利用 bzip2 壓縮成 mysda1.img.bz2 檔(亦可使用 gzip 壓縮),存在 /home 下,通常 /sda1 掛載的是 /root,回復則為 bunzip2 mysda1.img.bz2 | dd of=/dev/sda1 ,of= 後方所接的磁碟內容,皆會被 if= 的磁碟內容所覆蓋 ,如圖3-105*/
$ dd if=/dev/sda of=/dev/sdb conv=noerror, sync status=progress
/* conv=noerror 代表愈錯誤依然繼續讀取,sync 代表 synchronized I/O ,同步的輸出輸入備份方式,此方式通常用於兩顆硬碟對拷,status 參數可顯示進度,對於較長時間的複製很實用。 */
或
$ dd if=/dev/sda1 of=/dev/sdb1 bs=4096 conv=noerror, sync status=progress
/* 利用每次讀寫 4096 Bytes 磁區來映射複製,/dev/sda1 磁碟分割至 /dev/sdb1 磁碟分割, /dev/sdb1 需大於或等於 /dev/sda1 之磁碟容量。 status 參數可顯示進度,對於較長時間的複製很實用。 */
若要僅備份開機啟動磁區,可利用以下:
$ dd if=/dev/sda of=/home/mymbr.img bs=512 count=1
/* 備份磁碟分割第一塊 512 Bytes 之區域。 如圖3-105 */
(圖3-105)
除此之外,用dd 也可以搞破壞,拿來當低階格式化工具,指令如下:
$ dd if=/dev/zero of=/dev/sdb conv=sync
/* 將每個小磁區塊,都寫入0 */
@ cpio
倘若要將資料備份到光碟機或磁帶機,可以使用指令 cpio,如下:
$ find ~/mydata | cpio -ov > /dev/sr0
/* 利用 find 指令定義備份資料夾為家目錄下的 mydata 資料夾的資料,在利用 cpio 備份輸出至 /dev/sr0 ,參數 o 為複製資料出去光碟機,參數 v 為列出詳細資料。 */
find指令的用法也可結合參數 -exec,若要先刪除.tmp副檔名檔案,如下,若要僅搜尋資料夾,則-type c 改為 -type d,不分大小寫則把 -name 改為 -iname
$ find / -type f -name ".tmp" -exec rm -f {} \;
or
$ find / -name ".tmp" -print0 | xargs -0 rm
(https://unix.stackexchange.com/questions/167823/find-exec-rm-vs-delete)
要將 /dev/sr0 資料複製出來的方式如下
$ cd ~/mydata && cpio -div < /dev/sr0
/* 參數 d 為創立新資料夾,參數 i 為複製光碟機資料進來,參數 v 為列出詳細資料。 */
遠端備份的方式,可以利用前面說過的先掛網路磁碟,再 cp 或 sync 的方式,或利用 ssh 之scp 或 sftp。還有 FTPS ( ftp with ssl,因一般 FTP 為無加密之文字傳輸帳號密碼與傳輸資料,故筆者不建議使用。筆者常用的 filezilla ftp client ,有支援 ftp with ssl 連線,可從 http://rpm.pbone.net/index.php3/stat/4/idpl/31687357/dir/redhat_el_6/com/filezilla-3.7.3-3.el6.x86_64.rpm.html,來下載 rpm,但安裝時會出現如圖3-106,少 libwx 的錯誤,故利用 yum install libwx*來安裝,yum完成後 filezilla-3.7.3-3.el6.x86_64,就可以安裝完成,接著鍵入指令 filezilla,就會出現圖形介面的 ftp client,可以選擇連線目的IP了,port 選擇 22,通常就是直接使用 sftp 方式連線)
(圖3-106)
@scp
一般主機皆預設會開啟 ssh 服務與防火牆允許此連線,故可利用 scp 的方式遠端備份,就可不須先掛上遠端硬碟,如以下:
$ scp -r -2 -P 22 /etc newuser@192.168.100.100:~/backup
/* 參數 -r ,代表複製整個資料夾,-2 代表指定使用 ssh protocol 2,也可以不用加,讓ssh server來決定。參數 -P,為指定欲連線的 port,有些 ssh server 非預設的 port 22,故須加上此參數更改 ssh server 指定的 port。若無需逐條列出複製過程,可以加上參數 -q (quiet)。此scp輩分方式為備份從來源主機的 /etc 資料夾與內含之資料夾與檔案內容,至目的主機IP 192.168.100.100,登入帳號 newuser,放置於其 $HOME目錄下的 backup 資料夾,若無此資料夾,請先如 ssh newuser@192.168.100.100 'mkdir ~/backup' 或 ssh newuser@192.168.100.100 ! mkdir ~/backup ,連入來直接新增資料夾,此利用 ssh 遠端下指令的方式,在多主機管理或cluster 操作時,相當好用。
@rsync
另一個備份的指令為 rsync,rsync 的好處為可以做完整鏡像備份,從遠端主機與本機端鏡像備份如下:
$ rsync -avz --delete -e ssh newuser@192.168.100.100:~/backup ${HOME}/*
/* 參數 -a 代表 -rlptgoD,請見 rynsc --help,參數 -v 為 verbose mode,參數 -z 代表壓縮模式,--delete 為不新增檔案,參數 -e 為使用 ssh 的加密 shell 模式傳輸 */
@ Data Recovery
在CentOS6_x64下,若磁碟格式如 ext4,出現了軟體的壞軌,我們可以利用 fsck -y 來自動修復,但若是磁碟分割表消失,或磁碟內的檔案或照片忽然讀不到怎麼辦呢?我們這時就可以利用 Open Source 軟體 testdisk 與 photorec (http://www.cgsecurity.org/wiki/TestDisk) 。下載可從 http://www.cgsecurity.org/wiki/TestDisk_Download ,或是利用 yum install testdisk,如圖3-107
,詳細過程於之前安裝軟體篇介紹過,這裡不再贅述。
(圖3-107)
首先,假設我們有一個隨身硬碟,內有一些個人資料與圖片,如圖3-108,然後突然有一天發現不能掛載,指令 fdisk -l 後,變成沒有磁碟分割,如圖3-109。這時怎麼辦呢?先怪別人亂拿去用,中毒?先怪自己眼睛業障重,假的?還是怪隨身硬碟都是被其他的硬碟朋友帶壞,我的隨身硬碟平常都很乖的?不,應該要怪自己怎沒有備份。有備份就直接重建檔案分割表,然後複製貼上就復原好,不是嗎?那真的沒備份怎麼辦?
(圖3-108)
(圖3-109)
還好我們剛剛下載了 testdisk,就趕快執行他吧。如以下指令:
$ testdisk /dev/sdb # testdisk 後方空格後接上要還原的磁碟
會出現如圖3-110,進入 testdisk 環境下後,若要跳出,則按鍵盤 q 鍵,若要確定執行,則按鍵盤 Enter鍵。在選擇時,請注意圖3-110黃色箭頭指向的反光處為選擇的項目,真的確定再按下Enter鍵
(圖3-110)
圖3-110按下Enter鍵後 Proceed,進入圖3-111,此為選擇磁碟的格式為,入果不知道就直接按Enter鍵,用預設的Intel/PC partition。若是GPT格式( 一般是windows 8 以上,或是大於2T以上的磁碟分割 ),則利用鍵盤上下鍵,選 EFI GPT,其他作業系統格式,如 Mac、Sun、XBox 都有支援。按下Enter鍵後,進入圖3-112畫面。
(圖3-111)
(圖3-112)
在圖3-112畫面下,我們直接按下Enter鍵,做Analyse,並進入如圖3-113,會先辨認是否有留存磁碟分割表,因我們的事件是由於磁碟分割表的遺失,故在快速磁碟掃描前,可看到磁碟顯示無含任何分割表。接著按下Enter鍵,進入要進入Quick Search的程序。
(圖3-113)
圖3-113按下Enter後,會快速掃描到我們之前遺失的磁碟分割,看到標籤確實為TRANS16G的原磁碟。這時候還可以依圖3-114下方指示,按下鍵盤 p,來列出裡面的檔案與資料夾。
(圖3-114)
列出磁碟分割所含的檔案與資料夾後,可以看到如圖3-115,紅色的檔案與資料夾為已經移至垃圾桶或刪除過的,白色的檔案與資料夾為原本磁碟內的有用資料。此時利用鍵盤上下鍵,移動至要復原的檔案,再按下鍵盤 c 鍵,然後選擇要還原檔案至另存的路徑,如圖3-116
(圖3-115)
筆者將還原的檔案,另存於圖3-116黃框位置,再按下鍵盤 c 鍵,即可還原,最後可以在terminal 下利用 ls /root/recover/* 看到檔案,如圖3-117。是不是鬆了一個氣了呢?因為我們將檔案與資料夾跟資料夾內的檔案,全部都救回來了。
(圖3-116)
(圖3-117)
testdisk掃描前的的其他選項如圖3-118至圖3-120,圖3-118主要因我們的事件已失去 partition table,故亦無 partition 可調整。圖3-119,則為暫時調整磁碟的 Cylinders、Heads、Sectors、Sectors Size,來修正可能 testdisk 偵測的磁碟參數錯誤,或磁碟 firmware的錯誤引起的損毀。圖3-120為開啟專家模式,與對齊磁碟和打包磁碟資料。
(圖3-118)
(圖3-119)
硬碟CHS參數說明,可參考wikipedia(https://en.wikipedia.org/wiki/Cylinder-head-sector),與 http://home.impress.co.jp/magazine/dosvpr/q-a/0007/qa0007_1.htm,此模式亦可以將原本 4k 格式化硬碟,因用 dd 指令複製成 block size 為 512bytes 磁碟,所造成的 Logical / Physical Volume 參數錯誤,修正回 4k 的 sector size。
(圖3-120)
另一個復原軟體 photorec (可復原的檔案格式如,http://www.cgsecurity.org/wiki/File_Formats_Recovered_By_PhotoRec),使用以下指令進入介面:
$ photorec /dev/sdb
如圖3-121,操作介面與 testdisk 大同小異,且多了 file options 可供僅需要回復的檔案格式,如圖3-122。photorec 的操作,再留個讀者們自行玩玩(http://www.cgsecurity.org/wiki/PhotoRec_Step_By_Step)。
(圖3-121)
(圖3-121)
筆者在這幾年來,已經看過太多因沒有好好備份,當機器發生突然的軟體或硬體錯誤時,所失去重要資料的使用者痛哭流涕的場景;或是雖然備份,但又將備份分享給 MS Windows 環境下當可寫入的網路磁碟操作,或是備份完還插在電腦主機上,結果被中毒的電腦主機,感染了最新的 Ransomware (https://www.microsoft.com/en-us/security/portal/mmpc/shared/ransomware.aspx) ,連備份資料都被加密。所以除了硬體的RAID-1、RAID-5、RAID-6 的保護資料能力外,以及考慮分享的資料讀寫權限問題外,最重要的還是要做多份的異地備份,以防同機房的硬體設施毀損,或同網域病毒感染造成的資料損失問題。
管理所需的工具與知識就介紹到此。接下來,筆者要進入介紹架設伺服器軟體的階段,讓讀者除了可以使用現在很流行的網路主機代管與雲端主機外,也讓對架站有興趣的讀者,可以透過自行架設來學習伺服器軟體的基本運作。
If you have any feedback or question, please go to my forum to discuss.
@cp
$cp -ru ~/bin /media/sdc1/backup/
/* 將您放在~/bin 資料夾下,自己寫的執行檔,連同 ~/bin 資料夾,備份到 /media/sdc1/backup/ 資料夾下,則會在 /media/sdc1/backup 產生一個資料夾名為 bin, 若路徑無 backup 資料夾,可先用 mkdir /media/sdc1/backup。參數 -r (recursive) 為複製資料夾與以下所有子資料夾與子檔案,參數 -u (update)為若目的位置內已經有相同檔名的檔案,若來源的檔案較新,則使用覆蓋原本檔案,否則便不需複製。 */
CentOS 7.X若不想一直詢問已經存在之檔案,則使用以下,使用參數v顯示複製狀態
$cp -runv ~/bin /media/sdc1/backup/
$ cp -rudpv /etc /home/backup/ | tee ~/backup.log
/* 記得要備分 /etc 或 /var 等 root 權限擁有者的資料夾,請先 su - 轉為 root。參數 -r 為複製資料夾,參數 -d ,為複製後依然保持為連結,而非連結的檔案或資料夾。參數 -p ,為所複製的檔案與資料夾,要維持相同的擁有者與擁有群組,並且讀取、執行與寫入權限皆不變,若無加此參數,則複製後的檔案或資料夾,會同於下指令的帳號與其所屬群組。 如用 root 複製後,目的檔案與資料夾的擁有者就變為 root 。 -v 為列出所有複製的過程,筆者再利用指令 tee,除螢幕輸出外,多存一份到 ~/backup.log 檔 */
如要用 tee 備份過程的錯誤訊息(standerr),可利用以下
$ cp -rudp /etc /home/backup/ |& tee ~/backup.log
或
$ cp -rudp /etc/home/backup/ 2>&1 | ~/backup.log
讀者或也可使用 tar 來壓縮並備份至 /home/backup,如圖3-104,因參數 -v 會逐一列出複製狀況,筆者為了截圖,先不使用:
$ tar jcf /home/backup/etc.tar.bz2 /etc
若要用較佳的壓縮率格式 xz 來壓縮,則可以使用以下指令
$ tar Jcf /home/backup/etc.tar.xz /etc # 參數給為大寫 J
解開 xz 格式則參數換成以下( c 意指compress壓縮,x意指 extract 解壓縮,在 tar 下各種壓縮格式皆同 )
$ tar Jxf /home/backup/etc.tar.xz
(圖3-104)
除 tar 可壓縮之外,亦有些跟Windows交換檔案的使用者,習慣使用 rar 壓縮,故我們需先去rarlab( http://www.rarlab.com/download.htm )下載 ,解開後利用 make 跟 make install,就可以使用 unrar 與 rar 指令。或可利用 yum 方式安裝 rpmfusion 的 Free and Nonfree Repositories(其中一包含有 exfat 與其他有用工具套件),如下(https://rpmfusion.org/Configuration,參章之參亦有介紹 rpmfusion repository的安裝方式):
$ yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-6.noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-6.noarch.rpm
$ yum install unrar
如此一來,就可以使用 unrar 來解 .rar 壓縮檔,或使用 rar 來壓縮成 .rar檔案了。
@rsync
除此之外,亦可以利用指令 rsync 來完整的複製:
$ rsync -av /etc/ /home/backup/
/* 參數 -a 代表 archive,-v 代表 verbose,備份方式為新增至 /home/backup,故為增量備份。 */
$ rynsc -av --delete /etc /home/backup/
/* 加上參數 --delete 後,則來源若有檔案被移除,則目的資料夾亦移除一樣的檔案,此為鏡像備份。 */
rsync 亦有遠端備份的功能,但筆者通常會先利用 mount 掛載遠端的機器磁碟,如 NFS 或SAMBA 網路磁碟,掛載後,再從此電腦主機下 cp 或是 rsync 來備份,備份後再 umount 該網路磁碟,或是可利用 autofs (https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/s2-nfs-config-autofs.html) 令其自動掛載與卸載。其他詳細參數,有興趣的讀者可 man rsync,如 sync 亦可利用參數 -e ssh 來進行 ssh 的加密式連線複製,但自動化時,還是需要再設定檔預先輸入 ssh 密碼,筆者認為這是很不好的作法,故須先配合 ssh 金鑰對認證的無須輸入密碼之登入方式,這筆者要會於下篇介紹。
@ dd
除此之外,若要備份整個硬碟資料變成映象檔,則使用指令 dd :
$ dd if=/dev/sda1 | bzip2 > /home/mysda1.img.bz2
/* 備份 /dev/sda1 分割 ,並利用 bzip2 壓縮成 mysda1.img.bz2 檔(亦可使用 gzip 壓縮),存在 /home 下,通常 /sda1 掛載的是 /root,回復則為 bunzip2 mysda1.img.bz2 | dd of=/dev/sda1 ,of= 後方所接的磁碟內容,皆會被 if= 的磁碟內容所覆蓋 ,如圖3-105*/
$ dd if=/dev/sda of=/dev/sdb conv=noerror, sync status=progress
/* conv=noerror 代表愈錯誤依然繼續讀取,sync 代表 synchronized I/O ,同步的輸出輸入備份方式,此方式通常用於兩顆硬碟對拷,status 參數可顯示進度,對於較長時間的複製很實用。 */
或
$ dd if=/dev/sda1 of=/dev/sdb1 bs=4096 conv=noerror, sync status=progress
/* 利用每次讀寫 4096 Bytes 磁區來映射複製,/dev/sda1 磁碟分割至 /dev/sdb1 磁碟分割, /dev/sdb1 需大於或等於 /dev/sda1 之磁碟容量。 status 參數可顯示進度,對於較長時間的複製很實用。 */
若要僅備份開機啟動磁區,可利用以下:
$ dd if=/dev/sda of=/home/mymbr.img bs=512 count=1
/* 備份磁碟分割第一塊 512 Bytes 之區域。 如圖3-105 */
(圖3-105)
除此之外,用dd 也可以搞破壞,拿來當低階格式化工具,指令如下:
$ dd if=/dev/zero of=/dev/sdb conv=sync
/* 將每個小磁區塊,都寫入0 */
@ cpio
倘若要將資料備份到光碟機或磁帶機,可以使用指令 cpio,如下:
$ find ~/mydata | cpio -ov > /dev/sr0
/* 利用 find 指令定義備份資料夾為家目錄下的 mydata 資料夾的資料,在利用 cpio 備份輸出至 /dev/sr0 ,參數 o 為複製資料出去光碟機,參數 v 為列出詳細資料。 */
find指令的用法也可結合參數 -exec,若要先刪除.tmp副檔名檔案,如下,若要僅搜尋資料夾,則-type c 改為 -type d,不分大小寫則把 -name 改為 -iname
$ find / -type f -name ".tmp" -exec rm -f {} \;
or
$ find / -name ".tmp" -print0 | xargs -0 rm
(https://unix.stackexchange.com/questions/167823/find-exec-rm-vs-delete)
要將 /dev/sr0 資料複製出來的方式如下
$ cd ~/mydata && cpio -div < /dev/sr0
/* 參數 d 為創立新資料夾,參數 i 為複製光碟機資料進來,參數 v 為列出詳細資料。 */
遠端備份的方式,可以利用前面說過的先掛網路磁碟,再 cp 或 sync 的方式,或利用 ssh 之scp 或 sftp。還有 FTPS ( ftp with ssl,因一般 FTP 為無加密之文字傳輸帳號密碼與傳輸資料,故筆者不建議使用。筆者常用的 filezilla ftp client ,有支援 ftp with ssl 連線,可從 http://rpm.pbone.net/index.php3/stat/4/idpl/31687357/dir/redhat_el_6/com/filezilla-3.7.3-3.el6.x86_64.rpm.html,來下載 rpm,但安裝時會出現如圖3-106,少 libwx 的錯誤,故利用 yum install libwx*來安裝,yum完成後 filezilla-3.7.3-3.el6.x86_64,就可以安裝完成,接著鍵入指令 filezilla,就會出現圖形介面的 ftp client,可以選擇連線目的IP了,port 選擇 22,通常就是直接使用 sftp 方式連線)
(圖3-106)
@scp
一般主機皆預設會開啟 ssh 服務與防火牆允許此連線,故可利用 scp 的方式遠端備份,就可不須先掛上遠端硬碟,如以下:
$ scp -r -2 -P 22 /etc newuser@192.168.100.100:~/backup
/* 參數 -r ,代表複製整個資料夾,-2 代表指定使用 ssh protocol 2,也可以不用加,讓ssh server來決定。參數 -P,為指定欲連線的 port,有些 ssh server 非預設的 port 22,故須加上此參數更改 ssh server 指定的 port。若無需逐條列出複製過程,可以加上參數 -q (quiet)。此scp輩分方式為備份從來源主機的 /etc 資料夾與內含之資料夾與檔案內容,至目的主機IP 192.168.100.100,登入帳號 newuser,放置於其 $HOME目錄下的 backup 資料夾,若無此資料夾,請先如 ssh newuser@192.168.100.100 'mkdir ~/backup' 或 ssh newuser@192.168.100.100 ! mkdir ~/backup ,連入來直接新增資料夾,此利用 ssh 遠端下指令的方式,在多主機管理或cluster 操作時,相當好用。
@rsync
另一個備份的指令為 rsync,rsync 的好處為可以做完整鏡像備份,從遠端主機與本機端鏡像備份如下:
$ rsync -avz --delete -e ssh newuser@192.168.100.100:~/backup ${HOME}/*
/* 參數 -a 代表 -rlptgoD,請見 rynsc --help,參數 -v 為 verbose mode,參數 -z 代表壓縮模式,--delete 為不新增檔案,參數 -e 為使用 ssh 的加密 shell 模式傳輸 */
@ Data Recovery
在CentOS6_x64下,若磁碟格式如 ext4,出現了軟體的壞軌,我們可以利用 fsck -y 來自動修復,但若是磁碟分割表消失,或磁碟內的檔案或照片忽然讀不到怎麼辦呢?我們這時就可以利用 Open Source 軟體 testdisk 與 photorec (http://www.cgsecurity.org/wiki/TestDisk) 。下載可從 http://www.cgsecurity.org/wiki/TestDisk_Download ,或是利用 yum install testdisk,如圖3-107
,詳細過程於之前安裝軟體篇介紹過,這裡不再贅述。
(圖3-107)
首先,假設我們有一個隨身硬碟,內有一些個人資料與圖片,如圖3-108,然後突然有一天發現不能掛載,指令 fdisk -l 後,變成沒有磁碟分割,如圖3-109。這時怎麼辦呢?先怪別人亂拿去用,中毒?先怪自己眼睛業障重,假的?還是怪隨身硬碟都是被其他的硬碟朋友帶壞,我的隨身硬碟平常都很乖的?不,應該要怪自己怎沒有備份。有備份就直接重建檔案分割表,然後複製貼上就復原好,不是嗎?那真的沒備份怎麼辦?
(圖3-108)
(圖3-109)
還好我們剛剛下載了 testdisk,就趕快執行他吧。如以下指令:
$ testdisk /dev/sdb # testdisk 後方空格後接上要還原的磁碟
會出現如圖3-110,進入 testdisk 環境下後,若要跳出,則按鍵盤 q 鍵,若要確定執行,則按鍵盤 Enter鍵。在選擇時,請注意圖3-110黃色箭頭指向的反光處為選擇的項目,真的確定再按下Enter鍵
(圖3-110)
圖3-110按下Enter鍵後 Proceed,進入圖3-111,此為選擇磁碟的格式為,入果不知道就直接按Enter鍵,用預設的Intel/PC partition。若是GPT格式( 一般是windows 8 以上,或是大於2T以上的磁碟分割 ),則利用鍵盤上下鍵,選 EFI GPT,其他作業系統格式,如 Mac、Sun、XBox 都有支援。按下Enter鍵後,進入圖3-112畫面。
(圖3-111)
(圖3-112)
在圖3-112畫面下,我們直接按下Enter鍵,做Analyse,並進入如圖3-113,會先辨認是否有留存磁碟分割表,因我們的事件是由於磁碟分割表的遺失,故在快速磁碟掃描前,可看到磁碟顯示無含任何分割表。接著按下Enter鍵,進入要進入Quick Search的程序。
(圖3-113)
圖3-113按下Enter後,會快速掃描到我們之前遺失的磁碟分割,看到標籤確實為TRANS16G的原磁碟。這時候還可以依圖3-114下方指示,按下鍵盤 p,來列出裡面的檔案與資料夾。
(圖3-114)
列出磁碟分割所含的檔案與資料夾後,可以看到如圖3-115,紅色的檔案與資料夾為已經移至垃圾桶或刪除過的,白色的檔案與資料夾為原本磁碟內的有用資料。此時利用鍵盤上下鍵,移動至要復原的檔案,再按下鍵盤 c 鍵,然後選擇要還原檔案至另存的路徑,如圖3-116
筆者將還原的檔案,另存於圖3-116黃框位置,再按下鍵盤 c 鍵,即可還原,最後可以在terminal 下利用 ls /root/recover/* 看到檔案,如圖3-117。是不是鬆了一個氣了呢?因為我們將檔案與資料夾跟資料夾內的檔案,全部都救回來了。
(圖3-116)
(圖3-117)
testdisk掃描前的的其他選項如圖3-118至圖3-120,圖3-118主要因我們的事件已失去 partition table,故亦無 partition 可調整。圖3-119,則為暫時調整磁碟的 Cylinders、Heads、Sectors、Sectors Size,來修正可能 testdisk 偵測的磁碟參數錯誤,或磁碟 firmware的錯誤引起的損毀。圖3-120為開啟專家模式,與對齊磁碟和打包磁碟資料。
(圖3-118)
(圖3-119)
硬碟CHS參數說明,可參考wikipedia(https://en.wikipedia.org/wiki/Cylinder-head-sector),與 http://home.impress.co.jp/magazine/dosvpr/q-a/0007/qa0007_1.htm,此模式亦可以將原本 4k 格式化硬碟,因用 dd 指令複製成 block size 為 512bytes 磁碟,所造成的 Logical / Physical Volume 參數錯誤,修正回 4k 的 sector size。
(圖3-120)
另一個復原軟體 photorec (可復原的檔案格式如,http://www.cgsecurity.org/wiki/File_Formats_Recovered_By_PhotoRec),使用以下指令進入介面:
$ photorec /dev/sdb
如圖3-121,操作介面與 testdisk 大同小異,且多了 file options 可供僅需要回復的檔案格式,如圖3-122。photorec 的操作,再留個讀者們自行玩玩(http://www.cgsecurity.org/wiki/PhotoRec_Step_By_Step)。
(圖3-121)
(圖3-121)
筆者在這幾年來,已經看過太多因沒有好好備份,當機器發生突然的軟體或硬體錯誤時,所失去重要資料的使用者痛哭流涕的場景;或是雖然備份,但又將備份分享給 MS Windows 環境下當可寫入的網路磁碟操作,或是備份完還插在電腦主機上,結果被中毒的電腦主機,感染了最新的 Ransomware (https://www.microsoft.com/en-us/security/portal/mmpc/shared/ransomware.aspx) ,連備份資料都被加密。所以除了硬體的RAID-1、RAID-5、RAID-6 的保護資料能力外,以及考慮分享的資料讀寫權限問題外,最重要的還是要做多份的異地備份,以防同機房的硬體設施毀損,或同網域病毒感染造成的資料損失問題。
管理所需的工具與知識就介紹到此。接下來,筆者要進入介紹架設伺服器軟體的階段,讓讀者除了可以使用現在很流行的網路主機代管與雲端主機外,也讓對架站有興趣的讀者,可以透過自行架設來學習伺服器軟體的基本運作。
If you have any feedback or question, please go to my forum to discuss.