Я хочу настроить устройство петли во время загрузки. Интересно, как лучше всего это сделать.
Я искал это в Google. Кто-то говорит, что добавляет правило udev, кто-то говорит /etc/init.d
, что вводит скрипты , кто-то даже изменяет initramfs.
Итак, что является лучшим или правильным способом сделать это? Не могли бы вы дать некоторые подробности (о том, как это сделать)?
Спасибо.
/etc/init.d/something
, или/etc/rc.local
, но я предлагаю остаться с любым методом, который работает.mount /disk.img /mnt -o loop,offset=2048
для первого раздела). Смещения могут быть найдены с помощью parted или fdisk после настройки устройства петли (см. Мой ответ ниже).Ответы:
Существует как минимум три «подходящих» способа запуска вещей в 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
в качестве устройства цикла:Это действительно все, что нужно сделать. Конечно, замените имена файлов на те, которые лучше всего подходят для вашей установки.
Если вы хотите быть более конкретным, вы можете создать для него задание Upstart, которое настраивает его после монтирования файловой системы, в которой он находится. Примером может быть следующий, предполагая, что
/srv
это точка монтирования, содержащая вашdiskimage
файл:Это должно быть достаточно просто, чтобы концептуально следовать: первая строка - просто комментарий для читателей-людей, и это инструкции для Upstart дождаться
/srv
монтирования файловой системы, выполнить процесс losttup и считать себя завершенным, когда процесс завершится успешно (a " задача ", в отличие от службы, которая является постоянной). Просто поместите это содержимое в соответствующий файл/etc/init/*.conf
. Я бы/etc/init/losetup.conf
сам выбрал .Преимущества заданий Upstart перед
/etc/rc.local
такой простой вещью невелики, но важны. Во-первых,/etc/rc.local
это устарело, и его использование в качестве «грязной песочницы для достижения цели» в наши дни вызывает недовольство почти всех. Среди других причин не одобрения его использования, некоторые программы, которые используют этот файл, просто перезаписывают содержимое, и трудно согласовать разные сценарии, которые должны входить в один и тот же файл. Во-вторых, Upstart на самом деле обрабатывает проверку зависимостей для вас (убедившись, что файловая система смонтирована первой), поэтому, если есть проблема с монтированием файловой системы, она не будетпопробуйте настроить устройство петли .... но как только вы решите и смонтируете его. В-третьих, Upstart является гораздо более гибким: вы можете, например, быть достаточно умным, чтобы найти неиспользуемое петлевое устройство, и «испустить» это петлевое устройство для использования в других заданиях upstart, подобно тому, как мы использовали переменную «MOUNTPOINT». в этом примере выше.источник
Как отметил @psusi, самый простой способ - добавить следующую строку в ваш
/etc/fstab
файл.Теперь перезагрузитесь или запустите
mount -a
от имени пользователя root. Затем устройство должно быть установлено. Вы можете проверить это сlsblk
.источник