自从我升级到 15.10 以来,fdisk -l报告了 16 个 ram 磁盘 ( /dev/ram0... /dev/ram15)。我有点不确定这些是做什么用的。删除它们是否安全?如果没有,我怎样才能摆脱那个 fdisk 输出?
A.B*_*.B. 13
这在 Linux 系统上是完全正常的。对于需要 RAM 磁盘的情况,这是一种准备操作。它们中的每一个都有 64 MiB 的大小,这是一个非常低的值。如有必要,大小将自动增加。
为什么 Wily 中突然有 16 个可用的 RAM 磁盘,这很难解释。
我已经测试了以下默认 RAM 磁盘:
RAM 磁盘驱动程序是一种将主系统内存用作块设备的方法。initrd 需要它,如果您需要加载模块以访问根文件系统,则使用初始文件系统(请参阅文档/initrd.txt)。它还可用于加密工作的临时文件系统,因为内容在重新启动时会被擦除。
RAM 磁盘会随着需要更多空间而动态增长。它通过使用缓冲区缓存中的 RAM 来实现这一点。驱动程序将它正在使用的缓冲区标记为脏,以便 VM 子系统以后不会尝试回收它们。
RAM 盘默认最多支持 16 个 RAM 盘,并且可以重新配置以支持无限数量的 RAM 盘(风险自担)。只需更改块驱动程序配置菜单中的配置符号 BLK_DEV_RAM_COUNT 并(重新)构建内核。
小智 12
不知道为什么 fdisk 突然报告 /dev/ram。
但是,您可以告诉 fdisk 仅报告特定设备。
fdisk -l /dev/sd*
Run Code Online (Sandbox Code Playgroud)
将列出真实的驱动器。
或者,您也可以使用 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
Run Code Online (Sandbox Code Playgroud)
对应的 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 /
Run Code Online (Sandbox Code Playgroud)
小智 9
我知道这个线程很旧,但我最近才遇到它。安装 Slackware 14.2 后,我在
fdisk -l. 我进一步调查了一下,发现在 fdisk(以及其他)所属的“util-linux”包中,fdisk 认为是块设备的选择发生了重大变化。在 util-linux 包版本 2.21 中,此决定基于报告的磁盘几何结构,而在当前版本 2.72 中,解析 /proc/partitions 的输出。根据我在互联网上的搜索,从内核 2.4 开始,Linux 中就存在 ramdisk,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;
Run Code Online (Sandbox Code Playgroud)
也许这对其他人有帮助...
小智 5
约翰内斯的帖子是正确的。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, $_);
Run Code Online (Sandbox Code Playgroud)
截至 2017 年 4 月,当前 Ubuntu 内核默认不再显示 ram 磁盘,因此此问题已解决。参见:https : //bugs.launchpad.net/ubuntu/+source/linux/+bug/1593293
| 归档时间: |
|
| 查看次数: |
29861 次 |
| 最近记录: |