fdisk -l 显示 16 个 RAM 磁盘 /dev/ram0 ... /ram15

fdisk -l 显示 16 个 RAM 磁盘 /dev/ram0 ... /ram15

自从我升级到 15.10 后,fdisk -l报告显示有 16 个 RAM 磁盘 ( /dev/ram0... /dev/ram15)。我不太确定这些是干什么用的。删除它们安全吗?如果不安全,我该如何摆脱该 fdisk 输出?

答案1

这在 Linux 系统上非常正常。这是一种为需要 RAM 磁盘的情况所做的准备。每个 RAM 磁盘的大小为 64 MiB,这是一个非常低的值。如果需要,大小会自动增加。

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

我已经在以下设备上测试了默认 RAM 磁盘:

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

来源

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

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

RAM 磁盘默认支持最多 16 个 RAM 磁盘,并且可以重新配置以支持无限数量的 RAM 磁盘(风险自负)。只需在 Block drivers 配置菜单中更改配置符号 BLK_DEV_RAM_COUNT 并(重新)构建内核即可。

答案2

不知道为什么 fdisk 突然报告 /dev/ram。

但是您可以告诉 fdisk 仅报告特定的设备。

fdisk -l /dev/sd*

将列出真实的驱动器。

或者您也可以使用 parted 和 lsblk。

此处为一个驱动器的 Parted 输出。

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 /

答案3

我知道这个帖子已经过时了,但我最近才看到它。安装 Slackware 14.2 后,我在 的输出中得到了相同的 16 个 RAM 磁盘 fdisk -l。我进一步调查了一下,发现在 'util-linux' 包中(fdisk 是其中的一部分),fdisk 认为的块设备的选择发生了很大变化。在 util-linux 包版本 2.21 中,此决定基于报告的磁盘几何形状,而在当前版本 2.72 中,/proc/partitions 的输出被解析。根据我在互联网上的搜索,自内核 2.4 以来,ramdisk 就一直存在于 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;

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

答案4

此行为由内核选项控制,您只能通过重新编译自定义内核来更改这些选项。您可以使用 GRUB 参数 ramdisk_size 更改 ram* 设备的大小,但不能更改计数。这毫无用处,因为即使您有大量内存每一个ramdisk 将增加到您设置的任何大小。例如,如果您想要一个 8GB 的​​ ramdisk(我想要,见下文),您将获得 16x 8GB 实例。如果您不使用其中的大部分,我不知道这是否无害,但如果不是,我不愿意让我的系统变砖。

我想使用 8GB /dev/ram 设备与 8GB 硬盘分区进行镜像,具体目的是将热磁盘区域放在其上。我的应用程序将根据可用空间自动将块写入常规存储,因此它很小也没关系。

使用 mdadm 下的后写功能,如果写入操作突发,则写入速度会非常快,而镜像的 HDD 端会在情况较安静时跟上,以提供至少一些数据保护。我已在 Solaris 中使用过此设置,但 Linux 似乎无法实现,因为它是开箱即用的。

由于 RAM 比 SSD 快几个数量级,这应该是一个胜利,但我无法尝试。正如其他人所注意到的,如果您使用 tmpfs 构建 RAID1,它将不会在启动时重新组装,因为初始化 tmpfs 的步骤在启动过程中太晚了——在 mountall 时。到那时您的 mds 已经构建好了,所以它会失败,您必须手动重建它。

另一方面,/dev/ram* 设备非常适合此用途——如果您可以配置它们的话。它们是最先设置的东西,ram0 是初始 / 文件系统。

相关内容