ramdisk內存虛擬盤(一)——前世今生

1990 年代:前因——“硬盤太慢、驅動太多”

  • 背景:早期 Linux 根文件系統要么在軟盤、要么在 IDE 硬盤,內核把對應的軟盤/IDE 驅動編進去即可順利掛載。
  • 矛盾出現:隨著 SCSI、PCMCIA、USB、RAID 控制器等百花齊放,如果把所有可能的驅動都靜態編進內核,內核體積會爆炸;如果把驅動當模塊放在 /lib/modules,又陷入“掛載根文件系統需要根文件系統里的模塊”的雞與蛋問題。
  • 解決思路:在內存里先偽造出一個“小硬盤”(ramdisk),把必備驅動、工具、甚至 fsck 都塞進這個內存盤;內核只要能識別內存本身,就能先掛 ramdisk,再從 ramdisk 里加載真正的存儲驅動,最后 pivot 到真正的根文件系統
    這就是 ramdisk 技術誕生的直接原因——啟動階段的“驅動跳板”

1995:首次實現——rd.c 與 ramdisk 的誕生

  • 1995 年左右的內核 1.x/2.0,出現了最早的 rd.c;它把一段連續的物理內存注冊成塊設備 /dev/ramX,再通過 mke2fs 格式化就能當磁盤用
  • 特點:
    – 大小在編譯時固定(默認 4 MB,最多 16 個設備);
    – 需要完整走塊設備層,先格式化再掛載,浪費內存和 CPU;
    – 掉電即失,只能放啟動時一次性數據 。

1999-2002:initrd 標準化——壓縮 cramfs/ext2 鏡像

  • 為了解決早期 ramdisk 浪費內存的問題,社區把 ramdisk 做成壓縮鏡像(ext2、cramfs、romfs),由 bootloader 一次性讀入內存,內核解壓后掛載為臨時根文件系統
  • 這就是我們今天說的 initrd(initial ramdisk)。
  • 啟動流程變為:
    1. bootloader 把內核 + initrd.gz 讀進內存;
    2. 內核啟動→解壓 initrd→掛載為 /→執行 /linuxrc 或 /init
    3. /init 加載 udev、驅動、建立 /dev 節點→掛載真正的根文件系統→switch_root
  • 局限性:鏡像大小固定,需要事先估算;解壓后仍占用整塊內存;腳本維護復雜。

2004-2006:initramfs 興起——ramfs/tmpfs 取代塊設備

  • 內核 2.4/2.6 引入 initramfs技術上基于 ramfs/tmpfs,而非塊設備
  • 區別:
    不再是塊設備,而是直接利用 page cache 當文件系統,省掉一次格式化/緩存復制;
    大小可變,按需增長,可回收;
    – 使用 cpio 格式打包,可無縫嵌入內核鏡像(CONFIG_INITRAMFS_SOURCE);
    – 啟動腳本統一為 /init,接口更簡單 。
  • 結果:initrd 退出主流,initramfs 成為各大發行版的默認啟動機制。

2007-至今:brd 模塊、tmpfs 日常化

  • 傳統 ramdisk 塊設備演化為 brd(block ramdisk,drivers/block/brd.c),仍保留在源碼,用于:
    – 無盤機、嵌入式系統需要真正“磁盤”語義的場景;
    – 測試塊層、文件系統完整性校驗等。
  • 日常使用中,tmpfs 全面接管“內存當磁盤”的需求:
    – /tmp、/run、/dev/shm 默認掛載 tmpfs;
    – 讀寫速度 1 GB/s 以上,空間隨用隨還;
    – 不再掉坑“固定大小、雙份緩存” 。

副作用與經驗教訓

  • 掉電即失:曾有人把 MySQL 數據目錄放在 ramdisk 以求極速,結果斷電訂單歸零 。
  • 內存是昂貴資源:ramdisk 占用不可回收的連續內存,tmpfs 則可用 swap、可回收,性價比更高。
  • 安全場景:ramdisk 的易失性反而成為“解密后即焚”的理想場所,例如高安全級別下的臨時解密盤 。

一句話總結
ramdisk 最初是“為了啟動而偽造的磁盤”,后來變成“為了速度而犧牲容量”的利器,最終被 initramfs + tmpfs 取代——它完成了“啟動跳板”的使命,也留給我們一條寶貴經驗:內存不是保險箱,速度和安全必須權衡。

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

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

相關文章

ETH持續上漲推動DEX熱潮,交易活躍度飆升的XBIT表現強勢出圈

BOSS Wallet 8月15日訊,隨著ETH價格在過去24小時內強勢拉升至4300美元,整個加密市場再度掀起漲勢狂潮,鏈上交易活躍度空前高漲。其中,去中心化交易所平臺迅速成為市場焦點,其平臺活躍度與交易量雙雙上漲,吸…

Stand-In - 輕量級人物一致性視頻生成 高保真視頻人臉交換 ComfyUI工作流 支持50系顯卡 一鍵整合包下載

Stand-In 是一個輕量級、即插即用的身份保護視頻生成框架,只需要上傳一張人物照片,加上一段提示詞,即可生成高度一致性的高保真人物視頻,人臉相似度和自然都幾乎達到100%還原水平。 Stand-In 能把任何一張人臉(甚至動漫…

vue3相關基礎

1、ref和reactive的區別兩者都是響應式數據的聲明。Reactive只適用于非基本數據類型&#xff0c;如對象&#xff0c;數組等。而ref是兼容適用于reactive的的數據類型的以及其他數據&#xff0c;靈活性較高。ref聲明的變量取值時需要.value。在<template></template>…

云手機存儲和本地存儲的區別

云手機存儲通常指云存儲&#xff0c;即數據存儲在云端服務器&#xff0c;本地存儲則是將數據存儲在用戶設備硬件中&#xff0c;主要區別體現在存儲位置、訪問方式、依賴條件等多個方面&#xff0c;具體如下&#xff1a;本地存儲主要是將數據存儲在用戶自有設備的物理硬件中&…

【科研繪圖系列】R語言繪制三維曲線圖

文章目錄 介紹 加載R包 數據下載 導入數據 數據預處理 畫圖 系統信息 參考 介紹 【科研繪圖系列】R語言繪制三維曲線圖 加載R包 library(tidyverse) library(ggsignif) library(RColorBrewer) library(dplyr) library(reshape2) library(grid

python常用包

以下按類別列舉10個常用Python包&#xff0c;并以一句話概括其核心作用&#xff1a; 一、數據分析與科學計算 NumPy&#xff1a;提供高性能多維數組及數學運算&#xff0c;是數值計算的基礎庫。Pandas&#xff1a;通過DataFrame結構實現高效表格數據清洗、分析與處理。SciPy&am…

“ 船新版本 ”

在 GeeLark 最新版本中&#xff0c;增強了 AIGC 生成能力以及 AI 協助自定義任務開發功能&#xff0c;給用戶優化構建從內容生產到運營自動化的完整技術鏈&#xff0c;為跨境電商及企業用戶提供更完善的智能化解決方案&#xff0c;效率翻倍輕松出海。 AIGC 接入 MiniMax-Hailuo…

力扣 —— 二分查找

搜索插入位置 35. 搜索插入位置 - 力扣&#xff08;LeetCode&#xff09; 算法思想&#xff1a; class Solution(object):def searchInsert(self, nums, target):left0 rightlen(nums)-1while left < right :mid (left right) // 2if nums[mid] < target:left mid 1…

USB ADB 簡介

概念 ADB 是 Android 平臺的 調試橋接協議&#xff0c;允許主機&#xff08;PC&#xff09;與 Android 設備通信。 通過 ADB&#xff0c;開發者可以執行命令、調試應用、傳輸文件、訪問 shell、調試 logcat 等。 ADB 運行在 USB 或 TCP/IP 上&#xff0c;但最常用的是 USB 連…

【Golang】:數據類型

目錄 1. 基本數據類型 1.1 布爾類型 1.2 整數類型 1.3 浮點數類型 1.4 復數類型 1.5 字符類型 1.6 字符串類型 2. 類型轉換 2.1 基本數據類型 → string 2.2 string → 基本數據類型 3. 常量 1. 基本數據類型 1.1 布爾類型 Go中的布爾類型取值為true或false&#…

旋鈕鍵盤項目---foc講解(開環)

這里就不過多的講解什么原理&#xff0c;公式的變換了&#xff0c;感興趣的可以看燈哥開源&#xff0c;講解的非常好的。當然&#xff0c;更細致的講解&#xff0c;也可以看b站其他教學。 我這里主要講解我對于開環部分的理解&#xff0c;以及stm32代碼的實現邏輯。可以看作是…

數據科學與計算:爬蟲和數據分析案例筆記

案例 1&#xff1a;中國大學排名爬取與分析 一、任務描述 目標&#xff1a;爬取高三網中國大學排名一覽表&#xff0c;提取學校名稱、總分、全國排名、星級排名、辦學層級等數據&#xff0c;并保存為 CSV 文件。 網址&#xff1a;2021中國的大學排名一覽表_高三網 二、任務…

華測科技的3D GPR數據分析

很高興得到了張總的支持&#xff0c;獲得了他們雷達的數據&#xff0c;并寫了雷達數據讀取和轉換文件。1 背景搜索后發現華測實力很強&#xff0c;因為他們可達到100km/h的時速&#xff0c;以前我只知道中電眾益可以達到這個速度。2數據格式分析2.1 華測數據因為長時間不編程&a…

最長鏈(二叉樹直徑DFS)

題目描述現給出一棵N個結點二叉樹&#xff0c;問這棵二叉樹中最長鏈的長度為多少&#xff0c;保證了1號結點為二叉樹的根。輸入第1行為包含了一個正整數N&#xff0c;為這棵二叉樹的結點數&#xff0c;結點標號由1至N。 接下來N行&#xff0c;這N行中的第i行包含兩個正整數l[i]…

802.11 Wi-Fi 競爭機制深度分析:CSMA/CA 與 DCF

802.11 Wi-Fi 競爭機制深度分析&#xff1a;CSMA/CA 與 DCF 一、核心機制&#xff1a;CSMA/CA&#xff08;載波偵聽多路訪問/沖突避免&#xff09; 傳統以太網使用 CSMA/CD&#xff08;沖突檢測&#xff09;&#xff0c;但無線環境中無法實現沖突檢測&#xff0c;因此802.11采用…

【Go語言-Day 36】構建專業命令行工具:`flag` 包入門與實戰

Langchain系列文章目錄 01-玩轉LangChain&#xff1a;從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊&#xff1a;四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain&#xff1a;從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

C語言——深入理解指針(四)

C語言——深入理解指針&#xff08;四&#xff09; 數組名的意義sizeof&#xff08;數組名&#xff09;&#xff0c;且數組名單獨放在sizeof內部&#xff0c;則這里的數組名表示整個數組&#xff0c;計算的是整個數組的大小&數組名&#xff0c;這里的數組名表示的是整個數組…

LeetCode 刷題【42. 接雨水】

42. 接雨水 自己做 解&#xff1a;雙指針左右分割容器 class Solution { public:int trap(vector<int>& height) {int res 0;int len height.size();if(len < 2) //構不成一個容器了&#xff0c;直接返回return res;int end len - 1; //右邊界int…

網絡的基本概念、通信原理以及網絡安全問題

目錄 1、 什么是網絡&#xff1f; &#xff08;1&#xff09;網絡的概念與本質 &#xff08;2&#xff09;電壓信號的合并與抵消 &#xff08;3&#xff09;電壓的本質 2、中轉設備 &#xff08;1&#xff09;背景 &#xff08;2&#xff09;中轉設備的處理能力與編程能…

Windows下使用WSL2創建Ubuntu子系統(更改安裝位置與啟動圖形桌面)

Windows下使用WSL2創建Ubuntu子系統&#xff08;更改安裝位置與啟動圖形桌面&#xff09; 本文介紹如何使用WSL2創建Ubuntu子系統&#xff0c;并更改安裝位置到其他磁盤&#xff0c;并啟動圖形桌面Xfce4。 WSL 版本: 2.5.7.0 系統版本: Windows11 23H2 相關工具&#xff1a;Mo…