使用 Linux,当我启动时,我自动拥有 16 个 16MB ramdisk,但是,我想创建一个非常大的 ramdisk 来测试一些软件。
我发现我可以使用内核引导参数调整系统上已有的 ramdisk 的大小,ramdisk_size
但是,这会使所有 16 个 ramdisk (/dev/ram0 - /dev/ram15) 达到指定的大小。所以如果我想创建一个 1GB 的 ramdisk,我需要 16GB 的内存。
基本上,我想创建一个 10GB 的 ramdisk,即 /dev/ram0。我该怎么做?我假设有一个内核启动参数,但我还没有找到它。
Kev*_* S. 20
您可以在.config
文件中设置两个内核配置选项:
CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10485760
Run Code Online (Sandbox Code Playgroud)
这将我的内核配置为在启动时创建一个 10G 的 ramdisk。
笔记:
CONFIG_BLK_DEV_RAM_SIZE
在 KB 中。menuconfig
设备驱动程序->块设备下查看。您可以通过内核引导参数指定您创建的 ram 磁盘的大小ramdisk_size
。例如:
kernel /vmlinuz-2.6.32.24 ro root=LABEL=/ rhgb quiet ramdisk_size=10485760
Run Code Online (Sandbox Code Playgroud)
现在我可以启动我的机器并在上面创建一个文件系统,安装它并像块设备一样使用它。
# mkfs.xfs /dev/ram0
# mount /dev/ram0 /mnt/ramdisk
Run Code Online (Sandbox Code Playgroud)
资料来源:
Ign*_*ams 16
您应该为此使用tmpfs。
mount -t tmpfs -o size=10g none /mnt/point
Run Code Online (Sandbox Code Playgroud)
小智 8
在启动后制作一个大内存磁盘而不会弄乱内核参数。使用 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/
Run Code Online (Sandbox Code Playgroud)
通过多个不同的层可能会有一点性能损失......但至少它有效。
小智 6
另一种选择是使用循环设备(与前面提到的 mount 的 looppack 功能相反):
dd if=dev/zero of=myfs.img bs=1M count=1024
losetup /dev/loop0 myfs.img
mkfs.xfs /dev/loop0
Run Code Online (Sandbox Code Playgroud)
现在 /dev/loop 是一个合法的块设备,您的应用程序将像物理设备或 ramdisk 一样对其进行操作,但它是文件支持的。您可以挂载在某处,或者让您的应用程序对实现标准块 ioctls 的设备节点进行操作。保存您的系统内存并有助于保留测试用例等。
(您甚至可以 fdisk myfs.img,在其上创建分区并使用 --offset 和 --sizelimit 和 losstup 将每个 /dev/loopX 指向映像中的特定分区,因此 loop0、loop1 变得就像 sdc1、sdc2 等)
归档时间: |
|
查看次数: |
54638 次 |
最近记录: |