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

自从我升级到15.10后, fdisk -l报告了16个ram磁盘( /dev/ram0/dev/ram15 )。 我有点不确定那些需要什么。 删除它们是否安全? 如果没有,我怎么能摆脱那个fdisk输出?

这在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所必需的,如果您需要加载模块以访问根文件系统,则使用初始文件系统(请参阅Documentation / initrd.txt)。 它还可以用于加密工作的临时文件系统,因为内容在重新启动时被擦除。

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

默认情况下,RAM磁盘最多支持16个RAM磁盘,可以重新配置以支持无限数量的RAM磁盘(风险自负)。 只需更改Block drivers config菜单中的配置符号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 / 

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

也许这有助于其他人......

约翰内斯的post是正确的。 ram-disk已经在内核中存在很长时间了,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更改ram *设备的大小,但不能更改计数。 这没用,因为即使你有很多内存, 每个 ramdisk都会增加到你设置的大小。 因此,例如,如果你想要一个8GB的ramdisk – 我会这样做,见下文 – 你会得到16x 8GB的实例。 如果不使用大部分内容,我不知道这是否无害,但如果不是,我不愿意将我的系统搞砸。

我想使用8GB / dev / ram设备镜像8GB硬盘分区,以便在其上放置热盘区域。 我的应用程序会根据可用空间自动将块写入常规存储,因此它很小并不重要。

在mdadm下使用write-behind,如果它们是突发性的,那么它应该具有使写入更快速的效果,当事物更安静以至少提供一些数据保护时,镜像的HDD端会赶上。 我已经在Solaris上使用了这个设置,但是它似乎不可能在Linux中开箱即用。

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

OTOH / dev / ram *设备将是完美的 – 如果你可以配置它们。 它们是第一个设置的东西,ram0是初始/文件系统。