ramdisk_size 设定过小导致 initrd 无法使用进而系统挂死问题

尽管固态硬盘(SSD)的读写性能已经是机械式硬盘(HDD)的好几倍,但依然还是远远不及RAM(Random-access memory)的访问速度。将RAM仿真成硬盘,制成RAMDisk,除了可以有效增加RAM的使用率外,还可以加强RAMDisk内文件的访问速度,电脑关机或重开机也还会自动将RAMDisk清空,不留下任何痕迹。

Linux系统演进至今,已经发展出三种RAMDisk的机制。第一种就是传统固定大小,需要指定文件系统并进行格式化的「ramdisk」,第二种是可变大小,直接使用VFS(Virtual file system, 虚拟文件系统)来操作文件而无需格式化的ramfs。第三种如同第二种的ramfs,但它能使用的空间不只限于RAM内,还可以使用交换分区(SWAP),称作tmpfs

Linux如何將記憶體(RAM)作為硬碟使用?RAMDisk詳細介紹 | MagicLen

从内核的 Documentation 目录中找到如下相关信息:

Field name: ramdisk_size
Type:       write (obligatory)
Offset/size:    0x21c/4
Protocol:   2.00+

  Size of the initial ramdisk or ramfs.  Leave at zero if there is no
  initial ramdisk/ramfs.

这个 ramdisk_size 表示的是 ramdisk 或 ramfs 的大小,它是以 kbytes 为单位的。

ramdisk的配置存在于Linux的Kernel(内核),Linux缺省提供8个或16个ramdisk让用户挂载使用,每个ramdisk的路径可以使用以下指令来查看:

ls /dev/ram*

如果您没看到/dev/ram相关设备,可能是因为您的Linux Kernel并没有加载brd(block ram disk)模块。可以运行sudo modprobe brd指令来加载。

每个ramdisk缺省的大小在不同的Linux系统上似乎都不太一样,但普遍不大,小于128MB,ramdisk的大小可以借由GRUB开机管理程序来设置Linux Kernel的参数来改变。可以使用文本编辑器打开/etc/default/grub,在GRUB_CMDLINE_LINUX中加入ramdisk_size参数,并设置ramdisk的大小的数值,以KB为单位。如果还有其他参数,以空隔分隔。如以下设置方式,可以让每个ramdisk拥有512MB的空间:

GRUB_CMDLINE_LINUX="ramdisk_size=512000"

无论ramdisk是挂载还是卸载状态,一旦ramdisk经过格式化,就会占用掉文件系统所需的内存空间,如果有放置文件,会占用更多用来存放文件的内存空间。换句话说,ramdisk并不会在一开始格式化时就配置等量的内存空间,而是随着使用情况来慢慢增加。

 

猜你喜欢

转载自blog.csdn.net/taoxicun/article/details/132213838