如何更改Linux ramdisk的数量和大小(/ dev / ram0-/ dev / ram15)?


27

使用Linux,启动时我会自动拥有16个16MB的ramdisk,但是,我想创建一个非常大的ramdisk来测试某些软件。

我发现可以使用内核引导参数调整系统上已经存在的ramdisk的大小,ramdisk_size但是,这会使所有16个ramdisk(/ dev / ram0-/ dev / ram15)达到指定的大小。因此,如果要创建1GB的ramdisk,则需要16GB的内存。

基本上,我想创建一个10GB的ramdisk,即/ dev / ram0。我将如何去做?我假设有一个内核启动参数,但是我还没有找到它。

Answers:


18

内核编译时间

您可以在.config文件中设置两个内核配置选项:

CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10485760

这将我的内核配置为在启动时创建一个10G的虚拟磁盘。

笔记:

  • CONFIG_BLK_DEV_RAM_SIZE 以KB为单位。
  • 指定的内存不要超过计算机中实际拥有的RAM。
  • menuconfig“设备驱动程序”->“阻止设备”下。

开机时间

您可以通过kernel boot参数指定创建的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

16

您应该改为使用tmpfs

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

我可以在tmpfs上制作文件系统吗?我需要一个驻留在内存中的块设备,可以在其中创建文件系统。我可以在tmpfs上执行此操作吗?
Kevin S.

tmpfs 一个文件系统。它恰好驻留在内存中。
伊格纳西奥·巴斯克斯

3
我很欣赏这个答案,通常tmpfs可以解决问题,但是我需要在要写入的内存部分创建一个xfs文件系统。
凯文·S.

tmpfs的问题在于它由swap支持。如果您开始使用交换功能,那么您将失去使用纯RAM的好处。另外,有些人更喜欢不支持加密应用程序的区域。
drudru

相关答案和细节在这里:unix.stackexchange.com/questions/66329/…–
jocull

7

引导后制作一个较大的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/

可能会在多个不同的层次上造成性能损失……但是至少它能起作用。


6

另一个选择是使用循环设备(与前面提到的mount的loobpack功能相反):

dd if=dev/zero of=myfs.img bs=1M count=1024
losetup /dev/loop0 myfs.img
mkfs.xfs /dev/loop0

现在,/ dev / loop是一个合法的块设备,您的应用程序将像物理设备或虚拟磁盘一样对它进行操作,只不过它是文件支持的。您可以在某个位置挂载,也可以让应用对基于标准块ioctl的设备节点进行操作。节省您的系统内存,对于保留测试用例等有用。

(您甚至可以fdisk myfs.img,在其上创建分区,并使用--offset和--sizelimit与lostup一起将每个/ dev / loopX指向映像中的特定分区,因此loop0,loop1就像sdc1,sdc2等。 )


+1因为这并不需要重新编译内核
M-RIC

3

您可以改用循环文件。只需创建一个所需大小的循环文件(如果希望将其放入tmpfs ramdisk中就可以了),然后格式化该循环文件并进行安装。

dd if=/dev/zero of=myfile bs=1G count=10
mkfs.xfs -d file myfile
mount -t xfs -o loop myfile mymntpoint

在发布问题之前,我实际上已经尝试过了。这是一个很好的解决方案,但是我正在测试的软件在处理文件而不是块设备时的行为有所不同,这就是为什么我要使用ramdisk选项的原因。谢谢。
凯文

2
环回设备是块设备,所以我不确定这怎么可能?
pjc50

2

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

我最喜欢的是调试存储在ramdrive中的代码。编译速度至少是存储在硬盘驱动器上的代码的10倍。存储在ramdrive中的数据库表也会运行,但是您必须具有一个可定期写入硬盘的脚本。大多数管理员没有勇气将数据放在ram磁盘上。而且有些桌子太大了。


1

在lighthouse 64(基于slackware的Puupy Linux)上,我做到了;

mke2fs /dev/ram1 4096000 # nearly 4G ramdisk, choose the size of ramdisk less than actual ram!
mount /dev/ram1 /mnt/dvd # dvd on my laptop is unused choose your device from /mnt/

在那里,您将ramdisk挂载为目录/mnt/dvd,您可以在其中复制粘贴,保存所有操作,就像在ram目录中的hd目录中一样。记得在关机之前将文件保存到hd。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.