Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Не получается смонтировать каталоги в tmpfs  (Прочитано 3837 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Pershin

  • Автор темы
  • Гость
Дописал в конце /etc/fstab
tmpfs /tmp tmpfs defaults 0 0
tmpfs /home/pershin/.cache tmpfs defaults,size=1000M 0 0

Перезагрузился.
Не понимаю, удалось монтирование или нет. Размер /.cache как был 400+ МБ, так и остался. Размер /tmp не замерял. Создал по тестовому файлу в обоих каталогах, выключил компьютер, включил. В ./cache этот файл остался, чего быть не может, если бы он был в оперативной памяти. В /tmp файл удалился, но это вполне может быть свойством /tmp, а не признаком успешного монтирования в память.
$ df -h (выдержки)
tmpfs                    2,0G          44K  2,0G            1% /tmp
/dev/sda3                 44G          12G   32G           28% /home
tmpfs                     44G          12G   32G           28% /home/pershin/.cache
Тут видно, что какие-то результаты монтирования есть. Но меня смущает размер tmpfs в 44 ГБ (мой размер /home)
$ mount (выдержки)
tmpfs on /tmp type tmpfs (rw)
tmpfs on /home/pershin/.cache type tmpfs (rw,size=1000M)
Между тем у людей всё работает:
1, 2.
Система Ubuntu 12.04.1

Если я всё сделал правильно, то есть смелое предположение, что система сама без моего на то приказа записывает эти папки на жёсткий диск, а при загрузке снова в RAM кидает. Да, я точно делаю выключение, а не гибернацию.

Оффлайн Self-Perfection

  • Активист
  • *
  • Сообщений: 331
  • Arch linux, KDE
    • Просмотр профиля
Re: Не получается смонтировать каталоги в tmpfs
« Ответ #1 : 20 Января 2013, 02:02:27 »
Для проверки fstab не обязательно перезагружаться, достаточно
Код: (bash) [Выделить]
sudo mount -aА вообще ерунда у вас какая-то творится. Покажите fstab целиком и
Код: (bash) [Выделить]
findmnt -o TARGET,SOURCE,FSTYPE,SIZE,USED,AVAIL -kR /home
grep cache /proc/mounts
Читайте документацию, наставницу вашу!
Памятка по описанию проблем:
Для решения [такой-то задачи] делаю [такие-то действия], но вместо [ожидаемый результат] получаю [описание отличий].

Pershin

  • Автор темы
  • Гость
Re: Не получается смонтировать каталоги в tmpfs
« Ответ #2 : 20 Января 2013, 02:21:32 »
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    nodev,noexec,nosuid 0       0
# / was on /dev/sda1 during installation
UUID=7472aeb5-7765-4d45-b43c-93f2f56a66d4 /               ext4    errors=remount-ro 0       1
# /home was on /dev/sda3 during installation
UUID=a25d76a5-9498-4204-9e2c-d46bb2bbc514 /home           ext4    defaults        0       2
# /media/Media was on /dev/sda5 during installation
UUID=0FF6427871962D57 /media/Media    ntfs    defaults,umask=007,gid=46 0       0
# swap was on /dev/sda2 during installation
#UUID=86efbe37-8c79-435b-8272-405cd938a2a0 none            swap    sw              0       0
/dev/mapper/cryptswap1 none swap sw 0 0
tmpfs /tmp tmpfs defaults 0 0
tmpfs /home/pershin/.cache tmpfs defaults 0 0
По порядку: Корень, /home (ecryptfs), мультимедийный раздел, обычный swap (закомментирован), swap (ecryptfs). И дальше те 2 каталога. Может в другом порядке нужно список переписать?
$ grep cache /proc/mounts
tmpfs /home/pershin/.cache tmpfs rw,relatime 0 0
$ findmnt -o TARGET,SOURCE,FSTYPE,SIZE,USED,AVAIL -kR /home
findmnt: unknown column: SIZE,USED,AVAIL

Оффлайн Self-Perfection

  • Активист
  • *
  • Сообщений: 331
  • Arch linux, KDE
    • Просмотр профиля
Re: Не получается смонтировать каталоги в tmpfs
« Ответ #3 : 20 Января 2013, 12:40:33 »
Порядок указания в fstab, по идее, правильный.
Ну и толку от того, что у вас findmnt старый и поддерживает меньше колонок, чем мой, показали бы хотя бы findmnt -kR /homeВообще меня очень смущает
...
tmpfs                     44G          12G   32G           28% /home/pershin/.cache
...
Очень странно, не понимаю, как такое может быть.

Посмотреть, что ли,
Код: (bash) [Выделить]
strace df -hT /home/pershin/.cacheчтобы понять, как он ухитряется такие противоречивые сведения выдавать.
Читайте документацию, наставницу вашу!
Памятка по описанию проблем:
Для решения [такой-то задачи] делаю [такие-то действия], но вместо [ожидаемый результат] получаю [описание отличий].

Pershin

  • Автор темы
  • Гость
Re: Не получается смонтировать каталоги в tmpfs
« Ответ #4 : 20 Января 2013, 14:18:10 »
Я тоже не понимаю:)
С синтаксисом findmnt не знаком, хотя это не оправдание, стоило бы почитать. Вот все колонки, что есть:
$ findmnt -kR /home
TARGET                  SOURCE                 FSTYPE   OPTIONS
/home                   /dev/sda3              ext4     rw,relatime,user_xattr,b
├─/home/pershin/.cache  tmpfs                  tmpfs    rw,relatime
└─/home/pershin         /home/pershin/.Private ecryptfs rw,relatime,ecryptfs_fne
  └─/home/pershin/.gvfs gvfs-fuse-daemon       fuse.gvf rw,nosuid,nodev,relatime
Нужны ещё какие-нибудь дополнительные колонки?
$ strace df -hT /home/pershin/.cache
execve("/bin/df", ["df", "-hT", "/home/pershin/.cache"], [/* 37 vars */]) = 0
brk(0)                                  = 0x196a000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f45e3f86000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=112487, ...}) = 0
mmap(NULL, 112487, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f45e3f6a000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\30\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1811128, ...}) = 0
mmap(NULL, 3925208, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f45e39a7000
mprotect(0x7f45e3b5c000, 2093056, PROT_NONE) = 0
mmap(0x7f45e3d5b000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b4000) = 0x7f45e3d5b000
mmap(0x7f45e3d61000, 17624, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f45e3d61000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f45e3f69000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f45e3f68000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f45e3f67000
arch_prctl(ARCH_SET_FS, 0x7f45e3f68700) = 0
mprotect(0x7f45e3d5b000, 16384, PROT_READ) = 0
mprotect(0x613000, 4096, PROT_READ)     = 0
mprotect(0x7f45e3f88000, 4096, PROT_READ) = 0
munmap(0x7f45e3f6a000, 112487)          = 0
brk(0)                                  = 0x196a000
brk(0x198b000)                          = 0x198b000
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=93085296, ...}) = 0
mmap(NULL, 93085296, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f45de0e1000
close(3)                                = 0
open("/home/pershin/.cache", O_RDONLY|O_NOCTTY) = 3
fstat(3, {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
close(3)                                = 0
open("/etc/mtab", O_RDONLY|O_CLOEXEC)   = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=992, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f45e3f85000
read(3, "/dev/sda1 / ext4 rw,errors=remou"..., 4096) = 992
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0x7f45e3f85000, 4096)            = 0
lstat("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
lstat("/home/pershin", {st_mode=S_IFDIR|0700, st_size=16384, ...}) = 0
lstat("/home/pershin/.cache", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
stat("/home/pershin/.cache", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
statfs("/home/pershin/.cache", {f_type=0xf15f, f_bsize=4096, f_blocks=11344908, f_bfree=8246200, f_bavail=8246200, f_files=2883584, f_ffree=2864267, f_fsid={-828214980, 277291814}, f_namelen=143, f_frsize=4096}) = 0
open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=2570, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f45e3f85000
read(3, "# Locale name alias data base.\n#"..., 4096) = 2570
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0x7f45e3f85000, 4096)            = 0
open("/usr/share/locale/ru_RU.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/ru_RU.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/ru_RU/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/ru.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/ru.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/ru/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/ru_RU.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/ru_RU.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/ru_RU/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/ru.UTF-8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/ru.utf8/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/ru/LC_MESSAGES/coreutils.mo", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=427082, ...}) = 0
mmap(NULL, 427082, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f45e3efe000
close(3)                                = 0
open("/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=26258, ...}) = 0
mmap(NULL, 26258, PROT_READ, MAP_SHARED, 3, 0) = 0x7f45e3f7f000
close(3)                                = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f45e3f7e000
write(1, "\320\244\320\260\320\271\320\273.\321\201\320\270\321\201\321\202\320\265\320\274\320\260   \320\242\320\270\320\277"..., 136Файл.система   Тип   Размер Использовано  Дост Использовано% Cмонтировано в
) = 136
write(1, "tmpfs          tmpfs    44G     "..., 82tmpfs          tmpfs    44G          12G   32G           28% /home/pershin/.cache
) = 82
close(1)                                = 0
munmap(0x7f45e3f7e000, 4096)            = 0
close(2)                                = 0
exit_group(0)                           = ?
Если разберетесь с этой абракадаброй, буду вам очень благодарен.

Оффлайн rayanAyar

  • Старожил
  • *
  • Сообщений: 1027
  • Да пребудет с вами совпавшая контрольная сумма
    • Просмотр профиля
Re: Не получается смонтировать каталоги в tmpfs
« Ответ #5 : 21 Января 2013, 04:25:35 »
Сначала монтируется вот это (при загрузке, из fstab).
/home/pershin/.cache  tmpfs                  tmpfs    rw,relatime

А потом, при входе пользователя, поверх монтируется шифрованная ФС:
/home/pershin         /home/pershin/.Private ecryptfs rw,relatime,ecryptfs_fne

Скорее всего поэтому и не работает.

Pershin

  • Автор темы
  • Гость
Re: Не получается смонтировать каталоги в tmpfs
« Ответ #6 : 21 Января 2013, 19:16:56 »
Идея на миллион! Скорее всего в этом и дело, спасибо.
Осталось теперь придумать, как смонтировать ~/.cache, чтобы ничего не сломать. В /etc/fstab - слишком рано. Просто во время  работы в системе - слишком поздно, т.к. этот .cache уже могут активно использовать многие программы. Останавливать их все не вариант.

Думаю, нужно найти какое-то хорошее место в стартовых скриптах или где-нибудь ещё, когда /home/pershin/.Private уже смонтирован (это уже после логина), но ни одна из программ пользователя ещё не запустилась. Такое место наверняка есть, потому что все программы, использующие .cache, обязаны запускаться уже после монтирование /home.pershin/.Private
И в это место уже воткнуть команду mount или какую там.

Кто-нибудь знает, как и где это сделать?:)

UPD: Нагуглил про уровни выполнения (0-6). В частности, "1 — однопользовательский режим (single user mode). Предназначен для различных административных действий по восстановлению системы. По своему смыслу аналогичен Safe Mode Windows, но полностью его не повторяет. На этом уровне выполнения система полностью сконфигурирована, но не запущен ни один сервис, а из пользователей может работать только один root."
Это похоже на то, что нужно. Хотя логин вроде ещё не произведён на том уровне. В общем, непонятно. Как грамотно всё сделать?
« Последнее редактирование: 21 Января 2013, 19:30:42 от Pershin »

Оффлайн Self-Perfection

  • Активист
  • *
  • Сообщений: 331
  • Arch linux, KDE
    • Просмотр профиля
Re: Не получается смонтировать каталоги в tmpfs
« Ответ #7 : 21 Января 2013, 19:36:12 »
А может сделать просто:
Код: (bash) [Выделить]
rm -r ~/.cache
ln -s /tmp ~/.cache
Читайте документацию, наставницу вашу!
Памятка по описанию проблем:
Для решения [такой-то задачи] делаю [такие-то действия], но вместо [ожидаемый результат] получаю [описание отличий].

Оффлайн shumtest

  • Активист
  • *
  • Сообщений: 731
  • Это вам просто кажется...
    • Просмотр профиля
    • Блог Шумомера
Re: Не получается смонтировать каталоги в tmpfs
« Ответ #8 : 21 Января 2013, 19:38:56 »
lightdm.conf -> session-setup-script

Pershin

  • Автор темы
  • Гость
Re: Не получается смонтировать каталоги в tmpfs
« Ответ #9 : 21 Января 2013, 19:47:21 »
А может сделать просто:
Код: (bash) [Выделить]
rm -r ~/.cache
ln -s /tmp ~/.cache
Может и да, но опять же, если сделать это "просто в системе", то это нарушит работу программ, пишущих и читающих этот .cache. Или не нарушит?

lightdm.conf -> session-setup-script
Эти команды запускаются ещё до логина пользователя, это точно. Слишком рано. Я там недавно в самом низу дописал greeter-setup-script=/usr/bin/numlockx on и намлок включается ещё на этапе ввода пароля.
« Последнее редактирование: 21 Января 2013, 19:52:46 от Pershin »

Оффлайн Self-Perfection

  • Активист
  • *
  • Сообщений: 331
  • Arch linux, KDE
    • Просмотр профиля
Re: Не получается смонтировать каталоги в tmpfs
« Ответ #10 : 21 Января 2013, 22:06:39 »
Может и да, но опять же, если сделать это "просто в системе", то это нарушит работу программ, пишущих и читающих этот .cache. Или не нарушит?
Не должно. По крайней мере после перезапуска этих программ (релогина) всё вернётся в норму. Линукс он умный, он позволяет удалять открытые файлы безболезненно для держащего их открытыми софта.
Читайте документацию, наставницу вашу!
Памятка по описанию проблем:
Для решения [такой-то задачи] делаю [такие-то действия], но вместо [ожидаемый результат] получаю [описание отличий].

Оффлайн shumtest

  • Активист
  • *
  • Сообщений: 731
  • Это вам просто кажется...
    • Просмотр профиля
    • Блог Шумомера
Re: Не получается смонтировать каталоги в tmpfs
« Ответ #11 : 21 Января 2013, 22:16:01 »
greeter-setup-script
и
session-setup-script

это разные скрипты и запускаются в разные моменты

Pershin

  • Автор темы
  • Гость
Re: Не получается смонтировать каталоги в tmpfs
« Ответ #12 : 21 Января 2013, 23:20:44 »
greeter-setup-script
и
session-setup-script

это разные скрипты и запускаются в разные моменты

Вы можете точно утверждать, что второй из них запускается после монтирования домашней директории? Я создал скрипт /home/pershin/bin/mount_cache.sh
#!/bin/bash
mount -t tmpfs tmpfs /home/pershin/.cache
В терминале он работает. Правда требуется sudo и папка создается с правами root, но второе можно исправить. А lightdm.conf и так запускается от root, как я понимаю.
Добавил в lightdm.conf (последняя строчка).
[SeatDefaults]
user-session=ubuntu
greeter-session=unity-greeter
greeter-show-manual-login=true
greeter-setup-script=/usr/bin/numlockx on
session-setup-script=/home/pershin/bin/mount_cache.sh
Логиниться отказывается. Просто ввожу пароль, появляется черный экран, через 2 секунды снова оказывается на экране выбора пользователя. Через Alt+F1 залогиниться можно, правлю этот файл (удаляю проблемную строчку) - всё снова работает.

Если дело не в том, что система пытается запустить скрипт из ещё не смонтированного каталога, то я не знаю. Может вы подскажете?

Self-Perfection, хорошо, этот вопрос опустим и будем делать по-вашему. Правильно ли я понимаю, что ваша символическая ссылка просто переводит в /tmp при попытке зайти в .cache? Во-первых не знаю, все ли программы понимают символические ссылки. Как минимум одна - Dash - не понимает. Может и другие есть. Во-вторых, для записи в новый кэш потребуются права рута, нет? А всякие хромиумы, которые в эту папку пишут, таких прав не имеют, значит не смогут использовать кэш.

Оффлайн Self-Perfection

  • Активист
  • *
  • Сообщений: 331
  • Arch linux, KDE
    • Просмотр профиля
Re: Не получается смонтировать каталоги в tmpfs
« Ответ #13 : 21 Января 2013, 23:52:49 »
Во-первых не знаю, все ли программы понимают символические ссылки. Как минимум одна - Dash - не понимает.
Понимают все, в том числе dash. Пример непонимания в студию.

Во-вторых, для записи в новый кэш потребуются права рута, нет?
Нет, в /tmp может писать любой юзер. Наверняка там уже полно файлов, которые принадлежат вам
Код: (bash) [Выделить]
sudo find /tmp -user `id -u` -ls
Вообще не хорошо использовать /tmp как ~/.cache, но из других соображений. Я только показывал общую идею: монтировать tmpfs в место, которое не будет перекрываться последующим монтированием ecryptfs, и слинковать ~/.cache на это место.
Читайте документацию, наставницу вашу!
Памятка по описанию проблем:
Для решения [такой-то задачи] делаю [такие-то действия], но вместо [ожидаемый результат] получаю [описание отличий].

Pershin

  • Автор темы
  • Гость
Re: Не получается смонтировать каталоги в tmpfs
« Ответ #14 : 22 Января 2013, 00:33:35 »
Во-первых не знаю, все ли программы понимают символические ссылки. Как минимум одна - Dash - не понимает.
Понимают все, в том числе dash. Пример непонимания в студию.
По умолчанию Dash ищет файлы только в /home.
Если имеется отдельный ntfs-раздел на диске, то заставить Dash искать файлы и на этом разделе тоже путём создания символьной ссылки на него где-нибудь в /home нельзя. Это первое, что пришло мне в голову, когда возникла такая проблема - и это не сработало.  Решается правкой /etc/updatedb.conf.

За способ спасибо, запомню. Но, честно говоря, это больше похоже на эдакую хитрость. Как-то не идейно. Формально мы не решаем вопрос монтирования .cache в tmpfs, но добиваемся такого же результата. Остается неудовлетворенным академический интерес - где же всё-таки находится в скриптах то неуловимое место, в котором происходит монтирование зашифрованного /home? Туда бы я и положил монтирование кэша. Чувствую, надо разбираться в rcN.d.

Нет, если бы у меня сервер стоял ждал какой-нибудь, я бы давно уже какой-нибудь любой использовал, лишь бы работал, а на красоту бы наплевал и не привередничал. Но это домашний комп (ноутбук), у меня ничего не "горит", так что я стараюсь сделать всё более или менее строго, чтобы получить опыт на будущее.

Я вот пока таким костылём пользуюсь - добавил в "Автоматически запускаемые приложения" команду sh -c "echo "Пароль" | sudo -S mount -t tmpfs tmpfs /home/pershin/.cache"Это работает, но это ужасно. Держит пароль в открытом виде - раз. Подходит только для монтирования кэша и прочих "неважных" папок - два. Нужно менять.

Пользователь решил продолжить мысль 22 Января 2013, 23:54:16:
Решилось с помощью PAM. Подробнее тут
« Последнее редактирование: 22 Января 2013, 23:54:16 от Pershin »

 

Страница сгенерирована за 0.095 секунд. Запросов: 25.