Kirjoittaja Aihe: Koneen korjaaminen bootattaavaksi  (Luettu 3200 kertaa)

petteriIII

  • Käyttäjä
  • Viestejä: 693
    • Profiili
Koneen korjaaminen bootattaavaksi
« : 30.07.14 - klo:08.59 »
- järjestelmä on harvoin pahemmin vioittunut vaikka se ei boottaisikaan ja alkaa todennäköisesti boottaamaan kunhan se päivitettäisiin. Mutta milläs päivität sellaisen joka ei edes boottaa? Tällä skriptillä voi päivittää boottamattoman ubuntun boottamalla jostain muualta ja ajamalla sitten tämän skriptin.

- siis tämä korjaa koneet jotka ovat lakanneet boottaamasta joko päivityksen tai grubin asettelun seurauksena. Kyllä tämä usein muutenkin korjaa. Kaikki koneen ubuntut päivitetään kerralla ja saattaapa mintit sun muut lipsahtaa päivityskierteeseen nekin.

- skripti kopioidaan muistitikulle muistitikun omassa päätteessä "sudo nautilus":ksella. Vaikea homma ja täytyy jättää niille jotka ovat käyttäneet linuxia paljon. Tai voihan skriptiä ajaa myös boottaamattoman ubuntun kovalevyltä tai toiselta muistitikulta.

- ennen päivittämistä skripti poistaa kaikilta päivittämiltään osioilta roskikset, turhat imaget, extra-imaget ja headerit; siis toimia joita joskus ei haluta mutta puukota silloin koodia. Skripti raivaa pois muitakin päivittämistä estäviä tekijöitä. Lisäksi kovalevy-osiot tarkistetaan ja yritetään korjata lukuunottamatta sitä osiota jolla on bootattu eikä myöskään yhteistä kotia tarkisteta. Live-cd:tä tai live-muistitikkua ei päivitetä, mutta sensijaan päivitetään muistitikut joille on asennettu ubuntu.

- mikäli ubuntuja on monia ja monilla eri kovalevyillä on niiden kaikkien päivittäminen melkoinen työ normaalikeinoin. Tämä skripti päivittää ubuntut kaikilta löytämiltään levyiltä samallakertaa; skriptin toiminta on täysin automaattista eikä se koskaan kysy mitään: skriptin voi laittaa toimimaan ja itse poistua paikalta.

- mikäli ubuntuja on monta ja kenties jakautuneina eri levyille tulee tarve vakiona pysyvään valikkoon. Vakiona pysyvässä valikossa voi sallia järjestelmän hoitamisen tarkoitettujen skriptien käyttämisen vain jollekulle tai pitää jatkuvasti valikossa vain tarvittaessa koneeseen kytketyn pankki-Ubuntun kutsun. Vakiona pysyvä valikko on kehittäjien suosittelema - kehittäjistäkään useimmat eivät tosin taida tajuta mitään suositelleensa, sillä erittäin harvat tarvitsevat useita ubuntuja. GrubEdit täyttää vaatimukset vakioisen valikon teossa.

Koodia: [Valitse]
#!/bin/bash
# paivita 10.8.2014 petteriIII
function KirjoitaOhje { echo '- aluksi kysytään salasanaa ettei sitä kysyttäisi sitten toiminnan aikana keskenkaiken. Salasana on kovalevyllä toimittaessa oma'
echo '  salasanasi ja muistitikulla se on ubuntu jos sitä edes kysytään.
- toimiva internet-yhteys on välttämätön; live-versioiden verkkoyhteys asennetaan aivan samoin kuin normaalistikin - muistitikun asetukset säilyvät mutta cd:n ei.
- kovalevyosiot tarkistetaan ja yritetään korjata lukuunottamatta sitä osiota jolla on bootattu. Windows on kylläkin kantona kaskessa.
- roskikset tyhjennetään, vain viimeinen image jätetään ja päivityksen esteitä poistetaan.

luettuasi tämän paina mitähyvänsä näppäimistön nappia.'
read -sn 1 key
}

function tarkistaKovalevyjenKaikkiOsiot () {
apu=""
read -t 5 -n 1 -p 'jos haluat tarkistaa kovalevyn perusteellisesti paina jotain kirjainta; silloin tarkistus kestää jonkinverran kauemmin mutta tarkistaa paremmin.' apu
echo
for osio in $(sudo blkid | grep -v swap | awk '{print $1}' | sed 's/\://g'); do
  [[ ! $apu ]] && sudo fsck -MVCaf $osio ||   sudo fsck -MVCac $osio
  echo ""
done
}

function unmountmnt {
cd / # umount ei onnistu, jos joku umountattavan kansio on valittuna
sudo echo ""
for mountattu in $(sudo mount | grep /mnt | awk '{print $3}')
do
  [[ -e $mountattu ]] && sudo umount -l $mountattu
done  
echo '/mnt:n mountit on poistettu'
}

function paivitaKaikkiOsiot () { # itseensä chroottaus onnistuu ihan kivasti joten tällätavoin voi ihan hyvin päivittää itsensä
unmountmnt
for Chrootosio in $(sudo blkid | grep -v swap | grep -v vfat | awk '{print $1}' | sed 's/\://g'); do
  osiontyyppi=$(sudo blkid -o value -s TYPE $Chrootosio)
  #[[ $osiontyyppi = btrfs ]] && [[
  sudo mount -t $osiontyyppi $Chrootosio /mnt
  [[ -d /mnt/boot/grub ]] && [[ $(cat /mnt/boot/grub/grub.cfg | grep menuentry.*Ubuntu ) ]] &&  {
  echo; echo '********** päivitetään: '$Chrootosio

  sudo mount -t sysfs none /mnt/sys && sudo mount -t proc none /mnt/proc && sudo mount --bind /dev/ /mnt/dev &&  sudo mount --bind /dev/pts /mnt/dev/pts && sudo mount -o bind /etc/resolv.conf /mnt/etc/resolv.conf && sudo mount -o bind /dev/shm /mnt/dev/shm

  [[ -d /mnt/home/$(env | grep USER)/.local/share/Trash ]] && sudo rm -rf /mnt/home/$(env | grep USER)/.local/share/Trash # poistaa roskikset kaikilta osioilta joiden käyttäjä on sama kuin se jonka tililtä päivitä ajetaan eikä roskista tyhjennetä jos se on erilliskodissa

  for n in $(ls /mnt/boot | grep config | grep -v $(ls /mnt/boot | grep config | sort | tail -1) | sed 's/config-//g'); do
    sudo chroot /mnt apt-get --yes --force-yes purge 'linux-image-'$n
    sudo chroot /mnt apt-get --yes --force-yes purge 'linux-image-extra-'$n # taitaa olla turha lause
    sudo chroot /mnt apt-get --yes --force-yes purge 'linux-headers-'$n
  done # Mikäli et halua poistaa imageja kommentoi nämä 5 riviä

  sudo chroot /mnt rm -f /var/cache/apt/archives/lock /var/lib/aptitude/lock /var/lib/dpkg/lock /var/lib/apt/lists/lock
  sudo chroot /mnt dpkg --force-confnew --configure -a
  sudo chroot /mnt apt-get --yes --force-yes --fix-broken install
  sudo chroot /mnt apt-get --yes --force-yes autoclean
  sudo chroot /mnt apt-get --yes --force-yes autoremove
  sudo chroot /mnt apt-get update
  sudo chroot /mnt apt-get --yes --force-yes safe-upgrade
  sudo update-grub2
}
unmountmnt
done
}

# Pääohjelma
KirjoitaOhje
echo ''; sudo echo
hommaalkoi="$(date +%s)"
tarkistaKovalevyjenKaikkiOsiot # sitä osiota jolta on bootattu ei tarkisteta.
paivitaKaikkiOsiot
echo -e 'päivitetty: '$(date +"%d-%m-%y %k:%M")'\t ja päivittäminen kesti: '$(date -d@$(echo $(date +%s)-$hommaalkoi-7200 | bc) | awk '{print $3}')
« Viimeksi muokattu: 18.09.14 - klo:12.19 kirjoittanut petteriIII »

JaniAlander

  • Käyttäjä / moderaattori+
  • Viestejä: 3369
    • Profiili
Vs: Koneen korjaaminen bootattaavaksi
« Vastaus #1 : 30.07.14 - klo:10.19 »
- skripti kopioidaan muistitikulle muistitikun omassa päätteessä "sudo nautilus":ksella. Vaikea homma ja täytyy jättää niille jotka ovat käyttäneet linuxia paljon. Tai voihan skriptiä ajaa myös boottaamattoman ubuntun kovalevyltä tai toiselta muistitikulta.

Hieno idea tuo skripti. Mistä alkaen muuten "sudo nautilus" ja sitten graafinen kopiointi on ollut erikoisen vaikeaa? Eihän se ihan tekstimuotoinen cp komentokaan varsinaisesti siitä vaikeimmasta päästä ole, kunhan vain tietää mihin hakemistoon kopioi.
Core i5-9400F 2.9ghz 32GB Ram, Nvidia RTX2060 Kubuntu 24.04-64bit, Windows 10 Pro 64-bit Samsung Series 5, AMD A-6 2.1 GHz 4 Gt Ram, Ubuntu 18.04 64-bit.
Lenovo T60 Core2Duo 2GB Ram Ati Mobility Radeon 128 MB Ubuntu Mate 16.04-64bit
Commodore Amiga 500 1MB Ram.

welmar

  • Käyttäjä
  • Viestejä: 1582
    • Profiili
Vs: Koneen korjaaminen bootattaavaksi
« Vastaus #2 : 30.07.14 - klo:11.37 »
Mistä alkaen muuten "sudo nautilus" ja sitten graafinen kopiointi on ollut erikoisen vaikeaa? Eihän se ihan tekstimuotoinen cp komentokaan varsinaisesti siitä vaikeimmasta päästä ole, kunhan vain tietää mihin hakemistoon kopioi.
Kaikki on suhteellista. Jos esim. kopioinnista puhutaan niin dd:llä on kokeneemmalle käyttäjälle hyvin yksinkertaista tehdä vieläpä varmemmin toimiva live-tikku, silti usein monet pitää unetbootinia helpompana. Monille vaikeus tulee ihan siitä että pitää pääte avata, se tuntuu jotenkin mystisen vaikealta vaikka vain yksi käsky pitäisi muistaa eikä sitäkään kokonaan jos tabulaattorilla täydentää.

petteriIII

  • Käyttäjä
  • Viestejä: 693
    • Profiili
Vs: Koneen korjaaminen bootattaavaksi
« Vastaus #3 : 01.08.14 - klo:14.20 »
Siinähän se vaikeus osittain on että ei kannata edes ehdotella että joku käyttäisi terminaalia sillä terminaalia käyttävältä taitaa mennä mainekin. Mutta skriptin voi ajaa automaattisestikin boottauksen jälkeen. Ubuntussa se tapahtuu seuraavasti:

- boottaa USB-muistitikulle. Muistitikun pitää olla USB-creatorilla tehty siten että tikulla on vähän tilaakin ja nettiyhteyskin pitää olla määritelty.
- vie paivita-skripti kansioon: /home/ubuntu
- anna päätteessä käsky: gnome-session-properties
- näpäytä: add
- kenttään: command  kirjoita: gnome-terminal --maximize -x  /home/ubuntu/paivita
- add
- close

Näin tehdyltä USB-muistitikulta päivitys käynnistyy automaattisesti boottauksen jälkeen . Eipä silti, monikohan saa bootattua USB:ltä joten ohje taitaa vain siirtää suolta allikkoon.

petteriIII

  • Käyttäjä
  • Viestejä: 693
    • Profiili
Vs: Koneen korjaaminen bootattaavaksi
« Vastaus #4 : 18.09.14 - klo:15.20 »
- järjestelmä on harvoin pahemmin vioittunut vaikka se ei boottaisikaan ja alkaa todennäköisesti boottaamaan kunhan se päivitettäisiin. Mutta milläs päivität sellaisen joka ei edes boottaa? Tällä skriptillä voi päivittää boottamattoman ubuntun boottamalla jostain muualta ja ajamalla sitten tämän skriptin.

- siis tämä korjaa koneet jotka ovat lakanneet boottaamasta joko päivityksen tai grubin asettelun seurauksena. Kyllä tämä usein muutenkin korjaa. Kaikki koneen ubuntut päivitetään kerralla ja saattaapa mintit sun muut lipsahtaa päivityskierteeseen nekin.

- ennen päivittämistä skripti poistaa kaikilta päivittämiltään osioilta roskikset, turhat imaget, extra-imaget ja headerit; siis toimia joita joskus ei haluta mutta puukota silloin koodia. Skripti raivaa pois muitakin päivittämistä estäviä tekijöitä. Lisäksi kovalevy-osiot tarkistetaan ja yritetään korjata lukuunottamatta sitä osiota jolla on bootattu eikä myöskään yhteistä kotia tarkisteta. Live-cd:tä tai live-muistitikkua ei päivitetä, mutta sensijaan päivitetään muistitikut joille on asennettu ubuntu.

- mikäli ubuntuja on monia ja monilla eri kovalevyillä on niiden kaikkien päivittäminen melkoinen työ normaalikeinoin. Tämä skripti päivittää ubuntut kaikilta löytämiltään levyiltä samallakertaa; skriptin toiminta on täysin automaattista eikä se koskaan kysy mitään: skriptin voi laittaa toimimaan ja itse poistua paikalta.

- mikäli ubuntuja on monta ja kenties jakautuneina eri levyille tulee tarve vakiona pysyvään valikkoon. Vakiona pysyvässä valikossa voi sallia järjestelmän hoitamisen tarkoitettujen skriptien käyttämisen vain jollekulle tai pitää jatkuvasti valikossa vain tarvittaessa koneeseen kytketyn pankki-Ubuntun kutsun. Vakiona pysyvä valikko on kehittäjien suosittelema - kehittäjistäkään useimmat eivät tosin taida tajuta mitään suositelleensa, sillä erittäin harvat tarvitsevat useita ubuntuja. GrubEdit täyttää vaatimukset vakioisen valikon teossa.

- olen ymmälläni - levylläni on yhtaikaa useampia ubuntuja ja yhden levyjärjestelmänä on  btrfs ja tosten ext4. "sudo updata-grub2" löytää jommankumman, mutta ei kumpiakin.

Koodia: [Valitse]
#!/bin/bash
# paivita 10.8.2014 petteriIII
function KirjoitaOhje { echo '- aluksi kysytään salasanaa ettei sitä kysyttäisi sitten toiminnan aikana keskenkaiken. Salasana on kovalevyllä toimittaessa oma'
echo '  salasanasi ja muistitikulla se on ubuntu jos sitä edes kysytään.
- toimiva internet-yhteys on välttämätön; live-versioiden verkkoyhteys asennetaan aivan samoin kuin normaalistikin - muistitikun asetukset säilyvät mutta cd:n ei.
- kovalevyosiot tarkistetaan ja yritetään korjata lukuunottamatta sitä osiota jolla on bootattu. Windows on kylläkin kantona kaskessa.
- roskikset tyhjennetään, vain viimeinen image jätetään ja päivityksen esteitä poistetaan.

luettuasi tämän paina mitähyvänsä näppäimistön nappia.'
read -sn 1 key
}

function tarkistaKovalevyjenKaikkiOsiot () {
apu=""
read -t 5 -n 1 -p 'jos haluat tarkistaa kovalevyn perusteellisesti paina jotain kirjainta; silloin tarkistus kestää jonkinverran kauemmin mutta tarkistaa paremmin.' apu
echo
for osio in $(sudo blkid | grep -v swap | awk '{print $1}' | sed 's/\://g'); do
  [[ ! $apu ]] && sudo fsck -MVCaf $osio ||   sudo fsck -MVCac $osio
  echo ""
done
}

function unmountmnt {
cd / # umount ei onnistu, jos joku umountattavan kansio on valittuna
sudo echo ""
for mountattu in $(sudo mount | grep /mnt | awk '{print $3}')
do
  [[ -e $mountattu ]] && sudo umount -l $mountattu
done 
echo '/mnt:n mountit on poistettu'
}

function paivitaKaikkiOsiot () { # itseensä chroottaus onnistuu ihan kivasti joten tällätavoin voi ihan hyvin päivittää itsensä
unmountmnt
for Chrootosio in $(sudo blkid | grep -v swap | grep -v vfat | awk '{print $1}' | sed 's/\://g'); do
  osiontyyppi=$(sudo blkid -o value -s TYPE $Chrootosio)
  #[[ $osiontyyppi = btrfs ]] && [[
  sudo mount -t $osiontyyppi $Chrootosio /mnt
  [[ -d /mnt/boot/grub ]] && [[ $(cat /mnt/boot/grub/grub.cfg | grep menuentry.*Ubuntu ) ]] &&  {
  echo; echo '********** päivitetään: '$Chrootosio

  sudo mount -t sysfs none /mnt/sys && sudo mount -t proc none /mnt/proc && sudo mount --bind /dev/ /mnt/dev &&  sudo mount --bind /dev/pts /mnt/dev/pts && sudo mount -o bind /etc/resolv.conf /mnt/etc/resolv.conf && sudo mount -o bind /dev/shm /mnt/dev/shm

  [[ -d /mnt/home/$(env | grep USER)/.local/share/Trash ]] && sudo rm -rf /mnt/home/$(env | grep USER)/.local/share/Trash # poistaa roskikset kaikilta osioilta joiden käyttäjä on sama kuin se jonka tililtä päivitä ajetaan eikä roskista tyhjennetä jos se on erilliskodissa

  for n in $(ls /mnt/boot | grep config | grep -v $(ls /mnt/boot | grep config | sort | tail -1) | sed 's/config-//g'); do
    sudo chroot /mnt apt-get --yes --force-yes purge 'linux-image-'$n
    sudo chroot /mnt apt-get --yes --force-yes purge 'linux-image-extra-'$n # taitaa olla turha lause
    sudo chroot /mnt apt-get --yes --force-yes purge 'linux-headers-'$n
  done # Mikäli et halua poistaa imageja kommentoi nämä 5 riviä

  sudo chroot /mnt rm -f /var/cache/apt/archives/lock /var/lib/aptitude/lock /var/lib/dpkg/lock /var/lib/apt/lists/lock
  sudo chroot /mnt dpkg --force-confnew --configure -a
  sudo chroot /mnt apt-get --yes --force-yes --fix-broken install
  sudo chroot /mnt apt-get --yes --force-yes autoclean
  sudo chroot /mnt apt-get --yes --force-yes autoremove
  sudo chroot /mnt apt-get update
  sudo chroot /mnt apt-get --yes --force-yes safe-upgrade
  sudo update-grub2
}
unmountmnt
done
}

# Pääohjelma
KirjoitaOhje
echo ''; sudo echo
hommaalkoi="$(date +%s)"
tarkistaKovalevyjenKaikkiOsiot # sitä osiota jolta on bootattu ei tarkisteta.
paivitaKaikkiOsiot
echo -e 'päivitetty: '$(date +"%d-%m-%y %k:%M")'\t ja päivittäminen kesti: '$(date -d@$(echo $(date +%s)-$hommaalkoi-7200 | bc) | awk '{print $3}')
« Viimeksi muokattu: 26.11.14 - klo:06.39 kirjoittanut petteriIII »