内核编译时间

内核编译时间

使用 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

要在启动后创建一个大容量的 RAM 磁盘,而无需处理内核参数。使用 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

ramdrive 的目标是速度。tmpfs 不是驱动器。循环设备不是驱动器,但您可以将驱动器映像放在循环设备上。ram 磁盘“是”驱动器,而且是非常快的驱动器。尝试运行:

hdparm -t /dev/sda 

进而:

hdparm -t /dev/ram0

你会明白我的意思!但是 hdparm 有时会破坏 RAM 驱动器。所以,你必须再做一次。

有时没有 /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

我最喜欢的是调试存储在 RAM 驱动器上的代码。编译速度至少是存储在硬盘驱动器上代码的 10 倍。存储在 RAM 驱动器上的数据库表也运行良好,但您必须有一个定期写入硬盘的脚本。大多数管理员不敢将数据放在 RAM 磁盘上。而且有些表太大了。

相关内容