Oversikt på høyt nivå
Systemerte mål
Enkeltbrukermodus
Gjenoppretter root-passordet
Gjennomgang av logger fra tidligere støvler
Reparerer disk- og filsystemfeil
Oppstartslasterproblemer med Grub 2
Feilsøking av grub
Retting av en ødelagt grub-installasjon
Denne artikkelen beskriver oppstartsprosessen for CentOS/RHEL 7.x-systemer. Selv om det kan forbli lik tidligere utgivelser, med RHEL 7, introduseres systemd. I tillegg til oppstartsprosessen vil jeg gi feilsøkingstips og triks underveis.
Du må forstå oppstartsprosessen før du aktivt kan feilsøke et problem ved oppstart. Se gjennom trinnene nedenfor til du er kjent med prosessen.
Oversikt på høyt nivå
- Strøm + innlegg.
- Søk etter fastvareenhet.
- Firmware leser bootloader.
- Boot loader laster inn config (grub2).
- Boot loader laster inn kjerne og initramfs.
- Boot loader sender kontrollen til kjernen.
- Kjernen initialiserer maskinvare + kjører
/sbin/initsom pid 1.
- Systemd kjører alle initrd-mål (monterer filsystemet på
/sysroot).
- Kernel root FS byttet fra initramfs root (
/sysroot) til system rootfs ( /) og systemd kjøres på nytt som systemversjon.
- Systemd ser etter standardmål og starter/stopper enheter som konfigurert mens den automatisk løser avhengigheter og påloggingssiden vises.
For mer informasjon om oppstartsprosessen, se den offisielle OS-dokumentasjonen for systemet ditt.
Systemerte mål
Mål er i utgangspunktet avhengighetssjekker. De har en "før" og "etter"-konfigurasjon for nøyaktig hvilke tjenester som kreves for å nå dette målet. For eksempel: arp.ethernet.service, firewalld.service, og så videre må startes og fungere før det network.targetkan nås. Hvis den ikke nås, kan ikke tjenester som httpd, nfs, og ldapstartes. Det er 4 mål som kan settes i RHEL/CentOS 7.
- graphical.target (GUI-grensesnitt)
- multi-user.target (flerbrukermodus, tekstbasert pålogging)
- rescue.target (sulogin-prompt, grunnleggende systeminitialisering)
- emergency.target (sulogin-prompt, initramfs pivot komplett og systemrot montert på / som skrivebeskyttet)
For å se gjeldende standard oppstartsmål, bruk følgende:
systemctl get-default
Husk at du kan endre dette under kjøring ved å isolere målet. Dette vil starte/stoppe alle tjenester knyttet til det nye målet, så vær forsiktig (se systemctl isolate new.target).
Enkeltbrukermodus
Det er tider når du må starte opp i enkeltbrukermodus for å fikse et problem med operativsystemet. For dette eksemplet vil jeg vise deg hvordan du bruker rescue.targetsom er "enkeltbrukermodus" på RHEL/CentOS 7.
- Avbryt grub2-menyen ved å trykke "e" for å redigere når du blir bedt om det med grub-menyen.
- Finn linjen som spesifiserer kjerneversjonen ( vmlinuz ) og legg til følgende:
systemd.unit=rescue.target
- Trykk "Ctrl + x" for å starte.
- Du vil da bli bedt med root-passordet for å fortsette, når du avslutter redningsskallet, vil oppstartsprosessen fortsette å laste inn standardmålet ditt.
Gjenoppretter root-passordet
Denne prosessen er litt annerledes enn det vi har brukt i tidligere utgivelser, men det er en enkel oppgave og krever svært få trinn for å gjøre det. Hvis du trenger å gjenopprette legitimasjon, kan du bruke denne metoden for å få tilgang til en VM. Du kan fortsatt starte opp fra en live-CD, montere rotfilsystemet og redigere passordet, men den metoden er datert og krever mer innsats.
- Start systemet på nytt.
- Avbryt grub2-menyen ved å trykke "e" for å redigere når du blir bedt om det med grub-menyen.
- Flytt markøren til slutten av linjen som spesifiserer kjernen ( vmlinuz ). Det kan være lurt å fjerne alle andre konsoller enn TTY0, men dette trinnet er kanskje ikke nødvendig i ditt miljø.
- Legg til
rd.break( ingen anførselstegn ) som vil bryte oppstartsprosessen rett før kontrollen overføres fra initramfs til det faktiske systemet.
- Ctrl+x for å starte opp.
På dette tidspunktet presenteres et rotskall med rotfilsystemet montert i skrivebeskyttet modus på /sysroot. Vi må montere den på nytt med skriverettigheter.
Monter på nytt /sysroot.
# mount -oremount,rw /sysroot
Bytt til et chroot-fengsel.
# chroot /sysroot
Endre passordet for brukeren der vi har utdatert legitimasjon.
# passwd <username>
Hvis du bruker SElinux, bør du vurdere å merke alle filer på nytt før du fortsetter oppstartsprosessen. Denne delen kan hoppes over hvis du ikke bruker SElinux.
# touch /.autorelabel
Avslutt to ganger og systemet vil starte opp fra det punktet vi avbrøt det.
Gjennomgang av logger fra tidligere støvler
Det kan være nyttig å se logger over tidligere mislykkede oppstartsforsøk. Hvis de journalførte loggene har blitt gjort vedvarende (normalt lagret i minnet og utgitt ved oppstart), kan dette gjøres med journalctlverktøyet. Følg disse trinnene hvis du trenger å konfigurere vedvarende oppstartslogging.
Som root oppretter du loggfilen for at denne informasjonen skal lagres.
# mkdir -p 2775 /var/log/journal && chown :systemd-journal /var/log/journal
# systemctl restart systemd-journald
For å inspisere loggene for en tidligere oppstart, bruk -balternativet med journalctl. Uten noen argumenter, -bfiltrerer utdata kun til meldinger som gjelder siste oppstart. Et negativt tall på dette argumentet vil filtrere på tidligere oppstarter. For eksempel:
# journalctl -b-1 -p err
Dette vil vise deg feilloggene fra oppstarten som skjedde før den siste. Du bør endre den numeriske verdien for å gjenspeile støvelen du må se.
Reparerer disk- og filsystemfeil
En av de vanligste feilene ved oppstartstid er en feilkonfigurert /etc/fstabfil. Du KAN IKKE bruke for rescue.targetå fikse en /etc/fstabfeil. De fleste av disse problemene vil kreve at vi bruker emergency.targetsiden "redning" krever et mer funksjonelt system.
Følgende er eksempler på problemer som krever emergency.target:
- Korrupt filsystem.
- Ikke-eksisterende UUID i
/etc/fstab.
- Ikke-eksisterende monteringspunkt i
/etc/fstab.
- Feil monteringsalternativ i
/etc/fstab.
Viktig : Etter å ha redigert /etc/fstabfilen i nødmodus, må du kjøre følgende for sikkerhetstiltak:
# systemctl daemon-reload
Her er et gjennomgangseksempel. Vi skal starte opp i nødmodus for å fjerne en falsk oppføring i /etc/fstab.
- Avbryt grub2-menyen ved å trykke "e" for å redigere når du blir bedt om det med grub-menyen.
- Finn linjen som spesifiserer kjerneversjonen ( vmlinuz ) og legg til følgende:
systemd.unit=emergency.target
- Trykk "Ctrl + x" for å starte opp.
- Du vil bli bedt om å angi root-passordet for å fortsette.
- Monter på nytt
/slik at vi kan gjøre endringer i fstabfilen:# mount -oremount,rw /
- Vi kan bruke
mountkommandoen for å se hvilken oppføring som forårsaker feilen:# mount -a
- Fjern den fornærmende oppføringen fra
fstabfilen.
- Bruk
mount -aigjen for å sikre at feilen er løst.
- Bruk
systemctl daemon-reloadsom jeg hadde nevnt tidligere for å laste alle enhetsfiler på nytt, og gjenskape hele avhengighetstreet.
Når du går ut av nødskallet, vil systemet fullføre oppstarten fra nødmålet, og du vil da kunne fortsette som vanlig fra det tidspunktet. Dette eksemplet ble nettopp brukt for å vise deg prosessen med å bruke nødmålet til å gjøre vedvarende endringer i filer på systemet.
Oppstartslasterproblemer med Grub 2
Den /boot/grub2/grub.cfgfilen er hovedkonfigurasjonsfilen. IKKE rediger denne filen manuelt. Bruk i stedet for grub2-mkconfigå generere den nye grub2-konfigurasjonen ved å bruke et sett med forskjellige konfigurasjonsfiler og listen over installerte kjerner. Den grub2-mkconfigkommandoen vil se på /etc/default/grubfor alternativer som standard meny timeout og kjernens kommandolinje til bruk, og deretter bruke et sett av skript i /etc/grub.d/å generere den resulterende konfigurasjonsfilen.
Her er et tekstdiagram av dette forholdet.
/boot/grub2/grub.cfg
|
|__________________
| |
/etc/default/grub /etc/grub.d/*
Viktig: For å redigere hovedfilen grub.cfg, må du gjøre de ønskede endringene i /etc/default/grubog til filene i /etc/grub.d/og deretter opprette en ny grub.cfgved å kjøre:
# grub2-mkconfig > /boot/grub2/grub.cfg
Feilsøking av grub
Det er viktig å forstå syntaksen til /boot/grub2/grub.cfgfilen før feilsøking.
- For det første er oppstartbare oppføringer kodet i 'menyoppførings'-blokker. I disse blokkene peker
linux16og initrd16linjer til kjernen som skal lastes fra disken (sammen med kjernekommandolinjen) og initramfs som skal lastes. Under interaktiv redigering ved oppstart brukes fanen for å finne disse linjene.
- "Sett rot"-linjene inne i disse blokkene peker ikke til rotfilsystemet for RHEL/CentOS 7-systemet, men peker i stedet til filsystemet som grub2 skal laste kjerne- og initramfs-filene fra. Syntaksen er
harddrive.partitionhvor hd0er den første harddisken i systemet og hd1er den andre. Partisjonene er indikert som msdos1for den første MBR-partisjonen eller gpt1for den første GPT-partisjonen.
Eksempel fra /boot/grub2/grub.cfg:
### BEGIN /etc/grub.d/10_linux ###
menuentry 'CentOS Linux (3.10.0-514.26.2.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-514.el7.x86_64-advanced-a2531d12-46f8-4a0f-8a5c-b48d6ef71275' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod ext2
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 123455ae-46f8-4a0f-8a5c-b48d6ef71275
else
search --no-floppy --fs-uuid --set=root 123455ae-46f8-4a0f-8a5c-b48d6ef71275
fi
Hvis du trenger å installere oppstartslasteren på nytt på en enhet, bruk følgende kommando.
# grub2-install <device>
Retting av en ødelagt grub-installasjon
For tilfeller der systemet ikke vil starte opp etter å ha nådd grub2-menyen.
- Du bør begynne med å redigere grub-menyen og søke etter syntaksfeil. Hvis du finner en, korriger den og gå inn i systemet for å gjøre vedvarende endringer for å fikse problemet.
- Hvis du ikke finner noen feil, se avsnittet ovenfor der vi starter opp i nødmålet. Du må remontere root (
/) igjen.
- Se gjeldende grub2-konfigurasjon med følgende kommando:
# grub2-mkconfig
- Hvis du ikke ser noen feil, er det sannsynlig at noen har redigert
/boot/grub2/grub.cfgfilen. Ikke modifiser denne filen. Gjenoppbygg konfigurasjonen med følgende kommando:# grub2-mkconfig > /boot/grub2/grub.cfg
Når du har gjenoppbygd grub-konfigurasjonen, bør du kunne starte på nytt uten å ha noen problemer.