自从我升级到 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 是初始 / 文件系统。