存儲是用于保有數據的技術。
目前計算機存儲采用的技術方式主要有以下幾種:磁介質(硬盤,磁帶),半導體(內存,固態硬盤,閃存卡等),光介質(光盤)等。不同的存儲方式在各方面具有不同的特點,如易失性(斷電是否失去數據),容量大小,讀寫支持(讀寫,只讀,快讀慢寫,一次性寫入等),數據存取方式(連續存取,隨機存?。?,性能(如延遲,吞吐量等),能耗等。
下文所說的存儲指二級存儲,又稱外存,或輔存。與此對應的主要存儲是指內存,即“運行內存”。事實上只有這一種內存,把移動設備的持久化存儲稱為內存在技術上是錯誤的,這些其實是外存。外存與內存的區別在于是否能直接與 CPU 連接。常見的外存設備包括硬盤,固態硬盤等。
硬盤是一種電子機械設備,使用轉動的磁盤和可平面移動的磁頭來存取數據。
硬盤的存取延遲一般在幾毫秒左右。它支持隨機存取,每秒大概幾十次到二百次。硬盤適用于連續存取較多的場景如多媒體數據或備份等,其吞吐量可達到 100 ~ 200 MB/s.
硬盤驅動器中可以有多張磁碟,互相平行重疊,碟間和兩側有讀寫磁頭(Head)。每張碟被劃分為若干個同心圓,稱為磁道(Track),每個磁道劃分為多個扇區(Sector);所有碟相同位置的磁道構成一個柱面(Cylinder)。硬盤可以通過 CHS 方式對每個扇區進行尋址:Cylinde 編號(0 ~ 1023),Head 編號(0~254),Sector(1 ~ 63)。這種方式在常見的 512 字節扇區大小下,能處理的最大硬盤容量是 7844 GB。歷史上這些值直接對應硬盤的內部的物理器件,但隨著存儲密度的增大,硬盤向 BIOS 報告的參數也變為了邏輯數據。為解決更大容量的尋址問題,同時提升部分場景的性能,AF (Advanced Formatting) 技術將扇區大小調整為 4 KB。較新的存儲系統現在主要采用 LBA(Logical Block Addressing) 尋址方式,直接使用 32 位或 64 位的扇區編號。
硬盤根據磁極與盤面的方向關系可分為 LMR 和 PMR 兩種。LMR(Longitudinal Magnetic Recording, 縱向磁性記錄)僅用于早期的硬盤,磁極與盤面平行。PMR(Perpendicular Magnetic Recording, 垂直磁性記錄)是目前所有硬盤都采用的技術,磁極與盤面垂直,這樣能做到更高的數據密度。PMR 又分為兩種:CMR 和 SMR。CMR(Conventional PMR) 中磁道之間留有空白區域,以避免存取時與相鄰磁道相互影響。SMR(Shingled Magnetic Recording , 疊瓦磁性記錄) 中磁道間沒有間隔,修改數據時需要特殊處理,以免影響相鄰磁道。SMR 提升了數據存儲密度,在性能和穩定性上做了一定的妥協。
硬盤的“硬”字是相對于軟盤而言的。軟盤(Floppy disk)是一種可移動的磁存儲媒體,塑料硬殼里邊的盤片使用較軟的聚酯薄膜制成。硬盤的盤片則由鋁或玻璃制成。
固態硬盤使用閃存芯片存儲數據。
固態硬盤的存取延遲一般在幾十到幾百微秒之間。隨機存取每秒可以達到千次以上,并且可在內部使用類似 RAID 0 的技術進一步提升性能。吞吐量一般大于硬盤,高端的產品甚至經常被物理接口(SATA, PCIE等)所限制。
由于 NAND(Not AND) 閃存的特性,固態硬盤長期不通電會損失數據(正常室溫情況下若干年)。閃存芯片可按字節讀取,但是寫入時則只能在特定情況下進行:代表 1 的位(bit)可被改寫為 0, 反之則不行;只有整塊(一般單塊在 16KB 到 512KB 之間)擦寫才能將 0 變為 1。閃存具有有限的 P/E 周期(Program-Eraspe),數據寫入量過大會造成寫入耗盡(wear out)。由于這些特性,針對固態硬盤,固件及軟件系統需要進行相關的處理,才能將保持高性能和保證設備狀態。文件系統可以發送 TRIM 命令,通知 SSD 塊已經不再使用,可以擦除;固件可能會將數據分布到不同的位置,以平衡不同塊的寫入量。
固態硬盤里邊沒有“盤”。它不包含可運動的機械裝置,因此稱為“固態”。它也不包含磁性組件,但是由于習慣和翻譯的原因,通常還是把它和硬盤等可按塊隨機訪問的二級存儲設備統稱為磁盤(disk)。
磁盤可能因為機械磨損,材料降級等原因發生故障。為增強數據安全性,現代的磁盤基本都支持通過 S.M.A.R.T. 向軟件系統報告自身健康狀態。S.M.A.R.T. 標準僅定義了軟硬件間通信的接口協議,并未規定具體的監控指標(Attribute, 特性),因此不同廠商的產品或不同的產品系列報告的數據意義并不完全相同。
S.M.A.R.T 報告的數據中,有一個最基本的狀態,代表是否已超過健康閾值。另外還有一系列的指標,每個指標包含以下幾個值:
部分較關鍵的通用指標包括 5(0x05, Reallocated Sectors Count,重映射扇區數), 10(0x0A, Spin Retry Count,旋轉重試次數), 187(0xBB, Reported Uncorrectable Errors, 無法使用硬件 ECC 恢復的錯誤次數), 196(0xC4, Reallocation Event Count, 重映射事件次數),197(0xC5, Current Pending Sector Count,待重映射扇區數) 等。
RAID 技術用于將多個二級存儲設備(下稱磁盤)虛擬為一個,以提升性能和/或安全性。 RAID 有不同的等級,分別達到不同的整合效果。常用的等級有以下幾種:
RAID 0 將兩個以上的磁盤并聯,提供多倍容量,多倍性能。數據無冗余,無容錯,單個磁盤損壞時會丟失所有數據。
RAID 1 使用兩個以上的磁盤互為鏡像,提供單盤的容量,多倍讀取性能,略低于單盤的寫入性能。只有所有磁盤同時損壞才會丟失數據。
RAID 5 使用三個以上的磁盤分布式存儲數據和容錯信息。讀寫性能稍低于 RAID 0, 單個磁盤損壞時不會丟失數據。
RAID 6 類似 RAID 5,存儲兩份容錯信息,使用四個以上磁盤。讀寫性能類似 RAID 5。兩個以內磁盤損壞時不會丟失數據。
RAID 10 為 RAID 1 和 RAID 0 的結合,以更高的代價同時提供性能和安全性。
文件系統是用于在存儲介質上組織和存取數據的軟件。它提供了數據分組的抽象機制(文件,目錄等),以及在此抽象機制上的操作接口。文件系統有很多種,以適應不同的底層存儲機制(如硬盤,光盤,網絡等),達到不同的設計目標(如速度,靈活性,安全等)。
磁盤文件系統借助于磁盤的隨機讀寫能力,提供方便而高效的文件服務。它通常把存儲介質抽象為卷(Volume),即邏輯磁盤,一個卷可能對應一個或多個物理磁盤或磁盤分區。常見的磁盤文件系統包括以下幾種:
FAT(File Allocation Table) 家族是支持最廣泛的文件系統。FAT 把卷的空間分為三個部分:目錄表,文件分配表和數據區。其中數據區被分為不同的簇(cluster),每個簇包含 N (N 可以為 1, 2, 4, 8, 16, 32, 64, 128)個物理連續的扇區。文件內容存儲在這些簇中,單個文件至少占用一個簇。文件分配表中為記錄了每個簇的使用情況:未使用,文件末尾,同文件下個簇的編號。這樣,文件內容所使用的簇就形成了一個單鏈表。磁盤上存有兩份文件分配表,以便在數據損壞或硬件故障時進行恢復。目錄表中記錄每個文件/目錄的名稱,屬性,存取日期等元數據,以及內容起始簇的編號等。FAT 中文件名最長為 8 個字符加上 3 個字符的擴展名(稱為 8.3 文件名格式),Windows 95 以后對此進行了擴展,最多可達 255 個 UCS-2 字符。目前最常用的 FAT32 中單個文件不能超過 4 GB,單卷(邏輯磁盤)不能超過 2 TB(格式化為 4KB 扇區時為 16 TB)。
exFAT 是在 FAT32 的基礎上,專門為閃存設備設計的文件系統,通常用于移動存儲,移動設備或嵌入式系統。它放寬了 FAT32 對文件和卷尺寸的限制。exFAT 中只有一份文件分配表,它支持對連續的文件內容使用擴展(extend),而忽略文件分配表中的數據,從而減少了文件修改時對閃存的寫入量。Windows 10 僅允許 32 GB 以上的分區格式化為 exFAT, 更小的分區會被推薦使用 FAT32 格式。
NTFS (New Technology File System) 是 Windows 的默認文件系統,在 macOS 和 Linux 中也能作為只讀裝載。NTFS 中,文件/目錄的所有信息都是屬性(Attribute),包括文件內容(稱為流,一個文件可以有多個流,其中至少有一個是默認流,其它的需要單獨命名)。這些屬性都保存在主文件表(Master File Table, MFT)的記錄里,每條記錄大小為 1 KB。如果空間足夠,一個文件僅需要這么一條記錄即可,無需另外分配磁盤空間;如果空間不足以容納所有的屬性,則會把部分屬性存儲在同卷的其它地方,在MFT中記錄這些位置。NTFS 使用了日志系統,保證文件系統元數據不被意外破壞。
ext系列(ext2/ext3/ext4)是 Linux 下常用的文件系統。ext2 中每個文件或目錄對應一個索引節點(inode, index node),其中記錄了文件的尺寸,權限等信息,以及數據塊的位置(指針)。單個 inode 中可以有 15 個指針:其中前 12 個直接指向數據塊;第 13 個是間接指針,它指向一個指針塊,指針塊中包含若干指向數據塊的指針;第 14 個是雙重間接指針,指向指向指針塊的指針塊;第 15 個是三重間接指針。ext3 在 ext2的基礎上增加了日志功能,提升了系統故障時的容錯性。ext4 支持更大的卷,為元數據和日志添加了校驗碼,同時在其它方面也有更多的改進。這些文件系統也可以通過第三方軟件在 Windows/macOS 中受限使用(部分特性不受支持)。
ZFS 是一種獨特的先進文件系統,在 Solaris 操作系統中原生可用,也可通過第三方軟件在 Linux/macOS 中使用。ZFS 為長期大量數據存儲而設計,有多種安全措施來防止軟硬件錯誤帶來的數據丟失:所有數據都存有多層級校驗碼,數據和校驗碼可存儲多份,支持寫入日志,提供軟 RAID。功能上它支持快照,寫時復制(copy-on-write);性能上,ZFS 支持多級緩存設備,如內存和固態硬盤。與大部分其它文件系統不同的是,ZFS 還提供了虛擬設備的功能,在虛擬設備上可以使用其它文件系統,這樣可以用 ZFS 提供優異的性能和數據安全性,同時使用其它文件系統的功能。ZFS 是新一代文件系統中較為成熟和完善的,但是潛在的版權法律問題,限制了它在 Linux 各發行版中的采用率。
Btrfs(B-tree file system) 基于寫時復制(copy-on-write)的原則,解決傳統文件系統中欠缺存儲池,快照,校驗碼,多設備整合等功能的問題。功能上它和 ZFS 類似,經過完善和成熟后,有希望成為未來 Linux 的默認文件系統。
ReFS(Resilient File System) 是微軟設計開發的新一代文件系統,類似 ZFS 和 Btrfs,尚未大規模普及,目前僅在 Windows Server 和 Windows 10 企業版本可用。
網絡文件系統作為遠程文件訪問協議的客戶端,提供服務器上文件的存取服務。常見的網絡文件系統(及類似系統)包括以下幾種:
NFS(Network File System) 是一套分布式文件系統協議的開放標準。目前主要在 *nix 系統上應用,在 macOS 和 Windows 下使用較少。目前主流使用的 NFS v3 以上版本,可選使用 TCP 或 UDP 作為底層傳輸協議。NFS v4 及以后的版本只使用一個端口 2049。
SMB(Server Message Block) 也叫 CIFS(Common Internet File System),是 Windows 自帶的網絡協議,用于共享文件,打印機等。macOS 自帶了 SMB 支持, Linux 可使用包 cifs-utils
和 samba
來使用該協議。SMB v2.0 及以后的版本基于 TCP, 使用端口 445。
9P(Plan 9 File System Protocol) 是一套輕量級的遠程文件系統協議,經常用于虛擬機與外界的文件共享。WSL2(Windows Subsystem for Linux 2) 就使用了該協議與 Linux 文件系統交互。 9P 通常使用 TCP 端口 564。
WebDAV(Web Distributed Authoring and Versioning) 是 HTTP 的擴展,允許客戶端執行遠程文件編輯操作。它在標準的 HTTP 方法(GET, POST, PUT, DELETE 等)外,添加了新的方法:COPY, LOCK, UNLOCK, MKCOL, MOVE, PROPFIND, PROPPATCH。主流 HTTP 服務器(Nginx, Apache, IIS 等)都有內置或第三方的 WebDAV 支持,部分私人云軟件(ownCloud, Nextcloud等)也支持 WebDAV 訪問方式。 Windows 集成了 WebDAV 客戶端。WebDAV 和 HTTP/HTTPS 使用相同的端口,默認為 80 和 443。
FTP(File Transfer Protocol) 是用于文件傳輸的標準網絡協議,應用十分廣泛。FTP 的控制流和數據流使用不同的端口(通常是21 和 20)。數據連接可選主動或被動模式,被動模式下服務器偵聽客戶端的請求,可解決客戶端由于 NAT 或防火墻等原因無公開端口的問題。 FTP 可設置為匿名連接,也可使用明文傳輸的用戶名/密碼進行身份認證。FTPS(FTP Secure) 在 FTP 的基礎上增加了數據加密的功能,以提升安全性,它通常使用 990(控制)和 989 端口。
SFTP(SSH File Transfer Protocol) 用于在安全數據連接上管理和傳輸文件。它是 SSH(Secure Shell)協議的擴展,通常由 SSH 服務器提供支持,但是也可以作為獨立的文件服務使用。一般 SFTP 和 SSH 使用同一端口 22。
以上就是基本修養:存儲與文件系統講解的詳細內容,更多關于存儲與文件系統的資料請關注武林網其它相關文章!
|
新聞熱點
疑難解答