Làm cách nào để tạo một ramdisk Linux có kích thước cố định không bao giờ trao đổi vào đĩa?


9

Tôi muốn tạo một ramdisk Linux có kích thước cố định không bao giờ hoán đổi vào đĩa. Lưu ý rằng câu hỏi của tôi không phải là "tại sao" tôi muốn làm điều này (ví dụ, ví dụ, đó là vì mục đích giáo dục hoặc nghiên cứu): câu hỏi là làm thế nào để làm điều đó.

Theo tôi hiểu ramfskhông thể bị giới hạn về kích thước, vì vậy nó không phù hợp với yêu cầu của tôi là có một ramdisk kích thước cố định.

Có vẻ như tmpfs có thể được trao đổi vào đĩa. Vì vậy, nó không phù hợp với yêu cầu của tôi là không bao giờ trao đổi vào đĩa.

Làm thế nào bạn có thể tạo một ramdisk Linux có kích thước cố định mà không bao giờ trao đổi vào đĩa?

Có thể, ví dụ, có thể tạo tmpfsbên trong một ramfs(một giải pháp như vậy có phù hợp với cả yêu cầu của tôi không) và nếu có thì như thế nào?

Lưu ý rằng hiệu suất không phải là vấn đề và ramdisk bị đầy và gây ra lỗi "đầy đĩa" cũng không phải là vấn đề.


Tôi đoán câu trả lời này là mối quan tâm của bạn cyberciti.biz/faq/howto-create-linux-ram-disk-filesystem
Kiwy

bản sao có thể có của Tạo đĩa ram trên Linux
Kiwy

Để sử dụng một ramdisk thực tế (và không phải tmpfs hoặc ramfs), bạn sẽ cần hỗ trợ được tích hợp trong kernel của mình, một số hạt nhân distro có thể không làm điều đó nữa - hoặc nếu không thì đó là một mô-đun. Xem nếu bạn có bất kỳ ramthiết bị trong dev. Nếu không, hãy thử modprobe rd.
goldilocks

1
Tôi không nghĩ câu hỏi này là trùng lặp vì không có câu trả lời nào đề cập đến giới hạn kích thước và sự hoán đổi.
Marco

3
Khi mọi người hỏi bạn tại sao bạn muốn làm điều gì đó, đó là bởi vì những gì bạn đang hỏi nghe có vẻ hơi (hoặc rất nhiều) đối với họ. "Hmmm, anh ta đang yêu cầu một cách thực sự phức tạp để thực hiện X, anh ta có biết về lệnh do-X không?". Đôi khi cũng vì có nhiều cách, và cách đúng phụ thuộc vào lý do tại sao bạn làm việc đó. Ví dụ, nếu bạn hỏi làm thế nào để xóa một loạt các tệp, cách thực hiện tùy thuộc vào lý do tại sao rm rm là tuyệt vời nếu bạn cần giải phóng không gian đĩa, nhưng không quá nhiều nếu bạn cần để trống một đĩa để xử lý. Vì vậy, tóm lại, tôi sẽ đi trước và hỏi ... tại sao?
derobert

Câu trả lời:


5

Đây chỉ là một suy nghĩ và có nhiều hơn một nhược điểm, nhưng dù sao nó cũng có thể sử dụng được.

Làm thế nào về việc tạo một tệp hình ảnh và một hệ thống tệp bên trong nó trên ramfs, sau đó gắn hình ảnh như một thiết bị lặp? Bằng cách đó, bạn có thể giới hạn kích thước của ramdisk bằng cách giới hạn kích thước tệp hình ảnh. Ví dụ:

$ mkdir -p /ram/{ram,loop}
$ mount -t ramfs none /ram/ram
$ dd if=/dev/zero of=/ram/ram/image bs=2M count=1
1+0 records in
1+0 records out
2097152 bytes (2.1 MB) copied, 0.00372456 s, 563 MB/s
$ mke2fs /ram/ram/image
mke2fs 1.42 (29-Nov-2011)
/ram/ram/image is not a block special device.
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
256 inodes, 2048 blocks
102 blocks (4.98%) reserved for the super user
First data block=1
Maximum filesystem blocks=2097152
1 block group
8192 blocks per group, 8192 fragments per group
256 inodes per group

Allocating group tables: done                            
Writing inode tables: done                            
Writing superblocks and filesystem accounting information: done
$ mount -o loop /ram/ram/image /ram/loop
$ dd if=/dev/zero of=/ram/loop/test bs=1M count=5
dd: writing `/ram/loop/test': No space left on device
2+0 records in
1+0 records out
2027520 bytes (2.0 MB) copied, 0.00853692 s, 238 MB/s
$ ls -l /ram/loop
total 2001
drwx------ 2 root root   12288 Jan 27 17:12 lost+found
-rw-r--r-- 1 root root 2027520 Jan 27 17:13 test

Trong ví dụ (hơi dài) ở trên, tệp hình ảnh được tạo thành 2 megabyte và khi cố gắng ghi hơn 2 megabyte trên đó, viết đơn giản là thất bại vì hệ thống tệp đã đầy.

Một nhược điểm rõ ràng cho tất cả điều này là tất nhiên có nhiều phức tạp được thêm vào, nhưng ít nhất là cho mục đích học tập, điều này nên đủ.


Tệp được gắn loopback có thể hoán đổi ...
vonbrand

1

Cuốn sách (ngày!) "Trình điều khiển thiết bị Linux" của Corbet, Rubini và Kroah-Hartman có một trình điều khiển mẫu chỉ phân bổ một vùng bộ nhớ cố định để đánh lừa. Không phải là một hệ thống tập tin, nhưng ...


-1

Không thể hoàn thành. Tất cả RAM có thể phân trang bởi cả thiết kế phần cứng CPU và thiết kế vi hạt Linux. KHÔNG có lý do chính đáng để điều trị bộ nhớ khác. TẤT CẢ các thuật toán phần mềm CÓ THỂ được điều chỉnh để sử dụng sơ đồ bộ đệm ẩn tệp và bộ nhớ phân trang. Ảo là LUÔN tốt hơn và hiệu quả hơn.

Các đĩa RAM có kích thước hạn chế đi ngược lại các nguyên tắc nền tảng của thế giới ảo. Bạn phải giả định rằng chỉ những yêu cầu tệp hữu ích mới được thực hiện đối với hệ thống tệp máy chủ và tất cả các yêu cầu đó có tầm quan trọng và mức độ ưu tiên như nhau trong thế giới ảo (mô hình duy nhất được tính).

Nó đã được chứng minh một cách toán học rằng ngay cả các quy trình thời gian thực cũng phù hợp với quy tắc này. Nếu bạn gặp vấn đề về tốc độ thì KHÔNG BAO GIỜ được giải quyết bằng cách sử dụng RAM làm bộ lưu trữ == toàn bộ hệ thống máy chủ cần hoạt động nhanh hơn từ CPU đến bus I / O đến thiết bị lưu trữ vĩnh viễn. Tất cả các vấn đề máy tính thoái hóa nhân tạo đều có đủ các yêu cầu I / O của các nhánh và tốc độ trung bình của bộ nhớ cache RAM là cách tốt nhất bạn có thể làm.


Không thể hoàn thành. Tất cả RAM có thể phân trang bởi cả thiết kế phần cứng CPU và thiết kế vi nhân Linux. Sai : " mlock(), mlock2()mlockall()khóa một phần hoặc toàn bộ không gian địa chỉ ảo của quy trình gọi vào RAM, ngăn bộ nhớ đó được phân trang vào vùng trao đổi."
Andrew Henle
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.