Jak skonfigurować urządzenie pętli w czasie uruchamiania?


14

Chcę skonfigurować urządzenie pętli w czasie uruchamiania. Zastanawiam się, jaki jest najlepszy sposób, aby to zrobić.

Szukałem go w Google. Niektórzy mówią, że dodają regułę udev, niektórzy mówią, że wstawiają skrypty /etc/init.d, inni nawet modyfikują initramfs.

Więc jaki jest najlepszy lub właściwy sposób na zrobienie tego? Czy możesz podać jakieś szczegóły (o tym, jak to zrobić)?

Dziękuję Ci.


Poszedłbym z /etc/init.d/something, lub /etc/rc.local, ale sugeruję pozostać przy jakiejkolwiek metodzie, która działa.
enzotib

6
Po co? Jeśli chcesz, aby plik był montowany w czasie uruchamiania, po prostu dodaj go do / etc / fstab z opcją loop, a mount zajmie się konfiguracją urządzenia loopback.
psusi

@psusi: Dziękuję za radę, ale dla mojego celu montaż nie wystarczy, a pliku nie można po prostu zamontować. Jest to obraz dysku, a nie obraz partycji. Muszę znać dokładną nazwę urządzenia pętli, aby użyć go do stworzenia wirtualnego dysku w VirtualBox. (Uważam, że taki dysk wirtualny uważa, że ​​łatwiej jest udostępniać pliki między maszyną wirtualną a maszyną hosta. Wbudowany folder współdzielony nie działa w przypadku niektórych aplikacji.)
Roun

4
Możesz po prostu wskazać maszynę wirtualną na plik, a nie urządzenie sprzężenia zwrotnego. Musisz również bardzo uważać, aby upewnić się, że nigdy nie uruchamiasz maszyny wirtualnej (lub nie zawiesisz jej) i nie montujesz systemu plików na hoście w tym samym czasie, w przeciwnym razie uszkodzisz fs. Z tego powodu o wiele lepszym pomysłem jest korzystanie z sieci, aby pliki dostępu gości były udostępniane przez hosta za pośrednictwem nfs, samba lub sshfs.
psusi

@Roun: Partycje w pliku można nadal montować, chociaż należy określić przesunięcie sektora partycji od początku pliku (np. mount /disk.img /mnt -o loop,offset=2048Dla pierwszej partycji). Przesunięcia można znaleźć za pomocą parted lub fdisk po skonfigurowaniu urządzenia pętli (zobacz moją odpowiedź poniżej).
zanfur 21.11.11

Odpowiedzi:


7

Istnieją co najmniej trzy „odpowiednie” sposoby uruchamiania rzeczy w Ubuntu (zakładając, że nie chcesz po prostu montować), wymienione tutaj w malejącej kolejności preferencji:

  1. /etc/init/*.conf (Dorobkiewicz)
  2. /etc/init.d/* (sysvinit)
  3. /etc/rc.local (skrypt zmiany poziomu pracy)

Istnieje również możliwość użycia reguł udev, ale będzie zawiłe. Odradzam to. Skrypt sysvinit to przesada w przypadku tak małej rzeczy, więc skupię się na pozostałych dwóch opcjach. Skrypt zmiany poziomu pracy jest najprostszy (choć najmniej preferowany), więc zacznę od tego.

/etc/rc.localPlik jest po prostu wykonywane przez /etc/init.d/rc.localskrypt sysvinit, który jest (domyślnie) wykonany ostatni po przełączeniu na każdy normalny „na” poziomie działania (np podczas rozruchu normalnie, ale nie podczas zamykania lub przejść do trybu odzyskiwania). Aby wdrożyć konfigurację urządzenia rozruchowego, po prostu dodaj to na końcu /etc/rc.local, zakładając, że plik jest wywoływany /srv/diskimagei chcesz użyć go /dev/loop0jako urządzenia pętlowego:

losetup /dev/loop0 /srv/diskimage

To naprawdę wszystko. Oczywiście zastąp nazwy plików tym, co działa najlepiej w twojej konfiguracji.

Jeśli chcesz być bardziej szczegółowy, możesz utworzyć dla niego zadanie Upstart, które konfiguruje je po zamontowaniu systemu plików, który go trzyma. Przykład może wyglądać następująco, zakładając, że /srvbył to punkt montowania zawierający Twój diskimageplik:

description     "Setup loop devices after filesystems are mounted"

start on mounted MOUNTPOINT=/srv
task
exec losetup /dev/loop0 /srv/diskimage

Powinno to być na tyle proste, aby można je było zastosować koncepcyjnie: pierwszy wiersz jest tylko komentarzem dla ludzkich czytelników, a instrukcje Upstart czekają, aż /srvsystem plików zostanie zamontowany, wykonają proces losetup i uważają, że jesteś skończony, gdy proces zakończy się pomyślnie („ zadanie ”, w przeciwieństwie do usługi, która jest trwała). Wystarczy umieścić tę zawartość w dopasowanym pliku /etc/init/*.conf. Sam bym wybrał /etc/init/losetup.conf.

Zalety zadań Upstart w stosunku /etc/rc.localdo tak prostych rzeczy są niewielkie, ale ważne. Po pierwsze, /etc/rc.localjest przestarzałe, a jego użycie jako „bałaganu w piaskownicy, aby załatwić sprawę”, jest obecnie lekceważone przez prawie wszystkich. Wśród innych powodów marszczenia brwi po jego użyciu, niektóre programy, które używają tego pliku, po prostu nadpisują zawartość i trudno jest pogodzić różne skrypty, które muszą przejść do tego samego pliku. Po drugie, Upstart faktycznie obsługuje sprawdzanie zależności (upewniając się, że system plików jest zamontowany jako pierwszy), więc jeśli wystąpi problem z montażem systemu plików, nie będziespróbuj skonfigurować urządzenie pętli .... ale kiedy to rozwiążesz i zamontujesz. Po trzecie, Upstart jest znacznie bardziej elastyczny: możesz na przykład sprawić, by był wystarczająco inteligentny, aby znaleźć nieużywane urządzenie pętli i „emitować” to urządzenie pętli do użycia w innych zadaniach upstart, podobnie jak w przypadku użycia zmiennej „MOUNTPOINT” w tym przykładzie powyżej.


Jak wywołano /etc/init/losetup.conf ??? To nie działa dla mnie ...
Imran

1

Jak wskazał @psusi, najprostszym sposobem jest dodanie następującej linii do /etc/fstabpliku

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

Teraz uruchom ponownie lub uruchom mount -ajako root. Następnie urządzenie powinno zostać zamontowane. Możesz to sprawdzić za pomocą lsblk.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.