跳到主要內容

Linux 操作不求人系列- 參章之捌 - 系統管理(VIII) - 系統備份與資料救援

     一般來說,系統與資料備份是防範資料遺失最好的方法,無論儲存體是否有做磁碟陣列的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)為若目的位置內已經有相同檔名的檔案,若來源的檔案較新,則使用覆蓋原本檔案,否則便不需複製。  */

$ 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 
/* conv=noerror 代表愈錯誤依然繼續讀取,sync 代表 synchronized I/O ,同步的輸出輸入備份方式,此方式通常用於兩顆硬碟對拷。  */


$  dd  if=/dev/sda1  of=/dev/sdb1  bs=4096 conv=noerror, sync
/* 利用每次讀寫 4096 Bytes 磁區來映射複製,/dev/sda1 磁碟分割至 /dev/sdb1 磁碟分割, /dev/sdb1 需大於或等於 /dev/sda1 之磁碟容量。 */

若要僅備份開機啟動磁區,可利用以下:
$  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 為列出詳細資料。 */

要將 /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.

這個網誌中的熱門文章

Linux操作不求人 - 伍章之伍 - make 巨集式編譯器

make是Linux下安裝軟體與程式一個相當重要的工具,如前章節所提的安裝軟體三劍客。 configure, make , make install。當我們完成自己所撰寫的C 或 fortran程式,通常會使用編譯器指令 gcc -cgfortran -c 來編譯成連結檔或物件檔函式庫(Library),如 .a (https://en.wikipedia.org/wiki/Static_library) .o .so等附檔名,而此函式庫又可以讓其他程式利用其中的函式與類別。何時要用到動態或靜態函式庫,stackoverflow有專業的回答(https://stackoverflow.com/questions/140061/when-to-use-dynamic-vs-static-libraries)。

假設我們要寫一個簡單的 C 程式,檔名為 hellomake.c,用 make 來編譯我們的程式,程式如下:
#include<stdio.h>
void main ( void )
{
   print ("This is my first c file."\n);
}

---------------------------------------------------
儲存離開後,利用autoscan 指令,便會產生如圖5-70的兩個檔 autoscan.log 與 configure.scan,而 configure.scan 便是需要產生標準的 GNU makefile 的關鍵檔。我們可以把他改成 configure.in 或 configure.ac,並利用 vim configure 來修改參數,如圖5-71,改為圖5-71右邊的參數











(圖5-70)





(圖5-71)


修改完 configure.in 內的參數後,再執行 aclocal 與 autoconf ,就會產生 autom4te.cache 的資料夾與 configure 的執行檔,此執行檔就是先前章節所要編譯原始碼前,會執行的 ./configure ,並會產生適合您的機器環境之 GNU Makefile,如圖5-72


(圖5-72)
接著編輯 Makefile.am 檔的內容,加入如下內容
AUTOMAKE_OPTION=foreign b…

Linux操作不求人 - 肆章之貳 - 伺服器架設(II) - 郵件伺服器 - postfix 與 dovecot

CentOS6_x64 在預設狀態下,通常已經有開啟發 email 的伺服器軟體 postfix,但僅限制在本機(localhost / 127.0.0.1 ) 使用,且僅是讓系統可以傳送錯誤訊息給 root。故我們要經由設定,讓電腦主機內的使用者帳號,皆可以收發 email,而我們用的送信軟體為 postfix,負責 smtp 的部分( https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol ) ,收信軟體則為 dovecot,負責 pop 或 imap ( https://en.wikipedia.org/wiki/Post_Office_Protocol,https://en.wikipedia.org/wiki/Internet_Message_Access_Protocol )的部分,收發信機制的運作機制,可參考wikipedia,https://en.wikipedia.org/wiki/Email,筆者不再贅述,直接說明架設伺服器軟體的操作。先利用 rpm -qa | grep postfix 與 rpm -qa | grep dovecot 來查詢是否已經有安裝,若無,則利用 yum install postfix 與 yum install dovecot 來安裝。除此之外,再利用 chkconfig | grep postfix 與  chkconfig | grep dovecot 來確認是否有在開機時啟動,若想自動化開機啟動,再請設定 chkconfig --level 235 postfix on 與  chkconfig  --level 235 dovecot on 來載入。 如圖4-10與圖4-11:
































(圖4-10)
















(圖4-11)

     接著我們利用 vim 來修改 postfix 設定檔  /etc/postfix/main.cf 。相同地,我們先閱讀設定檔內容前面的說明,postfix 的作者相當細心,每個設定前的說明很詳細,故設定檔很長,請讀者要有耐心閱讀,如圖4-12-1 至 圖4-12-7。往後篇章若設定檔內容太長,筆者便不再列出,會直接說明新增與修改處,在此先說明。




























































































(圖4-12-1)




























































































(圖4-12-2)





























































































(圖4-12-3)





























































































(圖4-12-4…

Linux操作不求人- 肆章之壹 - 伺服器架設(I) - SSH(SFTP、SCP)、FTP伺服器與遠端連線

@ ssh, sftp 
    通常安裝好 CentOS6_x64 作業系統後,sshd, ssh daemon 的服務功能是預設開啟的,如筆者的前面篇章所述,預設的 iptables 防火牆設定,亦是開啟讓 ssh 的連線是可通過的,不僅可以連出,也可以被連入。若要確認是否有安裝 sshd 套件以及在啟動時的 runlevel 2 3 5 是否有被載入,可以使用以下指令搜尋:
$   rpm  -qa  |   grep  openssh    #  ssh 與 sshd 連線服務皆由 openssh 應用軟體提供。 或使用以下 $   rpm  -qa  |   grep  ssh        #  比用關鍵字 openssh 搜尋更模糊,故符合的條件更多。
     如圖4-1可以查詢到有關於 openssh-client 與 openssh-server 的套件, openssh-server 便是提供連入服務的軟體,openssh-client 為提供可以連出的工具。若無以上套件,則使用 yum install openssh ,則可下載安裝。


















(圖4-1)
再接著輸入以下指令查詢到 sshd 這個服務,是否有再開機程序內載入,如圖4-2 $ chkconfig | grep ssh  # 查詢 sshd 是否有於 開機 runlevel 啟動 再利用以下指令,來查詢是否防火牆有允許連線 $ iptables  -L  |  grep ssh   # 出現如圖4-2 允許通過之條件









(圖4-2)
     接下來,我們要先來調整 sshd 的設定檔,利用 vim  /etc/sshd/sshd_conf,如圖4-3-1與4-3-2。因為設定檔參數很多,筆者為方便說明,將 /etc/sshd/sshd_conf 檔案內容分成兩張圖。






































(圖4-3-1)






































(圖4-3-2)
     首先,筆者強烈建議設定前,先閱讀 /etc/ssh/sshd_config 檔案內容前幾行的說明,如之前我們做任何的服務設定前,務必閱讀說明文字。說明告訴我們,若要更動預設參數設定,可以移除符號 # ,並更改後面的參數值。而我們要改動的參數主要為以下幾項: Port   22 /*  一般 ssh 預設的 port 為 22,所以〝你知道、我知道、獨眼龍也知道〞,故建議可以更換預設 p…