在 Linux 中使用 RAM 磁碟塊裝置¶
1) 概述¶
RAM 磁碟驅動程式是一種將主系統記憶體用作塊裝置的方式。它是 initrd 所必需的,initrd 是一種初始檔案系統,如果您需要載入模組才能訪問根檔案系統(請參閱 使用初始 RAM 磁碟 (initrd))。它也可以用於加密工作的臨時檔案系統,因為內容會在重新啟動時被擦除。
RAM 磁碟會隨著所需空間的增加而動態增長。它透過使用來自緩衝區快取的 RAM 來實現這一點。驅動程式將正在使用的緩衝區標記為髒,以便 VM 子系統稍後不會嘗試回收它們。
預設情況下,RAM 磁碟最多支援 16 個 RAM 磁碟,並且可以重新配置為支援無限數量的 RAM 磁碟(風險自負)。只需在 Block drivers 配置選單中更改配置符號 BLK_DEV_RAM_COUNT 並(重新)構建核心。
要在您的系統中使用 RAM 磁碟支援,請從 /dev 目錄執行 './MAKEDEV ram'。RAM 磁碟的主裝置號都是 1,次裝置號從 /dev/ram0 的 0 開始,依此類推。如果使用,現代核心將 /dev/ram0 用於 initrd。
新的 RAM 磁碟還能夠載入壓縮的 RAM 磁碟映象,允許您在普通的安裝或救援軟盤上壓縮更多的程式。
2) 引數¶
2a) 核心命令列引數
- ramdisk_size=N
ramdisk 的大小。
此引數告訴 RAM 磁碟驅動程式設定 N k 大小的 RAM 磁碟。預設值為 4096 (4 MB)。
2b) 模組引數
- rd_nr
已建立的 /dev/ramX 裝置。
- max_part
最大分割槽號。
- rd_size
請參閱 ramdisk_size。
3) 使用“rdev”¶
“rdev”是一個過時的、已棄用的、老舊的實用程式,可以用於設定 Linux 核心映象中的引導裝置。
與其使用 rdev,不如將引導裝置資訊放在核心命令列上,然後從引導載入程式將其傳遞給核心。
您還可以透過在 arch/x86/boot/Makefile 中設定 FDARGS 並透過在 arch/x86/boot/Makefile 中設定 FDINITRD 來指定 initrd 映象,從而將引數傳遞給核心。
一些可能適用於此處的核心命令列引導選項是
ramdisk_start=N
ramdisk_size=M
如果您製作了一個帶有 LILO 的引導盤,那麼對於上述情況,您將使用
append = "ramdisk_start=N ramdisk_size=M"
4) 建立壓縮 RAM 磁碟的示例¶
要建立 RAM 磁碟映象,您將需要一個備用塊裝置來在其上構建它。這可以是 RAM 磁碟裝置本身,也可以是未使用的磁碟分割槽(例如未掛載的交換分割槽)。在本示例中,我們將使用 RAM 磁碟裝置“/dev/ram0”。
注意:不應在 RAM 小於 8 MB 的機器上執行此技術。如果使用備用磁碟分割槽而不是 /dev/ram0,則此限制不適用。
確定您想要的 RAM 磁碟大小。例如,本示例為 2 MB。透過寫入 RAM 磁碟裝置來建立它。(當前不需要此步驟,但將來可能需要。)明智的做法是清零該區域(特別是對於磁碟),以便為您將要建立的映象的未使用塊實現最大程度的壓縮
dd if=/dev/zero of=/dev/ram0 bs=1k count=2048
在其上建立一個檔案系統。例如,本示例為 ext2fs
mke2fs -vm0 /dev/ram0 2048
掛載它,將您想要的檔案複製到其中(例如:/etc/* /dev/* ...),然後再次解除安裝它。
壓縮 RAM 磁碟的內容。壓縮級別大約為檔案使用的空間的 50%。RAM 磁碟上未使用的空間將壓縮到幾乎為零
dd if=/dev/ram0 bs=1k count=2048 | gzip -v9 > /tmp/ram_image.gz
將核心放到軟盤上
dd if=zImage of=/dev/fd0 bs=1k
將 RAM 磁碟映象放到核心之後的軟盤上。使用一個比核心稍大的偏移量,這樣您以後就可以將另一個(可能更大的)核心放到同一個軟盤上而不會與 RAM 磁碟映象重疊。對於大約 350 kB 大小的核心,400 kB 的偏移量是合理的。確保 ram_image.gz 的偏移量+大小不大於軟盤上的總空間(通常為 1440 kB)
dd if=/tmp/ram_image.gz of=/dev/fd0 bs=1k seek=400
確保您已經指定了 FDARGS 和 FDINITRD 中的引導資訊,或者您使用引導載入程式將核心命令列引導選項傳遞給核心。
就是這樣。您現在有了一個引導/根壓縮 RAM 磁碟軟盤。一些使用者可能希望透過使用管道來組合步驟 (d) 和 (f)。
Paul Gortmaker 12/95
更新日誌:¶
2020 年 9 月
刪除了“rdev”的使用
- 10-22-04 :
更新以反映命令列選項中的更改,刪除過時的引用,進行常規清理。James Nelson (james4765@gmail.com)
- 12-95 :
原始文件