Существует как минимум три «подходящих» способа запуска вещей в 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, но я предлагаю остаться с любым методом, который работает.