当前位置: 首页>>技术教程>>正文


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

问题描述

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

最佳回答

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

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

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

  • CentOS 7 – 没有 RAM 磁盘

  • Fedora 23 – 没有 RAM 磁盘

  • Ubuntu 14.04 – 没有 RAM 磁盘

  • Raspbian Jessie – 16 个 RAM 磁盘 (4MiB)

Source

\\n

The RAM disk driver is a way to use main system memory as a block device. It\\n is required for initrd, an initial filesystem used if you need to load modules\\n in order to access the root filesystem (see Documentation/initrd.txt). It can\\n also be used for a temporary filesystem for crypto work, since the contents\\n are erased on reboot.

\\n

The RAM disk dynamically grows as more space is required. It does this by using\\n RAM from the buffer cache. The driver marks the buffers it is using as dirty\\n so that the VM subsystem does not try to reclaim them later.

\\n

The RAM disk supports up to 16 RAM disks by default, and can be reconfigured\\n to support an unlimited number of RAM disks (at your own risk). Just change\\n the configuration symbol BLK_DEV_RAM_COUNT in the Block drivers config menu\\n and (re)build the kernel.

\\n

次佳回答

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

第三种回答

我知道这个帖子很老了,但我最近才偶然发现它。\n安装 Slackware 14.2 后,我在 fdisk -l 的输出中得到了相同的 16 个 RAM 磁盘。我进一步调查了一下,发现在 ‘util-linux’\n软件包中,fdisk(以及其他软件包)是其中的一部分,fdisk 认为的块设备的选择发生了很大变化。在 util-linux 软件包版本 2.21 中,此决定基于报告的磁盘几何形状,而在当前版本 2.72 中,/proc/partitions 的输出被解析。\n根据我在互联网上的搜索,自内核 2.4 以来,ramdisk 就一直存在于 Linux 中,fdisk 只是没有显示它们。由于我对许多 “disks” 的列表感到恼火,它们不是真正的磁盘,所以我为 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;

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

第四种回答

Johannes 的帖子是正确的。ram-disks 已经在内核中存在很长时间了,是 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 月起,内存磁盘不再默认出现在当前 Ubuntu 内核中,因此此问题已得到解决。请参阅:https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1593293

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/14567.html,未经允许,请勿转载。