O fdisk -l mostra 16 discos ram / dev / ram0… / ram15

17

Desde que atualizei para a 15.10, fdisk -lrelata 16 discos ram ( /dev/ram0... /dev/ram15). Estou um pouco inseguro para o que eles são necessários. É seguro excluí-los? Caso contrário, como posso me livrar dessa saída do fdisk?

RudiC
fonte

Respostas:

13

Isso é perfeitamente normal nos sistemas Linux. É um tipo de ação preparatória para o caso em que os discos RAM devem ser necessários. Cada um deles tem um tamanho de 64 MiB, um valor muito baixo. Se necessário, o tamanho será aumentado automaticamente.

Por que de repente 16 discos RAM estão disponíveis no Wily, isso pode ser explicado apenas com dificuldade.

Testei os discos RAM padrão em:

  • CentOS 7 - Sem discos RAM
  • Fedora 23 - Sem discos RAM
  • Ubuntu 14.04 - Nenhum disco RAM
  • Raspbian Jessie - 16 discos RAM (4MiB)

Fonte

O driver de disco RAM é uma maneira de usar a memória principal do sistema como um dispositivo de bloco. É necessário para o initrd, um sistema de arquivos inicial usado se você precisar carregar módulos para acessar o sistema de arquivos raiz (consulte Documentação / initrd.txt). Também pode ser usado para um sistema de arquivos temporário para trabalho de criptografia, pois o conteúdo é apagado na reinicialização.

O disco RAM cresce dinamicamente conforme mais espaço é necessário. Isso é feito usando a RAM do cache do buffer. O driver marca os buffers que está usando como sujos, para que o subsistema da VM não tente recuperá-los mais tarde.

O disco RAM suporta até 16 discos RAM por padrão e pode ser reconfigurado para suportar um número ilimitado de discos RAM (por sua conta e risco). Apenas mude o símbolo de configuração BLK_DEV_RAM_COUNT no menu de configuração dos drivers de bloco e (re) construa o kernel.

AB
fonte
E isso mudou de 15.04 para 15.10?
Rudic
4
Observe que eles não consomem nenhuma memória se você nunca escrever nada para eles. O que parece ter mudado é que o kernel não costumava listar ramdisks em / proc / partitions, mas agora o faz, então o fdisk -l informa sobre eles.
Psd #
@RudiC: Como você é um usuário reputação 6: Se esta resposta que você ajudou, não se esqueça de clicar no cinza na esquerda deste texto, o que significa Sim, esta resposta é válido ! ;-)
Fabby
1
Obrigado por me lembrar. As respostas foram esclarecedoras, explicando a situação, então obrigado por elas. Infelizmente, ainda não tenho idéia de como suprimir essa saída perturbadora e confusa.
RudiC
Apenas o FYI - conferiu o Debian Jessie de baunilha, e é o mesmo resultado que você obteve para o Raspian Jessie.
UpTheCreek # 01
12

Não faço ideia por que o fdisk está repentinamente reportando / dev / ram.

No entanto, você pode dizer ao fdisk para relatar apenas dispositivos específicos.

fdisk -l /dev/sd*

Irá listar unidades reais.

Como alternativa, você também pode usar o parted e o lsblk.

Saída separada para uma unidade aqui.

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

Saída lsblk correspondente

    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 /

fonte
1
observe que em algumas caixas (versões da ACPI?) os dispositivos físicos são h d *, não s d *.
cat
8

Eu sei que esse tópico é antigo, mas me deparei com ele apenas recentemente. Depois de instalar o Slackware 14.2, obtive os mesmos 16 discos de RAM na saída do fdisk -l. Eu investiguei um pouco mais e descobri que no pacote 'util-linux', do qual o fdisk (entre outros) faz parte, a seleção do que o fdisk considera como dispositivo de bloco mudou substancialmente. Na versão 2.21 do pacote util-linux, esta decisão é baseada na geometria do disco relatada, enquanto na versão atual 2.72 a saída de / proc / partitions é analisada. De acordo com minhas pesquisas na internet, os ramdisks existem no Linux desde o kernel 2.4, o fdisk simplesmente não os mostrou. Como estou incomodado com a lista de muitos "discos", que não são discos reais, fiz um patch para o 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;

Talvez isso ajude alguns outros ...

Johannes
fonte
1
Isso força você a recompilar #fdisk
5

A publicação de Johannes está correta. Os discos ram estão no kernel há muito tempo, é o comportamento do fdisk que mudou. Em vez de corrigir o fdisk, escrevi um script perl simples (5 linhas de código, 6 linhas de comentário) para lidar com o problema. Eu o coloquei ~/bin/fdisk-le agora lembro de não colocar um espaço entre fdiske -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, $_);

A partir de abril de 2017, os discos ram não aparecem mais por padrão no kernel atual do Ubuntu, portanto esse problema foi resolvido. Veja: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1593293

Jeff Norden
fonte
0

Esse comportamento é controlado pelas opções do kernel que você só pode alterar recompilando um kernel personalizado. Você pode alterar o tamanho dos dispositivos ram * usando um parâmetro GRUB ramdisk_size, mas não a contagem. Isso é inútil, porque mesmo que você tenha muita memória, cada ramdisk aumentará para o tamanho que você definir. Por exemplo, se você deseja um ramdisk de 8 GB - o que eu faço, veja abaixo -, você terá instâncias de 16 x 8 GB. Não sei se isso é inofensivo se você não usar a maioria deles, mas reluto em bloquear meu sistema, se não for.

Desejo usar um dispositivo de 8 GB / dev / ram para espelhar uma partição de disco rígido de 8 GB com a finalidade específica de colocar uma área de disco quente nele. Meu aplicativo gravará automaticamente os blocos no armazenamento regular com base no espaço livre, portanto, não importa que seja pequeno.

Com o write-behind no mdadm, isso deve fazer com que as gravações disparem rapidamente se estiverem estouradas, com o lado do HDD do espelho atualizando quando as coisas estão mais silenciosas para fornecer pelo menos alguma proteção de dados. Eu usei essa configuração com o Solaris, mas não parece possível com o Linux, uma vez que sai da caixa.

Como a RAM é uma ordem de magnitude mais rápida que o SSD, isso deve ser uma vitória, mas não posso tentar. Como outros já notaram, se você criar um RAID1 com tmpfs, ele não será remontado na inicialização porque a etapa que inicializa o tmpfs é muito tarde no processo de inicialização - no mountall. Seus mds estão bem e verdadeiramente construídos até então, então ele falha e é necessário reconstruí-lo manualmente.

Os dispositivos OTOH / dev / ram * seriam perfeitos para isso - se você pudesse configurá-los. Eles são a primeira coisa que é configurada e ram0 é o sistema de arquivos / inicial.

mrchuck
fonte
Esta é uma boa resposta. No entanto, remova a "solicitação de aprimoramento", pois não é apropriado para uma resposta.
Eu ainda gostaria de fazer a solicitação de aprimoramento. Qual é a melhor maneira?
mrchuck