Tymczasowo wyłącz rozwinięcie systemu plików podczas pierwszego uruchomienia


14

Chciałbym zbudować własny obraz Raspberry Pi oparty na Raspbian Lite, który jest już skonfigurowany z poprawnymi ustawieniami narodowymi, strefą czasową itp. Niestety dla mnie obecne wersje obrazów Raspbian automatycznie zmieniają rozmiar systemu plików, a następnie uruchamiają ponownie.

Chcę uniknąć kłopotów ze zmniejszeniem rozmiaru systemu plików , uniemożliwiając kiedykolwiek zmianę rozmiaru. Jak mam edytować obraz po nagraniu, aby tymczasowo wyłączyć automatyczną zmianę rozmiaru systemu plików?

Edytowane w celu wyjaśnienia efektów powinny być odwracalne; to znaczy chcę, aby mój dostosowany obraz rozwijał się przy pierwszym uruchomieniu.


To może nie być idealne rozwiązanie, ale czy zastanawiałeś się nad użyciem małej karty 4 GB, jeśli nie stanowiłoby to takiego problemu.
Steve Robillard

2
Ciekawy pomysł .. wypalenie na małej karcie, skutecznie ograniczające zmianę rozmiaru. Wolałbym bezpośrednie rozwiązanie, ale jest to przyzwoita alternatywa. Dzięki
patricktokeeffe

2
To dość denerwujące. Jestem pewien, że odbywa się to za pomocą prostego skryptu rozruchowego, który raspi-configjest uruchamiany przy pierwszym uruchomieniu i można go łatwo wyłączyć. Mogę rzucić okiem, ale muszę pobrać nowy obraz, ostatni mam z maja. Sprawdź za kilka godzin.
złotowłosy

Odpowiedzi:


13

Istnieje dwuczęściowy mechanizm, który bierze za to odpowiedzialność na Raspbian; prawdopodobnie najlepszym pomysłem jest dbanie o obie części, jeśli są one włączone.

Po pierwsze, oryginał /boot/cmdline.txtzawiera to:

init=/usr/lib/raspi-config/init_resize.sh

Odwoływanie się do skryptu z tą ścieżką na partycji głównej, który będzie używany jako proces inicjujący podczas rozruchu. Bez tego bitu domyślnie byłaby to wartość wbudowana w jądro /sbin/init, do którego w Raspbian jest dowiązaniem symbolicznym /lib/systemd/systemd.

Po usunięciu tej części cmdline.txtsystem powinien następnie uruchomić się normalnie.

Skrypt faktycznie zmienia rozmiar partycji na karcie SD. Jest to proces odmienny od zmiany rozmiaru systemu plików na partycji 1, co dzieje się później.

Sposób, w jaki się to dzieje, polega na tym, że system jest natychmiast ponownie uruchamiany normalnie (to znaczy przez systemd), a init.dskrypt jest uruchamiany wcześnie, co należy usunąć z drugiej partycji:

/etc/init.d/resizefs_once

I symboliczny link do niego, który również należy usunąć:

/etc/rc3.d/S01resizefs_once

Możesz zachować kopię do późniejszego użytku, jeśli chcesz, ale raspi-configmożesz utworzyć ją ponownie dla siebie (jest osadzona w raspi-configskrypcie powłoki). Jeśli faktycznie działa, usuwa się, więc nie powtórzy się.

Zmienia również rozmiar systemu plików na nowo zmienionej partycji.

Nie należy wyrządzać szkody, jeśli zdarzy się tylko jedna lub druga część; w pierwszym przypadku skończysz z systemem plików, który nie wypełnia powiększonej partycji, w drugim nic się nie stanie, ponieważ system plików już wypełnia partycję.

Jeśli później użyjesz raspi-configdo powiększenia systemu plików, rozmiar partycji zostanie natychmiast zmieniony, a następnie skonfigurowany skrypt init (jak już wspomniano).

Edycja cmdline.txtna pierwszej partycji jest prosta na dowolnym komputerze, ponieważ jest to partycja VFAT. Usunięcie init.dpliku wymaga systemu, który może uzyskiwać dostęp i edytować systemy plików ext4.

Oba zadania można zamiast tego wykonać w samym pliku obrazu przed wypaleniem karty; aby zamontować i zmodyfikować obraz Raspbian w systemie GNU / Linux, patrz tutaj . Istnieje równoległe pytania i odpowiedzi dla systemu Windows .

Jest to również odwracalne, ale musisz odłożyć obie części mechanizmu, jak opisano powyżej, ponieważ pierwszy nie obejmuje automatycznego ustawiania drugiego.


  1. Chociaż komunikat o błędzie z tego skryptu prawdopodobnie myli te warunki, twierdząc, że nie udało się zmienić rozmiaru głównego systemu plików , ale tak naprawdę nie udało się zmienić rozmiaru partycji z głównym systemem plików. Wykonanie jednego nie powoduje automatycznie osiągnięcia drugiego.

1
Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu .
Ghanima

Wyłączenie przez goldilock init=/usr/lib/raspi-config/init_resize.shz /boot/cmdline.txtutworów na Ubuntu mate również wydaje się wystarczające samo w sobie. Mam 4 GB obraz Ubuntu Mate sflashowany na sdcard 32 GB i trzyma rozmiary partycji w oryginalnym rozmiarze obrazu. Również /etc/init.d/resizefs_oncei /etc/rc3.d/S01resizefs_oncenie istnieją po pierwszym uruchomieniu na Ubuntu Mate.
sith

Tylko dla potwierdzenia, czy przywrócenie zarówno cmdline.txti, jak init.di rc3.dpliku i linku pozwoli na zmianę rozmiaru całego rozruchu samodzielnie, czy też będę musiał go uruchomić raspi-configi uruchomić ręcznie?
Oxwivi

@Oxwivi Powinno tak. Wyjaśniłem cały ten post i podałem na ten temat wyraźny komentarz.
Złotowłosa

Tak dziękuję. Warto również zauważyć, że IDK, ponieważ która wersja, ale przynajmniej najnowsza wersja nie zawiera odwołań do skryptu zmiany rozmiaru, o których wspomniałeś na zewnątrz cmdline.txt. Uruchomiłem obraz Raspbian za pomocą systemd-nspawni nadal dostaję dzienniki błędów próbujące zmienić rozmiar po usunięciu cmdline.txtrzeczy.
Oxwivi
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.