使用 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
要在启动后创建一个大容量的 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 磁盘上。而且有些表太大了。