Як налаштувати циклічний пристрій під час завантаження?


14

Я хочу налаштувати циклічний пристрій під час завантаження. Цікаво, який найкращий спосіб зробити це.

Я шукав його в Google. Деякі кажуть, що додають правило udev, деякі говорять про введення сценаріїв /etc/init.d, деякі навіть змінюють initramfs.

То який найкращий чи правильний спосіб це зробити? Скажіть, будь ласка, якісь деталі (про те, як це зробити)?

Дякую.


Я б пішов з /etc/init.d/somethingабо /etc/rc.local, але пропоную зупинитися на будь-якому методі, який працює.
enzotib

6
Для чого? Якщо ви хочете, щоб файл був змонтований під час завантаження, просто додайте його до / etc / fstab за допомогою параметра loop, і mount подбає про налаштування пристрою циклу для вас.
psusi

@psusi: Дякую за пораду, але для моєї мети встановлення недостатньо, і фактично файл неможливо просто встановити. Це образ диска, а не зображення розділу. І мені потрібно знати точну назву циклічного пристрою для того, щоб використовувати його для створення віртуального диска у VirtualBox. (Я роблю такий вид віртуального диска, думаючи, що легше ділитися файлами між віртуальною машиною та хост-машиною. Вбудована загальна папка не працює для деяких додатків.)
Roun

4
Ви можете просто вказати віртуальну машину на файл, а не на петлю. Вам також потрібно бути дуже обережними, щоб переконатися, що ви ніколи не запускаєте віртуальну машину (або не призупиняєте її) і одночасно монтуєте файлову систему на хості, інакше ви пошкодите fs. З цієї причини набагато кращою ідеєю є використання мереж, щоб мати гості доступу до файлів, якими хост обмінюється через nfs або samba або sshfs.
psusi

@Roun: Розділи у файлі все ще можуть бути змонтовані, хоча вам слід вказати секторову зміщення розділу з початку файлу (наприклад, mount /disk.img /mnt -o loop,offset=2048для першого розділу). Зсуви можна знайти за допомогою parted або fdisk після налаштування пристрою циклу (див. Мою відповідь нижче для цього).
занфур

Відповіді:


7

У Ubuntu є щонайменше три "відповідних" способи запуску речей (припускаючи, що ви не хочете просто їх встановлювати), перераховані тут у порядку зменшення переваг:

  1. /etc/init/*.conf (На початку)
  2. /etc/init.d/* (сисвініт)
  3. /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монтажу файлової системи, виконувати процес завантаження і вважати себе закінченим після успішного завершення процесу (a " завдання ", на відміну від служби, яка зберігається). Просто помістіть цей вміст у файл, який відповідає /etc/init/*.conf. Я б /etc/init/losetup.confсам вибрав .

Переваги завдань Upstart /etc/rc.localдля такої простої речі невеликі, але важливі. По-перше, /etc/rc.localзастаріла, і її використання як просто "безладна пісочниця для того, щоб зробити справи", в наші дні насміхається дуже багато всіх. Серед інших причин нахмурення його використання, деякі програми, які використовують цей файл, просто перезаписують вміст, і складно узгодити різні сценарії, які потрібно перейти в один і той же файл. По-друге, Upstart насправді обробляє перевірку залежності для вас (переконайтесь, що файлова система встановлена ​​спочатку), тому, якщо є проблема зі встановленням файлової системи, вона не будеспробуйте налаштувати циклічний пристрій ...., але як тільки ви його вирішите та змонтуєте. По-третє, Upstart є набагато більш гнучким: ви можете, наприклад, зробити його досить розумним, щоб знайти невикористаний пристрій циклу та "випромінювати" цей циклічний пристрій для використання в інших роботах з початковими стартами, подібно до того, як ми використовували змінну "MOUNTPOINT" у цьому прикладі вище.


Як викликав /etc/init/losetup.conf ??? Це не працює для мене ...
Імран

1

Як зазначав @psusi, найпростіший спосіб - додати наступний рядок у свій /etc/fstabфайл

/path/to/loop/device       /path/to/mount/point       auto       loop       0 0

Тепер перезавантажте або запустіть mount -aяк root. Потім пристрій слід встановити. Ви можете перевірити це за допомогою lsblk.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.