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.