(Linux六)Linux數(shù)據(jù)備份與恢復(fù)

(一)Linux備份策略(完全備份捺疼、增量備份和差異備份)詳解

常用的備份策略有完全備份和增量備份外里,而增量備份有可細(xì)分為累計增量備份和差異增量備份怎爵。下面來分別講述不同備份策略以及之間的區(qū)別。

完全備份

完全備份是指把所有需要備份的數(shù)據(jù)全部備份盅蝗。當(dāng)然鳖链,完全備份可以備份整塊硬盤、整個分區(qū)或某個具體的目錄墩莫。對于?Linux?操作系統(tǒng)來說芙委,完全備份指的就是將根目錄下的所有文件進(jìn)行備份。

完全備份的好處是狂秦,所有數(shù)據(jù)都進(jìn)行了備份灌侣,系統(tǒng)中任何數(shù)據(jù)丟失都能恢復(fù),且恢復(fù)效率較高裂问。如果完全備份備份的是整塊硬盤侧啼,那么甚至不需要數(shù)據(jù)恢復(fù),只要把備份硬盤安裝上堪簿,服務(wù)器就會恢復(fù)正常痊乾。

完全備份的缺點也很明顯,那就是需要備份的數(shù)據(jù)量較大戴甩,備份時間較長符喝,備份了很多無用數(shù)據(jù)闪彼,占用的空間較大甜孤,所以完全備份不可能每天執(zhí)行协饲。

我們一般會對關(guān)鍵服務(wù)器進(jìn)行整盤完全備份,如果出現(xiàn)問題缴川,則可以很快地使用備份硬盤進(jìn)行替換茉稠,從而減少損失。我們甚至?xí)﹃P(guān)鍵服務(wù)器搭設(shè)一臺一模一樣的服務(wù)器把夸,這樣只要遠(yuǎn)程幾個命令(或使用?Shell 腳本自動檢測而线,自動進(jìn)行服務(wù)器替換),備份服務(wù)器就會接替原本的服務(wù)器恋日,使故障響應(yīng)時間大大縮短膀篮。

累計增量備份

在一個數(shù)據(jù)量很大的業(yè)務(wù)應(yīng)用中,每天對 Linux 系統(tǒng)進(jìn)行完全備份是不現(xiàn)實的岂膳,這就需要用到增量備份策略誓竿。

累計增量備份是指先進(jìn)行一次完全備份,服務(wù)器運行一段時間之后谈截,比較當(dāng)前系統(tǒng)和完全備份的備份數(shù)據(jù)之間的差異筷屡,只備份有差異的數(shù)據(jù)。服務(wù)器繼續(xù)運行簸喂,再經(jīng)過一段時間毙死,進(jìn)行第二次增量備份。在進(jìn)行第二次增量備份時喻鳄,當(dāng)前系統(tǒng)和第一次增量備份的數(shù)據(jù)進(jìn)行比較扼倘,也是只備份有差異的數(shù)據(jù)。第三次增量備份是和第二次增量備份的數(shù)據(jù)進(jìn)行比較除呵,以此類推唉锌。

因此,累計增量備份就是只備份每天增加或者變化的數(shù)據(jù)竿奏,而不備份系統(tǒng)中沒有變動的數(shù)據(jù)袄简。我們畫一張示意圖,如圖 1 所示泛啸。

圖 1 累計增量備份

假設(shè)我們在第一天進(jìn)行一次完全備份绿语。第二天增量備份時,只會備份第二天和第一天之間的差異數(shù)據(jù)候址,但是第二天的總備份數(shù)據(jù)是完全備份加第一次增量備份的數(shù)據(jù)吕粹。第三天增量備份時,只會備份第三天和第二天之間的差異數(shù)據(jù)岗仑,但是第三天的總備份數(shù)據(jù)是完全備份加第一次增量備份的數(shù)據(jù)匹耕,再加第二次增量備份的數(shù)據(jù)。當(dāng)然荠雕,第四天增量備份時稳其,只會備份第四天和第三天的差異數(shù)據(jù)驶赏,但是第四天的總備份數(shù)據(jù)是完全備份加第一次增量備份的數(shù)據(jù),加第二次增量備份的數(shù)據(jù)既鞠,再加第三次增量備份的數(shù)據(jù)煤傍。

采用累計增量備份的好處是,每次備份需要備份的數(shù)據(jù)較少嘱蛋,耗時較短蚯姆,占用的空間較小洒敏;壞處是數(shù)據(jù)恢復(fù)比較麻煩龄恋,如果是圖 1 的例子,那么當(dāng)進(jìn)行數(shù)據(jù)恢復(fù)時凶伙,就要先恢復(fù)完全備份的數(shù)據(jù)篙挽,再依次恢復(fù)第一次增量備份的數(shù)據(jù)、第二次增量備份的數(shù)據(jù)和第三次增量備份的數(shù)據(jù)镊靴,最終才能恢復(fù)所有的數(shù)據(jù)铣卡。

差異增量備份

差異增量備份(后續(xù)簡稱差異備份)也要先進(jìn)行一次完全備份,但是和累計增量備份不同的是偏竟,每次差異備份都備份和原始的完全備份不同的數(shù)據(jù)煮落。也就是說,差異備份每次備份的參照物都是原始的完全備份踊谋,而不是上一次的差異備份蝉仇。我們也畫一張示意圖,如圖 2 所示殖蚕。

圖 2 差異增量備份

假設(shè)我們在第一天也進(jìn)行一次完全備份轿衔。第二天差異備份時,會備份第二天和第一天之間的差異數(shù)據(jù)睦疫,而第二天的備份數(shù)據(jù)是完全備份加第一次差異備份的數(shù)據(jù)害驹。第三天進(jìn)行差異備份時,仍和第一天的原始數(shù)據(jù)進(jìn)行對比蛤育,把第二天和第三天所有的數(shù)據(jù)都備份在第二次差異備份中宛官,第三天的備份數(shù)據(jù)是完全備份加第二次差異備份的數(shù)據(jù)。第四天進(jìn)行差異備份時瓦糕,仍和第一天的原始數(shù)據(jù)進(jìn)行對比底洗,把第二天、第三天和第四天所有的不同數(shù)據(jù)都備份到第三次差異備份中咕娄,第四天的備份數(shù)據(jù)是完全備份加第三次差異備份的數(shù)據(jù)亥揖。

相比較而言,差異備份既不像完全備份一樣把所有數(shù)據(jù)都進(jìn)行備份圣勒,也不像增量備份在進(jìn)行數(shù)據(jù)恢復(fù)時那么麻煩费变,只要先恢復(fù)完全備份的數(shù)據(jù)摧扇,再恢復(fù)差異備份的數(shù)據(jù)即可。不過胡控,隨著時間的增加,和完全備份相比旁趟,變動的數(shù)據(jù)越來越多昼激,那么差異備份也可能會變得數(shù)據(jù)量龐大、備份速度緩慢锡搜、占用空間較大橙困。

一個比較的備份策略是,對于數(shù)據(jù)量不大耕餐,并且每天數(shù)據(jù)量增加不多的系統(tǒng)凡傅,優(yōu)先選擇完全備份;對于數(shù)據(jù)量巨大肠缔,每天新增數(shù)據(jù)也很多的系統(tǒng)夏跷,視情況選擇差異備份或者增量備份。

(二)Linux tar命令備份數(shù)據(jù)

作為Linux系統(tǒng)管理員明未,最經(jīng)常使用的備份工具就是 tar 和 cpio 命令槽华。前面在介紹備份介質(zhì)時,已經(jīng)使用了 tar 命令趟妥,此命令其實是一個文件打包命令猫态,經(jīng)常在備份文件的場合中使用。

使用 cpio 命令進(jìn)行數(shù)據(jù)備份披摄,請閱讀Linux提取RPM包文件(cpio命令)

有關(guān) tar 命令的基本用法亲雪,請閱讀Linux tar壓縮命令一節(jié),這里不再過多贅述疚膊。下面通過 tar 命令做的一個 Web 服務(wù)器的備份腳本义辕,詳細(xì)了解 tar 命令作為備份工具時的具體用法。

以下是一個有關(guān) Web 服務(wù)器的備份腳本:

#!/bin/sh

BAKDATE='date +%y%m%d'

DATA3='date -d "3 days ago" +%y%m%d'

osdata=/disk1

userdata=/disk2

echo "backup OS data starting"

tar -zcvf /$osdata/etc.data/etc_$BAKDATE.tar.gz /etc

tar -zcvf /$osdata/boot.data/boot_$BAKDATE.tar.gz /boot

tar -zcvf /$osdata/home.data/home_$BAKDATE.tar.gz /home

tar -zcvf /$osdata/root.data/root_$BAKDATE.tar.gz /root

tar -zcvf /$userdata/usr_data/usrlocal_$BAKDATE.tar.gz /usr/local

tar -zcvf /$userdata/var_www/www_$BAKDATE.tar.gz /var/www

cp -r /$osdata/* /$userdata

cp -r /$userdata/* /$osdata

echo "Backup OS data complete!"

echo "delete OS data 3 days ago"

rm -rf /$osdata/etc.data/etc_$DATA3.tar.gz

rm -rf /$osdata/boot.data/boot_$DATA3.tar.gz

rm -rf /$osdata/home.data/home_$DATA3.tar.gz

rm -rf /$osdata/root.data/root_$DATA3.tar.gz

rm -rf /$osdata/usr_data/usrlocal_$DATA3.tar.gz

rm -rf /$osdata/var_www/www_$DATA3.tar.gz

rm -rf /$userdata/etc.data/etc_$DATA3.tar.gz

rm -rf /$userdata/boot.data/boot_$DATA3.tar.gz

rm -rf /$userdata/home.data/home_$DATA3.tar.gz

rm -rf /$userdata/root.data/root_$DATA3.tar.gz

rm -rf /$userdata/usr_data/usrlocal_$DATA3.tar.gz

rm -rf /$userdata/var_www/www_$DATA3.tar.gz

echo "delete cws ok!"

上面這段腳本完成的工作是寓盗,將系統(tǒng)和用戶的備份數(shù)據(jù)分別保存在兩個不同的本地磁盤 disk1 和 disk2 中终息,并且保留最近 3 天的數(shù)據(jù),3 天前的數(shù)據(jù)自動刪除贞让。主要備份的數(shù)據(jù)有 /etc 目錄周崭、/boot 目錄、/home 目錄喳张、/root 目錄续镇、/usr/local 目錄和 /var/www 目錄。當(dāng)然這里只是舉個例子销部,凡是存放數(shù)據(jù)的重要目錄摸航,都需要進(jìn)行備份制跟。

將此腳本放到系統(tǒng)守護(hù)進(jìn)程(類似于 Windows 下的計劃任務(wù))crontab 下,設(shè)定備份時間酱虎,即可實現(xiàn)定時數(shù)據(jù)備份雨膨。有關(guān) crontab 的詳細(xì)介紹,請閱讀《Linux crontab命令》读串。

(三)Linux dump命令用法詳解:備份分區(qū)聊记、文件或目錄

在系統(tǒng)學(xué)習(xí) dump 命令之前,由于 CentOS 6.x 系統(tǒng)默認(rèn)是沒有安裝此命令的恢暖,因此需要我們手動安裝 dump 命令排监,安裝命令如下:

[root@localhost ~]# yum -y install dump

dump 命令使用“備份級別”來實現(xiàn)增量備份,它支持 0~9 共 10 個備份級別杰捂。其中舆床,0 級別指的就是完全備份,1~9 級別都是增量備份級別嫁佳。

舉個列子挨队,當(dāng)我們備份一份數(shù)據(jù)時,第一次備份應(yīng)該使用 0 級別蒿往,會把所有數(shù)據(jù)完全備份一次瞒瘸;第二次備份就可以使用 1 級別了,它會和 0 級別進(jìn)行比較熄浓,把 0 級別備份之后變化的數(shù)據(jù)進(jìn)行備份情臭;第三次備份使用? 2 級別,2 級別會和 1 級別進(jìn)行比較赌蔑,把 1 級別備份之后變化的數(shù)據(jù)進(jìn)行備份俯在,以此類推。

需要注意的是娃惯,只有在備份整個分區(qū)或整塊硬盤時跷乐,才能支持 1~9 的增量備份級別;如果只是備份某個文件或不是分區(qū)的目錄趾浅,則只能使用 0 級別進(jìn)行完全備份愕提。

dump 命令的基本格式如下:

[root@localhost ~]# dump [選項] 備份之后的文件名 原文件或目錄

選項:

-level:就是我們說的 0~9 共 10 個備份級別;

-f? 文件名:指定備份之后的文件名皿哨;

-u:備份成功之后浅侨,把備份時間、備份級別以及實施備份的文件系統(tǒng)等信息证膨,都記錄在 /etc/dumpdates 文件中如输;

-v:顯示備份過程中更多的輸出信息;

-j:調(diào)用 bzlib 庫壓縮備份文件,其實就是把備份文件壓縮為 .bz2 格式不见,默認(rèn)壓縮等級是 2澳化;

-W:顯示允許被 dump 的分區(qū)的備份等級及備份時間;

dump 命令是一個較為復(fù)雜的命令稳吮,如果我們只是想要實現(xiàn)數(shù)據(jù)的備份與恢復(fù)缎谷,那么掌握以上幾個選項就足夠了。

備份分區(qū)

我們先來看看如何使用 0 級別備份分區(qū)灶似。命令如下:

[root@localhost ~]# df -h

文件系統(tǒng)? 容量 已用 可用 已用% 掛載點

/dev/sda3?? 20G 3.0G 16G 17% /

tmpfs?? 30 6M 0 30 6M 0% /dev/shm

/dev/sda1?? 194M 26M 158M 15% /boot

/dev/sr0?? 3.5G 3.5G 0 100% /mnt/cdrom

#系統(tǒng)中我們就分了/分區(qū)和/boot分區(qū)列林。根分區(qū)太大,備份速度太慢,我們還是備份/boot分區(qū)吧

[rootSlocalhost ~]# dump -0uj -f /root/boot.bak.bz2 /boot/

#備份命令。先執(zhí)行一次完全備份,并壓縮和更新備份時間

DUMP: Date of this level 0 dump: Wed Jun 5 03:08:22 2013

#備份的級別和時間

DUMP: Dumping /dev/sdal (/boot) to /root/boot.bak.bz2

#備份源和目標(biāo)

DUMP: Label: none

#分區(qū)沒有卷標(biāo)

DUMP: Writing 10 Kilobyte records

DUMP: Compressing output at compression level 2 (bzlib)

#備份時壓縮

DUMP: mapping (Pass I) [regular files]

DUMP: mapping (Pass II) [directories]

DUMP: estimated 21846 blocks.

DUMP: Volume 1 started with block 1 at: Wed Jun 5 03:08:22 2013

DUMP: dumping (Pass III) [directories]

#開始dump 備份

DUMP: dumping (Pass XV) [regular files]

DUMP: Closing /root/boot.bak.bz2

#備份結(jié)朿喻奥,生成備份文件

DUMP: Volume 1 completed at: Wed Jun 5 03:08:30 2013

DUMP: Volume 1 took 0:00:08

DUMP: Volume 1 transfer rate: 2370 kB/s

DUMP: Volume 1 21930kB uncompressed, 18962kB compressed, 1.157:1

#數(shù)據(jù)容量

DUMP: 2X930 blocks (21.42MB) on 1 volume(s)

DUMP: finished in 7 seconds, throughput 3132 kBytes/sec

DUMP: Date of this level 0 dump: Wed Jun 5 03:08:22 2013

DUMP: Date this dump completed: Wed Jun 5 03:08:30 2013

DUMP: Average transfer rate: 2370 kB/s

DUMP: Wrote 21930kB uncompressed, 18962kB compressed, 1.157:1

[root@localhost ~]# cat /etc/dumpdates

#查看備份時間文件

/dev/sdal 0 Wed Jun 5 03:08:22 2013 +0800

#備份的分區(qū) 備份級別 備份曰期

[root@localhost @]# 11 -h /root/boot.bak.bz2

-rw-r--r--. 1 root root 19M 6 月 5 03:08 /root/boot.bak.bz2

#備份文件生成了

如果 /boot 分區(qū)的內(nèi)容發(fā)生了變化席纽,則可以使用 1 級別進(jìn)行增量備份捏悬。當(dāng)然撞蚕,如果數(shù)據(jù)會繼續(xù)發(fā)生變化,則可以繼續(xù)使用 2~9 級別增量備份过牙。命令如下:

[root@localhost ~]# ll -h /root/install.log

-rw-r--r--.1 root root 25K 4月 10 21:49 /root/install.log

#查看安裝軟件包日志的大小為25KB

[root@localhost ~]# cp install.log /boot/

#復(fù)制日志文件到/boot分區(qū)

[root@localhost ~]# dump -1uj -f /root/boot.bak1.bz2 /boot/

#增量備份/boot分區(qū)甥厦,并壓縮

[root@localhost ~]# ll -h boot.bak*

-rw-r--r--.1 root root 18K 6月 5 03:16 boot.bak1.bz2

-rw-r--r--.1 root root 19M 6月 5 03:08 boot.bak.bz2

#boot.bak1.bz2壓縮文件只有18KB,證明增量備份只備份了0級別以后變化的數(shù)據(jù)

#boot.bak1.bz2壓縮文件只有18KB寇钉,證明增量備份只備份了0級別以后變化的數(shù)據(jù)

如果備份的是整個分區(qū)刀疙,那么是可以使用“dump -W”命令來查詢分區(qū)的備份時間及備份級別的。不過要注意扫倡,如果備份時沒有使用“-u”選項谦秧,那么“dump -W”命令是不會記錄備份的時間和級別的。命令如下:

[root@localhost ~]# dump -W

Last dump(s) done (Dump '>' file systems):

/dev/sda3 ( /) Last dump:Level 1撵溃, Date Wed Jun 5 02:31:50 2013

/dev/sda1 ( /boot) Last dump:Level 1疚鲤, Date Wed Jun 5 03:16:27 2013

#我的/分區(qū)和/boot分區(qū)都進(jìn)行過dump備份,/boot分區(qū)的最新備份級別是1

dump命令可以非常方便地實現(xiàn)增量備份缘挑,但是如何實現(xiàn)差異備份呢集歇?其實也很簡單,先使用 0 級別完全備份一次语淘,以后的每次備份都使用 1 級別進(jìn)行備份。

備份文件或目錄

dump 命令也可以文件或目錄,不過术羔,只要不是備份分區(qū)膝蜈,就只能使用 0 級別進(jìn)行完全備份,而不再支持增量備份吕粗。同時它掂,不能使用“-u”選項更新分區(qū)的備份時間,當(dāng)然也不能使用“dump -W”命令查詢到文件或目錄的備份。

我們說 /etc/ 目錄是重要的配置文件目錄虐秋,那么我們就備份這個目錄來看看吧榕茧。命令如下:

[root@localhost ~]# dump -0j -f /root/etc.dump.bz2 /etc/

#完全備份/etc/目錄

[root@localhost ~]# ll -h /root/etc.dump.bz2

-rw-r--r--.1 root root 8.6M 6月 5 03:26 /root/etc.dump.bz2

#查看備份文件

不過,如果使用增量備份會怎么樣呢客给?命令如下:

[root@localhost ~]# dump -1j -f /root/etc.dump1.bz2 /etc/

DUMP:Only level 0 dumps are allowed on a subdirectory

DUMP:The ENTIRE dump is aborted.

#備份失敗了用押,目錄備份只能使用0級別

(四)Linux restore命令:還原dump操作備份下的文件、目錄或分區(qū)

restore 命令是 dump 命令的配套命令靶剑,dump 命令是用來備份分區(qū)和數(shù)據(jù)的蜻拨,而 restore 命令是用來恢復(fù)數(shù)據(jù)的。

restore 命令的基本格式如下:

[root@localhost ~]# restore [模式選項] [-f]

此命令中桩引,-f 選項用于指定備份文件的文件名缎讼;restore 命令常用的模式有以下 4 種,這 4 種模式不能混用:

-C:比較備份數(shù)據(jù)和實際數(shù)據(jù)的變化坑匠。如果實際數(shù)據(jù)中的現(xiàn)有數(shù)據(jù)發(fā)生了變化血崭,那么這個選項能夠檢測到這個變化。但是如果實際數(shù)據(jù)中新增了數(shù)據(jù)厘灼,那么這個選項是不能檢測到變化的夹纫。舉個例子:別人給我了 100 萬元投資(實際數(shù)據(jù)),但是他有一個投資的賬本(備份數(shù)據(jù))设凹,他要時不時地比對賬本和實際的 100 萬元投資舰讹,如果 100 萬元減少則馬上就能發(fā)現(xiàn)改變;但是如果投資增加闪朱,則不會報警月匣;

-i:進(jìn)入交互模式,手工選擇需要恢復(fù)的文件奋姿;

-t:查看模式锄开,用于查看備份文件中擁有哪些數(shù)據(jù);

-r:還原模式胀蛮,用于數(shù)據(jù)還原院刁;

【例 1】比較備份數(shù)據(jù)和實際數(shù)據(jù)的變化。

這里大家需要注意粪狼,數(shù)據(jù)比較只有在原有數(shù)據(jù)減少或發(fā)生變化時才能檢測到變化退腥,而新增的數(shù)據(jù)是不會被檢測到的。命令如下:

[root@localhost ~]# touch /boot/abc

#在/boot/目錄中新建abc文件

[root@localhost ~]# restore -C -f /root/boot.bak.bz2

Dump tape is compressed.

Dump date:Wed Jun 5 08:20:02 2013

Dumped from:the epoch

Level 0 dump of /boot on localhost:/dev/sda1

Label:none

filesys = /boot

#restore檢測再榄,沒有發(fā)現(xiàn)任何變化(當(dāng)然狡刘,因為備份數(shù)據(jù)在備份時沒有abc文件,所以restore命令是不能識別新建文件的)

[root@localhost ~]# mv /boot/vmlinuz-2.6.32-279.el6.i686 /boot/vmlinuz-2.6.32-279.el6.i686.bak

#把/boot/目錄中的內(nèi)核鏡像文件改一個名字

[root@localhost ~]# restore -C -f /root/boot.bak.bz2

Dump tape is compressed.

Dump date:Wed Jun 5 08:20:02 2013

Dumped from:the epoch

Level 0 dump of /boot on localhost:/dev/sda1

Label:none

filesys = /boot

restore:unable to stat ./vmlinuz-2.6.32-279.el6.i686:No such file or directory Some files were modified困鸥! 1 compare errors

#restore發(fā)現(xiàn)內(nèi)核鏡像文件丟失

這個實驗比較危險嗅蔬,一定要記得把內(nèi)核鏡像文件的名字改回來剑按,否則一旦重啟,系統(tǒng)就會無法正常啟動澜术。

[root@localhost ~]# mv /boot/vmlinuz-2.6.32-279.el6.i686.bak /boot/vmlinuz2.6.32-279.el6.i686

【例 2】查看模式艺蝴。

這種模式比較簡單,就是查看備份文件中到底包含什么內(nèi)容鸟废。命令如下:

[root@localhost ~]# restore -t -f boot.bak.bz2

Dump tape is compressed.

#備份數(shù)據(jù)是壓縮的

Dump date:Wed Jun 5 08:20:02 2013

#數(shù)據(jù)備份時間

Dumped from:the epoch

Level 0 dump of /boot on localhost:/dev/sda1

#備份等級

Label:none

#分區(qū)的卷標(biāo)猜敢,沒有設(shè)定卷標(biāo)

2.

11 ./lost+found

12 ./grub

24 ./grub/grub.conf

13 ./grub/splash.xpm.gz

…省略部分輸出…

【例 3】還原模式

restore 命令的還原模式既可以用于還原整個分區(qū),也可以用于還原文件或目錄盒延。命令格式是一樣的缩擂,不過要注意,如果要還原增量備份的數(shù)據(jù)添寺,則一定要先還原完全備份的數(shù)據(jù)胯盯。命令如下:

#還原boot.bak.bz2分區(qū)備份

#先還原完全備份的數(shù)據(jù)

[root@localhost ~]# mkdir boot.test

#建立準(zhǔn)備解壓縮的目錄。當(dāng)然计露,如果這個目錄是我新建的分區(qū)博脑,就可以直接把數(shù)據(jù)恢復(fù)到分區(qū)中

[root@localhost ~]# cd boot.test/

#進(jìn)入解壓縮目錄

[root@localhost boot.test]# restore -r -f /root/boot.bak.bz2

Dump tape is compressed.

#備份數(shù)據(jù)是壓縮數(shù)據(jù)

#解壓縮

[root@localhost boot.test]#ll

#查看一下解壓縮的文件

總用量21300

-rw-r--r--. 1 root root 106611 6月 22 2012 config-2.6.32-279.el6.i686 drwxr-xr-x. 3 root root 4096 4 月 10 21:47 efi drwxr-xr-x. 2 root root 4096 4 月 10 21:49 grub

-rw-r--r--. 1 root root 14708399 4 月 10 21:49 initrara£s-2.6.32-279.el6.i686.img

drwx------. 2 root root 4096 4 月 10 21:44 lost+found

-rw-------. 1 root root 47504 6 月 5 09:44 restoresymtable

-rw-r--r--. 1 root root 175903 6 月 22 2012 symvers-2.6.32-279.el6.i686.gz

-rw-r--r--. 1 root root 1846041 6 月 22 2012 System.map-2.6.32-279.el6.i686

-rw-r--r--. 1 root root 1048576 6 月 5 02:38 test

-rwxr-xr-x. 1 root root 3856608 6 月 22 2012 vmlinuz-2.6.32-279.el6.i686

#再還原增量備份的數(shù)據(jù)

[root@localhost boot.test]# restore -r -f /root/boot.bakl.bz2

Dump tape is compressed.

#恢復(fù)增量備份的數(shù)據(jù)

[root@localhost boot.test]# ll

總用量21328

-rw-r--r--. 1 root root 106611 6 月 22 2012 config-2.6.32-279.el6.i686

drwxr-xr-x. 3 root root 4096 4 月 10 21:47 efi

drwxr-xr-x. 2 root root 4096 4 月 10 21:49 grub

-rw-r--r--. 1 root root 14708399 4 月 10 21:49 initramfs-2.6.32-279.eX6.i686.img

-rw-r--r--. 1 root root 24772 6 月 5 08:20 install. log

#增量備份的install.log文件被恢復(fù)了

drwx------. 2 root root 4096 4 月 10 21:44 lost+found

-rw-------. 1 root root 47552 6 月 5 09:57 restoresymtable

-rw-r--r--. 1 root root 175903 6 月 22 2012 symvers-2.6.32-279.el6.i686.gz

-rw-r--r--. 1 root root 1846041 6 月 22 2012 System.map-2.6.32-279.el6.i686

-rw-r--r--. 1 root root 1048576 6 月 5 02:38 test

-rwxr-xr-x. 1 root root 3856608 6月? 22 2012 vmlinuz-2.6.32-279.el6.i686

我們再來還原/etc/目錄的備份etc.dump.bz2,其實還原的方法是完全一樣的薄坏。命令如下:

[root@localhost ~]# restore -r -f etc.dump.bz2

Dump tape is compressed.

#還原etc.dump.bz2備份

[root@localhost ~]# ll -d /root/etc

drwxr-xr-x.103 root root 12288 6月 5 07:45 /root/etc

#在root下生成了etc目錄趋厉,里面的數(shù)據(jù)和/etc/目錄中的數(shù)據(jù)完全一致

(五)Linux dd命令詳解:數(shù)據(jù)備份寨闹,并在備份過程中進(jìn)行格式轉(zhuǎn)換

dd 命令主要用來進(jìn)行數(shù)據(jù)備份胶坠,并且可以在備份的過程中進(jìn)行格式轉(zhuǎn)換。其實 dd 命令可以把源數(shù)據(jù)復(fù)制成目標(biāo)數(shù)據(jù)繁堡,而且不管源數(shù)據(jù)是文件沈善、分區(qū)、磁盤還是光盤椭蹄,都可以進(jìn)行數(shù)據(jù)備份闻牡。

dd 命令的基本格式如下:

[root@localhost ~]# dd if="輸入文件" of="輸出文件" bs="數(shù)據(jù)塊" count="數(shù)量"

參數(shù):

if:定義輸入數(shù)據(jù)的文件,也可以是輸入設(shè)備绳矩;

of:定義輸出數(shù)據(jù)的文件罩润,也可以是輸出設(shè)備;

bs:指定數(shù)據(jù)塊的大小翼馆,也就是定義一次性讀取或?qū)懭攵嗌僮止?jié)割以。模式數(shù)據(jù)塊大小是 512 字節(jié);

count:指定 bs 的數(shù)量应媚;

conv=標(biāo)志:依據(jù)標(biāo)志轉(zhuǎn)換文件严沥。標(biāo)志有以下這些:

ascii:由 EBCDIC 碼轉(zhuǎn)換至?ASCII?碼;

ebcdic:由 ASCII 碼轉(zhuǎn)換至 EBCDIC 碼中姜;

ibm:由 ASCII 碼轉(zhuǎn)換至替換的 EBCDIC 碼消玄;

block:將結(jié)束字符塊里的換行替換成等長的空格;

unblock:將 cbs 大小的塊中尾部的空格替換為一個換行符;

lcase:將大寫字符轉(zhuǎn)換為小寫翩瓜;

notrunc:不截斷輸出文件受扳;

ucase:將小寫字符轉(zhuǎn)換為大寫;

swab:交換每一對輸入數(shù)據(jù)字節(jié)兔跌;

noerror:讀取數(shù)據(jù)發(fā)生錯誤后仍然繼續(xù)辞色;

sync:將每個輸入數(shù)據(jù)塊以 NUL 字符填滿至 ibs 的大小浮定;當(dāng)配合 block 或 unblock 時相满,會以空格代替 NUL 字符填充;

【例 1】備份文件

[root@localhost ~]# dd if=/etc/httpd/conf/httpd.conf of=/tmp/httpd.bak

記錄了67+1 的讀入

#數(shù)據(jù)占了寫滿的67個數(shù)據(jù)塊桦卒,以及1個沒有寫滿的數(shù)據(jù)塊

記錄了67+1 的寫出

#默認(rèn)數(shù)據(jù)塊大小是512字節(jié)

34439字節(jié)(34 kB)已復(fù)制立美,0.0524897 秒,656 kB/秒

#如果要備份文件方灾,那么dd命令和cp命令非常類似

[root@localhost ~]# ll -h /tmp/httpd.bak

-rw-r--r--.1 root root 34K 6月 5 18:04 /tmp/httpd.bak

#查看一下生成的備份文件的大小

【例 2】備份分區(qū)為一個備份文件

[root@localhost ~]# df -h

文件系統(tǒng) 容量 已用 可用 已用%% 掛載點

/dev/sda3 20G 2.0G 17G 11% /

tmpfs 306M 0 306M 0% /dev/shm

/dev/sda1 194M 27M 157M 15% /boot

/dev/sr0 3.5G 3.5G 0 100% /mnt/cdrom

#查看一下分區(qū)容量建蹄,我們備份/boot分區(qū)

[root@localhost ~]# dd if=/dev/sda1 of=/tmp/boot.bak

#備份完成

[root@localhost ~]# ll -h /tmp/boot.bak

-rw-r--r--.1 root root 200M 6月 5 18:14 /tmp/boot.bak

#查看生成的備份文件

#如果需要恢復(fù),則執(zhí)行以下命令

[root@localhost ~]# dd if=/tmp/boot.bak of=/dev/sda1

如果想要把分區(qū)直接備份成另一個分區(qū)裕偿,就需要生成一個新的分區(qū)洞慎,這個分區(qū)的大小不能比源分區(qū)小,只能和源分區(qū)大小一致或比它大嘿棘。命令如下:

[root@localhost ~]# dd if=/dev/sda1 of=/dev/sdb1

#如果需要恢復(fù)劲腿,則只需把輸入項和輸出項反過來即可,命令如下

[root@localhost ~]# dd if=/dev/sdb1 of=/dev/sda1

【例 3】整盤備份

[root@localhost ~]# dd if=/dev/sda of=/dev/sdb

#把磁盤a備份到磁盤b

[root@localhost ~]# dd if=/dev/sda of=/tmp/disk.bak

#把磁盤a備份成文件disk.bak

#備份恢復(fù)

#如果要備份到另一塊硬盤上鸟妙,那么焦人,當(dāng)源硬盤數(shù)據(jù)損壞時,只需用備份硬盤替換源硬盤即可

#如果要備份成文件重父,那么在恢復(fù)時需要把備份數(shù)據(jù)復(fù)制到其他Linux中花椭,然后把新硬盤安裝到這臺Linux

#服務(wù)器上,再把磁盤備份數(shù)據(jù)復(fù)制到新硬盤中房午。命令如下

[root@localhost ~]# dd if=/tmp/disk.bak of=/dev/sdb

【例 4】復(fù)制軟盤

[root@localhost ~]# dd if=/dev/fd0 of=/tmp/fd.bak

#在Linux中軟盤的設(shè)備文件名是/dev/fd0

#這條命令先把軟盤中的數(shù)據(jù)保存為臨時數(shù)據(jù)文件

[root@localhost ~]# dd if=/tmp/fd.bak of=/dev/fd0

#然后更換新的軟盤矿辽,把數(shù)據(jù)備份復(fù)制到新軟盤中,就實現(xiàn)了軟盤的復(fù)制

如果需要備份的是光盤郭厌,那么在 Linux 中就是使用 dd 命令制作光盤的 ISO 鏡像的袋倔。命令如下:

#制作光盤ISO鏡像

[root@localhost ~]# dd if=/dev/cdrom of-/tmp/cd.iso #把光盤中所有的數(shù)據(jù)制作成ISO鏡像

[root@localhost ~J # mkdir /mnt/cd

#建立一個新的掛載點

[root@localhost ~]# mount -o loop /tmp/cd.iso /mnt/cd #掛栽ISO文件到掛載點

[root@localhost ~]# cd /mnt/cd

#進(jìn)入掛栽點

[root@localhost cd]# ls

CentOS_BuildTag images RELEASE-NOTES-en-tJS.html RPM-GPG-KEY-CentOS-Debug-6 TRANS.TBL

EULA??? isolinux repodata?? RPM-GPG-KEY-CentOS-Security-6

GPL Packages RPM-GPG-KEY-CentOS-6 RPM-GPG-KEY-CentOS-Testing-6

#數(shù)據(jù)是光盤當(dāng)中的數(shù)據(jù),這個ISO鏡像是可以被當(dāng)作真正的光盤使用的

我們有時需要制作指定大小的文件,比如沪曙,在增加 swap 分區(qū)時奕污,就需要建立指定大小的文件,這時也使用 dd 命令液走。命令如下:

[root@localhost ~]# dd if=/dev/zero of=/tmp/testfile bs=1M count=10

#數(shù)據(jù)輸入項是/dev/zero會向目標(biāo)文件中不停地寫入二進(jìn)制的0

#指定數(shù)據(jù)塊大小是1MB

#指定生成10個數(shù)據(jù)塊碳默。也就是定義輸出的文件大小為10MB

記錄了10+0 的讀入

#顯示數(shù)據(jù)占滿了10個數(shù)據(jù)塊

記錄了10+0 的寫出

#不過這里數(shù)據(jù)塊的大小已經(jīng)是1MB了

10485760字節(jié)(10 MB)已復(fù)制贾陷,0.00709902 秒,1.5 GB/秒

[root@localhost ~]# ll -h /tmp/testfile

-rw-r--r--.1 root root 10M 6月 5 18:46 /tmp/testfile

#生成的testfile文件的大小剛好是10MB

dd 命令在進(jìn)行整盤復(fù)制時嘱根,類似于 GHOST 工具的功能髓废,不過通過 dd 命令復(fù)制出來的硬盤數(shù)據(jù)要比 GHOST 復(fù)制出來的硬盤數(shù)據(jù)穩(wěn)定得多。雖然 dd 命令功能強(qiáng)大该抒,不過也有一個明顯的缺點慌洪,就是復(fù)制的時間較長,復(fù)制 100GB 的數(shù)據(jù)需要 15~25 分鐘(根據(jù)服務(wù)器的性能不同而不同)凑保。

實現(xiàn)數(shù)據(jù)備份還有非常多的方法和工具冈爹,比如 tar 和 cpio 命令。至于網(wǎng)絡(luò)復(fù)制工具欧引,如 rsync 和 scp 等频伤,需要較完善的網(wǎng)絡(luò)知識才能夠?qū)W習(xí),這里不再介紹芝此。

(六)Linux rsync命令用法詳解:支持本地備份和遠(yuǎn)程備份

在?Linux?系統(tǒng)下憋肖,數(shù)據(jù)備份的工具很多,除了前面介紹了 tar婚苹、cpio岸更、dd 命令之外,本節(jié)再介紹一個用來備份數(shù)據(jù)的命令膊升,就是?rsync怎炊。

從字面意思上,rsync 可以理解為 remote sync(遠(yuǎn)程同步)用僧,但它不僅可以遠(yuǎn)程同步數(shù)據(jù)(類似于 scp 命令)结胀,還可以本地同步數(shù)據(jù)(類似于 cp 命令)赞咙。不同于 cp 或 scp 的一點是责循,使用 rsync 命令備份數(shù)據(jù)時,不會直接覆蓋以前的數(shù)據(jù)(如果數(shù)據(jù)已經(jīng)存在)攀操,而是先判斷已經(jīng)存在的數(shù)據(jù)和新數(shù)據(jù)的差異院仿,只有數(shù)據(jù)不同時才會把不相同的部分覆蓋。

在系統(tǒng)學(xué)習(xí) rsync 命令之前速和,請確認(rèn)你的 Linux 系統(tǒng)中已經(jīng)安裝有此命令歹垫,如果沒有,可以直接使用 yum install -y rsync 命令安裝颠放。

講解 rsync 用法之前排惨,為了讓大家對此命令有一個整體的認(rèn)識,這里先舉個例子:

[root@localhost ~]# rsync -av /etc/passwd /tmp/1.txt

sending incremental file list

sent 34 bytes? received 15 bytes? 98.00 bytes/sec

total size is 1432? speedup is 29.22

此例中碰凶,通過執(zhí)行 rsync 命令暮芭,實現(xiàn)了將 /etc/passwd 文件本地同步到 /tmp/ 目錄下鹿驼,并改名為 1.txt。

除此之外辕宏,rsync 命令還支持遠(yuǎn)程同步數(shù)據(jù)畜晰,也就是將本地的數(shù)據(jù)備份到遠(yuǎn)程機(jī)器上。比如說瑞筐,我們知道遠(yuǎn)程機(jī)器的 IP 地址為 192.168.188.128凄鼻,則使用 rsync 命令備份 passwd 文件的執(zhí)行命令為:

[root@localhost ~]# rsync -av /etc/passwd 192.168.188.128:/tmp/1.txt

The authenticity of host '192.168.188.128 (192.168.188.128)' can't be established.

ECDSA key fingerprint is 26:e3:97:e7:bb:ae:17:33:ea:aa:Oc:5f:37:Oe:9e:fa.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.l68.l88.l28' (ECDSA) to the list of known hosts.

root@192.168.188.128's password: <-- 輸入密碼

sending incremental file list

sent 31 bytes received 12 bytes 7.82 bytes/sec

total size is 1432 speedup is 54.91

注意,首次遠(yuǎn)程連接時聚假,會提示是否要繼續(xù)連接块蚌,輸入 yes 即可。另外膘格,當(dāng)成功建立連接后匈子,需要輸入目標(biāo)系統(tǒng)的 root 密碼。

通過以上 2 個實例闯袒,讀者應(yīng)該能對“rsync既支持本地備份數(shù)據(jù)虎敦,還支持遠(yuǎn)程備份數(shù)據(jù)”有了直觀的認(rèn)識。那么政敢,rsync 命令要怎樣使用呢其徙?

rsync 命令的基本格式有多種,分別是:

[root@localhost ~]# rsync [OPTION] SRC DEST

[root@localhost ~]# rsync [OPTION] SRC [USER@]HOST:DEST

[root@localhost ~]# rsync [OPTION] [USER@]HOST:SRC DEST

[root@localhost ~]# rsync [OPTION] [USER@]HOST::SRC DEST

[root@localhost ~]# rsync [OPTION] SRC [USER@]HOST::DEST

針對以上 5 種命令格式喷户,rsync 有 5 種不同的工作模式:

第一種用于僅在本地備份數(shù)據(jù)唾那;

第二種用于將本地數(shù)據(jù)備份到遠(yuǎn)程機(jī)器上;

第三種用于將遠(yuǎn)程機(jī)器上的數(shù)據(jù)備份到本地機(jī)器上褪尝;

第四種和第三種是相對的闹获,同樣第五種和第二種是相對的,它們各自之間的區(qū)別在于登陸認(rèn)證時使用的驗證方式不同河哑。

要知道避诽,使用 rsync 在遠(yuǎn)程傳輸數(shù)據(jù)(備份數(shù)據(jù))前,是需要進(jìn)行登陸認(rèn)證的璃谨,這個過程需要借助 ssh 協(xié)議或者 rsync 協(xié)議才能完成沙庐。在 rsync 命令中,如果使用單個冒號(:)佳吞,則默認(rèn)使用 ssh 協(xié)議拱雏;反之,如果使用兩個冒號(::)底扳,則使用 rsync 協(xié)議铸抑。

ssh 協(xié)議和 rsync 協(xié)議的區(qū)別在于,rsync 協(xié)議在使用時需要額外配置衷模,增加了工作量鹊汛,但優(yōu)勢是更加安全菇爪;反之,ssh 協(xié)議使用方便柒昏,無需進(jìn)行配置凳宙,但有泄漏服務(wù)器密碼的風(fēng)險。

另外职祷,以上幾種格式中各個參數(shù)的含義如下:

SRC:用來表示要備份的目標(biāo)數(shù)據(jù)所在的位置(路徑)氏涩;

DEST:用于表示將數(shù)據(jù)備份到什么位置;

USER@:當(dāng)做遠(yuǎn)程同步操作時有梆,需指明系統(tǒng)登錄的用戶名是尖,如果不顯示指定,默認(rèn)為以 root 身份登錄系統(tǒng)并完成同步操作泥耀。

rsync 命令提供使用的 OPTION 及功能如表 1 所示饺汹。

表 1 rsync 選項及功能

OPTION選項功能

-a這是歸檔模式,表示以遞歸方式傳輸文件痰催,并保持所有屬性兜辞,它等同于-r、-l夸溶、-p逸吵、-t、-g缝裁、-o扫皱、-D 選項。-a 選項后面可以跟一個 --no-OPTION捷绑,表示關(guān)閉 -r韩脑、-l、-p粹污、-t段多、-g、-o厕怜、-D 中的某一個衩匣,比如-a --no-l 等同于 -r、-p粥航、-t、-g生百、-o递雀、-D 選項。

-r表示以遞歸模式處理子目錄蚀浆,它主要是針對目錄來說的缀程,如果單獨傳一個文件不需要加 -r 選項搜吧,但是傳輸目錄時必須加。

-v表示打印一些信息杨凑,比如文件列表滤奈、文件數(shù)量等。

-l表示保留軟連接撩满。

-L表示像對待常規(guī)文件一樣處理軟連接蜒程。如果是 SRC 中有軟連接文件,則加上該選項后伺帘,將會把軟連接指向的目標(biāo)文件復(fù)制到 DEST昭躺。

-p表示保持文件權(quán)限。

-o表示保持文件屬主信息伪嫁。

-g表示保持文件屬組信息领炫。

-D表示保持設(shè)備文件信息。

-t表示保持文件時間信息张咳。

--delete表示刪除 DEST 中 SRC 沒有的文件帝洪。

--exclude=PATTERN表示指定排除不需要傳輸?shù)奈募忍柡竺娓募呕梢允峭ㄅ浞J剑ㄈ?*.txt)碟狞。

--progress表示在同步的過程中可以看到同步的過程狀態(tài),比如統(tǒng)計要同步的文件數(shù)量婚陪、 同步的文件傳輸速度等族沃。

-u表示把 DEST 中比 SRC 還新的文件排除掉,不會覆蓋泌参。

-z加上該選項脆淹,將會在傳輸過程中壓縮。

以上也僅是列出了 async 命令常用的一些選項沽一,對于初學(xué)者來說盖溺,記住最常用的幾個即可,比如 -a铣缠、-v烘嘱、-z、--delete 和 --exclude蝗蛙。

如果想查看 async 提供的所有選項蝇庭,可直接執(zhí)行 async 命令。

為了更好的演示各個選項的功能捡硅,需要做一些準(zhǔn)備工作哮内,執(zhí)行如下命令:

#新建rsync目錄

[root@localhost ~]# mkdir rsync

[root@localhost ~]# cd rsync

#在rsync目錄中,創(chuàng)建test1目錄

[root@localhost rsync]# mkdir test1

[root@localhost rsync]# cd test1

#在test1目錄中壮韭,分別創(chuàng)建名為 1北发、2纹因、3、/root.123.txt 文件

[root@localhost test1]# touch 1 2 3 /root/123.txt

[root@localhost test1]# ln -s /root/123.txt ./123.txt

[root@localhost test1]# ls -l

total 0

-rw-r--r--. 1 root root 0 0ct 23 07:34 1

lrwxrwxrwx. 1 root root 13 0ct 23 08:34 123.txt -> /root/123.txt

-rw-r--r--. 1 root root 0 0ct 23 07:34 2

-rw-r--r--. 1 root root 0 0ct 23 07:34 3

[root@localhost test1]# cd ..

#回到rsync目錄

[root@localhost rsync]#

在此基礎(chǔ)上琳拨,下面挑選了幾個常用的 OPTION 選項瞭恰,給大家舉例說明它們的用法。

rsync -a 選項

首先來看看 -a 選項的用法狱庇,如下所示:

[root@localhost rsync]# rsync -a test1 test2

[root@localhost rsync]# ls test2

test1

[root@localhost rsync]# ls test2/test1/

1? 123.txt? 2? 3

這里有一個問題惊畏,我們本來是想把 test1 目錄中的內(nèi)容直接放到 test2 目錄中,可結(jié)果 rsync 命令卻新建了 test2 目錄僵井,然后把 test1 放到 test2 中陕截。

如果想要實現(xiàn)將 test1 目錄中的內(nèi)容直接備份到 test2 目錄中,需修改上面的命令為:

[root@localhost rsync]#rm -rf test2

[root@localhost rsync]# rsync -a test1/ test2/

[root@localhost rsync]# ls test2/

1? 123.txt? 2? 3

可以看到批什,只需給 test1 和 test2 目錄后添加 / 斜杠即可农曲。

前面講過,使用 -a 選項驻债,等同于同時使用 -r乳规、-l、-p合呐、-t暮的、-g、-o淌实、-D 選項冻辩,且 -a 還可以和 --no-OPTION 一并使用。下面再來看看 -l 選項的作用:

[root@localhost rsync]# rm -rf test2

[root@localhost rsync]# rsync -av test1/ test2/

sending incremental file list

created directory test2

./

1

skipping non-regular file "123.txt"

2

3

sent 200 bytes received 72 bytes 544.00 bytes/sec

total size is 13? speedup is 0.05

這里使用 -v 選項拆祈,可以看到恨闪,拷貝過程中跳過了非普通文件 123.txt,其實 123.txt 是一個軟鏈接文件放坏,如果不使用 -l 選項咙咽,系統(tǒng)將不理會軟鏈接文件。

rsync --delete選項

通過表 1 可以看到淤年,--delete 選項用來--delete 刪除 DEST 中 SRC 沒有的文件钧敞。例如:

#拷貝 test1 目錄下的數(shù)據(jù)

[root@localhost rsync]# rsync -a test1/ test2

#刪除 test1/123.txt 文件

[root@localhost rsync]# rm -f test1/123.txt

[root@localhost rsync]# ls test1/

1 2 3

[root@localhost rsync]# rsync -av test1/ test2/

sending incremental file list

./

sent 55 bytes? received 15 bytes 140.00 bytes/sec

total size is 0? speedup is 0.00

[root@localhost rsync]# ls test2/

1 123.txt 2 3

可以看到,當(dāng)對 test1 目錄刪除了 123.txt 文件之后麸粮,再次備份并沒有對 test2 目錄中的 123.txt 文件產(chǎn)生任何影響溉苛。

下面使用 --delete 選項,再次執(zhí)行拷貝命令豹休,如下所示:

[root@localhost rsync]# rsync -av --delete test1/ test2/

sending incremental file list

deleting 123.txt

sent 52 bytes? received 12 bytes 128.00 bytes/sec

total size is 0? speedup is 0.00

[root@localhost rsync]# ls test2/

1 2 3

可以看到炊昆,使用 --delete 選項進(jìn)行備份數(shù)據(jù)時,test1 目錄一旦做了改變威根,那么 test2 也會做相應(yīng)改變凤巨。

不僅如此,如果在 DEST 中增加文件洛搀,而 SRC 中不包含這些文件敢茁,那么在使用 --delete 選項做同步備份操作時,DEST 新增的這些文件會被刪除留美。例如:

[root@localhost rsync]# touch test2/4

[root@localhost rsync]# ls test1/

1 2 3

[root@localhost rsync]# ls test2/

1 2 3 4

[root@localhost rsync]# rsync -a --delete test1/ test2/

[root@localhost rsync]# ls test2/

1 2 3

受到篇幅的限制彰檬,有關(guān) rsync 命令其他選項的用法,本節(jié)不再給出具體實例谎砾,有興趣的讀者可自行編寫代碼進(jìn)行測試逢倍。


原文參考:http://c.biancheng.net/linux_tutorial/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市景图,隨后出現(xiàn)的幾起案子较雕,更是在濱河造成了極大的恐慌,老刑警劉巖挚币,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亮蒋,死亡現(xiàn)場離奇詭異,居然都是意外死亡妆毕,警方通過查閱死者的電腦和手機(jī)慎玖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笛粘,“玉大人趁怔,你說我怎么就攤上這事⌒角埃” “怎么了润努?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長序六。 經(jīng)常有香客問我任连,道長,這世上最難降的妖魔是什么例诀? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任随抠,我火速辦了婚禮,結(jié)果婚禮上繁涂,老公的妹妹穿的比我還像新娘拱她。我一直安慰自己,他們只是感情好扔罪,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布秉沼。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪唬复。 梳的紋絲不亂的頭發(fā)上矗积,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機(jī)與錄音敞咧,去河邊找鬼棘捣。 笑死,一個胖子當(dāng)著我的面吹牛休建,可吹牛的內(nèi)容都是我干的乍恐。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼测砂,長吁一口氣:“原來是場噩夢啊……” “哼茵烈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起砌些,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤呜投,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后寄症,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宙彪,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年有巧,在試婚紗的時候發(fā)現(xiàn)自己被綠了释漆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡篮迎,死狀恐怖男图,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情甜橱,我是刑警寧澤逊笆,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站岂傲,受9級特大地震影響难裆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜镊掖,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一乃戈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧亩进,春花似錦症虑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽匪蝙。三九已至,卻和暖如春习贫,著一層夾襖步出監(jiān)牢的瞬間逛球,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工沈条, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留需忿,地道東北人诅炉。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓蜡歹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親涕烧。 傳聞我的和親對象是個殘疾皇子月而,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容