您好,登錄后才能下訂單哦!
二、預(yù)習(xí)
在我們進(jìn)去device mapper的dm dedup學(xué)習(xí)之前,我們先要預(yù)習(xí)一下,什么是device mapper,和為什么device mapper能夠做塊重刪。
1、device mapper
照舊,我們先看一下維基百科對它的介紹。
The device mapper is a framework provided by the Linux kernel for mapping physical block devices onto higher-level virtual block devices. It forms the foundation of the logical volume manager (LVM), software RAIDs and dm-crypt disk encryption, and offers additional features such as file system snapshots.
注1:這一段的意思就是說device mapper是我們linux系統(tǒng)中非常重要的LVM和軟RAID還有加密、快照等特性的實(shí)現(xiàn)。
Device mapper works by passing data from a virtual block device, which is provided by the device mapper itself, to another block device. Data can be also modified in transition, which is performed, for example, in the case of device mapper providing disk encryption or simulation of unreliable hardware behavior.
注2:這一段的意思是說device mapper使用虛擬設(shè)備(dm-n)來提供與其他虛擬或者真實(shí)的塊設(shè)備的數(shù)據(jù)傳送,當(dāng)然數(shù)據(jù)能夠在其中改變(比如raid會增加冗余信息),也可以不改變(比如linear就是透傳),或者就是更厲害的功能,加密等吧,可見這個(gè)device mapper一定可以是個(gè)常青樹,什么和存儲有關(guān)系的都可以用它實(shí)現(xiàn)。
我們大致了解的device mapper,我們還需要了解一下device mapper在linux I/O stack中的位置吧;
還是那個(gè)老圖,我們盡量看看,順便把其他的模塊也講解一下;
鑒于篇幅有限,我們就從上往下講,因?yàn)楸救藦氖耹inux I/O stack的研究已經(jīng)有5年的時(shí)間,大概每個(gè)位置都是玩過的,但并非每個(gè)module都是專家,并且kernel I/O stack里面的存儲的知識都非常的深,所以要入坑存儲的同行的請三思啊。
ok,廢話不多說,我們從最上層開始講,這里只是概要性的分析,不涉及特別深。
我把圖截成上下兩半,以block layer為分層。上面應(yīng)該就是大概非常熟悉的三大塊,LIO、虛擬塊設(shè)備、VFS虛擬文件系統(tǒng)。
1、LIO(linux io target)
做傳統(tǒng)SAN存儲和分布式塊存儲的同學(xué)應(yīng)該對LIO比較熟悉吧,至少都是聽過的,早些年我們做iscsi或者fc存儲的時(shí)候,那時(shí)候我們大多數(shù)用IET和SCST,后來隨著linux kernel對LIO的逐步完善,目前LIO可以支持非常多種類的fabric和backcore。
fabric:tcm_fc(我覺得可能是用于emulex的光纖卡),iscsi_target_mod(是對接linux kernel網(wǎng)絡(luò)協(xié)議棧)、tcm_qla2xxx(對接qlogic的光纖卡)、sbp_target(IEEE 1394),tcm_usb_target(做usb移動硬盤可以用上)等等吧,其中iscsi_target_mod可以被賦予infiniband的支持,會成為一個(gè)新的target為iser。
backcore:backcore簡單來講就是虛擬scsi lun的mod,它能夠解析和仿真幾乎常見的所有標(biāo)準(zhǔn)SCSI命令,讓它看起來和SCSI DISK內(nèi)的LUN一樣。LIO能夠提供幾種backcore,core_file(通常是文件系統(tǒng)的某個(gè)文件,或者直接是將塊設(shè)備作為文件導(dǎo)出),core_iblock(能夠?qū)inux塊設(shè)備導(dǎo)出),pscsi(能夠直接導(dǎo)出,比如直接導(dǎo)出/dev/sdb等)。
2、vfs(虛擬文件系統(tǒng))
微微一笑,這里我不太懂,屬于瞎寫。
文件系統(tǒng)在linux中占有舉足輕重的作用,他可能是用戶和開發(fā)者最便捷能夠訪問資源的方式。
linux為用戶開發(fā)了很多可操作的文件系統(tǒng)。大致有以下幾種:
block-based fs:這類文件系統(tǒng)通常后端設(shè)備是一個(gè)或多個(gè)塊設(shè)備,它們的實(shí)體是一個(gè)能夠組織數(shù)據(jù)的表結(jié)構(gòu),通過查表(metadata)來實(shí)現(xiàn)文件描述符到塊的映射訪問,這能非常有效的進(jìn)行我們?nèi)粘K械拇蟛糠止ぷ骱蜕钚枨?。我們比較常用的是ext2/3/4,xfs和btrfs等等。
Network fs:網(wǎng)絡(luò)文件系統(tǒng),他們的誕生是要去解決,block-based文件不能夠有效共享文件而產(chǎn)生的。他們從本質(zhì)上講都是分布式的,因?yàn)槲募赡鼙欢鄠€(gè)client使用,這種文件系統(tǒng)通常需要非常復(fù)雜的分布式協(xié)議作為支持,如我們最開始接觸的NFS,從windows兼容的smb2fs,還有目前非常流行的ceph,目前來看ceph并非和它的前輩一樣只能夠作為NAS的導(dǎo)出協(xié)議,它能夠提供新興的存儲接口對象存儲和高效的塊存儲。
psedudo fs:偽文件系統(tǒng)。大家應(yīng)該都會對/dev/sda這種塊設(shè)備直接進(jìn)行過dd等操作,從vfs來看,/dev/sda這種bdev也是一種偽文件系統(tǒng),包括我們更加數(shù)據(jù)的/proc、/sys、/configfs等開發(fā)者經(jīng)常用來變成使用的接口,他們的注冊和使用都非常簡單,能夠高效的幫助我們完成各種系統(tǒng)功能的配置和查看。
special psedudo fs:這類特別偽文件系統(tǒng),是非常重要的,我們經(jīng)常會把/tmp和/var掛載為tmpfs,用來加速不需要持久化的信息,來提供運(yùn)行速度。
大致說完了上面的兩個(gè)LIO和vfs后,我們就需要來講講top block device,也就是可能被導(dǎo)出的block decive,在linux中,被LIO和VFS使用,等價(jià)于被mount,即使獨(dú)占模式,保護(hù)塊設(shè)備的訪問安全。
top block device:也就是虛擬塊設(shè)備,這個(gè)在linux 里主要就是咱們經(jīng)常用的LVM drbd md-raid bcache和device mapper,它們就是在/drivers/md/下面,他們就是真正承上啟下的塊虛擬化模塊,每個(gè)模塊都是比較有意思。這些內(nèi)容會在后續(xù)的文章中一一講解。
【本文由51cto博客作者 “底層存儲技術(shù)” https://blog.51cto.com/12580077 個(gè)人創(chuàng)作,公眾號:存儲之谷】,如需轉(zhuǎn)載,請于本人聯(lián)系,謝謝。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。