Czy partycje rozruchowe mogą mieć relację jeden do wielu z partycjami root? Jak bardzo partycje rozruchowe zależą od partycji root?

1

Robię projekt na moim Raspberry Pi, w którym próbuję mieć moją partycję root na dysku USB. Właściwie wiele napędów kciukowych. Więc wszystko, co muszę zrobić, aby przejść z jednego miejsca pracy do drugiego, to podłączyć nowy USB i zrestartować komputer.

Ale tak naprawdę może to działać tylko wtedy, gdy partycja rozruchowa rzadko się zmienia i nie wie dużo więcej o partycji głównej niż o tym, jak uruchomić system operacyjny.

Czy to może zadziałać? Czy partycje rozruchowe dbają tylko o kilka prostych elementów katalogu głównego, które można łatwo utrzymać dla wszystkich tak samo, czy te dwie ewoluują razem i zaplątują się?

Korzystam z Raspian i zamierzam mieć dla niego wiele wersji systemu root, z których wszystkie będą używane (jedna na raz) przy tym samym rozruchu.

Seph Reed
źródło
Masz na myśli, że chcesz stworzyć bootowalny napęd USB? Albo coś innego?
JakeGould
1
Cóż, tak, byłoby to lepsze, ale nie można tego zrobić na Pi. Co mogę zrobić, to zrobić bootowalną kartę SD, która pobiera partycję root z USB.
Seph Reed,
A potem mógłbym stworzyć wiele różnych wersji root'a, które robią różne rzeczy, a wszystkie oparte są na tym samym fundamencie (w tym przypadku
Raspian
Rozumiem. Mam nadzieję, że ktoś inny znajdzie odpowiedź. Do diabła z tym, przydatne może być edytowanie pytania, aby wskazać, jakiej dystrybucji Linux kompatybilnej z Raspberry Pi zamierzasz użyć. Lub jeśli jesteś otwarty na pomysły, dodaj to również.
JakeGould
1
Być może. Miałem nadzieję, że będzie to mniej więcej niezależne od jakiejkolwiek dystrybucji. Mam nadzieję, że systemy rozruchowe są z definicji niezależne od systemu operacyjnego, z wyjątkiem sposobu, w jaki go inicjują, jak twierdzi internet, ale nie jest to jawne.
Seph Reed

Odpowiedzi:

1

Tak, o ile mi wiadomo, jest to całkowicie możliwe!

To, co chcesz zrobić, to skopiować partycję główną na pamięć USB, a następnie zmienić /etc/fstabi /boot/cmdline.txturuchomić ją z dysku zewnętrznego zamiast z drugiej partycji na karcie SD.

Jeśli znalazłem samouczek, ale niestety nie jest on w języku angielskim, więc postaram się wyjaśnić procedurę własnymi słowami.

  1. Zrestartuj Pi, gdy jedynym dyskiem zewnętrznym jest pamięć USB (w ten sposób unikamy posiadania różnych numerów dysków przy każdym uruchomieniu, ponieważ unikalne identyfikatory dysków nie są możliwe, jeśli chcesz zamienić pamięć USB później).

  2. Uzyskaj numer napędu przez sudo blkid. Nie powinno być tylko jeden, który wygląda tak: /dev/sda1.

  3. Za pomocą polecenia mountmożemy sprawdzić, czy został on automatycznie zamontowany. Jeśli nie ma go na liście, przejdź do następnego kroku. Jeśli tak, uruchom sudo umount /dev/sda1(popraw różne numery, jeśli nie są takie same), aby odmontować pamięć USB.

  4. Następnie chcemy sformatować pamięć USB, aby mieć odpowiedni system plików dla partycji głównej Debiana, co jest preferowane ext4. Można to zrobić za pomocą komendy: sudo mkfs.ext4 /dev/sda1.

  5. Następnie musimy (ponownie) zamontować pamięć USB w tymczasowej lokalizacji, aby skopiować partycję root z karty SD. Robimy to za pomocą polecenia: sudo mount /dev/sda1 /mnt. (Jeśli polecenie narzeka, że /mntnie istnieje, utwórz folder o tej nazwie, uruchamiając: sudo mkdir /mnti spróbuj ponownie.

  6. Teraz nadszedł czas, aby skopiować wszystkie dane z partycji root przez pierwsze przełączenie na górę katalogu z: cd /a następnie uruchomić ten Tar-polecenia: sudo tar cf - * --exclude /mnt/* | ( cd /mnt; sudo tar xfp -). To chyba nie jest najbardziej kompaktowe rozwiązanie, ale działało dla mnie. Pamiętaj, że może to chwilę potrwać, w zależności od szybkości karty SD i napędu USB.

  7. Następnie musimy zmienić, /etc/fstabktóry zawiera dyski, które mają zostać zamontowane podczas uruchamiania poprzez uruchomienie sudo nano /mnt/etc/fstab. ( Zauważ, że jest to na pamięci USB, ponieważ dodaliśmy /mnt. ) Musisz zmienić odpowiednie linie, aby wyglądały tak:

/dev/mmcblk0p1 /boot vfat defaults 0 0 /dev/sda1 / ext4 defaults,noatime 0 0

  1. Na koniec musimy powiedzieć partycji rozruchowej na karcie SD, aby uruchomiła się z dysku USB. Ale po pierwsze to chyba dobry pomysł, aby zrobić kopię zapasową pliku, który mamy zamiar zmienić teraz, zanim popełnić na uczynienie przełącznik, uruchamiając: sudo cp /boot/cmdline.txt /boot/cmdline.txt.save.

  2. Uruchom, sudo nano /boot/cmdline.txtaby wejść w nanocelu zmiany parametrów rozruchowych na pierwszej partycji karty SD. Zasadniczo musimy zmienić wpis dla partycji root na dysk USB. W samouczku można to wprowadzić (1 linia):

    dwc_otg.lpm_enable=0 root=/dev/sda1 rootfstype=ext4 noatime quiet rootwait loglevel=1 zram.num_devices=2

    Możesz przeczytać, co oznaczają te parametry tutaj .

    Teraz zapisz i wyjdź, nanoa przy następnym restarcie Raspberry Pi powinien uruchomić się z pamięci USB, ale oczywiście karta SD jest nadal wymagana, jak już wspomniałeś.

Tak długo, jak dysk USB jest jedynym dyskiem (oprócz karty SD) podczas uruchamiania, powinno to działać. Musisz mieć to trochę dynamiczne i nie widzę innego sposobu na odniesienie się do napędu niż używanie /dev/diskX.

Edycja: Zapomniałem wspomnieć, że musisz zduplikować dysk USB po zakończeniu lub wykonać te same kroki z innymi instalacjami na innych dyskach. Jeśli wersja Raspian wraz z zainstalowanymi pakietami jest taka sama, nie widzę powodu, dla którego to nie powinno działać.

/bootPartycja jest dość prosty, a linia wspominałem w 9. jest w zasadzie wszystko, co robi. Musi tylko przekazać go właściwej partycji z odpowiednim systemem plików i powinien działać.

Mam nadzieję, że ci to pomogło.


Dla osób niemieckojęzycznych link źródłowy zostawiam tutaj: Źródło .

comfreak
źródło
1
Tak, to było całkowicie pomocne. Czy możesz dodać ten link raspberrypi.org/forums/viewtopic.php?f=29&t=44177 do swojej odpowiedzi dla przyszłych poszukiwaczy. Wciąż waham się przed tym, czy boot ma jakieś inne zależności od roota, ale mogę przeprowadzić testy i zweryfikować go do końca dnia. Dziękuję Ci!
Seph Reed,
Myślę, że jeśli zostawisz tutaj swój komentarz, ludzie zobaczą go, jeśli będą potrzebować więcej informacji na ten temat. Cieszę się, że mogłem ci pomóc i jestem gotów poprawić moją odpowiedź, jeśli pojawią się jakieś problemy.
comfreak