Làm cách nào tôi có thể thay đổi số lượng và kích thước của ramdisks Linux (/ dev / ram0 - / dev / ram15)?


27

Sử dụng Linux, khi tôi khởi động, tôi tự động có 16 ram 16 MB, tuy nhiên, tôi muốn tạo một ramdisk thực sự lớn để kiểm tra một số phần mềm.

Tôi thấy rằng tôi có thể điều chỉnh kích thước của ramdisks đã có trên hệ thống với tham số khởi động kernel ramdisk_size, tuy nhiên, điều này làm cho tất cả 16 ramdisks (/ dev / ram0 - / dev / ram15) kích thước được chỉ định. Vì vậy, nếu tôi muốn tạo ramdisk 1GB, tôi sẽ cần 16GB bộ nhớ.

Về cơ bản, tôi muốn tạo một ramdisk 10GB sẽ là / dev / ram0. Làm thế nào tôi sẽ đi về làm điều đó? Tôi giả sử có một tham số khởi động kernel, nhưng tôi không tìm thấy nó.

Câu trả lời:


18

Thời gian biên dịch kernel

Có hai tùy chọn cấu hình kernel mà bạn có thể đặt trong .configtệp của mình :

CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10485760

Điều này đã cấu hình kernel của tôi để tạo một ramdisk là 10G khi khởi động.

Ghi chú:

  • CONFIG_BLK_DEV_RAM_SIZE là bằng KB.
  • Không chỉ định nhiều bộ nhớ hơn bạn thực sự có RAM trong máy tính của bạn.
  • Trong menuconfigcái nhìn dưới Device Drivers-> Block Device.

Thời gian khởi động

Bạn có thể chỉ định kích thước của các đĩa ram bạn tạo thông qua tham số khởi động kernel ramdisk_size. Ví dụ:

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

Bây giờ tôi có thể khởi động máy của mình và tạo một hệ thống tệp trên nó, gắn kết và sử dụng chính xác như một thiết bị khối.

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

Nguồn:

  1. http://www.vanemery.com/Linux/Ramdisk/ramdisk.html [đã chết]
  2. https://www.kernel.org/doc/Documentation/blockdev/ramdisk.txt

16

Bạn nên sử dụng tmpfs cho điều đó thay vào đó.

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

Tôi có thể tạo một hệ thống tập tin trên một tmpfs không? Tôi cần một thiết bị khối nằm trong bộ nhớ mà tôi có thể tạo một hệ thống tập tin. Tôi có thể làm điều này trên một tmpfs?
Kevin S.

tmpfs một hệ thống tập tin. Nó chỉ xảy ra để nằm trong bộ nhớ.
Ignacio Vazquez-Abrams

3
Tôi đánh giá cao câu trả lời và thông thường một tmpfs sẽ thực hiện thủ thuật, nhưng tôi cần tạo một hệ thống tập tin xfs trên một phần của bộ nhớ mà tôi đang viết.
Kevin S.

Vấn đề với tmpfs là nó được hỗ trợ bởi trao đổi. Nếu bạn bắt đầu sử dụng trao đổi, thì bạn đang mất đi lợi ích của việc sử dụng RAM thuần. Ngoài ra, một số người thích có một khu vực không được hỗ trợ cho các ứng dụng tiền điện tử.
drudru

Các câu trả lời và chi tiết liên quan có tại đây: unix.stackexchange.com/questions/66329/ory
jocull

7

Để tạo một đĩa ram lớn sau khi khởi động mà không làm hỏng các tham số kernel. Sử dụng tmpfs, tạo một tệp, gắn kết nó qua vòng lặp và gắn kết nó thông qua một hệ thống tệp:

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/

Có lẽ một chút hình phạt hiệu suất đi qua nhiều lớp khác nhau ... nhưng ít nhất nó hoạt động.


6

Một tùy chọn khác là sử dụng các thiết bị lặp (trái ngược với tính năng loobpack của mount như đã đề cập trước đó):

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

Bây giờ / dev / loop là một thiết bị khối hợp pháp mà ứng dụng của bạn sẽ hoạt động giống như một thiết bị vật lý hoặc ramdisk, ngoại trừ việc nó được sao lưu tệp. Bạn có thể gắn kết ở đâu đó hoặc ứng dụng của bạn tác động lên nút thiết bị, thực hiện ioctls khối tiêu chuẩn. Lưu ram hệ thống của bạn và hữu ích để giữ xung quanh cho testcase, vv

. )


+1 vì điều này không cần biên dịch lại kernel
m-ric

3

Bạn có thể sử dụng một tập tin vòng lặp thay thế. Chỉ cần tạo một tệp vòng lặp kích thước bạn muốn (nếu bạn muốn đặt nó vào một tdfs ramdisk, tốt), sau đó định dạng tệp vòng lặp và gắn kết nó.

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

Tôi thực sự đã thử điều này trước khi tôi đăng câu hỏi của mình. Đó là một giải pháp tuyệt vời, nhưng phần mềm tôi đang thử nghiệm hoạt động khác khi xử lý tệp và không phải là thiết bị chặn, đó là lý do tại sao tôi xem xét tùy chọn ramdisk. Cảm ơn.
Kevin S.

2
Thiết bị loopback là thiết bị chặn, vì vậy tôi không chắc làm thế nào có thể?
pjc50

2

Đối tượng của một ramdrive là tốc độ. Tmpfs không phải là một ổ đĩa. Thiết bị lặp không phải là ổ đĩa, nhưng bạn có thể đặt hình ảnh ổ đĩa trên thiết bị lặp. Ổ đĩa Ram "là" ổ đĩa, và ổ đĩa rất nhanh. Hãy thử chạy:

hdparm -t /dev/sda 

và sau đó:

hdparm -t /dev/ram0

Bạn sẽ thấy những gì tôi muốn nói! Nhưng hdparm đôi khi phá hủy ổ đĩa ram. Vì vậy, bạn phải làm cho nó một lần nữa.

Đôi khi không có thiết bị / dev / ram. Để làm một:

mknod -m 0777 /dev/ram0 b 1 0 

Nhưng nó sẽ không có kích thước. Để cho nó kích thước:

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

và nó sẽ dừng lại khi ổ đĩa đầy. Kích thước tối đa được xác định bởi parm cấu hình kernel : CONFIG_BLK_DEV_RAM_SIZE.

Sau đó, chỉ cần định dạng nó, tức là

mke2fs /dev/ram0

Và gắn kết nó:

mount /dev/ram0 /mnt/ramdrive

Một yêu thích của tôi là gỡ lỗi mã được lưu trữ trên một ramdrive. Các trình biên dịch có tốc độ tối thiểu gấp 10 lần mã được lưu trữ trên ổ cứng. Các bảng cơ sở dữ liệu được lưu trữ trên ramdrive cũng bay, nhưng bạn phải có một tập lệnh ghi vào đĩa cứng định kỳ. Hầu hết các quản trị viên không có can đảm để đưa dữ liệu vào đĩa ram. Và một số bảng quá lớn.


1

Trên ngọn hải đăng 64 (puupy linux dựa trên slackware) tôi đã làm điều này;

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/

Ở đó bạn có một ramdisk được gắn dưới dạng một thư mục /mnt/dvdnơi bạn có thể sao chép dán lưu làm mọi thứ như bạn làm trong một thư mục hd ngoại trừ trong ram. nhớ lưu tập tin của bạn vào hd trước khi tắt máy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.