Существует как минимум три «подходящих» способа запуска вещей в Ubuntu (при условии, что вы не просто хотите его смонтировать), перечисленных здесь в порядке убывания предпочтений:
/etc/init/*.conf
(Выскочка)
/etc/init.d/*
(Sysvinit)
/etc/rc.local
(скрипт изменения уровня запуска)
Существует также возможность использования правил Udev, но это будет запутанным. Я рекомендую против этого. Сценарий sysvinit излишен для такой мелочи, поэтому я сосредоточусь на двух других вариантах. Сценарий изменения уровня выполнения является самым простым (хотя и наименее предпочтительным), поэтому я начну с него.
/etc/rc.local
Файл просто выполняется с помощью /etc/init.d/rc.local
сценария SysVinit, который (по умолчанию) выполняется в последний раз при переходе на любой нормальный «на» уровень запуска (например , при загрузке нормально, но не тогда , когда вы выключаете или перейти в режим восстановления). Чтобы реализовать настройку загрузочного устройства, просто добавьте это в конце /etc/rc.local
, предполагая, что ваш файл вызывается /srv/diskimage
и вы хотите использовать его /dev/loop0
в качестве устройства цикла:
losetup /dev/loop0 /srv/diskimage
Это действительно все, что нужно сделать. Конечно, замените имена файлов на те, которые лучше всего подходят для вашей установки.
Если вы хотите быть более конкретным, вы можете создать для него задание Upstart, которое настраивает его после монтирования файловой системы, в которой он находится. Примером может быть следующий, предполагая, что /srv
это точка монтирования, содержащая ваш diskimage
файл:
description "Setup loop devices after filesystems are mounted"
start on mounted MOUNTPOINT=/srv
task
exec losetup /dev/loop0 /srv/diskimage
Это должно быть достаточно просто, чтобы концептуально следовать: первая строка - просто комментарий для читателей-людей, и это инструкции для Upstart дождаться /srv
монтирования файловой системы, выполнить процесс losttup и считать себя завершенным, когда процесс завершится успешно (a " задача ", в отличие от службы, которая является постоянной). Просто поместите это содержимое в соответствующий файл /etc/init/*.conf
. Я бы /etc/init/losetup.conf
сам выбрал .
Преимущества заданий Upstart перед /etc/rc.local
такой простой вещью невелики, но важны. Во-первых, /etc/rc.local
это устарело, и его использование в качестве «грязной песочницы для достижения цели» в наши дни вызывает недовольство почти всех. Среди других причин не одобрения его использования, некоторые программы, которые используют этот файл, просто перезаписывают содержимое, и трудно согласовать разные сценарии, которые должны входить в один и тот же файл. Во-вторых, Upstart на самом деле обрабатывает проверку зависимостей для вас (убедившись, что файловая система смонтирована первой), поэтому, если есть проблема с монтированием файловой системы, она не будетпопробуйте настроить устройство петли .... но как только вы решите и смонтируете его. В-третьих, Upstart является гораздо более гибким: вы можете, например, быть достаточно умным, чтобы найти неиспользуемое петлевое устройство, и «испустить» это петлевое устройство для использования в других заданиях upstart, подобно тому, как мы использовали переменную «MOUNTPOINT». в этом примере выше.
/etc/init.d/something
, или/etc/rc.local
, но я предлагаю остаться с любым методом, который работает.