fdisk -l показывает 16 RAM-дисков / dev / ram0… / ram15

17

С тех пор, как я обновил до 15.10, fdisk -lсообщает 16 RAM-дисков ( /dev/ram0... /dev/ram15). Я немного не уверен, для чего они нужны. Безопасно ли их удалять? Если нет, как я могу избавиться от этого вывода fdisk?

Рудик
источник

Ответы:

13

Это совершенно нормально в системах Linux. Это своего рода подготовительное действие для случая, когда требуются диски RAM. Каждый из них имеет размер 64 МиБ, что является очень низким значением. При необходимости размер будет увеличен автоматически.

Почему вдруг в Wily появилось 16 RAM-дисков, объяснить можно только с трудом.

Я проверил стандартные диски RAM на:

  • CentOS 7 - нет RAM-дисков
  • Fedora 23 - нет RAM дисков
  • Ubuntu 14.04 - нет RAM дисков
  • Распби Джесси - 16 RAM- дисков (4MiB)

Источник

Драйвер RAM-диска - это способ использовать основную системную память в качестве блочного устройства. Это требуется для initrd, исходной файловой системы, используемой, если вам нужно загрузить модули для доступа к корневой файловой системе (см. Documentation / initrd.txt). Он также может быть использован для временной файловой системы для криптографии, так как содержимое стирается при перезагрузке.

Диск RAM растет динамически, поскольку требуется больше места. Это делается с помощью оперативной памяти из буферного кеша. Драйвер помечает используемые им буферы как грязные, чтобы подсистема ВМ не пыталась восстановить их позже.

RAM-диск поддерживает до 16 RAM-дисков по умолчанию и может быть переконфигурирован для поддержки неограниченного количества RAM-дисков (на свой страх и риск). Просто измените конфигурационный символ BLK_DEV_RAM_COUNT в меню конфигурации блочных драйверов и (пере) соберите ядро.

AB
источник
И это изменилось с 15.04 до 15.10?
RudiC
4
Обратите внимание, что они не используют никакой памяти, если вы никогда ничего не пишите им. Похоже, что изменилось то, что ядро ​​не использовало список виртуальных дисков в / proc / partitions, но теперь делает, поэтому fdisk -l сообщает о них.
Псуси
@RudiC: Поскольку вы являетесь пользователем с репутацией 6: Если вам помог этот ответ, не забудьте нажать на серый слева от этого текста, что означает Да, этот ответ действителен ! ;-)
Fabby
1
Спасибо за напоминание. Ответы были поучительными, объясняющими ситуацию, так что спасибо за них. К сожалению, я до сих пор не знаю, как подавить этот беспорядочный и неприятный результат.
RudiC
Просто к вашему сведению - проверил ванильного Дебиана Джесси, и это тот же результат, который вы получили для Raspian Jessie.
UpTheCreek
12

Понятия не имею, почему 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 /

источник
1
обратите внимание, что на некоторых устройствах (версии ACPI?) физические устройства имеют формат h d *, а не s d *.
кот
8

Я знаю, что эта ветка старая, но я наткнулся на нее совсем недавно. После установки Slackware 14.2 я получил те же 16 RAM дисков на выходе fdisk -l. Я исследовал немного дальше и обнаружил, что в пакете 'util-linux', частью которого является fdisk (среди прочего), выбор того, что fdisk считает блочным устройством, существенно изменился. В пакете util-linux версии 2.21 это решение основано на сообщаемой геометрии диска, тогда как в текущей версии 2.72 вывод / proc / partitions анализируется. Согласно моим поискам в Интернете, ramdisk были там в Linux начиная с ядра 2.4, 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;

Может быть, это помогает некоторым другим ...

Johannes
источник
1
Это заставляет вас перекомпилироватьfdisk
5

Сообщение Йоханнеса является правильным. RAM-диски долгое время были в ядре, изменилось поведение 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 года диски RAM больше не отображаются по умолчанию с текущим ядром Ubuntu, поэтому эта проблема решена. Смотрите: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1593293.

Джефф Норден
источник
0

Это поведение зависит от параметров ядра, которые вы можете изменить, только перекомпилировав собственное ядро. Вы можете изменить размер устройств ram *, используя параметр GRUB ramdisk_size, но не количество. Это бесполезно, потому что даже если у вас много памяти, каждый виртуальный диск увеличится до любого установленного вами размера. Так, например, если вам нужен виртуальный диск 8 ГБ - что я и делаю, см. Ниже - вы получите 16x 8 ГБ экземпляров. Я не знаю, безвредно ли это, если вы не используете большинство из них, но я не хотел бы блокировать мою систему, если это не так.

Я хочу использовать устройство 8 ГБ / dev / ram для зеркалирования с разделом жесткого диска 8 ГБ для конкретной цели размещения на нем области горячего диска. Мое приложение автоматически записывает блоки в обычное хранилище на основе свободного места, поэтому не имеет значения, что оно маленькое.

С записью позади mdadm это должно привести к быстрой записи записей, если они бурные, с стороной зеркала на жестком диске, нагоняющей, когда вещи тише, чтобы обеспечить хотя бы некоторую защиту данных. Я использовал эту настройку с Solaris, но это не представляется возможным в Linux, так как оно поставляется из коробки.

Поскольку оперативная память на несколько порядков быстрее SSD, это должно быть выигрышно, но я не могу попробовать. Как уже заметили другие, если вы создадите RAID1 с tmpfs, он не будет повторно собираться при загрузке, потому что шаг, который инициализирует tmpfs, слишком поздно в процессе загрузки - на mountall. К тому времени ваши mds хорошо и действительно построены, поэтому он не работает, и вам придется перестраивать его вручную.

Устройства OTOH / dev / ram * были бы идеальными для этого - если бы вы могли их настроить. Это самое первое, что настраивается, а ram0 - это исходная / файловая система.

mrchuck
источник
Это хороший ответ. Пожалуйста, удалите «запрос на улучшение», так как он не подходит для ответа.
Я все еще хотел бы сделать запрос на улучшение. Какой самый лучший способ?
mrchuck