inodes
- Jos kone väittää levyn olevan täynnä vaikka siellä df:n mielestä on tilaa, syy voi olla että inodet ovat lopussa. Erityisesti ext* -tiedostojärjestelmissä niiden suhde levytilaan kiinnitetään tiedostojärjestelmää luotaessa eikä sitä voi kasvattaa. Tilanteen voi tarkistaa df -i:llä (tai df --inodes).
- Inode on olennaisesti osoitin tiedostoon, niiden (käytössä olevien) määrä on suunnilleen sama kuin tiedostojen määrä.
inodes
- Inode-määrään voi vaikuttaa luontivaiheessa mkfs:n optiolla -i, bytes-per-inode (~ tiedostojen keskimääräinen koko). Oletus ext4:ssä on 16384; jos tiedossa on, että pieniä tiedostoja tulee paljon, voi käyttää pienempää arvoa, ja päinvastoin. Jälkikäteen inode-suhdetta ei ext*-tiedostojärjestelmissä voi muuttaa.
- Asennettaessa inodeja saa lisää valinnalla ”Typical use: news”.
inodes
- Etenkin /usr:ään tulee usein paljon pieniä tiedostoja, jolloin inodet saattavat loppua. Koska niitä ei voi lisätä vaikka tiedostojärjestelmää kasvattaa, ratkaisuksi jää joko koko tiedostojärjestelmän uudelleenluonti ja tiedostojen siirtäminen (vaikeaa /usr:lle) tai tiedostojärjestelmän jakaminen osiin (tyypillisesti /usr/src tai /usr/share erilleen).
inodes
- Esimerkki: selvitetään missä /usr:n alihakemistoissa inodeja kuluu eli tiedostoja on paljon:
- for d in /usr/*; do; echo -n ”$d: ”; find $d | wc -l; done | sort -nr -k2
- # tai, jos kyllin uusi versio du:sta:
- du -s --inodes /usr/* | sort -nr
- Suurimmat inode-syöpöt voi sitten siirtää omiksi tiedostojärjestelmikseen (ja varata niihin enemmän inodeja, esim. mkfs -i 2048 ...).
inodes
- Eri tiedostojärjestelmät käsittelevät inodeja eri tavoin:
- xfs luo inodeja dynaamisesti eivätkä ne yleensä lopu. Jos niille varattu tila kuitenkin loppuu, sitä voi lisätä komennolla xfs_growfs -m p, missä p on inode-maksiprosenttiosuus koko levytilasta.
- jfs ja zfs luovat myös inodeja dynaamisesti tarpeen mukaan, eivätkä ne lopu kesken ellei koko levy täyty.
fsck
- ”File System Check”: tarkistaa tiedostojärjestelmän sisäisen rakenteen (rikkinäiset osoittimet jne)
- Tehdään yleensä automaattisesti bootissa /etc/fstab'in määräämässä järjestyksessä, mutta joskus tehtävä käsin
- Eri tiedostojärjestelmätyypeille omansa (fsck.ext4, fsck.xfs jne, kokeile ls -li /sbin/*fsck*), ”fsck” on wrapperi, joka valitsee mikä niistä ajetaan. Single user tilassa wrapper saattaa puuttua ja pitää käyttää suoraan e2fsck tms.
- Kerää orvot (nimettömät) tiedostot hakemistoon lost+found
fsck
- Yleisiä optioita:
- -A noudata /etc/fstab'in fsck-kenttää (viimeinen)
- -R yhdessä -A:n kanssa: jätä root (/) tarkistamatta
- -p yritä korjata viat automaattisesti (ext*)
- -f ”force”, testaa vaikka ei näytä tarpeelliselta (ext*)
- -y vastaa kaikkiin kysymyksiin ”yes”
- Joillekin tiedostojärjestelmille omia testaus- ja korjauskomentojaan, esim. xfs_check, xfs_repair
debugfs &c
- Jos tiedostojärjestelmä on niin sekaisin, ettei fsck (tai xfs_repair jne) saa sitä korjattua, sitä voi yrittää korjata ”käsin” tiedostojärjestelmäkohtaisella editorilla (debuggerilla), mm:
- debugfs ext* -järjestelmille
- xfs_db xfs:lle
- jfs_debugfs jfs:lle
- Hyvin työlästä ja virhealtista, edellyttää tiedostojärjestelmän sisäisen rakenteen tuntemista - ei yleensä kannata kuin äärimmäisessä hädässä
tune2fs
- Tiedostojärjestelmien ominaisuuksia voi joskus olla tarpeen tutkia tai muuttaa. Välineet riippuvat tiedostojärjestelmätyypistä, historiallinen komento on tunefs, nykyisille ext* -tiedostojärjestelmille tune2fs.
- Kaikki säädettävissä olevat asetukset ja paljon muutakin saa näkyviin komennolla tune2fs -l /laitepolku (hyvä tehdä ennen kuin muuttaa mitään).
- Tavu/inode -suhteen saa laskemalla tune2fs -l:n tulostuksesta
- (Blocks per group)/(Inodes per group)*(Block size)
- sudo tune2fs -l /dev/tt1-vg/lvusr | awk '/Blocks per group/{bg=$NF}/Inodes per group/{ig=$NF}/Block size/{bs=$NF}END{print bg/ig*bs}
tune2fs
- Joskus hyödyllisiä optioita:
- -m rootille-varattu-prosenttiosuus
- -L volume-label # aseta nimiö
- -U UUID # aseta UUID
- -O +large_file # salli yli 2GB tiedostot (kiellä ^large_file)
- -O +huge_file # salli yli 2TB tiedostot (kiellä ^huge_file)
- jfs:lle on vastaavasti tune_jfs (eri optiot), xfs:lle xfs_admin
Tiedostojärjestelmän muutos
- Tiedostojärjestelmätyyppiä (ext4, xfs &c) ei yleensä voi muuttaa muuten kuin luomalla se kokonaan uudestaan. Poikkeuksena kuitenkin ext2, ext3 ja ext4 ovat muutettavissa ristiin.
- Esim. ext2 → ext4 tai ext3→ ext4:
- umount ...
- tune2fs -O extents,uninit_bg,dir_index,has_journal /dev/...
- e2fsck -pf /dev/... # varmuuden vuoksi
/home'n pienentäminen
- /home-osion pienentäminen ei onnistu kun admin-tunnus (esim. mailkang0) käyttää sitä:
- sudo lvresize -r -L500M /dev/mailkang1-vg/lvhome
- Do you want to unmount "/home"? [Y|n] y
- umount: /home: target is busy
- Tarkistus:
- lsof /home
- ps -fu mailkang0
- Ongelma on kierrettävissä monella tavalla.
/home'n pienentäminen
- Vaihdetaan mailkang0:n kotihakemisto:
- cp -a /home/mailkang0 /; usermod -d /mailkang0 mailkang0
- # kirjaudutaan ulos ja takaisin
- sudo lvresize -r -L 500M /dev/mailkang1-vg/lvhome
- Asetetaan rootille salasana:
- sudo passwd root # vaikea!
- # kirjaudutaan konsolilta roottina ja lvresize …
/home'n pienentäminen
- Avataan ssh suoraan rootille:
- mkdir /root/.ssh
- cat /jossain/id_rsa.pub>>/root/.ssh/authorized_keys
- exit # ja takaisin ssh root@kone
- grep RootLogin /etc/ssh/sshd_config # muuta tarvittaessa
- lvresize …
- Tehdään koonmuutos ajastetusti:
- echo lvresize … | sudo at 'now + 1 minute'
- # kirjaudutaan ulos ja odotetaan minuutti
/jotain pienentäminen
- Tiedostojärjestelmän pienentäminen edellyttää siis sen poistamista käytöstä (umount), ja se taas ettei mikään prosessi käytä sitä
- /usr, /var pienennettävissä single-user tilassa
- /:n pienentäminen ei yleensä onnistu koneen sisältä lainkaan, ainoa keino on koneen pysäyttäminen ja levyn mounttaaminen toiseen koneeseen
/jotain pienentäminen
- Jos -r -optio lvresize:stä unohtuu, tiedostojärjestelmä todennäköisesti tuhoutuu saman tien. Vaihtoehto on tehdä resize2fs ensin, mutta silloin pitää osata laskea käsin oikea koko.
- Kaikkia tiedostojärjestelmätyyppejä ei voi pienentää yhtä helposti. Esim. xfs:ää tai jfs:ää ei voi pienentää lainkaan: ainoa mahdollisuus on luoda kokonaan uusi tiedostojärjestelmä ja kopioida data sinne.
/usr:n pienennys kopioimalla
- /usr:n pienentäminen kopioimalla (jos se on xfs tms) onnistuu helpoiten single-user -tilassa, mutta sen voi tehdä muutenkin bootin kautta:
- lcvreate -n lv2usr -L 1G kone-vg
- mkfs … /dev/kone-vg/lv2usr # optiot tilanteen mukaan
- mkdir /newusr; mount /dev/kone-vg/lv2usr /newusr
- mount -o remount,ro /usr # varmuuden vuoksi
- cp -a /usr/* /newusr
- sed 's-lvusr-lv2usr-g' /etc/fstab
- shutdown -r now
- lvremove /dev/kone-vg/lvusr; rmdir /newusr
Swapin pienentäminen
- Heittovaihtotiedoston eli swapin pienentäminen on helppoa, ellei muisti ole niin vähissä että se on käytössä:
- swapoff /dev/mailkang1-vg/lvswap1
- lvresize -L200M /dev/mailkang1-vg/lvswap1
- mkswap -U ... /dev/mailkang1-vg/lvswap1 # UUID /etc/fstab'ista
- swapon -a
- Swappia ei useinkaan tarvita lainkaan ja sen voi poistaa kokonaankin, jos koneessa on muuten tarpeeksi muistia
Asennus täytti levyn
- Jos jokin kriittinen levyosio (etenkin /, /boot, /var, /usr) on täyttynyt ohjelman asennuksen tai päivityksen yhteydessä ja se on saanut koneen niin sekaisin, ettei apt toimi:
- Pakettiluettelon tarkistus: dpkg -l
- Ensin apt-get autoremove, apt-get clean, yritys poistaa (tilapäisesti) paketteja apt-get purge... (Ubuntu Xenial alkaen apt purge &c)
Asennus täytti levyn
- Levyosioita voi aina myös yrittää laajentaa (lvextend &c jos käytössä LVM, tai fdisk &c ellei)
- Mikä levyosio täyttyi ei aina ole ilmeistä, tarkista lokit ja virheilmoitukset (ja tietysti df ja df -i)
- Levytilan vapautuksen/lisäämisen jälkeen
Asennus täytti levyn
- Jos apt -komennot eivät toimi, paketin voi yrittää poistaa suoraan: dpkg -r paketti (tämä rikkoo riippuvuuksia, korjattava myöhemmin)
- Jos dpkg:kään ei toimi, voi tiedostoja (varovasti!) poistaa suoraan rm -komennolla; tämä on kohtuuturvallista jos esimerkiksi vanhoja kerneleitä on kertynyt (ls /boot, dpkg -l |grep linux-image)
Asennus täytti levyn
- tilanteen selvittyä pitää siivota sotku:
- apt-get purge tai dpkg -r rikotuille paketeille
- apt-get -f install
- lopuksi kannattaa yleensä vielä tehdä
- apt-get update && apt-get upgrade # tai dist-upgrade
Admin-tunnuksesta
- Sudo-oikeudelliselle admin-tunnukselle (tunnus0) kannattaa tehdä erikoissäätöjä:
- Kotihakemisto pois /home'n alta
- UID pienemmäksi ettei Kerberos puutu siihen:
- usermod -u 999 tt0 # jotain < 1000
- # ks. /etc/pam.d/common-password
- Riippuvuuksia lisäpaketeista syytä välttää (shelliä ei kannata vaihtaa zsh:ksi tms)
VM:n valvonta
- virsh domstatus kone # vrt. virsh list |grep kone
- case $(virsh domstatus $KONE) in *running*) echo ”$KONE päällä”;; esac
- virsh event kone event [--all] [--loop] [--timeout seconds] [--list]
- odottaa kunnes haluttu event tapahtuu
- virsh event --list näyttää käytettävissä olevat eventit
- virsh event kone --all --loop näyttää kaikki eventit niiden tapahtuessa
VM:n valvonta
- Sammutetaan VM, odotetaan että se sammuu:
- virsh shutdown kone1
- virsh event kone1 lifecycle --timeout 60
- if virsh domstate kone1 | grep -q running ;then
- echo ”kone1 shutdown failed” >&2
- fi
VM:n valvonta
- Joskus hyödyllisiä myös
- virsh dominfo kone
- virsh domiflist kone # verkkokortit (interfaces)
- virsh domif-getlink kone interface
- virsh domifstat kone interface
- virsh domstats kone
- virsh help monitor
ping
- Lähettää ns. ”icmp echo” -paketteja ja seuraa vastauksia; helppo tapa tarkistaa onko kone verkossa, yleensä vain
- Optioista on hyötyä lähinnä skripteissä mm.
- -c count lähetä vain count pakettia
- -q älä tulosta jokaista pakettia
ping
- Tutkittaessa verkko-ongelmaa koneen sisältä kannattaa aloittaa ”ping localhost”illa, sitten pingailla yhä kauemmas verkossa
- Ei aina toimi palomuurien läpi
- Vrt. traceroute, nmap
file
- file [optiot] tiedosto[t]
- Yrittää tunnistaa tiedoston tyypin (sen nimestä välittämättä)
- Paljon optioita tulostuksen muotoiluun ym, usein hyödyllisiä:
- -k tulosta kaikki useista mahdollisuuksista
- -L/-h seuraa/älä seuraa symbolisia linkkejä
- (oletus riippuu ympäristömuuttujasta POSIXLY_CORRECT)
- -s avaa myös laitetiedostot yms
- -r älä muuta kontrollimerkkejä oktaalimuotoon
- Opetettavissa omilla säännöillä tiedostossa /etc/magic
Recovery mode
- Jos kone on niin solmussa, ettei se boottaa normaalisti tai ainakaan saa verkkoa/ssh:ta ylös, ensimmäinen keino on yrittää recovery mode -boottia; se on myös käyttökelpoinen jos pitää pienentää levypartitiota, jota normaalisti koko ajan käytetään
- Jos grubissa on (kuten oletuksena on) HIDDEN_TIMEOUT, boottivalikon saaminen edellyttää bootin keskeyttämistä sokkona oikealla hetkellä (joka voi olla hyvinkin lyhyt); palvelimissa HIDDEN_TIMEOUT kannattaa siksi yleensä poistaa käytöstä
Recovery mode
- Graafisen konsolin voi käynnistää ennen boottia:
- virt-viewer --wait kone &
- Tekstikonsolin (virsh console kone) saa päälle vasta VM:n käynnistyttyä
- Boottivalikossa voi myös muokata menuentryjä, kernelin parametreja tai bootata vanhalta kerneliltä
- Vrt. CD:ltä (tms) bootattaessa Rescue Mode
Recovery mode valikko
- Ubuntun (esimerkkinä 16.04) normaali recovery boot tarjoaa valikon yleisimmille pelastustoimille:
- resume: jatkaa normaalia boottia
- clean: tekee apt-get autoremove'n ym rutiinitoimia levytilan vapauttamiseksi
- dpkg: yrittää korjata rikkinäisiä paketteja
Recovery mode valikko
- fsck: tiedostojärjestelmien tarkistus- ja korjausyritys
- grub: asentaa grub'in uudestaan (grub-install)
- network: yrittää käynnistää verkon
- root: shell pelastuksen jatkamiseksi käsin
- system-summary: näyttää perustietoja koneesta (ei aina toimi)
Single-user mode
- Single-user tilaan voi joutua automaattisesti erilaisten virhetilanteiden seurauksena tai tarkoituksella virheiden korjaamista varten, erityisesti kun recovery-valikosta on valittu ”root”.
- Koneen kunnosta riippuen osa levyistä tai partitioista saattaa olla kateissa, verkkoyhteydet saattavat olla nurin, useimmat palvelut (mukaanlukien ssh) ovat yleensä nurin
Single-user mode
- Levyjen tilan tarkistus: df, vgs, ls /dev/?d?*, fdisk -l /dev/sda, mount... jne
- Jos kriittisiä levyjä (/usr tms) puuttuu, tarkista onko /etc/fstab rikki, jos kryptausta on käytetty, /etc/crypttab; LVM:ää käytettäessä kannattaa kokeilla vgscan, ehkä vgchange -a y ... (jos käytössä softaRAID, cat /proc/mdstat, /etc/mdadm/mdadm.conf)
- LVM-komennot muodossa ”lvm ...”, esim. lvm vgscan
- Tarkista lokit (ainakin /var/log/syslog), dmesg
Single-user mode
- Verkon tilan tarkistus: ip link, ip address, ifconfig, ping
- Jos verkko on nurin, sen voi yrittää käynnistää käsin komennolla ifup eth0 (laitenimi voi vaihdella), joskus ensin muokaten /etc/network/interfaces -tiedostoa
- Jos muut editorit eivät toimi, sed voi pelastaa päivän (tai cat >file)
Recovery: LVM, / broken
- Jos recovery boot onnistuu:
- root shellissä:
- ls /dev/mapper; jos lv ei näy: lvm vgscan,
- lvm vgchange -a y ...
- Mountataan / read-write, muuten sitä ei voi muokata:
- mount -o remount, rw /
Recovery: LVM, / broken
- Mountataan /usr ja ehkä /var, muuten työkaluja on vähän:
- mount /usr; mount /var
- Jos mount /usr ei onnistu, esim. /etc/fstab on rikki:
- Yritetään mountata käsin, esim.
- e2fsck /dev/kone-vg/lvusr
- mount /dev/kone-vg/lvusr /usr
- Korjataan mitä voidaan ilman /usr:ää; jos nano/vi eivät toimi, sed usein toimii
Recovery: LVM, / broken
- Jos jokin levyosio on täynnä:
- Yritetään tyhjentää, recovery boot -valikosta tai käsin
- Jos VG:ssä tilaa, suurennetaan LV:tä: lvextend ...
- Huom. optio -r ei tässä yleensä toimi vaan pitää tehdä erikseen resize2fs tai xfs_growfs tms
- VG:n laajentaminen (levyn lisäys tai pv:n kasvatus) myös mahdollista, kone pitää yleensä sammuttaa ensin
Recovery: LVM, / broken 2
- Tilanne: kone1 LVM root (/) niin rikki, ettei edes Recovery Boot onnistu. Liitetään levy toiseen virtuaalikoneeseen kone2 ja korjataan siellä.
- Varmista ettei kone2:ssa ole samannimistä VG:tä
- Alustakoneessa:
- virsh destroy kone1
- virsh attach-disk kone2 $HOME/kone1.img vdb
- # --persistent ei tarpeen, --driver/--subdriver voi olla
Recovery: LVM, / broken 2
- Kone2:ssa:
- sudo apt-get install lvm2 # ellei ole jo
- sudo vgscan
- ls /dev/mapper # näkyykö kone1--vg-root jne?
- sudo vgchange -a y kone1-vg # jos ei näkynyt yllä
- # jos ei vieläkään näy: unohtuiko --subdriver?
Recovery: LVM, / broken 2
- sudo mkdir /mnt/root
- sudo mount /dev/kone1-vg/lvroot /mnt/root
- sudo nano /mnt/root/etc/fstab # tms, riippuu mitä on rikki
- sudo umount /mnt/root
- sudo vgchange -a n kone1-vg
- ls /dev/mapper # kone1... ei pitäisi enää näkyä
Recovery: LVM, / broken 2
- Lopuksi alustakoneessa:
- virsh detach-disk kone2 vdb
- virsh start kone1
Ftp
- ”file transfer protocol” - vanha ja pikkuhiljaa katoava, mutta yhä laajalti käytössä
- Ei salausta tiedonsiirrolle eikä edes autentikoinnille, turvallinen vain julkisen tiedon anonyymiin jakeluun (anymous upload myös OK jos sellaista tarvitaan); nyttemmin toimii myös SSL:n kanssa (aika turha koska saman tien voi yleensä käyttää https:ää)
Ftp
- Käyttää kahta tcp-porttia (20 ja 21), erikseen ohjaus- ja tiedonsiirtoväylät, kaksi toimintatapaa (active & passive – jälkimmäisessä palvelin ottaa datayhteyden takaisinpäin), vaatii erikoissäätöjä palomuureissa
- Ftp-palvelinohjelmia paljon, mm. vsftpd (yleisin Linuxeissa nykyisin), Pure-FTPd, ProFTPD
- Asiakasohjelmina nykyisin lähinnä web-selaimet (mukaanlukien wget), myös dedikoituja ftp-clientteja (komentorivi-ftp, gftp ym)
vsftpd
- apt-get install vsftpd
- nano /etc/vsftpd.conf # tarkista ainakin rivit
- anonymous_enable, anon_upload_enable, anon_mkdir_write_enable, local_enable, chroot_local_user, ls_recurse_enable, write_enable, xferlog_enable, nopriv_user
- Jos anonymous -käyttö on sallittu, sitä varten pitää tehdä hakemisto (ftp-käyttäjälle)