Создайте RAM-диск в Linux, который не меняет файловую систему после перезагрузки

617
treecoder

Я создаю RAM-диск в Ubuntu 16.10 (работает в виртуальной машине) с помощью следующих команд

sudo mkdir -p / media / RAMDisk sudo mount -t tmpfs -o size = 2048M tmpfs / media / RAMDisk 

После этого, если я захожу в RAMDisk и делаю это

ГД 

Я получаю следующее

tmpfs 2097152 0 2097152 0% / media / RAMDisk 

Все идет нормально.

Затем я перезагружаю Ubuntu (который перезагружает виртуальную машину, работающую через Workstation Pro).

После перезагрузки я ожидаю, что либо /media/RAMDiskпапка вообще не будет существовать, либо будет существовать как tmpfsфайловая система без содержимого в ней.

/media/RAMDiskПапка существует, без содержания, но удивительно, как /dev/sda1файловая система. Когда я делаю df .с /media/RAMDisk, я вижу это:

 / dev / sda1 17413904 9577448 6928836 59% / 

Теперь я мог бы легко поместить команды внутри себя .bashrcи заставить их запускаться и каждый раз делать правильные вещи, но мне нужно знать, что происходит.

Кроме того, может ли менеджер виртуальной машины - Workstation Pro - что-то делать?

0

1 ответ на вопрос

1
Kamil Maciorowski

Что здесь происходит?

Ничего необычного

df /media/RAMDisk, когда он ссылается /dev/sda1, говорит вам, что каталог в данный момент принадлежит файловой системе, в /dev/sda1которой он смонтирован /.

Это потому, что действие вашей mountкоманды не является постоянным, оно не переживает перезагрузку. С другой стороны, mkdirкоманда создала каталог внутри файловой системы, /dev/sda1и эта файловая система монтируется после каждой перезагрузки, поэтому сам каталог сохраняется, но как часть /dev/sda1файловой системы.

Вам нужно как-то монтировать RAMDiskпосле (или во время) каждой загрузки.


Как монтировать?

Запуск mountизнутри .bashrcне очень хорошая идея, поскольку этот файл может быть получен несколько раз в течение одного сеанса. Так как вам sudoвсе равно нужно, будет лучше использовать тот, /etc/rc.localкоторый запускается один раз при запуске ОС.

Но еще лучше можно добавить следующую строку в ваш /etc/fstab:

tmpfs /media/RAMDisk tmpfs defaults,nosuid,nodev,size=2048M 0 0 

Исследуйте userи noautoварианты (см. man 5 fstab) И, возможно, вы хотели бы использовать их и вызывать mount /media/RAMDiskтолько по требованию.


systemd?

Этот сайт заставляет меня поверить, что вы можете запустить systemdустройство, когда данный пользователь входит в систему в первый раз, и завершить его, как только последний сеанс для пользователя будет закрыт. Я не очень знаком с systemd, поэтому я не могу сказать вам, как (если) вы можете сделать это с помощью .mountустройства.

Но если вы используете, systemdто вы уже должны иметь личный, tmpfsустановленный на /run/user/<UID>. Общесистемный должен быть включен /dev/shm.


Около /media/

Также примечание /media/используется Ubuntu для создания точек монтирования, например, для внешних USB-накопителей (я считаю, что udisks2это ответственно). Они могут выглядеть /media/<username>/<label>так, я думаю /media/RAMDisk, не столкнется ни с чем. В общем, я бы не использовал это место. В своих системах (Debian, Kubuntu, Raspbian, OpenWRT) я использую, /mnt/<something>и у меня никогда не было проблем.

Спасибо за этот очень полезный ответ. Я попробую варианты, которые вы предложили. treecoder 6 лет назад 0

Похожие вопросы