fdisk -l显示16个ram磁盘/ dev / ram0…/ ram15


17

自从我升级到15.10以来,一直fdisk -l报告16个ram磁盘(/dev/ram0... /dev/ram15)。我有点不确定这些需要什么。删除它们安全吗?如果没有,如何摆脱该fdisk输出?

Answers:


13

这在Linux系统上是完全正常的。对于需要RAM磁盘的情况,这是一种准备工作。它们每个的大小为64 MiB,非常低。如有必要,尺寸将自动增加。

为什么突然很难在Wily中使用16个RAM磁盘,这很难解释。

我已经在以下位置测试了默认的RAM磁盘:

  • CentOS 7 –没有RAM磁盘
  • Fedora 23 –没有RAM磁盘
  • Ubuntu 14.04 –无RAM磁盘
  • Raspbian Jessie – 16个RAM磁盘(4MiB)

资源

RAM磁盘驱动程序是将主系统内存用作块设备的一种方式。initrd是必需的,initrd是一个初始文件系统,如果您需要加载模块才能访问根文件系统(请参阅Documentation / initrd.txt)。它也可以用于加密工作的临时文件系统,因为在重新启动时会擦除内容。

RAM磁盘随着需要更多空间而动态增长。它通过使用缓冲区缓存中的RAM来做到这一点。驱动程序将其使用的缓冲区标记为脏缓冲区,以便VM子系统以后不再尝试回收它们。

默认情况下,RAM磁盘最多支持16个RAM磁盘,并且可以重新配置为支持无限数量的RAM磁盘(后果自负)。只需在“块驱动程序”配置菜单中更改配置符号BLK_DEV_RAM_COUNT,然后(重新)构建内核。


这从15.04更改为15.10?
RudiC

4
请注意,如果您从不向它们写入任何内容,则它们不会耗尽任何内存。似乎已发生变化的是,内核以前不曾在/ proc / partitions中列出ramdisk,但现在已经列出了,因此fdisk -l报告它们。
psusi

@RudiC:您是6级用户:如果此答案对您有所帮助,请不要忘记单击文本左侧的灰色,这表示是的,此答案有效;-)
Fabby 2015年

1
谢谢你的提醒。答案很有启发性,解释了情况,因此感谢您。不幸的是,我仍然不知道如何抑制混乱的输出。
RudiC

仅供参考-检查了香草Debian Jessie,这与您获得Raspian Jessie的结果相同。
UpTheCreek

12

不知道为什么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 /

1
请注意,在某些包装盒(ACPI版本?)上,物理设备是h d *,而不是s d *。
2015年

8

我知道这个线程很旧,但是我最近才碰到它。安装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;

也许这对其他人有帮助...


1
这迫使您重新编译fdisk

5

约翰尼斯的帖子是正确的。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


0

此行为由内核选项控制,您只能通过重新编译自定义内核来更改。您可以使用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是初始的/文件系统。


这是一个很好的答案。但是,请删除“增强请求”,因为它不适合回答。

我仍然想提出增强要求。什么是最好的方法?
mrchuck '17
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.