
使用 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
資料來源:
答案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 上的資料庫表也可以運行,但您必須有一個定期寫入硬碟的腳本。大多數管理員沒有勇氣將資料放在記憶體磁碟上。而且有些桌子太大了。