核心編譯時間

核心編譯時間

使用 Linux,當我啟動時,我會自動擁有 16 個 16MB ramdisk,但是,我想建立一個非常大的 ramdisk 來測試某些軟體。

我發現我可以使用核心引導參數調整系統上已有的 ramdisk 的大小ramdisk_size,但這會使所有 16 個 ramdisk (/dev/ram0 - /dev/ram15) 都達到指定的大小。因此,如果我想創建 1GB ramdisk,我需要 16GB 記憶體。

基本上,我想創建一個 10GB 的 ramdisk,即 /dev/ram0。我該怎麼做呢?我假設有一個內核啟動參數,但我只是沒有找到它。

答案1

核心編譯時間

您可以在.config檔案中設定兩個核心配置選項:

CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10485760

這將我的核心配置為在啟動時建立一個 10G 的 ramdisk。

筆記:

  • CONFIG_BLK_DEV_RAM_SIZE單位為KB。
  • 不要指定比電腦實際 RAM 多的記憶體。
  • menuconfig“裝置驅動程式”->“區塊裝置”下尋找。

開機時間

您可以透過核心引導參數指定已建立的 RAM 磁碟的大小ramdisk_size。例如:

kernel /vmlinuz-2.6.32.24 ro root=LABEL=/ rhgb quiet ramdisk_size=10485760

現在我可以啟動我的機器並在其上建立一個檔案系統,安裝它並像區塊設備一樣使用它。

# mkfs.xfs /dev/ram0
# mount /dev/ram0 /mnt/ramdisk

資料來源:

  1. http://www.vanemery.com/Linux/Ramdisk/ramdisk.html[死的]
  2. https://www.kernel.org/doc/Documentation/blockdev/ramdisk.txt

答案2

你應該使用臨時檔案系統為此。

mount -t tmpfs -o size=10g none /mnt/point

答案3

啟動後製作一個大的記憶體盤,不用弄亂內核參數。使用 tmpfs,建立一個文件,透過循環掛載它,然後透過檔案系統掛載它:

mount -t tmpfs -o size=200M tmpfs temp/
cd temp/
dd if=/dev/zero of=disk.img bs=1M count=199
losetup /dev/loop0 disk.img
mkfs.ext4 /dev/loop0
cd ..
mount /dev/loop0 temp2/

透過多個不同的層可能會造成一些性能損失……但至少它有效。

答案4

沖壓驅動器的目標是速度。 tmpfs 不是驅動器。循環設備不是驅動器,但您可以將驅動器映像放在循環設備上。 Ram 磁碟「是」驅動器,而且是非常快速的驅動器。嘗試運行:

hdparm -t /dev/sda 

進而:

hdparm -t /dev/ram0

你就會明白我的意思了!但 hdparm 有時會損壞記憶體驅動器。所以,你必須再做一次。

有時沒有 /dev/ram 裝置。製作一個:

mknod -m 0777 /dev/ram0 b 1 0 

但它不會有任何大小。給定它的大小:

dd if=/dev/zero of=/dev/ram0

當驅動器已滿時它將停止。最大大小由核心配置參數決定:CONFIG_BLK_DEV_RAM_SIZE

然後,只需格式化它,即

mke2fs /dev/ram0

並安裝它:

mount /dev/ram0 /mnt/ramdrive

我最喜歡的是調試儲存在記憶體驅動器上的程式碼。編譯速度至少是儲存在硬碟上的程式碼的 10 倍。儲存在 ramdrive 上的資料庫表也可以運行,但您必須有一個定期寫入硬碟的腳本。大多數管理員沒有勇氣將資料放在記憶體磁碟上。而且有些桌子太大了。

相關內容