Filesystems
文件系統只能在塊設備上創建,而不能在字元設備上創建嗎?
文件系統只能在塊設備上創建,而不能在字元設備上創建嗎?
文件系統是否可以被視為塊設備本身(例如,在程式使用文件系統時)?
我的猜測是肯定的,不是很確定基於以下幾點:
- 有一張 Linux 的圖表,來自作業系統概念:
- 似乎在《Understanding the Linux Kernel》中,與字元設備文件的 IO 操作相比,對正常文件和塊設備文件的 IO 操作在設備驅動程序上的實現很大程度上彼此相似。
謝謝。
我似乎記得有些文件系統不是建立在物理設備上的,例如
/proc
. 但我並沒有考慮它們,或者只是認為它們是建立在 RAM 上的,這是一個塊設備,不是嗎?
文件系統通常建立在塊設備上,除非它們用作核心的介面或通過網路訪問文件或在使用者空間中實現。如果要將文件儲存在硬碟或 ssd 上,將其作為塊設備訪問是最簡單的方法。存在像 SquashFS 這樣的文件系統,它們不會在塊邊界上對齊數據,但它們仍然使用在塊設備上工作的底層緩衝區記憶體。一些 Unix 系統提供字元設備來訪問磁碟而不使用緩衝區記憶體,在 Linux
open
上使用O_DIRECT
標誌用於此目的。您可以將文件用作塊設備,請參閱
losetup
.文件系統不是塊設備。
編輯
要回答有關不在塊設備上的文件系統的評論的問題
- “核心的介面”:這個主要是
/proc
,/sys
但也是一堆cgroup
文件系統,通常掛載在 下/sys/fs/cgroup
,等等。- “通過網路訪問文件”:NFS(通常在 Unix/Linux 上)、SMB/CIFS (Windows) 等
- “在使用者空間中實現”:“FUSE”表示“使用者空間中的文件系統”。從核心的角度來看,這是由使用者空間程序支持的。這個程序可能反過來使用塊設備(fuseblk),NTFS 是用 fuseblk 實現的。它還可以使用網路或其他任何東西來呈現文件系統。