Có thể tạo RAMDisk / Ramdrive cho Android 4.x không?


8

Có thể tạo ramdisk tmpfs tự động phát triển trên Android 4.x đã root không? Nếu có, làm thế nào?


2
Bạn cần cái này để làm gì?
geffchang

lưu trữ tạm thời cho các tệp tài liệu khác nhau
eadmaster

1
SDCard không được tự động làm sạch tại stutdown ...
eadmaster

2
@geffchang có gì khác biệt không quan trọng tại sao anh ta cần điều này? tôi cũng cần điều này vì một lý do hoàn toàn khác
Michael

3
và trong trường hợp của tôi, lý do là để lưu trữ tạm thời (Android có thể giết quá trình của tôi mà không cần cảnh báo bất cứ lúc nào) mà không cần phải chạm vào đèn flash (chu kỳ xóa hạn chế, tăng mức sử dụng năng lượng, chậm hơn, v.v.)
Michael

Câu trả lời:


6

Nếu bạn làm một cat /proc/filesystemsbạn nên chú ý tmpfs . Vì vậy, nếu bạn có quyền truy cập vào mountlệnh, bạn có thể

  1. tạo một thư mục ( mkdir MYDIRECTORY)
  2. gắn kết một hệ thống tập tin tmpfs ở đó ( mount -t tmpfs tmpfs MYDIRECTROY)

Theo mặc định, một tmpfs-mount sẽ sử dụng một nửa RAM có sẵn trên hệ thống của bạn. Vì vậy, thay vì "tự động phát triển", bạn có thể nghĩ nó là "tự động thu nhỏ" - tức là bạn càng sử dụng nó, RAM sẽ càng ít. Trong trường hợp xấu nhất, hệ thống của bạn có thể bắt đầu hoán đổi (điều mà bạn không muốn). Bạn có thể sử dụng các tùy chọn để sử dụng kích thước RAM khác nhau cho giá treo đó.

Cập nhật 2017 / 02-28: Do các hạn chế do Android áp đặt, bạn nên chọn một điểm gắn kết bên dưới một điểm có thể ghi cho tất cả Ứng dụng. Giống như một thẻ SD.


ok, cách này có thể ghi được bởi tất cả các ứng dụng:mount -o size=16M -t tmpfs tmpfs /data/local/tmp
eadmaster

@eadmaster phần nào về điều đó làm cho nó có thể ghi được bởi tất cả? kích thước hay điểm gắn kết? (nó không hoạt động với tôi ...)
Michael

@Michael bạn thấy thuộc tính nào. Nếu bạn phát hành ls -Faltrong thư mục gắn kết?
Nils

ls -Faltrong thư mục gắn kết không cho đầu ra. Tôi chỉ nhận được lời nhắc lại. Nếu tôi liệt kê thư mục từ cha mẹ, tôi nhận đượcdrwxrwxrwt root root 2014-04-06 20:18 tmp
Michael

@Michael nếu hệ điều hành của bạn đã được root, bạn sẽ có thể truy cập nó
eadmaster

3

Từ liên kết mà OP đã đính kèm, phần quan trọng đã tóm tắt:

tmpfs được hỗ trợ bởi nhân Linux từ phiên bản 2.4 trở lên. [3] tmpfs (trước đây gọi là shmfs) dựa trên mã ramfs được sử dụng trong quá trình khởi động

Nhấn mạnh của tôi, đó là những gì RAMDisk nói về! Nó cho phép kernel tạm thời gắn kết hệ thống tập tin gốc và tiếp tục thực thi các tập lệnh cần thiết khi khởi động.

Áp dụng tương tự trong trường hợp này của Android, mỗi và mọi boot.imgthứ được flash vào /bootphân vùng, cho dù bởi Odin, fastboot, Kies, Sony Update Software, Heimdall, v.v., có chứa "mã ramfs", có cấu trúc thư mục chứa, những thứ phù hợp bao gồm:

  • /dev cho các tập tin thiết bị
  • /sbin cho hệ thống nhị phân
  • /sysđể sử dụng tương tác với các tập tin thiết bị sau khi /proc đã gắn kết

Kịch bản khởi động đọc cấu trúc thư mục ramfs và gắn kết nó sau khi cài đặt thành công /systemtrong giai đoạn khởi động rất sớm.

Liên quan đến từ khóa của OP trong câu hỏi:

tạo tự động phát triển ...

Nó không tự động phát triển theo từng se, thay vào đó, nó bị giới hạn bởi cấu trúc ramfs và dung lượng RAM có sẵn, và quan trọng hơn, nó biến mất khi khởi động lại!

Sự nhầm lẫn đến từ việc trộn lẫn "RAMDisk" với "RAMDrive" có thể hoán đổi cho nhau, về mặt kỹ thuật là RAMDrive, là một không gian hoán đổi trong phân vùng trao đổi gốc, thường thấy trên máy tính để bàn Linux Nếu bạn nghĩ về kỷ nguyên DOS cũ, nơi RAMDrive được sử dụng , để mô phỏng một cư dân ổ đĩa trong bộ nhớ và các chương trình khi được sao chép vào ổ đĩa đó và được tải nhanh hơn không thực thi nhanh hơn , thay vì tải từ các ổ đĩa MFM / RLL cũ ( Bao giờ thấy danh sách thư mục DOS cuộn rất chậm trên các ổ đĩa đó ? ) này, còn được gọi là RAMDisk! (Để làm cho vấn đề tồi tệ hơn, hồi đó, các nhà sản xuất khác nhau đã sản xuất RAMDRIVE.SYS hoặc thậm chí RAMDISK.SYS!)

Trong trường hợp quan điểm của hạt nhân Linux, cả máy tính để bàn và Android, RAMDisk là tmpfs , nhưng không dành cho người dùng bình thường để lưu trữ dữ liệu / tài liệu, v.v ... vì đó chỉ dành riêng cho việc sử dụng hạt nhân!

Biên tập

Để lưu ý nhận xét của @ nil bên dưới, bạn có thể gắn kết với nó, nhưng nó đi kèm với chi phí, tài nguyên được phân bổ cho tmpfsmột nửa và sử dụng một nửa số còn lại của bất kỳ lượng RAM còn lại. Thực tế mà nói, nó không phải là một con đường lý tưởng để thuyết phục từ quan điểm của Android chạy trên thiết bị.

Đó là nơi /sdcardxuất hiện, để lưu trữ dữ liệu / tài liệu người dùng cho lý do đó một mình, do đó tại sao tôi bỏ qua thực tế là bạn có thể, nhưng sau đó một lần nữa, tại sao ?

  • Điều gì sẽ xảy ra nếu người dùng cuối quên lưu dữ liệu vào đúng nơi - vì điều đó bị mất khi khởi động lại!

Vì vậy, câu trả lời ngắn gọn là: Có, bạn có thể. mount -t tmpfs.
Nils

@Nils Tôi không nói đồng ý! Điều đó được thực hiện từ thời điểm kernel đã khởi động và thực thi mount -t tmpfs sau khi đọc ramfs (có tập lệnh init barebones), sau khi được gắn kết, phần còn lại của hệ thống sẽ xuất hiện như trong hậu khởi động, đó là môi trường Android. Ngoài ra, bằng cách làm điều đó sau đó, ví dụ adb shell, bạn đang giảm tài nguyên hệ thống, đặc biệt là trong trường hợp điện thoại thông minh có bộ nhớ và tài nguyên hạn chế!
t0mm13b

1
Không, gắn tmpfs sẽ không sử dụng RAM. Việc sử dụng sẽ bắt đầu khi bạn đặt các tệp vào đó - ít nhất đây là những gì máy chủ Linux của tôi làm. Và Android chạy trên Linux ...
Nils

@Nils Ấn tượng rất sai. Android không chạy trên Linux! Hạt nhân là linux, nhưng không gian người dùng không phải là bash, v.v. như đối tác máy tính để bàn đầy đủ. Nó sử dụng thư viện thời gian chạy bionic, không có glibc và dalvik / zygote từ đó trở lên màn hình chính của Android.
t0mm13b

tmpfs là kernel- không phải không gian người dùng. Vì vậy, tôi đoán rằng đây thậm chí không phải là một mô-đun hạt nhân, vì điều này là cần thiết trong quá trình khởi động để gắn kết initrd.
Nils
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.