Answers:
这在Linux系统上是完全正常的。对于需要RAM磁盘的情况,这是一种准备工作。它们每个的大小为64 MiB,非常低。如有必要,尺寸将自动增加。
为什么突然很难在Wily中使用16个RAM磁盘,这很难解释。
我已经在以下位置测试了默认的RAM磁盘:
RAM磁盘驱动程序是将主系统内存用作块设备的一种方式。initrd是必需的,initrd是一个初始文件系统,如果您需要加载模块才能访问根文件系统(请参阅Documentation / initrd.txt)。它也可以用于加密工作的临时文件系统,因为在重新启动时会擦除内容。
RAM磁盘随着需要更多空间而动态增长。它通过使用缓冲区缓存中的RAM来做到这一点。驱动程序将其使用的缓冲区标记为脏缓冲区,以便VM子系统以后不再尝试回收它们。
默认情况下,RAM磁盘最多支持16个RAM磁盘,并且可以重新配置为支持无限数量的RAM磁盘(后果自负)。只需在“块驱动程序”配置菜单中更改配置符号BLK_DEV_RAM_COUNT,然后(重新)构建内核。
不知道为什么fdisk突然报告/ dev / ram。
但是,您可以告诉fdisk仅报告特定设备。
fdisk -l /dev/sd*
将列出实际驱动器。
另外,您也可以使用parted和lsblk。
此处一个驱动器的部分输出。
Model: ATA Samsung SSD 840 (scsi)
Disk /dev/sda: 120GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 2096kB 120GB 120GB extended boot
7 2097kB 26.2GB 26.2GB logical ext4
5 26.2GB 36.7GB 10.5GB logical ext4
6 36.7GB 47.2GB 10.5GB logical ext4
对应的lsblk输出
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 111.8G 0 disk
├─sda1 8:1 0 1K 0 part
├─sda5 8:5 0 9.8G 0 part /mnt/Links
├─sda6 8:6 0 9.8G 0 part
└─sda7 8:7 0 24.4G 0 part /
我知道这个线程很旧,但是我最近才碰到它。安装Slackware 14.2之后,我在的输出中得到了相同的16个RAM磁盘
fdisk -l
。我进行了进一步调查,发现在fdisk(以及其他功能)的“ util-linux”软件包中,选择了fdisk认为块设备发生了实质性变化。在util-linux软件包2.21版中,此决定基于报告的磁盘几何形状,而在当前版本2.72中,将解析/ proc / partitions的输出。根据我在互联网上的搜索,自内核2.4开始,虚拟磁盘就已经存在于Linux中,而fdisk并未显示它们。由于我对很多“磁盘”(不是真正的磁盘)的列表感到恼火,因此为fdisk制作了补丁:
diff -Nur util-linux-2.27.1_ori/disk-utils/fdisk-list.c util-linux-2.27.1_fdisk-no-ram-disks/disk-utils/fdisk-list.c
--- util-linux-2.27.1_ori/disk-utils/fdisk-list.c 2015-10-06 08:59:51.572589724 +0200
+++ util-linux-2.27.1_fdisk-no-ram-disks/disk-utils/fdisk-list.c 2016-08-16 15:55:14.840952091 +0200
@@ -312,6 +312,10 @@
if (devno <= 0)
continue;
+ /* dont list RAM disks */
+ if (strstr(line, "ram") && devno >= 256)
+ continue;
+
if (sysfs_devno_is_lvm_private(devno) ||
sysfs_devno_is_wholedisk(devno) <= 0)
continue;
也许这对其他人有帮助...
约翰尼斯的帖子是正确的。ram磁盘已经存在于内核中很长时间了,正是fdisk的行为发生了变化。我没有修补fdisk,而是编写了一个简单的perl脚本(5行代码,6行注释)来解决该问题。我把它放进去了~/bin/fdisk-l
,现在我只记得不要在fdisk
和之间放一个空格-l
。
#! /usr/bin/perl -w
# Run fdisk -l and filter out the 16 /dev/ram devices.
# Sun Mar 5 16:13:45 2017. Jeff Norden, jeff(at)math.tntech.edu
$_=`sudo fdisk -l`; #include sudo we don't have to be root
# weed out ram disks. The seemingly contradictory s (single) and m (multiline)
# flags allow "." to match "\n" and "^" to match at all beginning-of-lines.
s|^Disk /dev/ram.*?\n\n\n||smg;
# Do better than blank lines separating devices. Handle odd cases when there
# are more than two blank lines between devices or none at the end.
$hrule= '='x60 . "\n";
s/(\n\n\n+)|(\n+$)/\n$hrule/g;
print($hrule, $_);
截至2017年4月,默认情况下,ram磁盘不再与当前的Ubuntu内核一起出现,因此此问题已解决。参见:https : //bugs.launchpad.net/ubuntu/+source/linux/+bug/1593293
此行为由内核选项控制,您只能通过重新编译自定义内核来更改。您可以使用GRUB参数ramdisk_size而不是count来更改ram *设备的大小。这是没有用的,因为即使您有很多内存,每个 ramdisk也会增加到您设置的大小。因此,例如,如果您想要一个8GB的ramdisk(我会这样做,请参阅下文),您将获得16个8GB实例。我不知道如果您不使用它们中的大多数,这是否无害,但是如果不使用它,我不愿意对其进行修改。
我想使用8GB / dev / ram设备镜像8GB硬盘分区,以用于在其上放置热磁盘区域的特定目的。我的应用程序将根据可用空间自动将块写出到常规存储中,因此它的大小并不重要。
在mdadm下使用后写,这应具有使写入快速爆发的效果,当环境安静时,镜像的HDD面会赶上来,以提供至少一些数据保护。我已经在Solaris上使用了此设置,但是Linux似乎无法使用它,因为它开箱即用。
由于RAM比SSD快几个数量级,所以这应该是一个胜利,但是我无法尝试。正如其他人已经注意到的那样,如果您使用tmpfs构建RAID1,它将不会在启动时重新组装,因为初始化tmpfs的步骤在启动过程中太晚了-在mountall。到那时,您的mds已经很好并且真正地建立了,因此它失败了,您必须手动重建它。
OTOH / dev / ram *设备将非常适合此操作-如果可以配置它们。它们是设置的第一件事,而ram0是初始的/文件系统。