fdisk -l은 16 개의 램 디스크를 보여줍니다. / dev / ram0… / ram15


17

15.10으로 업그레이드 한 이후 fdisk -l16 개의 램 디스크 ( /dev/ram0... /dev/ram15) 가보고됩니다 . 나는 그것이 무엇이 필요한지 조금 확신하지 못한다. 삭제해도 안전한가요? 그렇지 않다면 어떻게 fdisk 출력을 제거 할 수 있습니까?

답변:


13

이것은 Linux 시스템에서 완벽하게 정상입니다. RAM 디스크가 필요한 경우를위한 일종의 준비 조치입니다. 각각의 크기는 64 MiB로 매우 낮은 값입니다. 필요한 경우 크기가 자동으로 증가합니다.

Wily에서 갑자기 16 개의 RAM 디스크를 사용할 수있는 이유는 어려울 때만 설명 할 수 있습니다.

기본 RAM 디스크를 다음에서 테스트했습니다.

  • CentOS 7 – RAM 디스크 없음
  • Fedora 23 – RAM 디스크 없음
  • 우분투 14.04 – RAM 디스크 없음
  • Raspbian Jessie – 16 개의 RAM 디스크 (4MiB)

출처

RAM 디스크 드라이버는 메인 시스템 메모리를 블록 장치로 사용하는 방법입니다. 루트 파일 시스템에 액세스하기 위해 모듈을로드해야하는 경우 사용되는 초기 파일 시스템 인 initrd에 필요합니다 (Documentation / initrd.txt 참조). 재부팅시 내용이 지워 지므로 암호화 작업을위한 임시 파일 시스템에도 사용할 수 있습니다.

더 많은 공간이 필요하면 RAM 디스크가 동적으로 커집니다. 버퍼 캐시에서 RAM을 사용하여이를 수행합니다. 드라이버는 사용중인 버퍼를 더티로 표시하여 VM 하위 시스템이 나중에이를 회수하려고 시도하지 않도록합니다.

RAM 디스크는 기본적으로 최대 16 개의 RAM 디스크를 지원하며 무제한의 RAM 디스크를 지원하도록 재구성 할 수 있습니다 (자신의 책임 임). 블록 드라이버 구성 메뉴에서 구성 기호 BLK_DEV_RAM_COUNT를 변경하고 커널을 다시 빌드하십시오.


그리고 이것은 15.04에서 15.10으로 변경 되었습니까?
RudiC

4
아무 것도 쓰지 않으면 메모리를 사용하지 않습니다. 변경된 것으로 보이는 것은 커널이 / proc / partitions에 램 디스크를 나열하는 데 사용되지 않았지만 이제는 그렇게했기 때문에 fdisk -l이보고한다는 것입니다.
psusi

@RudiC : 평판 6 사용자 :이 답변이 도움이 되었으면 이 텍스트 왼쪽의 회색 을 클릭하는 것을 잊지 마십시오. 예,이 답변은 유효합니다 ! ;-)
Fabby

1
상기시켜 주셔서 감사합니다. 상황을 설명하는 답변이 밝아졌습니다. 감사합니다. 불행히도, 여전히 지저분한 혼란스러운 출력을 억제하는 방법에 대한 단서가 없습니다.
RudiC

FYI-바닐라 데비안 제시를 확인한 결과 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 버전?)에서 물리적 장치는 s d *가 아니라 h d *입니다.
cat

8

이 스레드가 오래되었다는 것을 알고 있지만 최근에만 스레드를 발견했습니다. Slackware 14.2를 설치 한 후의 출력에 동일한 16 개의 RAM 디스크가 fdisk -l있습니다. 좀 더 조사한 결과, fdisk (다른 것들 중 하나)의 일부인 'util-linux'패키지에서 fdisk가 블록 장치로 간주 한 것의 실질적인 변화가 거의 없다는 것을 알았습니다. util-linux 패키지 버전 2.21에서이 결정은보고 된 디스크 구조를 기반으로하며 현재 버전 2.72에서는 / proc / partitions의 출력이 구문 분석됩니다. 인터넷에서 검색 한 결과 램 디스크는 커널 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;

어쩌면 이것은 다른 사람들에게 도움이 될 것입니다 ...


1
이렇게하면 다시 컴파일해야합니다fdisk

5

Johannes의 게시물이 정확합니다. 램 디스크는 오랫동안 커널에 있었고 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 년 4 월부터 현재 Ubuntu 커널에 램 디스크가 더 이상 기본적으로 나타나지 않으므로이 문제가 해결되었습니다. 참조 : https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1593293


0

이 동작은 사용자 정의 커널을 다시 컴파일해야만 변경할 수있는 커널 옵션에 의해 결정됩니다. GRUB 매개 변수 ramdisk_size를 사용하여 수 *가 아닌 ram * 장치의 크기를 변경할 수 있습니다. 메모리가 많더라도 모든 램 디스크는 사용자가 설정 한 크기로 증가하기 때문에 이것은 쓸모가 없습니다 . 예를 들어 8GB 램 디스크를 원한다면 (아래 참조) 16x 8GB 인스턴스를 얻게됩니다. 대부분을 사용하지 않으면 이것이 무해한 지 여부는 알 수 없지만 시스템을 사용하지 않으면 시스템을 차단하는 것을 꺼려합니다.

핫 디스크 영역을 배치하기 위해 8GB / dev / ram 장치를 사용하여 8GB 하드 디스크 파티션으로 미러링하고 싶습니다. 내 응용 프로그램은 여유 공간을 기준으로 블록을 일반 저장소에 자동으로 쓰므로 크기가 작더라도 중요하지 않습니다.

mdadm에서 write-behind를 사용하면 버스트가 급증 할 때 쓰기 속도가 빠르며 미러의 HDD 쪽이 데이터 보호를 제공하기 위해 데이터가 더 조용 할 때 포착됩니다. Solaris에서이 설정을 사용했지만 Linux에서 제공되지 않으므로 가능한 것은 아닙니다.

RAM은 SSD보다 수십 배 빠르기 때문에 승리해야하지만 시도 할 수는 없습니다. 다른 사람들이 알다시피, tmpfs를 사용하여 RAID1을 빌드하면 tmpfs를 초기화하는 단계가 부트 프로세스에서 너무 늦어서 mountall에서 부트 할 때 재 조립되지 않습니다. 그때까지 md가 제대로 구축되었으므로 실패하므로 수동으로 다시 작성해야합니다.

OTOH / dev / ram * 장치는 구성 할 수 있다면 완벽 할 것입니다. 그것들은 가장 먼저 설정되고 ram0은 초기 / 파일 시스템입니다.


이것은 좋은 대답입니다. 그러나 "향상 요청"은 답변에 적합하지 않으므로 제거하십시오.

여전히 개선 요청을하고 싶습니다. 가장 좋은 방법은 무엇입니까?
mrchuck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.