The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Выпуск Tor Browser 10.0.2 и дистрибутив Tails 4.12 "
Отправлено Ordu, 21-Окт-20 23:33 
> Ordu, я столько лет пользуюсь линуксом, но до сих пор понять не
> могу, зачем нужны loop-устройства и что они конкретно делают и почему
> обычного файла недостаточно, ведь в обычных файлах тоже можно и перематывать
> дескриетов, и читать, а лучше - вообще отобразить в память. Просветишь?

В ядре есть драйвера для файловых систем. Это уже готовые реализации файловых систем. Если ты работаешь с образом файловой системы в файле, было бы удобно использовать эти реализации, вместо того, чтобы писать новые, которые будут работать в user-space, так?

Или та же проблем с другой стороны? Ты вызываешь fprintf(3), тот вызывает write(2), а write -- это заглушка glibc, которая вызывает сисколл ядра write. Как write поймёт, что он пишет в "файл в файле", а не в сам файл? Что, например, надо выделить новый inode в образе файловой системы, а не просто продолжать писать байтики последовательно до конца файла, и потом за конец его увеличивая его размер по мере необходимости? Ты вызываешь fclose(3), который вызывает заглушку close(2), которая вызывает сисколл close, который должен догадаться, что закрывать надо не файл образа фс, а файл лежащий в файле образа фс.

Я не буду утверждать, что проблему нельзя решить чисто в юзерспейсе, посредством модификации glibc и, может быть, добавлением какого-нибудь специального сисколла в ядро, или там ioctl'а. Или вынесением реализаций фс в юзерспейс. Но в linux это сделано при помощи устройств /dev/loop.

Файловые системы ядра работают поверх блочных устройств. losetup просит ядро сделать виртуальное блочное устройство, содержимое которого будет совпадать с содержимым указанного файла. То есть если ты будешь читать /dev/loop0 ты прочитаешь тот самый файл, на который он ссылается. Но loop0 -- это не обычный файл, а файл блочного устройства -- он ссылается на драйвер, который ведёт себя как драйвер жёсткого диска/флешки/... А это значит, что драйвера файловой системы в ядре умеют с ним работать. И этот /dev/loop0 можно смонтировать используя те же механизмы монтирования, которые ты используешь при монтировании /dev/sda1.

Такая реализация отличается простотой: всё что надо дополнительно, чтобы оно заработало -- это модуль ядра, который будет уметь изображать блочное устройство поверх обычного файла файла.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру