在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux文件系統與持久性內存

Q4MP_gh_c472c21 ? 來源:Linux閱碼場 ? 作者:Linux閱碼場 ? 2020-11-26 14:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1、Linux 虛擬文件系統介紹

在 Linux 系統中一切皆文件,除了通常所說的狹義的文件以外,目錄、設備、套接字和管道等都是文件。

文件系統在不同的上下文中有不同的含義:

在存儲設備上組織文件的方法,包括數據結構和訪問方法,到存儲設備。

按照某種文件系統類型格式化的一塊存儲介質。我們常說在某個目錄下掛載或卸載文件系統, 這里的文件系統就是這種意思。

內核中負責管理和存儲文件的模塊,即文件系統模塊。

Linux文件系統的架構如下圖所示,分為用戶空間、內核空間和硬件3個層面:

注意:上圖中方塊對齊關系,很多時候我們分不清內核文件系統中 "cache" 和 "buffer" 的區別,畢竟兩者都可以翻譯為 "緩存區",但是從圖中,就可以很清晰的看出所謂的 "cache" 其實指的就是圖中的 "頁緩存" 它是針對文件來說的,除了 "DAX"(直接訪問方式的設備)它不使用 "緩存",其他的閃存類,塊設備類設備都會使用到 "頁緩存" 也就是 "cache",而 "buffer" 其實指的就是圖中的 "塊緩存" 它是針對塊設備的。

1.1、硬件層面

外部存儲設備分為塊設備、閃存和 NVDIMM 設備 3 類,塊設備主要有以下兩種:

機械硬盤:機械硬盤的讀寫單位是扇區。訪問機械硬盤的時候,需要首先沿著半徑 方向移動磁頭尋找磁道,然后轉動盤片找到扇區。

閃存類塊設備:使用閃存作為存儲介質,里面的控制器運行固化的驅動程序,驅動 程序的功能之一是閃存轉換層(Flash Translation Layer,FTL),把閃存轉換為塊設備, 外表現為塊設備。常見的閃存類塊設備是在個人計算機和筆記本電腦上使用的固態硬盤 splid State Drives,SSD),以及在手機和平板電腦上使用的嵌入式多媒體存儲卡(embedded Multi Media Card,eMMc)和通用閃存存儲(Universal Flash Storage,UFS)。閃存類塊設備相對機械硬盤的優勢是:訪問速度快,因為沒有機械操作:抗振性很高, 便于攜帶。

閃存(Flash Memory)的主要特點如下:

在寫入數據之前需要擦除一個擦除塊,因為向閃存寫數據只能把一個位從 1 變成 0,不能從 0 變成 1,擦除的目的是把擦除塊的所有位設置為 1

一個擦除塊的最大擦除次數有限,NOR閃存的擦除塊的最大擦除次數是 10^4~10^3, NAND 閃存的擦除塊的最大擦除次數是 10^3~10^6。

閃存按存儲結構分為 NAND 閃存和 NOR 閃存,兩者的區別如下:

NOR閃存的容量小,NAND 閃存的容量大。

NOR 閃存支持按字節尋址,支持芯片內執行(eXecute In Place,XIP),可以直接 在閃存內執行程序,不需要把程序讀到內存中; NAND 閃存的最小讀寫單位是頁或子頁, 一個擦除塊分為多個頁,有的 NAND 閃存把頁劃分為多個子頁。

NOR 閃存讀的速度比 NAND 閃存塊,寫的速度和擦除的速度都比 NAND 閃存慢

NOR 閃存沒有壞塊;NAND 閃存存在壞塊,主要是因為消除壞塊的成本太高 NOR 閃存適合存儲程序,一般用來存儲引導程序比如 uboot 程序;NAND 閃存適 合存儲數據。

為什么要針對閃存專門設計文件系統?主要原因如下:

NAND 閃存存在壞塊,軟件需要識別并且跳過壞塊。

需要實現損耗均衡( wear leveling),損耗均衡就是使所有擦除塊的擦除次數均衡, 避免一部分擦除塊先損壞。

機械硬盤和 NAND 閃存的主要區別如下:

機械硬盤的最小讀寫單位是扇區,扇區的大小一般是 512 字節:NAND 閃存的最 小讀寫單位是頁或子頁。

機械硬盤可以直接寫入數據:NAND 閃存在寫入數據之前需要擦除一個擦除塊。

機械硬盤的使用壽命比 NAND 閃存長:機械硬盤的扇區的寫入次數沒有限制:NAND 閃存的擦除塊的擦除次數有限。

機械硬盤隱藏壞的扇區,軟件不需要處理壞的扇區:NAND 閃存的壞塊對軟件可 見,軟件需要處理壞塊。

NVDIMM(Nonn-Volatile DIMM,非易失性內存:DIMM 是 Dual-Inline-Memory-Modules 的縮寫,表示雙列直插式存儲模塊,是內存的一種規格)設備把 NAND 閃存、內存和超級電容集成到一起,訪問速度和內存一樣快,并且斷電以后數據不會丟失。在斷電的瞬間, 超級電容提供電力,把內存中的數據轉移到 NAND 閃存。

1.2、內核空間層面

在內核的目錄 fs 下可以看到,內核支持多種文件系統類型。為了對用戶程序提供統一的 文件操作接口,為了使不同的文件系統實現能夠共存,內核實現了一個抽象層,稱為虛擬文件系統(Virtual File System,VFS),也稱為虛擬文件系統切換(Virtual Filesystem Switch,VFS) 文件系統分為以下幾種。

塊設備文件系統,存儲設備是機械硬盤和固態硬盤等塊設備,常用的塊設備文件 系統是 EXT 和 btrfs。EXT 文件系統是 Linux 原創的文件系統,目前有 3 個 成版本:EXT[2-4]。

閃存文件系統,存儲設備是 NAND 閃存和 NOR 閃存,常用的閃存文件系統是 JFFS2 ,(日志型閃存文件系統版本2, Journalling Flash File System version2)和 UBIFS(無序區塊鏡像文件系統, Unsorted Block Image File System)。內存文件系統的文件在內存中,斷電以后文件丟失,常用的內存文件系統是 tmpfs, 用來創建臨時文件。

偽文件系統,是假的文件系統,只是為了使用虛擬文件系統的編程接口,常用的 偽文件系統如下所示:

sockfs,這種文件系統使得套接字(socket)可以使用讀文件的接口 read 接收報文, 使用寫文件的接口 write 發送報文。

proc 文件系統,最初開發 proc 文件系統的目的是把內核中的進程信息導出到用戶空間, 后來擴展到把內核中的任何信息導出到用戶空間,通常把 proc 文件系統掛載在目錄 "proc" 下。

sysfs,用來把內核的設備信息導出到用戶空間,通常把 sysfs 文件系統掛載在目錄 "/sys"下。

hugetlbfs,用來實現標準巨型頁。

cgroup 文件系統,控制組(control group cgroup)用來控制一組進程的資源, cgroup 文件系統使管理員可以使用寫文件的方式配置 cgroup。

cgroup2 文件系統, cgroup2 是 cgroup 的第二個版本, cgroup2 文件系統使管理員可 以使用寫文件的方式配置 cgroup2。

這些文件系統又各自有著相關的特性:

頁緩存:訪問外部存儲設備的速度很慢,為了避免每次讀寫文件時訪問外部存儲設備,文件系統模塊為每個文件在內存中創建了一個緩存,因為緩存的單位是頁,所以稱為頁緩存。

塊設備層:塊設備的訪問單位是塊,塊大小是扇區大小的整數倍。內核為所有塊設備實現了統一 的塊設備層。

塊緩存:為了避免每次讀寫都需要訪問塊設備,內核實現了塊緩存,為每個塊設備在內存中創 建一個塊緩存。緩存的單位是塊,塊緩存是基于頁緩存實現的。

IO 調度器:訪問機械硬盤時,移動磁頭尋找磁道和扇區很耗時,如果把讀寫請求按照扇區號排序, 可以減少磁頭的移動,提高吞吐量。IO 調度器用來決定讀寫請求的提交順序,針對不同的 使用場景提供了多種調度算法:NOOP(No Operation)、CFQ(完全公平排隊, Complete Fair Queuing)和 deadline(限期)。NOOP 調度算法適合閃存類塊設備,CFQ 和 deadline調度算 法適合機械硬盤。

塊設備驅動程序:每種塊設備需要實現自己的驅動程序。

內核把閃存稱為存儲技術設備( Memory Technology Device,MTD),為所有閃存實現 了統一的 MTD 層,每種閃存需要實現自己的驅動程序。針對 NVDIMM 設備,文件系統需要實現 DAX(Direct Access直接訪問:X 代表 eXciting,沒有意義,只是為了讓名字看起來酷),繞過頁緩存和塊設備層,把 NVDIMM 設備里面的內存直接映射到進程或內核的虛擬地址空間。

libnvdimm 子系統提供對 3 種 NVDIMM 設備的支持:持久內存(persistent memory,PMEM) 模式的 NVDIMM 設備,塊設備(block,BLK)模式的 NVDIMM 設備,以及同時支持PMEM 和 BLK 兩種訪問模式的 NVDIMM 設備。PMEM 訪問模式是把 NVDIMM 設備當作內存,BLK 訪問模式是把 NVDIMM 設備當作塊設備。每種 NVDIMM 設備需要實現自己的驅動程序。

2、下一代存儲技術NVIDMM

NVDIMM (Non-Volatile Dual In-line Memory Module) 是一種可以隨機訪問的, 非易失性內存。非易失性內存指的是即使在不通電的情況下, 數據也不會消失。因此可以在計算機掉電 (unexpected power loss), 系統崩潰和正常關機的情況下, 依然保持數據。NVDIMM 同時表明它使用的是 DIMM 封裝, 與標準DIMM 插槽兼容, 并且通過標準的 DDR總線進行通信??紤]到它的非易失性, 并且兼容傳統DRAM接口, 又被稱作Persistent Memory。

2.1、種類

目前, 根據 JEDEC 標準化組織的定義, 有三種NVDIMM 的實現。分別是:

NVDIMM-N

指在一個模塊上同時放入傳統 DRAM 和 flash 閃存,計算機可以直接訪問傳統 DRAM。支持按字節尋址,也支持塊尋址。通過使用一個小的后備電源,為在掉電時數據從 DRAM 拷貝到閃存中提供足夠的電能;當電力恢復時再重新加載到 DRAM 中。

NVDIMM-N示意圖

NVDIMM-N 的主要工作方式其實和傳統 DRAM是一樣的。因此它的延遲也在10的1次方納秒級。而且它的容量,受限于體積,相比傳統的 DRAM 也不會有什么提升。

同時它的工作方式決定了它的 flash 部分是不可尋址的,而且同時使用兩種介質的作法使成本急劇增加,但是 NVDIMM-N 為業界提供了持久性內存的新概念。目前市面上已經有很多基于NVIMM-N的產品。

NVDIMM-F

指使用了 DRAM 的DDR3或者 DDR4 總線的flash閃存。我們知道由 NAND flash 作為介質的 SSD,一般使用SATA,SAS 或者PCIe 總線。使用 DDR 總線可以提高最大帶寬,一定程度上減少協議帶來的延遲和開銷,不過只支持塊尋址。

NVDIMM-F 的主要工作方式本質上和SSD是一樣的,因此它的延遲在 10的1次方微秒級。它的容量也可以輕松達到 TB 以上。

NVDIMM-P

這是一個目前還沒有發布的標準 (Under Development),預計將與 DDR5 標準一同發布。按照計劃,DDR5將比DDR4提供雙倍的帶寬,并提高信道效率。這些改進,以及服務器和客戶端平臺的用戶友好界面,將在各種應用程序中支持高性能和改進的電源管理。

NVDIMM-P 實際上是真正 DRAM 和 flash 的混合。它既支持塊尋址, 也支持類似傳統 DRAM 的按字節尋址。它既可以在容量上達到類似 NAND flash 的TB以上, 又能把延遲保持在10的2次方納秒級。

通過將數據介質直接連接至內存總線,CPU 可以直接訪問數據,無需任何驅動程序或 PCIe 開銷。而且由于內存訪問是通過64 字節的 cache line,CPU 只需要訪問它需要的數據,而不是像普通塊設備那樣每次要按塊訪問。

Intel 公司在2018年5月發布了基于3D XPoint 技術的Intel Optane DC Persistent Memory??梢哉J為是NVDIMM-P 的一種實現。

Intel Optane DC Persistent Memory

2.2、硬件支持

應用程序可以直接訪問NVDIMM-P, 就像對于傳統 DRAM那樣。這也消除了在傳統塊設備和內存之間頁交換的需要。但是向持久性內存里寫數據是和向普通DRAM里寫數據共享計算機資源的。包括處理器緩沖區, L1/L2緩存等。

需要注意的是, 要使數據持久, 一定要保證數據寫入了持久性內存設備, 或者寫入了帶有掉電保護的buffer。軟件如果要充分利用持久性內存的特性, 指令集架構上至少需要以下支持:

寫的原子性

表示對于持久性內存里任意大小的寫都要保證是原子性的, 以防系統崩潰或者突然掉電。IA-32 和 IA-64 處理器保證了對緩存數據最大64位的數據訪問 (對齊或者非對齊) 的寫原子性。因此, 軟件可以安全地在持久性內存上更新數據。這樣也帶來了性能上的提升, 因為消除了copy-on-write 或者 write-ahead-logging 這種保證寫原子性的開銷。

高效的緩存刷新(flushing)

出于性能的考慮, 持久性內存的數據也要先放入處理器的緩存(cache)才能被訪問。經過優化的緩存刷新指令減少了由于刷新 (CLFLUSH) 造成的性能影響。

a. CLFLUSHOPT 提供了更加高效的緩存刷新指令

b. CLWB (Cache Line Write Back) 指令把cache line上改變的數據寫回內存 (類似CLFLUSHOPT),但是無需讓這條 cache line 轉變成無效狀態(invalid, MESI protocol),而是轉換成未改變的獨占狀態(Exclusive)。CLWB 指令實際上是在試圖減少由于某條cache line刷新所造成的下次訪問必然的cache miss。

提交至持久性內存(Committing to Persistence)

在現代計算機架構下,緩存刷新的完成表明修改的數據已經被回寫至內存子系統的寫緩沖區。但是此時數據并不具有持久性。為了確保數據寫入持久性內存,軟件需要刷新易失性的寫緩沖區或者在內存子系統的其他緩存。新的用于持久性寫的提交指令 PCOMMIT 可以把內存子系統寫隊列中的數據提交至持久性內存。

非暫時store操作的優化(Non-temporal Store Optimization)

當軟件需要拷貝大量數據從普通內存到持久性內存中時(或在持久性內存之間拷貝), 可以使用弱順序, 非暫時的store操作 (比如使用MOVNTI 指令)。因為Non-temporal store指令可以隱式地使要回寫的那條cache line 失效, 軟件就不需要明確地flush cache line了(see Section 10.4.6.2. of Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 1)。

小結

上面介紹了NVDIMM 的幾種實現方式,以及為了發揮NVDIMM-P 的性能所做的硬件上的優化和支持。下面會繼續介紹軟件方面的支持,包括編程模型、編程庫、SPDK方面的支持等。

在上篇的 NVDIMM介紹中,我們講解了NVDIMM幾種硬件上的實現方式,以及為了支持和優化性能所做的硬件上的改變。接下來讓我們來討論一下為了充分發揮NVDIMM的性能,軟件方面做了哪些支持。有些人可能會有疑問, 為什么用起來這么麻煩?既然是持久性內存,不是應該關機什么樣, 開機什么樣, 就可以了嗎?其實目前來看, 這種想法還不會變為現實。因為除了DRAM是易失性的,比如 cache,寄存器這種也是易失性的。僅僅把內存做成持久性的也不能達成這樣的目的。另一個問題是, memory leak。如果發生了內存泄漏,重啟一下就好了。那如果是持久性內存的泄漏呢?這也是一個很棘手的問題。Pmem有些方面類似于內存,也有些方面類似于存儲。但是,通常上我們不會認為Pmem能夠替代內存或存儲。其實,可以把它看作是一種補充,填補了內存和存儲之間巨大的差異。

SPDK 在 17.10 中開始引入對于Pmem的支持。Pmem在SPDK的bdev層暴露為一個塊設備,使用快設備接口和上層進行通信。如下圖所示。

從圖中我們可以看到libpmemblk 把塊操作轉換成了字節操作。它是怎么做到的呢?在介紹libpmemblk 和 它背后的PMDK之前, 我們了解一下基礎知識。

mmap和DAX

首先,我們來看傳統的I/O方式, 即緩存I/O (Buffered I/O). 大多數操作系統默認的IO操作方式都是緩存IO。該機制使IO數據緩存在操作系統的page cache 中, 也就是說, 數據會被先拷貝到操作系統的內核空間的緩沖區中,然后才會從內核空間的緩沖區拷貝到指定的用戶地址空間。

在Linux 中, 這種訪問文件的方式就是通過read/write 系統調用來實現,如上圖。接下來, 我們比較一下內存映射IO mmap()。

接下來, 我們比較一下內存映射IO mmap()。

通過mmap獲得了對應文件的一個指針,然后就像操作內存一樣進行賦值或者做memcpy/strcpy. 這種我們稱之為load/store操作(這種操作一般需要msync、fsync來落盤)。

mmap因為建立了文件到用戶空間的映射關系,可以看作是把文件直接拷貝到用戶空間,減少了一次數據拷貝。但是mmap依然需要依靠page cache。

講完了mmap,那么DAX是什么呢?DAX即direct access,這個特性是基于mmap的。而DAX的區別在于完全不需要page cache,直接對存儲設備訪問,所以它就是為了NVDIMM而生的。應用對于mmap的文件操作,是直接同步到NVDIMM上的。DAX目前在XFS, EXT4, Windows的 NTFS 上都已經支持。需要注意的是, 使用這個模式,要對應用程序或者文件系統進行修改。

2.3、NVM Programming Model

NVM Programming Model 大致定義了三種使用方式。

2.3.1 最左邊Management 主要是通過driver提供的API對NVDIMM進行管理, 比如查看容量信息、健康狀態、固件版本、固件升級、模式配置等等。

2.3.2 中間, 作為存儲快設備使用, 使用支持NVDIMM driver 的文件系統和內核, 應用程序不用做任何修改,通過標準文件接口訪問NVDIMM。

2.3.3 第三種, 基于文件系統的DAX特性,通過load/store操作,不需要page cache,同步落盤,沒有系統調用, 沒有中斷。這也是NVM Programming Model 的核心, 能夠充分釋放NVDIMM的性能優勢。但它的缺點在于,應用程序可能需要做一下改變。

PMDK

libpmemblk 實現了一個駐留在pmem中的同樣大小的塊的數組。里面每個塊對于突然掉電,程序崩潰等情況依然保持原子事務性。libpmemblk是基于libpmem庫的,libpmem是PMDK中提供的一個更底層的庫, 尤其是對于flush的支持。它能夠追蹤每次對pmem的store操作,并保證數據落盤為持久性數據。

除此以外, PMDK 還提供了其他編程庫, 比如 libpmemobj,libpmemlog,libvmmalloc 等。感興趣可以訪問其主頁獲取更多信息。

結語

至此,對于NVDIMM硬件和軟件上的不同, 大家都有了一個大致的認識。Intel 在2018年5月發布了基于3D XPoint 技術的Intel Optane DC Persistent Memory,引發了NVDIMM爆點。

2.4、上述內容可做如下的概述

NVIDMM分類

NVIDMM-N:memory mapped DRAM,提供字符訪問接口,在三種產品中性能最好,容量最小

NVDIMM-F:memory mapped Flush,只提供塊設備接口。Nand Flush直接鏈接到Memory controller channel。

NVIDMM-P:Under Development,提供塊設備和字符設備訪問接口。

特性

NVDIMM-N:NVDIMM-N既可以用作緩存,又可以作為塊存儲設備來用。典型代表是類似intel 的AEP。

NVIDMM-F:不同于NVIDMM-N主要用作緩存,NVIDMM-F主要用作存儲。可以用來快速構建高密度的內存池存儲池。

2.4.1 構建基于NVDMM的文件系統

門為PMEM設計的文件系統是NOVA Filesystem,感興趣的讀者可以參考NOVA的github。

ZUFS作為來自于NetApp的一個項目,ZUFS的全稱是Zero-copy User Filesystem。聲稱是實現了完全的zero-copy,甚至文件系統的metadata都是zero-copy的。ZUFS主要是為了PMEM設計,但是也可以支持傳統的磁盤設備,相當于是FUSE的zero-copy版本,是對FUSE的性能的提升。

在用作DRAM的模式下:

2.4.2.1 支持全系統掉電保護, 不少場景下為了防止異常掉電丟數據的commit and flush 的兩階段提交方法,可以省略成一階段的commit on write 的方法

2.4.2.2 為DRAM和SSD物理之間提供了一個新的存儲層

2.4.2.3 由于用作DRAM的時候,其訪問速度比SSD可能有1~3個數量級的提升,在一些文件系統中可以去掉對page cach的依賴,這樣反而更能控制上層業務的平均延時和服務穩定性。

DAX:顧名思義,DAX就是Direct Access, bypass page cache。讀寫直接操作PMEM上的數據,文件系統需要在mount 的時候,加入 "-o dax"參數。DAX極大地提高了文件系統在PMEM設備上的性能,但是還有一些問題沒有解決,比如:

文件系統的metadata還是需要使用page cache或buffer cache。

"-o dax" mount option是對整個文件系統的,不能做更細粒度的控制。

2.4.3 沒有一個API來告訴應用訪問的文件是不是可以DAX訪問的。

3、NVDIMM在Linux下的實現

持久內存是一種新型的計算機儲存,其速度接近動態 RAM (DRAM),但同時具備 RAM 的按字節尋址能力以及固態硬盤 (SSD) 的性能;與傳統的 RAM 一樣,持久內存直接安裝在主板上的內存插槽中。因此,它的物理外形規格與 RAM 相同,以 DIMM 的形式提供。這些內存稱為 NVDIMM:非易失性雙列直插式內存模塊。

不過與 RAM 不同,持久內存在多個方面類似于基于閃存的 SSD。后兩者采用固態內存電路的形式,但除此之外,兩者都提供非易失性儲存:系統斷電或者重啟動后,內存中的內容會得到保留。使用這兩種媒體時,寫入數據的速度比讀取數據要慢;兩者都支持有限的重新寫入周期數。最后,與 SSD 一樣,如果在特定的應用方案中更適合對持久內存進行扇區級別的訪問,則也可以這樣做。

不同的型號使用不同形式的電子儲存媒體,例如 Intel 3D XPoint,或者將 NAND 閃存與 DRAM 結合使用。另外,行業正在開發新形式的非易失性 RAM。這意味著,不同的供應商和 NVDIMM 型號會提供不同的性能和持久性特征。

由于涉及的儲存技術處于早期開發階段,不同供應商的硬件可能會施加不同的限制。因此,以下敘述適用于一般性的場合。

持久內存的速度最多比 DRAM 要慢 10 倍,但比閃存要快大約 1000 倍??稍谄渲邪醋止澲匦聦懭霐祿幌裨陂W存中一樣,需要擦除整個扇區,然后重新寫入數據。盡管重新寫入周期數有限,但大部分形式的持久內存可以應對數百萬次重新寫入,相比之下,閃存只能應對數千個周期。

這會產生兩種重要后果:使用最新的技術無法運行僅包含持久內存的系統,因此無法實現完全非易失性的主內存,必須混合使用傳統的 RAM 和 NVDIMM。操作系統和應用程序將在傳統的 RAM 中執行,而 NVDIMM 可提供極速的補充性儲存。

由于不同供應商的持久內存的性能特征不同,程序員可能需要考慮到特定服務器中 NVDIMM 的硬件規格,包括 NVDIMM 的數量,以及它們可以裝入到哪些內存插槽。顯然,這會對超級管理程序的使用、不同主機之間的軟件遷移等造成影響。

ACPI 標準版本 6 中定義了此新型儲存子系統。但是 libnvdimm 支持該標準頒布之前的 NVDIMM,可以相同的方式使用這些內存。

3.1、持久內存 (PMEM)

與 RAM 一樣,PMEM 儲存提供字節級別的訪問。使用 PMEM 時,單個名稱空間可以包含多個交錯式的 NVDIMM,使這些 NVDIMM 都可用作單個設備??赏ㄟ^兩種方式來配置 PMEM 名稱空間。

將 PMEM 與 DAX 搭配使用

為 Direct Access (DAX) 配置 PMEM 名稱空間后,訪問內存時會繞過內核的頁面超速緩存,并直接進入媒體。軟件可以單獨直接讀取或寫入該名稱空間的每個字節。

將 PMEM 與 BTT 搭配使用

與在傳統的磁盤驅動器中一樣,將按扇區訪問配置為以 BTT 模式運行的 PMEM 名稱空間,而不是像在 RAM 中一樣采用按字節尋址的模式。某個轉換表機制會將訪問活動批處理成扇區大小的單元。

BTT 的優點在于,儲存子系統會確保將每個扇區完全寫入到基礎媒體,如果某項寫入操作出于某種原因而失敗,則會取消注冊該操作。因此,無法在給定的扇區中進行部分寫入。此外,對 BTT 名稱空間的訪問會由內核超速緩存。缺點在于BTT 名稱空間不支持 DAX。

3.2、用于管理持久內存的工具

要管理持久內存,必須安裝 ndctl 包。安裝此包也會安裝 libndctl 包,后者提供一組用戶空間庫用于配置 NVDIMM。這些工具通過 libnvdimm 庫運行。該庫支持三種類型的 NVDIMM:

PMEM

BLK

同步 PMEM 和 BLK。

ndctl 實用程序提供一系列有用的手冊頁,可使用以下命令訪問這些:

ndctl help subcommand

要查看可用子命令的列表請使用:

ndctl --list-cmds

可用的子命令包括:

version:顯示 NVDIMM 支持工具的當前版本。

enable-namespace:使指定的名稱空間可供使用。

disable-namespace:阻止使用指定的名稱空間。

create-namespace:從指定的儲存設備創建新的名稱空間。

destroy-namespace:去除指定的名稱空間。

enable-region:使指定的區域可供使用。

disable-region:阻止使用指定的區域。

zero-labels:擦除設備中的元數據。

read-labels:檢索指定設備的元數據。

list:顯示可用的設備。

help:顯示有關工具用法的信息。

3.3、設置持久內存

3.3.1 查看可用的 NVDIMM 儲存

可以使用 ndctl list 命令列出系統中所有可用的 NVDIMM。在以下示例中,系統包含三個 NVDIMM,這些 NVDIMM 位于單個三通道交錯集內。

ndctl list --dimms [ { "dev":"nmem2", "id":"8089-00-0000-12325476" }, { "dev":"nmem1", "id":"8089-00-0000-11325476" }, { "dev":"nmem0", "id":"8089-00-0000-10325476" }]

如果結合不同的參數,ndctl list 還可以列出可用的區域。

注意:區域可能不會按數字順序顯示。

請注意,盡管只有三個 NVDIMM,但它們卻顯示為四個區域。

ndctl list --regions [ { "dev":"region1", "size":68182605824, "available_size":68182605824, "type":"blk" }, { "dev":"region3", "size":202937204736, "available_size":202937204736, "type":"pmem", "iset_id":5903239628671731251 }, { "dev":"region0", "size":68182605824, "available_size":68182605824, "type":"blk" }, { "dev":"region2", "size":68182605824, "available_size":68182605824, "type":"blk" }

空間以兩種不同的形式顯示:三個 BLK 類型的獨立 64 GB 區域,或者一個 PMEM 類型的合并 189 GB 區域,后者將三個交錯式 NVDIMM 中的所有空間表示為單個卷。

請注意,available_size 的顯示值與 size 的顯示值相同。這意味著尚未分配任何空間。

3.3.2 將儲存配置為使用 DAX 的單個 PMEM 名稱空間

第一個示例將三個 NVDIMM 配置成使用 Direct Access (DAX) 的單個 PMEM 名稱空間。第一個步驟是創建新的名稱空間。

ndctl create-namespace --type=pmem --mode=fsdax --map=memory{ "dev":"namespace3.0", "mode":"memory", "size":199764213760, "uuid":"dc8ebb84-c564-4248-9e8d-e18543c39b69", "blockdev":"pmem3"}

這會創建支持 DAX 的塊設備 /dev/pmem3。設備名稱中的 3 繼承自父區域編號(在本例中為 region3)。

--map=memory 選項從 NVDIMM 中設置出一部分 PMEM 儲存空間,以便可以使用這些空間來分配稱作結構頁面的內部內核數據結構。這樣,便可以將新的 PMEM 名稱空間與 O_DIRECT I/O 和 RDMA 等功能搭配使用。

最終 PMEM 名稱空間的容量之所以小于父 PMEM 區域,是因為有一部分持久內存預留給了內核數據結構。

接下來,我們校驗新的塊設備是否可用于操作系統:

fdisk -l /dev/pmem3Disk /dev/pmem3: 186 GiB, 199764213760 bytes, 390164480 sectorsUnits: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 4096 bytesI/O size (minimum/optimal): 4096 bytes / 4096 bytes

與其他任何驅動器一樣,在使用該設備之前,必須先將其格式化。在本示例中,我們使用 XFS 將其格式化:

mkfs.xfs /dev/pmem3

...

接下來,可將新的驅動器裝入到某個目錄:

mount -o dax /dev/pmem3 /mnt/pmem3

然后,可以校驗是否獲得了一個支持 DAX 的設備:

mount | grep dax/dev/pmem3 on /mnt/pmem3 type xfs (rw,relatime,attr2,dax,inode64,noquota)

結果是,我們已獲得一個使用 XFS 文件系統格式化的,且裝有 DAX 的 PMEM 名稱空間。

對該文件系統中的文件進行任何 mmap() 調用都會返回直接映射到 NVDIMM 上的持久內存的虛擬地址,并且會完全繞過頁面超速緩存。對該文件系統中的文件進行任何 fsync 或 msync 調用仍可確保將修改后的數據完全寫入到 NVDIMM。這些調用會刷新通過 mmap 映射在用戶空間中修改的任何頁面的關聯處理器超速緩存行。

3.3.2.1 去除名稱空間

在創建使用相同儲存的其他任何類型的卷之前,我們必須卸載此 PMEM 卷,然后將其去除。

首先卸載該卷:

umount /mnt/pmem3

然后禁用名稱空間:

ndctl disable-namespace namespace3.0disabled 1 namespace

然后刪除該卷:

ndctl destroy-namespace namespace3.0destroyed 1 namespace

3.3.3 創建使用 BTT 的 PMEM 名稱空間

在下一個示例中,我們將創建使用 BTT 的 PMEM 名稱空間。

ndctl create-namespace --type=pmem --mode=sector{ "dev":"namespace3.0", "mode":"sector", "uuid":"51ab652d-7f20-44ea-b51d-5670454f8b9b", "sector_size":4096, "blockdev":"pmem3s"}

接下來,校驗新設備是否存在:

fdisk -l /dev/pmem3sDisk /dev/pmem3s: 188.8 GiB, 202738135040 bytes, 49496615 sectorsUnits: sectors of 1 * 4096 = 4096 bytesSector size (logical/physical): 4096 bytes / 4096 bytesI/O size (minimum/optimal): 4096 bytes / 4096 bytes

與前面配置的支持 DAX 的 PMEM 名稱空間一樣,這個支持 BTT 的 PMEM 名稱空間也會占用 NVDIMM 中的所有可用儲存。

注意:設備名稱 (/dev/pmem3s) 中的尾部 s 表示扇區 (sector),可用于輕松辨別配置為使用 BTT 的名稱空間。

可按前一示例中所述格式化和裝入卷。

此處顯示的 PMEM 名稱空間不能使用 DAX,它會使用 BTT 來提供扇區寫入原子性。每次通過 PMEM 塊驅動程序進行扇區寫入時,BTT 都會分配一個新的扇區來接收新數據。完全寫入新數據后,BTT 將以原子方式更新其內部映射結構,使新寫入的數據可供應用程序使用。如果在此過程中的任意時間點發生電源故障,則寫入內容將會完全丟失,在這種情況下,應用程序可以訪問其舊數據,而這些數據仍舊保持不變。這可以防止出現所謂"扇區撕裂"的情況。

與其他任何標準塊設備一樣,可以使用某個文件系統格式化這個支持 BTT 的 PMEM 名稱空間,并在該文件系統中使用它。無法將該名稱空間與 DAX 搭配使用。但是,此塊設備中的文件的 mmap 映射將使用頁面超速緩存。

3.4、使用內存(DRAM)模擬持久化內存(Persistent Memory)

3.4.1 精簡版:一般內核只需要兩步即可進行持久性內存模擬

1)配置 grub:

vim /etc/default/grub

在里面加入如下語句,前一個為要模擬的大小,后一個為模擬的持久性內存在內存中開始的位置。也就是從內存4G開始,劃分32G來模擬持久性內存。

GRUB_CMDLINE_LINUX="memmap=32G!4G"

2)更新 grub

update-grub && reboot

3.4.2 深入分析

現在真實的持久化內存對于普通用戶來說還不可用,在進行實驗和測試的時候可能需要模擬持久化內存來進行使用,現在在一臺主機上測試劃分一塊內存區域來進行持久化內存的模擬。

環境:Ubuntu 18.04,一臺普通的Dell臺式機,運行內存 8G。

從Linux 4.0以來,Linux內核就具備了對持久性內存設備和仿真的支持,但為了便于配置,建議使用比4.2更新的內核。在內核中,使用對文件系統的DAX擴展創建了一個支持PMEM的環境。某些發行版(如Fedora 24及更高版本)內置了DAX/PMEM支持。

要了解內核是否支持DAX和PMEM,可以使用以下命令:

# egrep '(DAX|PMEM)' /boot/config-`uname –r`

如果內置了支持就會輸出類似如下的內容:

CONFIG_X86_PMEM_LEGACY_DEVICE=y CONFIG_X86_PMEM_LEGACY=y CONFIG_BLK_DEV_RAM_DAX=y CONFIG_BLK_DEV_PMEM=m CONFIG_FS_DAX=y CONFIG_FS_DAX_PMD=y CONFIG_ARCH_HAS_PMEM_API=y

但是很遺憾,我們的Ubuntu 18.04沒有內置對DAX/PMEM的支持,所以輸入上述命令什么輸出都沒有。接下來就在Ubuntu 18.04上模擬持久化內存。由于在Ubuntu 18.04上默認沒有支持DAX和PMEM,所以需要我們重新編譯內核,并在編譯內核的配置選項中加入相關設置。

在這里重新編譯內核,選擇的版本是Linux-4.15。

首先輸入命令:

make nconfig

進入到如下的配置界面,配置PMEM和DAX

Device Drivers NVDIMM Support PMEM; BLK; <*>BTT <*>NVDIMM DAX

配置PMEM

先進入到Device Drivers中,在Device Drivers中找到NVDIMM Support,需要將菜單欄向下翻,里面的內容并不只是我們看到的第一頁,NVDIMM Support 不在第一頁上。

進入到NVDIMM Support 中,將里面的內容都選中:

PMEM; BLK; <*>BTT <*>NVDIMM DAX

配置文件系統DAX

使用esc回到make nconfig的初始頁面

File System <*>Direct Access support

處理器特性設置

使用esc回到make nconfig的初始頁面

Processor type and features <*>Support non-standard NVDIMMs and ADR protected memory

其實上述所有過程,在Linux-4.15中默認都已經做了,也就是我只要 make nconfig就可以了。

所有這些配置好之后就開始編譯以及安裝內核:

# make -j9# make modules_install install

然后進入到新編譯的內核Linux-4.15中

使用下面的命令打印出e820表:

dmesg | grep e820

得到如下的內容:

[0.000000] e820: BIOS-provided physical RAM map: [0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d7ff] usable [0.000000] BIOS-e820: [mem 0x000000000009d800-0x000000000009ffff] reserved...

上述的usable就是我們可以使用的,從中可以劃分部分區域來作為我們的持久化內存,在這里建議選?。?/p>

[0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000021f5fffff] usable

其中0x0000000100000000就是4G,需要配置grub來設置:

vim /etc/default/grub

我在里面直接配置4G的空間來模擬持久化內存,在grub中添加如下語句,表示空間大小為4G,從4G內存開始的內存空間用來模擬持久化內存:

GRUB_CMDLINE_LINUX="memmap=4G!4G"

配置好后,更新grub:update-grub

使用下面的命令查看是否成功:

dmesg | grep user

可以看到,這塊區域已經被模擬為了持久化內存,然后我們在主機 /dev目錄下可以看到pmem0的設備,至此就可以對模擬的持久化內存進行使用了。

使用方式--建立DAX文件系統

以ext4文件系統為例

mkdir /mnt/pmemdirmkfs.ext4 /dev/pmem0mount -o dax /dev/pmem0 /mnt/pmemdir

這樣就將目錄 /mnt/pmem掛載到了持久化內存上,這個目錄在之后的使用過程中就會用到。

參考來源:如何在英特爾 架構服務器上仿真持久性內存

3.4.3 使用memmap內核選項

pmem驅動程序允許用戶基于直接訪問文件系統(DAX)來使用EXT4和XFS。添加了一個新的memmap選項,該選項支持保留一個或多個范圍的未分配內存以用于模擬的持久內存。memmap參數文檔在Linux內核的相關頁面上。這個特性是在v4.0內核中向上擴展的。kernelv4.15引入了性能改進,推薦用于生產環境。

memmap選項使用memmap=nn[KMG]!ss[KMG]格式;其中nn是要保留的區域的大小,ss是起始偏移量,[KMG]指定大小(以千字節、兆字節或千兆字節為單位)。配置選項通過GRUB傳遞給內核,更改GRUB菜單項和內核參數在Linux發行版本之間有所不同,下面是一些常見Linux發行版的說明。有關更多信息,請參閱正在使用的Linux發行版和版本的文檔。

內存區域將標記為e820類型12(0xc),這在引導時可見,使用dmesg命令查看這些消息。

$ dmesg | grep e820

GRUB配置中的'memmap=4G!12G':保留4GB內存,從12GB到16GB。有關詳細信息,請參閱如何為系統選擇正確的memmap選項。每個Linux發行版都有不同的方法來修改GRUB配置,按照發行版的文檔進行操作即可,下面提供了一些常見的發行版以供快速參考。

1)、Ubuntu

$ sudo vim /etc/default/grubGRUB_CMDLINE_LINUX="memmap=4G!12G"

更新完成grub后重啟機器

$ sudo update-grub2

2)、RHEL

$ sudo vi /etc/default/grubGRUB_CMDLINE_LINUX="memmap=4G!12G"

正式開始更新grub配置

On BIOS-based machines:

$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg

On UEFI-based machines:

$ sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

可以使用多個配置,下面建立了兩個2G大小的名稱空間

"memmap=2G!12G memmap=2G!14G" will create two 2GB namespaces, one in the 12GB-14GB memory address offsets, the other at 14GB-16GB.

主機重新啟動后,應該存在一個新的/dev/pmem{N}設備,在GRUB配置中指定的每個memmap區域都有一個。這些可以使用ls/dev/pmem*顯示,命名約定從/dev/pmem0開始,并為每個設備遞增。/dev/pmem{N}設備可用于創建DAX文件系統。

使用/dev/pmem設備創建并裝載文件系統,然后驗證是否為裝入點設置了dax標志,以確認啟用了dax功能。下面展示了如何創建和掛載EXT4或XFS文件系統。

1)、XFS

mkfs.xfs/dev/pmem0mkdir /pmem && mount -o dax /dev/pmem0 /pmemmount -v | grep /pmem/dev/pmem0 on /pmem type xfs (rw,relatime,seclabel,attr2,dax,inode64,noquota)

2)、EXT4

mkfs.ext4 /dev/pmem0mkdir /pmem && mount -o dax /dev/pmem0 /pmemmount -v | grep /pmem/dev/pmem0 on /pmem type ext4 (rw,relatime,seclabel,dax,data=ordered)

如何為系統選擇正確的memmap選項

為memmap內核參數選擇值時,必須考慮起始地址和結束地址代表可用的RAM。使用或與保留內存重疊可能導致損壞或未定義的行為,此信息可通過dmesg在e820表中輕松獲得。

下面的示例服務器具有16GiB內存,"可用"內存介于4GiB(0x100000000)和~16GiB(0x3ffffffff)之間:

$ dmesg | grep BIOS-e820[0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable[0.000000] BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved[0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved[0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000bffdffff] usable[0.000000] BIOS-e820: [mem 0x00000000bffe0000-0x00000000bfffffff] reserved[0.000000] BIOS-e820: [mem 0x00000000feffc000-0x00000000feffffff] reserved[0.000000] BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved[0.000000] BIOS-e820: [mem 0x0000000100000000-0x00000003ffffffff] usable

要保留4GiB和16GiB之間的12GiB可用空間作為模擬持久內存,語法如下:

memmap=12G!4G

重新啟動后一個新的用戶定義的e820表項顯示范圍現在是"persistent(type12)":

$ dmesg | grep user:[0.000000] user: [mem 0x0000000000000000-0x000000000009fbff] usable[0.000000] user: [mem 0x000000000009fc00-0x000000000009ffff] reserved[0.000000] user: [mem 0x00000000000f0000-0x00000000000fffff] reserved[0.000000] user: [mem 0x0000000000100000-0x00000000bffdffff] usable[0.000000] user: [mem 0x00000000bffe0000-0x00000000bfffffff] reserved[0.000000] user: [mem 0x00000000feffc000-0x00000000feffffff] reserved[0.000000] user: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved[0.000000] user: [mem 0x0000000100000000-0x00000003ffffffff] persistent (type 12)

fdisk或lsblk程序可用于顯示容量,例如:

# fdisk -l /dev/pmem0Disk /dev/pmem0: 12 GiB, 12884901888 bytes, 25165824 sectorsUnits: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 4096 bytesI/O size (minimum/optimal): 4096 bytes / 4096 bytes

# lsblk /dev/pmem0NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTpmem0 259:0 0 12G 0 disk /pmem

注意:大多數Linux發行版都啟用了內核地址空間布局隨機化(KASLR),這是由CONFIG_RANDOMIZE_BASE定義的。啟用后,內核可能會在沒有警告的情況下使用先前為持久內存保留的內存,從而導致損壞或未定義的行為,因此建議在16GiB或更低的系統上禁用KASLR。有關詳細信息,請參閱對應的Linux發行版文檔,因為每個發行版各不相同。

原文標題:萬字長文介紹Linux文件系統與持久性內存

文章出處:【微信公眾號:嵌入式ARM】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內核
    +關注

    關注

    3

    文章

    1415

    瀏覽量

    41263
  • 存儲
    +關注

    關注

    13

    文章

    4520

    瀏覽量

    87277
  • Linux
    +關注

    關注

    87

    文章

    11497

    瀏覽量

    213293

原文標題:萬字長文介紹Linux文件系統與持久性內存

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    飛凌嵌入式ElfBoard ELF 1板卡-文件系統簡介

    中,可以明顯地提高系統的性能。在Linux的啟動階段,initrd提供了一套機制,可以將內核映像和根文件系統一起載入內存。RamDisk是臨時
    發表于 06-19 17:22

    服務器數據恢復—ocfs2文件系統被格式化為Ext4文件系統的數據恢復案例

    服務器存儲數據恢復環境&故障: 人為誤操作將Ext4文件系統誤裝入一臺服務器存儲上的Ocfs2文件系統數據卷上,導致原Ocfs2文件系統被格式化為Ext4文件系統
    的頭像 發表于 06-10 12:03 ?182次閱讀
    服務器數據恢復—ocfs2<b class='flag-5'>文件系統</b>被格式化為Ext4<b class='flag-5'>文件系統</b>的數據恢復案例

    Linux文件系統打包及鏡像制作,觸覺智能RK3562開發板演示

    本文介紹Linux開發板文件系統打包及鏡像制作的方法,演示Linux文件系統打包及鏡像制作,適用于想將配置好的系統環境打包成鏡像批量燒錄。觸
    的頭像 發表于 04-28 16:45 ?286次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>文件系統</b>打包及鏡像制作,觸覺智能RK3562開發板演示

    如何正確選擇嵌入式文件系統?

    Linux嵌入式系統中,文件系統和緩存機制常導致數據存儲穩定性問題。本文通過案例分析原因,對比不同文件系統特性,為開發者提供優化建議,助力提升數據穩定性和
    的頭像 發表于 03-17 11:35 ?473次閱讀
    如何正確選擇嵌入式<b class='flag-5'>文件系統</b>?

    防止根文件系統破壞,OverlayRootfs 讓你的設備更安全

    多個文件系統層合并成一個單一的視圖,在Linux系統中廣泛應用。使用OverlayRootfs的設備可以很輕松的實現:根文件系統寫保護、恢復出廠設置功能。根
    的頭像 發表于 01-08 16:33 ?1376次閱讀
    防止根<b class='flag-5'>文件系統</b>破壞,OverlayRootfs 讓你的設備更安全

    Jtti:Linux中虛擬文件系統和容器化的關系

    Linux中,虛擬文件系統(VFS)和容器化技術之間有密切的關系。容器化是指通過使用容器來運行應用程序,而容器本質上是在宿主機上運行的獨立進程,它們通常共享宿主機的操作系統內核和部分文件系統
    的頭像 發表于 11-27 15:38 ?441次閱讀

    飛凌嵌入式ElfBoard ELF 1板卡-應用編程示例控制LED燈之sysfs文件系統

    sysfs文件系統概念 sysfs是Linux2.6以上的內核在發展迭代過程中衍生出來的一個功能,它的作用是通過一個內存文件系統將信息導出到用戶進程空間。
    發表于 10-18 09:31

    Linux文件系統的掛載過程

    Linux文件系統(rootfs)是Linux系統中所有其他文件系統和目錄的起點,它是內核啟動時掛載的第一個
    的頭像 發表于 10-05 16:50 ?914次閱讀

    如何構建Linux文件系統

    構建Linux文件系統是一個涉及多個步驟和概念的過程,它對于Linux系統的啟動和運行至關重要。
    的頭像 發表于 10-05 16:47 ?649次閱讀

    小型文件系統如何選擇?FatFs和LittleFs優缺點比較

    和刪除文件,實現了數據的持久化存儲和分層次的目錄結構。文件系統的存在極大地簡化了數據管理任務,提升了系統整體的穩定性和便利,對于
    的頭像 發表于 09-29 16:14 ?3676次閱讀
    小型<b class='flag-5'>文件系統</b>如何選擇?FatFs和LittleFs優缺點比較

    想提高開發效率,不要忘記文件系統

    ?同學們都知道,開發過程中文件系統的重要,同樣的,4G-Cat.1模組的文件系統也非常重要,它通常與數據傳輸速度、存儲效率,以及數據安全等有非常重要的關系,在應用開發中也非常重要。
    的頭像 發表于 09-21 08:18 ?512次閱讀
    想提高開發效率,不要忘記<b class='flag-5'>文件系統</b>

    如何更改Linux文件系統終端顯示顏色

    自己制作的簡單 Linux 文件系統,你會發現終端顯示為黑白色,很不好看
    的頭像 發表于 08-12 17:29 ?1206次閱讀
    如何更改<b class='flag-5'>Linux</b><b class='flag-5'>文件系統</b>終端顯示顏色

    如何修改buildroot和debian文件系統

    本文檔主要介紹在沒有編譯環境的情況下,如何修改buildroot和debian文件系統方法,如在buildroot文件系統中添加文件、修改目錄等文件操作,在debian
    的頭像 發表于 07-22 17:46 ?844次閱讀
    如何修改buildroot和debian<b class='flag-5'>文件系統</b>

    Linux高級文件系統管理詳解

    階的文件系統就得要學習,本章我們會介紹磁盤陣列 (RAID),及邏輯卷軸文件系統 (LVM),這些工具都可以幫助你管理與維護使用者可用的磁盤容量.
    的頭像 發表于 07-16 16:31 ?878次閱讀

    linux--sysfs文件系統

    sysfs文件系統 sysfs,全稱為System Filesystem,是一個由Linux內核實現的虛擬文件系統。它扮演著一個橋梁的角色,將內核中的設備和驅動程序信息以文件的形式呈現
    的頭像 發表于 07-08 11:37 ?1593次閱讀
    <b class='flag-5'>linux</b>--sysfs<b class='flag-5'>文件系統</b>
    主站蜘蛛池模板: 人人成人免费公开视频 | 欧美色图亚洲自拍 | 亚洲成av人影片在线观看 | 99久久综合给久久精品 | 狠狠做久久深爱婷婷97动漫 | 亚洲福利一区福利三区 | 2017亚洲男人天堂 | 久久福利青草精品资源站免费 | 视频在线免费观看网址 | 国产色啪午夜免费视频 | 国产一级aa大片毛片 | 亚洲欧美成人综合久久久 | 丁香网五月| 在线观看免费视频一区 | 亚洲第8页| 夜夜爱成人免费网站 | 免费一级毛片清高播放 | 1024手机在线观看视频 | 美女福利在线观看 | 亚洲人成电影在线播放 | aaaaa国产毛片| 丁香六月激情婷婷 | 欧美亚洲综合在线观看 | h小视频在线 | 另类free性欧美护士 | 俺也去第四色 | 欧美性69 | 国模精品 | 4455永久在线毛片观看 | 伊人久久大香线蕉综合高清 | 免费观看一区二区 | 女人精69xxxxxx | 一级毛片不收费 | 欧美激情五月 | 狠狠色噜噜狠狠狠狠2021天天 | 国产人成精品免费视频 | 亚洲haose在线观看 | 最近最新视频中文字幕4 | 精品久久久久久久免费加勒比 | 午夜免费理论片在线看 | 狠狠色婷婷丁香综合久久韩国 |