Как сделать временный файл в RAM?

Проблема решена.
Казалось, что таблица разделов была повреждена.
Как комментарий psusi:

Затем да, у Вас был раздел на диске прежде, чем запуститься в обычном местоположении сектора 2048. Воссоздайте раздел, и все должно быть прекрасным.

Я не знал, как воссоздать раздел. таким образом, я сделал это, и проблема решила (данные там, и диск монтируется снова правильно):
Я работал sudo testdisk.
После выбора моего выбранного диска I Analyse и выбранный Quick Search затем не изменяя найденный раздел я продолжал затем экранировать (Хит Входят) на этом экране, который я выбрал Write для записи структуры раздела к диску. затем я отключил и повторно включил диск к системе и теперь ее штрафу.
Analyse Quick Search Write

Спасибо всем за Вашу справку особенно "psusi"

30
28.04.2015, 19:53
3 ответа

Вы можете установить TMPFS Partititon и напишите там файл:

mount -t tmpfs -o size=500m tmpfs /mountpoint

Этот раздел сейчас ограничен до 500 МБ. Если ваш временный файл растет больше 500 МБ, произойдет ошибка: Нет места, оставленного на устройстве . Но, не имеет значения, когда вы указываете большее количество пространства, чем ваша система RAM. TMPFS также использует пространство SWAP, поэтому вы не можете заставить аварию системы, в отличие от RAMFS .

Теперь вы можете написать свой файл в / MountPoint :

command | tee /mountpoint/scriptnameYYYYMMDD.txt
23
27.01.2020, 19:38

Попробуйте это с Ubuntu:

ramtmp="$(mktemp -p /dev/shm/)"
tac scriptnameYYYYMMDD.txt > "$ramtmp"
10
27.01.2020, 19:38

Следующий ответ был обнаружен в результате исследования предыдущих ответов и информации в этом вопросе здесь и не был бы найден без них. Cudos им.

В моей системе linuxmint (и я предполагаю, что в большинстве систем на основе ubuntu и, возможно, на основе Debian) есть пользовательские tmpfs, автоматически смонтированные на / run / user / 1000 /

Используйте df - T для проверки.

11:41:11 jesse@Limbo:~$ df -T
Filesystem     Type      1K-blocks       Used Available Use% Mounted on
udev           devtmpfs   15904812          4  15904808   1% /dev
tmpfs          tmpfs       3184120       1700   3182420   1% /run
/dev/sdb2      ext4       14248880   11464788   2037240  85% /
none           tmpfs             4          0         4   0% /sys/fs/cgroup
none           tmpfs          5120          0      5120   0% /run/lock
none           tmpfs      15920584        848  15919736   1% /run/shm
none           tmpfs        102400         12    102388   1% /run/user
/dev/sdb3      ext4      100861352   90755700   4959136  95% /mnt/data

В разделе / run / user / есть каталог для каждого обычного пользователя в системе.

12:07:35 jesse@Limbo:~$ ls -l /run/user
total 0
drwx------ 2 root  root   40 Aug  7 09:50 0
drwx------ 8 jesse jesse 180 Aug  7 11:38 1000

Эти каталоги названы по идентификаторам соответствующих пользователей. Мы можем получить идентификатор пользователя с помощью id -u , подробнее об этой команде см. man id .

12:07:43 jesse@Limbo:~$ ls -l /run/user/$(id -u)
total 0
drwx------ 2 jesse jesse  60 Aug  7 09:50 dconf
dr-x------ 2 jesse jesse   0 Aug  7 09:50 gvfs
drwx------ 2 jesse jesse  80 Aug  7 09:50 pulse
lrwxrwxrwx 1 root  root   17 Aug  7 09:50 X11-display -> /tmp/.X11-unix/X0

Затем мы можем использовать команду mktemp с параметром - tmpdir для создания временных файлов и каталогов в этой системе временных файлов, таким образом создавая временные файлы в ОЗУ.

Следуя совету здесь , я сначала создаю временный каталог, а затем создаю в нем свои временные файлы:

mydir=$(mktemp -dt "$(basename $0).XXXXXXXX" --tmpdir=/run/user/$(id -u))

для создания временного каталога /run/user/1000/bash.w42BYxbG / затем

myfile=$(mktemp -t "$(basename $0).XXXXXXXX" --tmpdir=$mydir)

, чтобы создать в нем временный файл.

Это упрощает очистку этого файла, поскольку все, что мне нужно сделать, это rm -r $ mydir .

По умолчанию все эти файлы принадлежат и доступны для чтения только пользователю, который их создал.

Примечание. Часть команды $ (basename $ 0) извлекает имя сценария / процесса, выполнившего mktemp. Если у меня есть сценарий /home/jesse/scripts/myScript.sh , то $ (basename $ 0) возвращает myScript.sh при выполнении этим сценарием.Таким образом, приведенные выше команды создадут /run/user/1000/myScript.sh.w42BYxbG/ и /run/user/1000/myScript.sh.w42BYxbG/myScript.sh.BCzSmq06 соответственно.

9
27.01.2020, 19:38

Теги

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