답변:
이것은 Linux 시스템에서 완벽하게 정상입니다. RAM 디스크가 필요한 경우를위한 일종의 준비 조치입니다. 각각의 크기는 64 MiB로 매우 낮은 값입니다. 필요한 경우 크기가 자동으로 증가합니다.
Wily에서 갑자기 16 개의 RAM 디스크를 사용할 수있는 이유는 어려울 때만 설명 할 수 있습니다.
기본 RAM 디스크를 다음에서 테스트했습니다.
RAM 디스크 드라이버는 메인 시스템 메모리를 블록 장치로 사용하는 방법입니다. 루트 파일 시스템에 액세스하기 위해 모듈을로드해야하는 경우 사용되는 초기 파일 시스템 인 initrd에 필요합니다 (Documentation / initrd.txt 참조). 재부팅시 내용이 지워 지므로 암호화 작업을위한 임시 파일 시스템에도 사용할 수 있습니다.
더 많은 공간이 필요하면 RAM 디스크가 동적으로 커집니다. 버퍼 캐시에서 RAM을 사용하여이를 수행합니다. 드라이버는 사용중인 버퍼를 더티로 표시하여 VM 하위 시스템이 나중에이를 회수하려고 시도하지 않도록합니다.
RAM 디스크는 기본적으로 최대 16 개의 RAM 디스크를 지원하며 무제한의 RAM 디스크를 지원하도록 재구성 할 수 있습니다 (자신의 책임 임). 블록 드라이버 구성 메뉴에서 구성 기호 BLK_DEV_RAM_COUNT를 변경하고 커널을 다시 빌드하십시오.
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 /
이 스레드가 오래되었다는 것을 알고 있지만 최근에만 스레드를 발견했습니다. 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;
어쩌면 이것은 다른 사람들에게 도움이 될 것입니다 ...
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
이 동작은 사용자 정의 커널을 다시 컴파일해야만 변경할 수있는 커널 옵션에 의해 결정됩니다. 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은 초기 / 파일 시스템입니다.