fdisk -l pokazuje 16 dysków RAM / dev / ram0… / ram15

17

Odkąd zaktualizowałem do wersji 15.10, fdisk -lzgłasza 16 dysków RAM ( /dev/ram0... /dev/ram15). Nie jestem pewien, do czego są potrzebne. Czy można je bezpiecznie usunąć? Jeśli nie, jak mogę pozbyć się tego wyjścia fdisk?

RudiC
źródło

Odpowiedzi:

13

Jest to całkowicie normalne w systemach Linux. Jest to rodzaj działania przygotowawczego na wypadek, gdyby dyski RAM były wymagane. Każdy z nich ma rozmiar 64 MiB, co jest bardzo niską wartością. W razie potrzeby rozmiar zostanie automatycznie zwiększony.

Dlaczego nagle w Wily dostępnych jest 16 dysków RAM, można to wytłumaczyć z trudem.

Testowałem domyślne dyski RAM na:

  • CentOS 7 - Brak dysków RAM
  • Fedora 23 - Brak dysków RAM
  • Ubuntu 14.04 - Brak dysków RAM
  • Raspbian Jessie - 16 dysków RAM (4 MB)

Źródło

Sterownik dysku RAM to sposób na wykorzystanie głównej pamięci systemowej jako urządzenia blokowego. Jest wymagany dla initrd, początkowego systemu plików używanego, jeśli trzeba załadować moduły, aby uzyskać dostęp do głównego systemu plików (patrz Dokumentacja / initrd.txt). Można go również użyć do tymczasowego systemu plików do pracy kryptograficznej, ponieważ zawartość jest usuwana przy ponownym uruchomieniu.

Dysk RAM dynamicznie rośnie, gdy potrzeba więcej miejsca. Robi to za pomocą pamięci RAM z bufora pamięci podręcznej. Sterownik zaznacza używane bufory jako brudne, aby podsystem maszyny wirtualnej nie próbował ich później odzyskać.

Dysk RAM domyślnie obsługuje do 16 dysków RAM i można go ponownie skonfigurować w celu obsługi nieograniczonej liczby dysków RAM (na własne ryzyko). Wystarczy zmienić symbol konfiguracyjny BLK_DEV_RAM_COUNT w menu Blokuj konfigurację sterowników i (ponownie) zbudować jądro.

AB
źródło
A to zmieniło się z 15.04 na 15.10?
RudiC
4
Pamiętaj, że nie zużywają pamięci, jeśli nigdy do nich nie zapisujesz. Wydaje się, że to się zmieniło, ponieważ jądro nie używało listowania ramdysków w / proc / partitions, ale teraz robi to, więc fdisk -l zgłasza je.
psusi
@RudiC: Jako użytkownik reputacji 6: Jeśli ta odpowiedź ci pomogła, nie zapomnij kliknąć szarego po lewej stronie tego tekstu, co oznacza , że tak, ta odpowiedź jest poprawna ! ;-)
Fabby
1
Dzięki za przypomnienie. Odpowiedzi były pouczające, wyjaśniające sytuację, więc dziękuję za nie. Niestety nadal nie mam pojęcia, jak ukryć ten bałagan powodujący niepokój.
RudiC,
Po prostu FYI - sprawdzone waniliowe Debian Jessie, i to ten sam wynik, który masz dla Raspian Jessie.
UpTheCreek,
12

Nie mam pojęcia, dlaczego fdisk nagle zgłasza / dev / ram.

Możesz jednak powiedzieć fdisk, aby zgłaszał tylko określone urządzenia.

fdisk -l /dev/sd*

Wymieni prawdziwe dyski.

Alternatywnie możesz użyć parted i lsblk.

Podzielone wyjście dla jednego napędu tutaj.

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

Odpowiadające wyjście 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 /

źródło
1
Zwróć uwagę, że na niektórych urządzeniach (wersje ACPI?) urządzeniami fizycznymi są h d *, a nie s d *.
kot
8

Wiem, że ten wątek jest stary, ale natknąłem się na niego dopiero niedawno. Po zainstalowaniu Slackware 14.2 mam te same 16 dysków RAM na wyjściu fdisk -l. Zbadałem trochę dalej i odkryłem, że w pakiecie „util-linux”, którego częścią jest fdisk (między innymi), wybór tego, co fdisk uważa za urządzenie blokowe, znacznie się zmienił. W pakiecie util-linux w wersji 2.21 decyzja ta opiera się na zgłoszonej geometrii dysku, podczas gdy w bieżącej wersji 2.72 dane wyjściowe / proc / partitions są analizowane. Według moich wyszukiwań w Internecie ramdyski były tam w Linuksie od jądra 2.4, fdisk po prostu ich nie pokazał. Ponieważ denerwuje mnie lista wielu „dysków”, które nie są prawdziwymi dyskami, stworzyłem łatkę dla 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;

Może to pomaga niektórym innym ...

Johannes
źródło
1
Zmusza to do ponownej kompilacjifdisk
5

Post Johannesa jest poprawny. Dyski RAM są w jądrze od dłuższego czasu, zmieniło się zachowanie fdisk. Zamiast łatać fdisk, napisałem prosty skrypt perla (5 linii kodu, 6 linii komentarza) do obsługi tego problemu. Włożyłem to ~/bin/fdisk-l, a teraz po prostu pamiętam, aby nie umieszczać spacji między fdiski -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, $_);

Od kwietnia 2017 r. Dyski RAM nie pojawiają się domyślnie w bieżącym jądrze Ubuntu, więc problem został rozwiązany. Zobacz: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1593293

Jeff Norden
źródło
0

To zachowanie jest regulowane przez opcje jądra, które można zmienić tylko poprzez rekompilację niestandardowego jądra. Możesz zmienić rozmiar urządzeń RAM *, używając parametru GRUB ramdisk_size, ale nie licząc. Jest to bezużyteczne, ponieważ nawet jeśli masz dużo pamięci każdy ramdysk zwiększy się do ustawionego rozmiaru. Na przykład, jeśli chcesz ramdysku 8 GB - co ja, patrz poniżej - otrzymasz 16x 8 GB instancji. Nie wiem, czy jest to nieszkodliwe, jeśli nie używasz większości z nich, ale niechętnie zepsuję mój system, jeśli tak nie jest.

Chcę użyć urządzenia 8 GB / dev / ram do wykonania kopii lustrzanej partycji dysku twardego 8 GB w celu umieszczenia na nim obszaru dysku twardego. Moja aplikacja automatycznie wypisze bloki do zwykłej pamięci masowej w oparciu o wolne miejsce, więc nie ma znaczenia, że ​​jest małe.

W przypadku zapisu poniżej mdadm powinno to spowodować, że zapisy będą płonąć szybko, jeśli są pęknięte, a strona HDD lustra nadrabia zaległości, gdy wszystko jest cichsze, aby zapewnić przynajmniej pewną ochronę danych. Korzystałem z tej konfiguracji w systemie Solaris, ale wydaje się, że nie jest to możliwe w przypadku Linuksa, ponieważ jest wyprowadzany z pudełka.

Ponieważ pamięć RAM jest o rząd wielkości szybsza niż SSD, powinna to być wygrana, ale nie mogę jej wypróbować. Jak zauważyli inni, jeśli zbudujesz RAID1 przy pomocy tmpfs, nie da się go ponownie złożyć przy starcie, ponieważ krok inicjujący tmpfs jest o wiele za późno na starcie - podczas montowania. Twoje MD są do tego czasu dobrze zbudowane, więc się nie udaje i trzeba je odbudować ręcznie.

Urządzenia OTOH / dev / ram * byłyby do tego idealne - gdybyś mógł je skonfigurować. Są to pierwsze rzeczy, które się konfigurują, a ram0 to system początkowy / system plików.

mrchuck
źródło
To dobra odpowiedź. Usuń jednak „prośbę o ulepszenie”, ponieważ odpowiedź nie jest odpowiednia.
Nadal chciałbym poprosić o ulepszenie. Jaki jest najlepszy sposób?
mrchuck