linux I/O 棧 預習(上)

二、預習

在我們進去device mapper的dm dedup學習之前,我們先要預習一下,什么是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系統中非常重要的LVM和軟RAID還有加密、快照等特性的實現。

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使用虛擬設備(dm-n)來提供與其他虛擬或者真實的塊設備的數據傳送,當然數據能夠在其中改變(比如raid會增加冗余信息),也可以不改變(比如linear就是透傳),或者就是更厲害的功能,加密等吧,可見這個device mapper一定可以是個常青樹,什么和存儲有關系的都可以用它實現。

我們大致了解的device mapper,我們還需要了解一下device mapper在linux I/O stack中的位置吧;
還是那個老圖,我們盡量看看,順便把其他的模塊也講解一下;
linux I/O 棧  預習(上)

鑒于篇幅有限,我們就從上往下講,因為本人從事linux I/O stack的研究已經有5年的時間,大概每個位置都是玩過的,但并非每個module都是專家,并且kernel I/O stack里面的存儲的知識都非常的深,所以要入坑存儲的同行的請三思啊。
ok,廢話不多說,我們從最上層開始講,這里只是概要性的分析,不涉及特別深。
linux I/O 棧  預習(上)
我把圖截成上下兩半,以block layer為分層。上面應該就是大概非常熟悉的三大塊,LIO、虛擬塊設備、VFS虛擬文件系統。
1、LIO(linux io target)
做傳統SAN存儲和分布式塊存儲的同學應該對LIO比較熟悉吧,至少都是聽過的,早些年我們做iscsi或者fc存儲的時候,那時候我們大多數用IET和SCST,后來隨著linux kernel對LIO的逐步完善,目前LIO可以支持非常多種類的fabric和backcore。
fabric:tcm_fc(我覺得可能是用于emulex的光纖卡),iscsi_target_mod(是對接linux kernel網絡協議棧)、tcm_qla2xxx(對接qlogic的光纖卡)、sbp_target(IEEE 1394),tcm_usb_target(做usb移動硬盤可以用上)等等吧,其中iscsi_target_mod可以被賦予infiniband的支持,會成為一個新的target為iser。
backcore:backcore簡單來講就是虛擬scsi lun的mod,它能夠解析和仿真幾乎常見的所有標準SCSI命令,讓它看起來和SCSI DISK內的LUN一樣。LIO能夠提供幾種backcore,core_file(通常是文件系統的某個文件,或者直接是將塊設備作為文件導出),core_iblock(能夠將linux塊設備導出),pscsi(能夠直接導出,比如直接導出/dev/sdb等)。
2、vfs(虛擬文件系統)
微微一笑,這里我不太懂,屬于瞎寫。
文件系統在linux中占有舉足輕重的作用,他可能是用戶和開發者最便捷能夠訪問資源的方式。
linux為用戶開發了很多可操作的文件系統。大致有以下幾種:
block-based fs:這類文件系統通常后端設備是一個或多個塊設備,它們的實體是一個能夠組織數據的表結構,通過查表(metadata)來實現文件描述符到塊的映射訪問,這能非常有效的進行我們日常所有的大部分工作和生活需求。我們比較常用的是ext2/3/4,xfs和btrfs等等。
Network fs:網絡文件系統,他們的誕生是要去解決,block-based文件不能夠有效共享文件而產生的。他們從本質上講都是分布式的,因為文件可能被多個client使用,這種文件系統通常需要非常復雜的分布式協議作為支持,如我們最開始接觸的NFS,從windows兼容的smb2fs,還有目前非常流行的ceph,目前來看ceph并非和它的前輩一樣只能夠作為NAS的導出協議,它能夠提供新興的存儲接口對象存儲和高效的塊存儲。
psedudo fs:偽文件系統。大家應該都會對/dev/sda這種塊設備直接進行過dd等操作,從vfs來看,/dev/sda這種bdev也是一種偽文件系統,包括我們更加數據的/proc、/sys、/configfs等開發者經常用來變成使用的接口,他們的注冊和使用都非常簡單,能夠高效的幫助我們完成各種系統功能的配置和查看。
special psedudo fs:這類特別偽文件系統,是非常重要的,我們經常會把/tmp和/var掛載為tmpfs,用來加速不需要持久化的信息,來提供運行速度。

大致說完了上面的兩個LIO和vfs后,我們就需要來講講top block device,也就是可能被導出的block decive,在linux中,被LIO和VFS使用,等價于被mount,即使獨占模式,保護塊設備的訪問安全。
top block device:也就是虛擬塊設備,這個在linux 里主要就是咱們經常用的LVM drbd md-raid bcache和device mapper,它們就是在/drivers/md/下面,他們就是真正承上啟下的塊虛擬化模塊,每個模塊都是比較有意思。這些內容會在后續的文章中一一講解。

【本文由51cto博客作者 “底層存儲技術” https://blog.51cto.com/12580077 個人創作,公眾號:存儲之谷】,如需轉載,請于本人聯系,謝謝。

轉載于:https://blog.51cto.com/12580077/2310233

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537591.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537591.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537591.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java.util.concurrent.RejectedExecutionException

報錯日志 java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask12e2cb93 rejected from java.util.concurrent.ThreadPoolExecutor6ecd396b[Running, pool size 10, active threads 10, queued tasks 200, completed tasks 0] 原因&am…

springboot controller 訪問 404

兩種解決方式: 1、因為SpringBoot的項目啟動類,會只掃描該包下的文件或者改包下所有子包內的文件,只要你把該文件移動到啟動類的相同目錄報下就可以。 2、就是在該類上面加者在啟動類上添加注解 ComponentScan(basePackages {"com.boota…

fegin需要實現類_【第24條】靜態成員類優于非靜態成員類

第24條靜態成員類優于非靜態成員類嵌套類(nested class)是指定義在另一個類的內部的類。嵌套類存在的目的應該只是為它的外圍類(enclosing class)提供服務。如果嵌套類將來可能會用于其他的某個環境中,它就應該是頂層類(top-level class)。嵌套類有四種:…

.h與.cpp

本質上沒什么區別。 cpp:c plus plus,就表示為c原文件。 .h文件實現的功能是聲明.cpp文件中需要使用的變量、函數及宏定義等。 .h文件就像是一個接口,具體的實現可以在.cpp中,也可以在.h中。轉載于:https://www.cnblogs.com/keguniang/p/9877581.html

Springboot 多線程的使用

直接上代碼 線程配置類 package zengmg.nbpi.com.thread;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework…

vlookup函數練習_為什么職場要學excel函數?看這個案例演示:自動計算快遞價格...

在上一篇文章里面,我們講了如何整理完成一個規范化的表格,以便于下一步的函數計算。最初的信息內容如圖所示。經過整理,我們得到了表2這樣的規范化表格。現在,我們就通過表2來實現快遞費用自動計算,最終實現圖中這樣的…

%@ taglib prefix=c uri=http://java.sun.com/jsp/jstl/core %會報錯

有些時候&#xff0c;<% taglib prefix"c" uri"http://java.sun.com/jsp/jstl/core" %>會報錯&#xff0c;錯誤提示為&#xff1a; Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core" 主要原因是缺少 jst…

藍牙芯片排行_7月TWS 全球品牌出貨量排行榜出爐

數據鑄造影響力撰文 / 旭日大數據編輯 / 柏序旭日大數據公布了2020年7月全球TWS品牌銷量排行榜&#xff0c;與上期數據相比&#xff0c;全球品牌七排名TOP20汰換率為15%&#xff0c;其中DOSS&#xff0c;萬魔、BOSE跌出前20&#xff0c;廣州由我&#xff0c;Tzumi登榜&…

project 打印的時候上面的表格和下面的圖例中間有個很大的空白,這塊東西怎么能去掉呢?

“打印預覽”的“頁面設置”里面&#xff0c;“頁面”選項卡里的“縮放”項設為1頁寬&#xff0c;1頁高就可以了&#xff0c; 當然如果你的任務項比較少的話&#xff0c;怎么調也不容易去掉下面的空白 操作如下圖&#xff08;下圖的任務太少&#xff0c;去不掉空白的&#xf…

加密機工作原理_端子機壓力檢測裝置工作原理

上期我們介紹了端子機壓力管理裝置的使用常識&#xff0c;這期我們介紹端子機壓力管理裝置的工作原理&#xff0c;端子機壓接管理裝置&#xff0c;有單通道壓力監測和雙通道壓力監測二種&#xff0c;雙通道壓力監測裝置&#xff0c;一般用于雙頭端子壓接機上&#xff0c;一臺主…

win10解決java多版本java -version問題

電腦環境 先安裝了Jdk8&#xff0c;后安裝了jdk11.&#xff08;發現Jdk11沒有單獨的jre&#xff0c;官網也不提供下載&#xff0c;集成在一起了&#xff09; Java -version 將環境變量切換為 JDK11 后 javac -version 是 java編譯環境是jdk11了&#xff0c;但 java -versio…

vs設計窗口不見了_碳纖維的巔峰:VS沛納海616V3

各位朋友&#xff0c;你們好&#xff01;歡迎大家關注XYZ腕表俱樂部。專注腕表資訊&#xff0c;致力于做腕表拆解測評&#xff0c;為大家普及分享有價值的腕表知識&#xff0c;真正讓大家實實在在透明玩表。想了解更多&#xff0c;歡迎搜索&#xff1a;XYZ腕表俱樂部。可以讓您…

CSharpGL(49)試水OpenGL軟實現

CSharpGL(49)試水OpenGL軟實現 CSharpGL迎來了第49篇。本篇內容是用C#編寫一個OpenGL的軟實現。暫且將其命名為SoftGL。 目前已經實現了由Vertex Shader和Fragment Shader組成的Pipeline&#xff0c;其效果與顯卡支持的OpenGL實現幾乎相同。下圖左是常規OpenGL渲染的結果&#…

SonarQube結合IDEA實現代碼檢測

環境準備 1.SonarQube下載&#xff1a;https://www.sonarqube.org/downloads/ 建議用最新版本&#xff0c;SonarQube與idea的結合 需要SonarQube很多插件&#xff0c;需要借助idea的SonarLint 插件。 不同的SonarQube版本&#xff0c;有不同的插件版本 idea的SonarLint 插件…

二維小波變換_【外文文獻速讀】實時二維水波模擬

題目&#xff1a;Water surface wavelets 作者&#xff1a;Stefan Jeschke&#xff0c; Tom?Sk?ivan&#xff0c; MatthiasMller-Fischer&#xff0c; Nuttapong Chentanez&#xff0c; Miles Macklin&#xff0c; Chris Wojtan

技術開發(委托)合同怎么寫?

一直基于寧波市科技局備案合同模板簽訂合同&#xff0c;并完成科技局備案工作&#xff0c;成功了N次&#xff0c;直接分享模板&#xff0c;該模板通過了法務審核&#xff0c;財務審核&#xff0c;只需要批示修改相關內容即可&#xff0c;一份技術開發委托合同&#xff0c;十幾分…

最常用的15個前端表單驗證JS正則表達式

2019獨角獸企業重金招聘Python工程師標準>>> 在表單驗證中&#xff0c;使用正則表達式來驗證正確與否是一個很頻繁的操作&#xff0c;本文收集整理了15個常用的JavaScript正則表達式&#xff0c;其中包括用戶名、密碼強度、整數、數字、電子郵件地址&#xff08;Ema…

程序員個人外包合同怎么寫?

分享一份工作上經常用到的個人外包合同協議&#xff0c;該協議通過了法務與財務審核&#xff0c;兼顧甲乙雙方利益&#xff0c;程序員接私活必備&#xff01;&#xff01;&#xff01;&#xff01; ---需要電子word版&#xff0c;請關注--------- 回復&#xff1a;個人外包合同…

rocketmq新擴容的broker沒有tps_深入研究RocketMQ消費者是如何獲取消息的

前言小伙伴們&#xff0c;國慶都過的開心嗎&#xff1f;國慶后的第一個工作日是不是很多小伙伴還沉浸在假期的心情中&#xff0c;沒有工作狀態呢&#xff1f;那王子今天和大家聊一聊RocketMQ的消費者是如何獲取消息的&#xff0c;通過學習知識來找回狀態吧。廢話不多說&#xf…

蘇寧 11.11:倉庫內多 AGV 協作的全局路徑規劃算法研究

本文為『InfoQ x 蘇寧 2018雙十一』技術特別策劃系列文章之一。 1. 背景 隨著物聯網和人工智能的發展&#xff0c;越來越多的任務漸漸的被機器人取代&#xff0c;機器人逐漸在發展中慢慢進入物流領域&#xff0c;“智能叉車”&#xff0c;AGV&#xff08;Automated Guided Vehi…