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


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: [Решено] Не получается писать в sysfs (/sys/block/loop0/loop/partscan)  (Прочитано 1893 раз)

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

Оффлайн terix

  • Автор темы
  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Я создал файл drive.img, разметил его parted так что там теперь 2 primary раздела.
Потом смонтировал его как loop device командой losetup /dev/loop0 drive.img .
А теперь хочу, чтобы система прочитала таблицу разделов и создала соответствующие файлы в /dev .
Для этого действую следующим образом:
echo 1 > /sys/block/loop0/loop/partscan
Полагаю, что это запустит процесс перечитки таблицы разделов.
Но в ответ система говорит, что у меня нет прав для записи в этот файл.

Система - Ubuntu 12.04.1 LTS x86_64
uname -a выдаёт
Linux us 3.2.0-32-generic #51-Ubuntu SMP Wed Sep 26 21:33:09 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
Все команды выполняю от рута

Собсвенно вопрос - всё так и должно быть и то, что у меня нет прав на запись нормально? Или так быть не должно?
« Последнее редактирование: 20 Марта 2013, 13:39:54 от terix »

Оффлайн Self-Perfection

  • Активист
  • *
  • Сообщений: 331
  • Arch linux, KDE
    • Просмотр профиля
Все команды выполняю от рута

Что это значит? Покажите. Если, например, так:
Код: (bash) [Выделить]
sudo echo 1 > /sys/block/loop0/loop/partscanто и не должно работать. А вот пример команды которая таки будет открывать файл /sys/block/loop0/loop/partscan с правами рута:
Код: (bash) [Выделить]
echo 1 | sudo tee /sys/block/loop0/loop/partscan
Читайте документацию, наставницу вашу!
Памятка по описанию проблем:
Для решения [такой-то задачи] делаю [такие-то действия], но вместо [ожидаемый результат] получаю [описание отличий].

Оффлайн alienonline

  • Активист
  • *
  • Сообщений: 755
    • Просмотр профиля
Все команды выполняю от рута

Что это значит? Покажите. Если, например, так:
Код: (bash) [Выделить]
sudo echo 1 > /sys/block/loop0/loop/partscanто и не должно работать. А вот пример команды которая таки будет открывать файл /sys/block/loop0/loop/partscan с правами рута:
Код: (bash) [Выделить]
echo 1 | sudo tee /sys/block/loop0/loop/partscan

Ну , наверное же
 sudo -i

Оффлайн terix

  • Автор темы
  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
sudo su
и потом от рута

Оффлайн Self-Perfection

  • Активист
  • *
  • Сообщений: 331
  • Arch linux, KDE
    • Просмотр профиля
В достаточно свежем losetup (арчеводский троллинг, ага), есть такой ключик:
       -P, --partscan
              force kernel to scan partition table on newly created loop device
Ну и всегда остаётся возможность ручками сделать
Код: (bash) [Выделить]
losetup --offset M --sizelimit N /dev/loop1 /dev/loop0
Читайте документацию, наставницу вашу!
Памятка по описанию проблем:
Для решения [такой-то задачи] делаю [такие-то действия], но вместо [ожидаемый результат] получаю [описание отличий].

Оффлайн terix

  • Автор темы
  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
В достаточно свежем losetup (арчеводский троллинг, ага), есть такой ключик:
       -P, --partscan
              force kernel to scan partition table on newly created loop device
Ну и всегда остаётся возможность ручками сделать
Код: (bash) [Выделить]
losetup --offset M --sizelimit N /dev/loop1 /dev/loop0

losetup это конечно хорошо, но хочется именно вписать еденичку в sysfs. И я никак не пойму почему не получается.

Пользователь решил продолжить мысль 18 Марта 2013, 12:10:43:
Посмотрел внимательнее на файл
ls -l partscan даёт
-r--r--r-- 1 root root 4096 Mar 18 00:11 partscan

Написал chmod u+rw partscan

ls -l partscan теперь показывает
-rw--r-- 1 root root 4096 Mar 18 11:57 partscan

a echo 1 > partscan выдаёт
bash: echo: write error: Input/output error
« Последнее редактирование: 18 Марта 2013, 12:11:42 от terix »

Оффлайн terix

  • Автор темы
  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Как выяснилось в ходе вычитки кода модуля loop, писать в файл partscan нельзя. И вообще ни в какой файл в директории /sys/block/loop0/loop/ нельзя ничего записать.
Так что вопрос был идиотский.

Отдельно хочется сказать пару слов весёлому троллю-арчеводу :)


Хотя в Ubuntu не самая новая версия losetup, которая не понимает аргумента --partscan, добиться автоматического монтирования разделов, спрятанных в образе не представляет особой сложности. Модуль loop умеет делать это самостоятельно, но активируется эта фича только если параметр loop.max_part не равен нулю (свежий losetup с аргументом --partscan активирует эту возможность принудительно, вне зависимости от значения параметра loop.max_part).

Параметр reaf-only и на лету его менять нельзя, поэтому для того, чтобы задать новое значение придётся выгрузить модуль (modprobe -r loop) и загрузить его обратно задав параметр (modprobe loop max_part=63). Чтобы параметр задавался автоматом после перезагрузки, надо вписать loop.max_part=63 в /etc/sysctl.conf .

Однако в Ubuntu этот модуль вкомпилирован в ядро намертво, а потому вышесописанные процедуры работать не будут. Придётся вписать loop.max_part=63 в командную строку для загрузки ядра.

Теперь losetup /dev/loop0 drive.img, приведёт к автоматическому появлению /dev/loop0p1 и /dev/loop0p2.

Всем спасибо за помощь!

 

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