Linux 램 디스크 (/ dev / ram0-/ dev / ram15)의 크기와 크기를 어떻게 변경합니까?


27

Linux를 사용하면 부팅 할 때 16MB의 16MB 램 디스크가 자동으로 생성되지만 소프트웨어를 테스트하기 위해 실제로 큰 램 디스크 하나를 만들고 싶습니다.

커널 부트 매개 변수를 사용하여 시스템에 이미있는 램 디스크의 크기를 조정할 수 있다는 것을 알았 ramdisk_size습니다. 그러나 이것은 16 개의 램 디스크 (/ dev / ram0-/ dev / ram15)를 모두 지정된 크기로 만듭니다. 따라서 1GB 램 디스크를 만들려면 16GB의 메모리가 필요합니다.

기본적으로 / dev / ram0 인 하나의 10GB 램 디스크를 만들고 싶습니다. 어떻게하면 될까요? 커널 부팅 매개 변수가 있다고 가정했지만 찾지 못했습니다.

답변:


18

커널 컴파일 시간

.config파일 에서 설정할 수있는 두 가지 커널 구성 옵션이 있습니다 .

CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10485760

이것은 부팅시 10G 인 하나의 램 디스크를 생성하도록 커널을 구성했습니다.

노트:

  • CONFIG_BLK_DEV_RAM_SIZE KB입니다.
  • 컴퓨터에 실제로 RAM보다 많은 메모리를 지정하지 마십시오.
  • 에서 menuconfig장치 Drivers-> 블록 장치에서보기.

부팅 시간

커널 부트 매개 변수를 통해 생성 한 램 디스크의 크기를 지정할 수 있습니다 ramdisk_size. 예를 들면 다음과 같습니다.

kernel /vmlinuz-2.6.32.24 ro root=LABEL=/ rhgb quiet ramdisk_size=10485760

이제 컴퓨터를 부팅하고 파일 시스템을 만들어 마운트하고 블록 장치처럼 정확하게 사용할 수 있습니다.

# mkfs.xfs /dev/ram0
# mount /dev/ram0 /mnt/ramdisk

출처 :

  1. http://www.vanemery.com/Linux/Ramdisk/ramdisk.html [dead]
  2. https://www.kernel.org/doc/Documentation/blockdev/ramdisk.txt

16

당신은 사용해야 의 tmpfs를 대신합니다.

mount -t tmpfs -o size=10g none /mnt/point

tmpfs에서 파일 시스템을 만들 수 있습니까? 파일 시스템을 만들 수있는 메모리에 상주하는 블록 장치가 필요합니다. tmpfs에서이 작업을 수행 할 수 있습니까?
Kevin S.

tmpfs 파일 시스템입니다. 메모리에 상주합니다.
Ignacio Vazquez-Abrams

3
나는 대답에 감사하고 일반적으로 tmpfs가 트릭을 수행 할 것이지만, 내가 쓰는 메모리 부분에 xfs 파일 시스템을 만들어야합니다.
Kevin S.

tmpfs의 문제점은 스왑에 의해 지원된다는 것입니다. 스왑을 사용하기 시작하면 순수한 RAM에 있다는 이점이 사라집니다. 또한 일부 사람들은 암호화 응용 프로그램을 지원하지 않는 영역을 선호합니다.
drudru

관련 답변과 세부 정보는 다음과 같습니다. unix.stackexchange.com/questions/66329/…
jocull

7

커널 매개 변수를 사용하지 않고 부팅 후 큰 램 디스크를 만듭니다. tmpfs를 사용하고 파일을 만들고 루프를 통해 마운트 한 다음 파일 시스템을 통해 마운트하십시오.

mount -t tmpfs -o size=200M tmpfs temp/
cd temp/
dd if=/dev/zero of=disk.img bs=1M count=199
losetup /dev/loop0 disk.img
mkfs.ext4 /dev/loop0
cd ..
mount /dev/loop0 temp2/

아마도 여러 다른 계층을 거치는 약간의 성능 저하가 있지만 적어도 작동합니다.


6

다른 옵션은 루프 장치를 사용하는 것입니다 (앞서 언급 한대로 마운트의 loobpack 기능과 반대).

dd if=dev/zero of=myfs.img bs=1M count=1024
losetup /dev/loop0 myfs.img
mkfs.xfs /dev/loop0

이제 / dev / loop는 파일 백업 된 것을 제외하고 앱이 물리적 장치 나 램 디스크처럼 작동하는 합법적 인 블록 장치입니다. 어딘가에 마운트하거나 표준 노드 ioctl을 구현하는 장치 노드에 응용 프로그램을 작동시킬 수 있습니다. 시스템 램을 저장하고 테스트 케이스 등에 유용합니다.

(fdisk myfs.img, 파티션을 생성하고 losetup과 함께 --offset 및 --sizelimit를 사용하여 각 / dev / loopX를 이미지의 특정 파티션으로 지정하면 loop0, loop1은 sdc1, sdc2와 같이됩니다. )


커널을 다시 컴파일 할 필요가 없으므로 +1
m-ric

3

대신 루프 파일을 사용할 수 있습니다. 원하는 크기의 루프 파일을 만들고 (tmpfs 램 디스크에 넣을 경우), 루프 파일을 포맷하고 마운트하십시오.

dd if=/dev/zero of=myfile bs=1G count=10
mkfs.xfs -d file myfile
mount -t xfs -o loop myfile mymntpoint

내 질문을 게시하기 전에 실제로 이것을 시도했습니다. 훌륭한 솔루션이지만 테스트중인 소프트웨어는 블록 장치가 아닌 파일을 처리 할 때 다르게 작동하므로 램 디스크 옵션을 살펴 보았습니다. 감사.
Kevin S.

2
루프백 장치는 블록 장치이므로 어떻게 가능한지 잘 모르겠습니다.
pjc50

2

램 드라이브의 목표는 속도입니다. Tmpfs는 드라이브가 아닙니다. 루프 장치는 드라이브가 아니지만 루프 이미지에 드라이브 이미지를 넣을 수 있습니다. 램 디스크는 "드라이브"드라이브이며 매우 빠른 드라이브입니다. 달리기를 시도하십시오.

hdparm -t /dev/sda 

그리고:

hdparm -t /dev/ram0

당신은 내가 무슨 뜻인지 알 수 있습니다! 그러나 hdparm은 때때로 램 드라이브를 파괴합니다. 따라서 다시 만들어야합니다.

때로는 / dev / ram 장치가 없습니다. 하나 만들기 :

mknod -m 0777 /dev/ram0 b 1 0 

그러나 크기는 없습니다. 크기를 주려면

dd if=/dev/zero of=/dev/ram0

드라이브가 가득 차면 중지됩니다. 최대 크기는 커널 구성 매개 변수에 의해 결정됩니다 CONFIG_BLK_DEV_RAM_SIZE.

그런 다음 형식을 지정하십시오. 즉

mke2fs /dev/ram0

그리고 그것을 마운트하십시오 :

mount /dev/ram0 /mnt/ramdrive

내가 가장 좋아하는 것은 램 ​​드라이브에 저장된 코드를 디버깅하는 것입니다. 컴파일은 하드 드라이브에 저장된 코드 속도의 10 배 이상입니다. ramdrive에 저장된 데이터베이스 테이블도 작동하지만 하드 디스크에 정기적으로 쓰는 스크립트가 있어야합니다. 대부분의 관리자는 램 디스크에 데이터를 넣을 용기가 없습니다. 그리고 일부 테이블이 너무 큽니다.


1

등대 64 (슬랙웨어 기반의 puupy linux)에서 나는 이것을했다.

mke2fs /dev/ram1 4096000 # nearly 4G ramdisk, choose the size of ramdisk less than actual ram!
mount /dev/ram1 /mnt/dvd # dvd on my laptop is unused choose your device from /mnt/

램 디스크는 램을 /mnt/dvd제외하고 hd 디렉토리에서와 같이 모든 것을 복사하여 붙여 넣기 할 수 있는 디렉토리로 램 디스크를 마운트했습니다 . 종료하기 전에 파일을 hd에 저장하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.