Леннарт Поттеринг (Lennart Poettering), создатель системного менеджера systemd и звукового сервера PulseAudio, представил в списке рассылки разработчиков Fedora Linux новую системную директорию "/run". Подобное нововведение появится уже в весеннем релизе Fedora 15, в котором будет произведен переход на использование systemd по умолчанию. Решение о создании "/run" вызвано техническими причинами, поэтому не стоит воспринимать данное улучшение как большие политические перемены. Ожидается, что разработчики других дистрибутивов также решатся на перенос /run из директории /var в корень (/var/run останется доступен через bind-монтирование или символическую ссылку) - представители openSUSE, Debian и Ubuntu уже подтвердили намерение перейти к использованию "/run" в будущих релизах.
Предложение переместить содержимое "/var/run" в директорию "/run" родилось после обсуждения разработчиками Debian, Suse, Ubuntu и Fedora фактов нецелевого использования директории /dev. Кроме файлов устройств дистрибутивы вынуждены помещать в данную директорию специализированные каталоги (/dev/.udev, dev/.mdadm, /dev/.systemd и /dev/.mount), символические ссылки на некоторые элементы файловой системы /proc (/dev/stdin, /dev/sndstat и т.п.) и создают именованные каналы (/dev/log). В настоящий момент использование /dev не по прямому назначению носит единичный характер, но ситуация в любой момент может выйти из под контроля.
Причиной создания дополнительных файлов с данными программ в /dev является необходимость создания свойственных для каталога /var/run служебных файлов до момента монтирования раздела /var на начальной стадии загрузки. Директория /dev используется вместо /var/run так как изначально известно, что она примонтирована через tmpfs и всегда создается в первую очередь на этапе загрузки, в то время как директория /var/run создается значительно позднее и может размещаться в отдельной файловой системе.
Для решения проблемы с недоступностью /var/run на ранней стадии загрузки различные дистрибутивы придумывают свои несовместимые с другими системами решения: Fedora и openSUSE использует служебные каталоги в /dev/.xxx, в Debian специально монтируется tmpfs-раздел /lib/init/rw, в Ubuntu /var/run создается еще до монтирования /var и потом связывается через "mount --bind".
Необходимость разработки и утверждения унифицированного решения назрела уже давно. После рассмотрения различных вариантов выхода из данной ситуации, разработчики пришли к выводу, что директория /var/run со служебными файлами, файлами блокировок и сокетами, используемыми для связи с запущенными приложениями, должна быть вынесена за пределы раздела /var в корень. Единственной причиной по которой данное изменение не внедрено до сих пор - неготовность совершить подобный шаг по политическим мотивам, так как это неизбежно приведет к негативной реакции со стороны консервативных пользователей и разработчиков.
Что касается планов по изменению Fedora 15, то данном релизе раздел /run будет смонтирован через tmpfs, а /var/run прикреплен к /run через bind-монтирование (в Fedora 16 после отладки всех систем bind-монтирование будет заменено на символические ссылки), /var/lock будет прикреплен к /run/lock. Приложения смогут использовать /var/run как и раньше, на первом этапе внедрения непосредственно к /run будут обращаться только подсистемы, работающие на раннем этапе загрузки.
Выгоды от использования /run:
- Сокращение точек tmpfs-монтирования, вместо /var/lock и /var/run останется один /run;
- Хранение всех требуемых в процессе работы приложений данных в одном месте. Для того чтобы найти данные systemd, udev, dracut администратору не придется заглядывать в несколько мест, все будет собрано в /run;
- Уход от использования начинающихся с точки скрытых файлов;
- Возможность стандартизировать для всех дистрибутивов размещение директории для хранения доступных на ранней стадии runtime-данных;
- У разработчиков исчезнет ощущение дискомфорта от необходимости использования /dev не по назначению;
- Создание более четкого разделения между директорией для постоянного хранения данных приложений (/var), директорией для хранения свойственных текущему сеансу данных приложений (/run) и директорией для хранения конфигурации (/etc).