Innhold - Institutt for informatikk og e-læring
Transcription
Innhold - Institutt for informatikk og e-læring
Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag Planlegge og installere en linux-server Helge Hafting 31.8.2015 Lærestoffet er utviklet for faget «IINI3008 Linux systemdrift» Resymé: I denne leksjonen vil du få vite hvordan du planlegger og installerer linux. Planlegging tar for seg disker, partisjoner, filsystemer og RAID for en tjenermaskin. Vi ser også på behovet for maskinvare. Leksjonen tar for seg generell konfigurasjon av programmer, og kompilering av linux spesielt. Herunder ser vi også på bruk av teksteditorer i driftssituasjonen. Vi tar en rask titt på distribusjoner, og pakkesystemet i debian. Det skal gå an å klikke på lenkene i leksjonen, så fremt pdf-leseren din støtter funksjonen. Det samme gjelder innholdslista og andre kryssreferanser. Kodeeksempler kan klippes ut og kopieres for å prøve dem ut. Innhold 1 Introduksjon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Planlegge og installere en linux-server 3 1.1 1.2 1.3 1.4 Harddisk – typer . . . . . . . . . . . . . . . . . 1.1.1 Størrelse . . . . . . . . . . . . . . . . . 1.1.2 Typer og hastighet . . . . . . . . . . . Harddisker – partisjoner . . . . . . . . . . . . . 1.2.1 Hva er partisjoner . . . . . . . . . . . . 1.2.2 Hvorfor partisjonere . . . . . . . . . . 1.2.3 Minimum partisjonering . . . . . . . . 1.2.4 fdisk og cfdisk – partisjonering av disker Flere harddisker . . . . . . . . . . . . . . . . . 1.3.1 Hvorfor . . . . . . . . . . . . . . . . . 1.3.2 Hvordan . . . . . . . . . . . . . . . . . 1.3.3 RAID . . . . . . . . . . . . . . . . . . 1.3.4 Mer informasjon . . . . . . . . . . . . Filsystemer . . . . . . . . . . . . . . . . . . . 1.4.1 Ext2 – enkelt og raskt . . . . . . . . . . 1.4.2 Ext3 – et journalførende filsystem . . . 1.4.3 Ext4 . . . . . . . . . . . . . . . . . . . 1.4.4 Reiserfs . . . . . . . . . . . . . . . . . 1.4.5 JFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 4 6 6 7 9 10 11 11 12 13 20 21 21 21 23 23 23 side 2 av 38 1.4.6 XFS . . . . . . . . . . . . . . . . . . 1.4.7 Btrfs . . . . . . . . . . . . . . . . . . 1.5 Minne . . . . . . . . . . . . . . . . . . . . . 1.6 Prosessor . . . . . . . . . . . . . . . . . . . 1.7 Nettverk . . . . . . . . . . . . . . . . . . . . 1.8 Andre maskinvarebehov . . . . . . . . . . . . 1.9 Teksteditorer . . . . . . . . . . . . . . . . . . 1.9.1 Grafisk eller tekstbasert editor? . . . . 1.9.2 Noen editorer . . . . . . . . . . . . . 1.9.3 Teksteditoren vi . . . . . . . . . . . 1.10 Kompilere en linuxkjerne . . . . . . . . . . . 1.10.1 Hvorfor . . . . . . . . . . . . . . . . 1.10.2 Programpakker du trenger . . . . . . 1.10.3 Laste ned kode . . . . . . . . . . . . 1.10.4 Eventuelle patcher . . . . . . . . . . 1.10.5 Konfigurere . . . . . . . . . . . . . . 1.10.6 Kompilere . . . . . . . . . . . . . . . 1.10.7 Installere kjernen . . . . . . . . . . . 1.11 Kort om distribusjoner . . . . . . . . . . . . 1.11.1 Distribusjoner og dette faget . . . . . 1.11.2 Installere og oppgradere debianpakker 1.11.3 Installere rpm-pakker . . . . . . . . . 1.11.4 Andre distribusjoner . . . . . . . . . 1.11.5 Installere .tar.gz-filer . . . . . . . . . 1.12 Oppsummering . . . . . . . . . . . . . . . . Innhold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 23 24 25 26 27 27 28 29 29 31 31 32 32 32 33 34 34 35 35 36 36 36 37 38 Introduksjon Velkommen til faget «Linux systemdrift». Faget fokuserer på drift og installasjon av linuxtjenere. Vi ser bl.a. en del på linux som filtjener, i så måte er faget i slekt med «Windows tjener for systemansvarlige» som ser et annet tjeneroperativsystem. Når det gjelder filtjener ser vi på NFS og filtjeneren SAMBA, katalogtjenesten openLDAP, aksesskontrollister, filrettigheter, skrivertjeneste og administrasjon av brukerkonti. Vi ser også en del på shellscript, og hvordan de kan brukes for å automatisere rutinearbeid. Lenger ut i kurset ser vi på bruk av webproxy, dhcp-protokollen, tynnklientløsninger og fjernadministrasjon. Vi tar også for oss nettjener (webserver), e-post og databaser For å få gjort praktiske øvinger er det nødvendig med en maskin som kjører linux. For å få fullt utbytte av undervisningen bør man også ha en maskin til som kan være klient for tjeneren. Jeg har tatt utgangspunkt i at klientmaskinene kjører windows, men det vil også © Helge Hafting og stiftelsen TISIP være mulig å bruke en mac eller linux-maskin som klient. Maskinene trenger ikke være særlig kraftige for å gjennomføre kurset. For å få en god tjener vil man imidlertid bruke noe bedre. I kurset brukes begrepene unix og linux om hverandre. Kort fortalt er linux en variant av operativsystemet unix. Det finnes andre unix-varianter også, som f.eks. BSD og proprietære unix-varianter fra maskinleverandører som IBM, HP og Sun. Enkelte synes at noen av leksjonene er ganske store i dette faget. Men husk at det er et fag uten lærebok. Derfor burde ikke de 38 sidene i denne leksjonen være avskrekkende. En kort leksjon som henviser til et kapittel i en lærebok, forutsetter gjerne at man leser mange sider i den aktuelle boka. Stoffet i leksjonene er laget for debian-distribusjonen av linux. Det går an å bruke andre distribusjoner enn debian. (F.eks. ubuntu, mint eller redhat.) Men husk at det er en del forskjeller på distribusjonene: • Noen pakker kan ha andre navn. En del distribusjoner bruker et anderledes pakkesystem. (rpm-baserte, og gentoo-baserte) • Filer kan være plassert i andre mapper Oppskriftene i leksjonene vil ikke passe like godt til andre distribusjoner. For de som uansett liker å finne ut av ting på egen hånd, behøver det ikke være noe stort problem. Men det blir en avveiing: Med debian vil leksjonene passe bedre, opp mot grunnene til at du foretrekker en annen distribusjon. 1 Planlegge og installere en linux-server 1.1 Harddisk – typer 1.1.1 Størrelse Størrelsen er enkel å planlegge, det skal simpelthen være «plass nok til alt.» Hvor mye det blir avhenger av hva tjeneren skal brukes til. Selve operativsystemet kan presses inn på veldig lite plass, men det er enklere å sette av 12–20 gigabyte. DSL1 bruker f.eks. bare 50MB. Debian linux kan presses inn på ca. 500MB, men det tar fort såpass lang tid at det i en arbeidssituasjon lønner seg bedre å bruke en stor nok disk med en gang. Små 1 Damn Small Linux side 4 av 38 Planlegge og installere en linux-server installasjoner har mer for seg i spesielle situasjoner hvor en ikke kan bruke harddisk, og derfor ønsker å boote fra CD, compactflash, sd-kort eller USB-penn. For en filtjener tar vi antall brukere og ganger med hvor mye plass hver bruker skal ha. Husk at en ny tjener gjerne skal brukes i noen år, så ta høyde for at det reelle behovet for plass kan øke med tiden. I et firma i vekst bør en også ta hensyn til at antall brukere kan øke. Men ikke overdriv dette med ekstrakapasitet – det er enkelt å installere flere harddisker etterhvert, og de blir som regel billigere med tiden også. Hvis maskinen skal håndtere e-post også bør en tenke over at det i blant kan komme uvanlig mye på en gang, f.eks. i forbindelse med virusangrep og spam2 . Hvis tjeneren skal kjøre spesielle programmer, f.eks. en database, er som regel programmets behov for plass dokumentert. 1.1.2 Typer og hastighet Ytelsen bestemmes i stor grad av ting som overføringshastighet og rotasjonshastighet. Når det gjelder overføringshastighet må en se på hvor fort data leses fra platene (off the platter speed), ikke hvor fort data kan overføres over kabelen. Markedsføring oppgir gjerne det siste, men en SATA-300 disk har ikke sjanse til å overføre 300 MB/s særlig lenge ettersom platene ikke er på langt nær så raske. Det kan hende de klarer 20–50 MB/s . . . Uansett hvor rask overføringshastigheten er, vil det i praksis være rotasjonshastigheten som begrenser det hele. En filtjener for mange brukere vil til stadighet ha bruk for tilgang til ulike deler av disken, og vil derfor flytte lesehodene en god del. Når de flyttes vil vi deretter i gjennomsnitt måtte vente 12 rotasjon før interessante data havner under lesehodet. Med dagens disker er det denne ventingen på 12 rotasjon som setter grenser for ytelsen. Med fokus på rotasjonshastighet skjønner vi at det er stor forskjell på 4 200 / 5 400 rpm laptop-disker, 7 200 rpm disker, 10 000 rpm disker og 15 000 rpm disker. SSD blir stadig mer populært. Diskene er raske fordi de ikke har roterende plater og deres tilhørende venting. En laptop med SSD starter opp og lar oss logge inn på ca. 10s, mot 1/2–1 minutt med roterende disk. Men SSD er også såpass dyrt at en stor tjenermaskin som regel må ha mye av lagerplassen på roterende disker. 2 Uønsket reklame og annen søppelpost. © Helge Hafting og stiftelsen TISIP Harddisk – typer side 5 av 38 SCSI3 Disse brukes en del i tjenermaskiner. For tiden er typisk rotasjonshastighet for SCSIdisker 7 200, 10 000 eller 15 000 rpm. SCSI koster gjerne mer enn SATA, men har ofte bedre garantiordninger. De billigste diskene er ikke i samme grad bygd for å vare lenge. Med dagens SCSI-kontrollere kan en vanligvis koble opptil 15 disker (eller andre enheter) til en kontroller med en kabel. Maskinen kan kommunisere med flere disker på en gang, bare begrenset av samlet overføringskapasitet i kabelen. Hvis man f.eks. har 4 disker som klarer 40MB/s 160 til/fra platene og en kontroller som klarer 160MB/s kan man dermed utnytte 40 = 4 disker fullt ut. Med en kontroller som klarer 320 MB/s kan vi ha 8 slike disker. Flere disker enn dette vil øke kapasiteten ytterligere, men ikke overføringshastigheten. Har en bruk for enda høyere ytelse, trenger en i så fall flere kontrollere. Da må man imidlertid være oppmerksom på at overføringskapasiteten på PCIbussen også er begrenset. En pci-buss går typisk på 33.3 eller 66.6Mhz, og kan overføre 32 eller 64 bit parallelt. Kapasiteten blir dermed 133–532MB/s. Hvis det ikke er nok, fins hovedkort med flere separate pci-busser. PCI-express (PCIe) har høyere kapasitet, og det fins diskkontrollere for denne bussen. Hvis scsi-kontroller og nettverkskort er på samme pci-buss halveres busskapasiteten for filtjenester, ettersom data først overføres fra kontroller til minnet og deretter fra minnet til nettverkskortet. Bussen brukes altså to ganger. SATA Serial ATA er en billigvariant av scsi. Protokollen som brukes er scsi-protokollen, derfor behandler linux SATA-disker som scsi-utstyr. Men prisene for SATA-utstyr lavere. Med SATA har man en ledning per disk. Overføringskapasiteten i en slik kabel er 150–600 MB/s, men som diskplatene ikke kommer i nærheten av. SSD SSD5 er lagringsmedium uten bevegelige deler. I stedet for en roterende magnetisk plate, har SSD flash-minne. For tjenermaskiner fins større SSD-enheter, basert på flash eller i noen tilfeller RAM. Disse diskene er typisk dyrere enn roterende harddisker, og har noe lavere kapasitet. Men 3 4 5 Small Computer System Interface Vær oppmerksom på forskjellen mellom MB/s (megabyte per sekund) og Mb/s (megabit per sekund). Ytelse for disker og parallelle busser (som PCI og AGP) oppgis gjerne i MB/s, mens nettverk og annen seriell kommunikasjon gjerne opererer med Mb/s. En byte er som kjent 8 bits. Eng: Solid state disk © Helge Hafting og stiftelsen TISIP side 6 av 38 Planlegge og installere en linux-server de er også betydelig raskere, på grunn av et problem med vanlige harddisker: Når en pc leser fra flere steder på en roterende harddisk, må lesehodene flyttes fra et sted til et annet. Det tar tid. Deretter må man simpelthen vente på at rett del av plata roterer inn under lesehodet. En roterende disk som fint klarer 90MB/s så lenge den får lese data i den rekkefølgen det er lagret, vil fort falle ned på en hundredel hvis den må flytte lesehodene mye rundt omkring. SSD har ikke dette problemet. Data kan leses fra hvor som helst uten forsinkelser, fordi det ikke er noen bevegelige deler å vente på. I skrivende stund er SSD dyrere enn roterende disker, så SSD brukes først og fremst der man har mest nytte av det. Noen anvendelser er sekvensielle i natur, f.eks. å streame video. Her vil ikke SSD oppleves raskere. Hvis du derimot streamer mange ulike videoer samtidig, i en youtube-lignende tjeneste, vil SSD kunne hjelpe. Kompilering av store prosjekt med titusener av filer, eller travel database, er eksempel på en annen anvendelse hvor mange små datasett hentes fra ulike steder på disken i rask rekkefølge. I slike tilfeller kan hastighetsforskjellen med SSD være dramatisk. I ekstreme tilfeller går store jobber fra å måles i timer til minutter. Databaser som er for store til å holdes i minnet, drar også nytte av SSD. Å starte opp en maskin som har operativsystem og programvare installert på SSD, er også en god del raskere enn om det er installert på vanlig harddisk. En rimelig SSD kobles til maskinen med SATA-kabel. Men SATA overfører på 300– 600MB/s, som ofte blir en begrensning. I motsetning til roterende disker, kan flashminne overføre data raskere enn dette. Dyrere SSD-løsninger har flashminne montert på et PCIe-kort. Dermed er ikke overføringshastigheten lenger begrenset av SATA, man kan utnytte PCI-express fullt ut. 1.2 Harddisker – partisjoner 1.2.1 Hva er partisjoner Filene lagres i et filsystem på harddisken. Den enkleste måten, som ofte brukes på hjemmemaskiner, er å ha en stor partisjon med ett filsystem. Det er enklest, og all ledig plass på disken er å finne på ett sted. En partisjon er en del av harddisken, en del som spenner over et antall sylindre. Hver partisjon har ett filsystem, så har man flere partisjoner kan man ha flere uavhengige filsystemer. © Helge Hafting og stiftelsen TISIP Harddisker – partisjoner side 7 av 38 1.2.2 Hvorfor partisjonere Kontroll med diskplass Hvis /home og /var er på hvert sin partisjon kan filsystemet /home gå fullt mens det fremdeles er plass igjen på /var. Umiddelbart kan det se ut som en ulempe – det fins ledig plass som vi ikke får utnyttet. Dette er imidlertid en fordel. Vi kan sette av plass for filene under /var, plass som garantert vil være der uansett hvor mye brukerne sløser med plassen sin på /home. Hvis /home blir fullt vil det altså likevel være igjen plass på /var, og programmer som avhenger av denne plassen vil fortsette å virke. Dette er viktig, da /var har mange viktige funksjoner i linux. Når det gjelder å begrense brukere kan vi oppnå samme effekt med diskkvoter, men siden noen brukere bruker lite plass er det praktisk å kunne la andre bruke over gjennomsnittet. Det finnes også mange andre tilfeller hvor kvoter ikke er svaret, f.eks. når filer som eies av systemet konkurrerer med hverandre. Noen eksempler på mapper vi kan ønske å skille ut av plasshensyn: /home Hjemmemapper. I store organisasjoner kan det også være aktuelt med flere /home-områder. Dette for å beskytte ulike grupper av brukere mot hverandre. Noen kan ha en verre tendens til overforbruk. /var Å skille ut /var er et minimum, /var deles ofte videre opp avhengig av hva vi har på tjeneren. Hvis /var fylles opp fører det typisk til driftsproblemer og tjenerprosesser som kræsjer. I /var/log fins loggfiler for det meste som skjer, og disse må kunne vokse ved behov. /var/spool/mail Her havner all innkommende post. Blir det fullt tar ikke tjeneren imot post lenger. Dette området kan fylles opp i forbindelse med spam eller mailbombing, det er en fordel om det ikke går utover andre tjeneroppgaver. Spesielt bør ikke en slik epoststorm sette resten av /var ut av spill. /var/spool/news Kjører man newstjener er det her artiklene lagres. /var/spool/cups Her mellomlagres utskrifter6 . Dette området kan fylles opp hvis en bruker skriver ut noe veldig stort. Fotografier og lignende høyoppløselige bilder tar mye plass. 6 /var/www Her finner vi dokumentrot for webtjener. /tmp Her har alle brukere adgang til å lagre midlertidige filer. Dermed er det lett å fylle opp, og bør skilles ut. Har en mange brukere, bør det være en kvoteordning på /tmp for å unngå at en ubetenksom bruker ødelegger for andre. Evt. /var/spool/lpd, avhengig av hvilken spooler man bruker. © Helge Hafting og stiftelsen TISIP side 8 av 38 Planlegge og installere en linux-server Her ligger typisk linuxkjernen, og evt. noen få andre filer som trengs for å starte maskinen. Hvis maskien bruker UEFI7 , vil /boot være uefipartisjonen. /boot Programmer som df viser total plass, brukt plass og ledig plass per filsystem. Slik informasjon er mer brysomt å finne for deler av et filsystem. Programmet du gir forbruket i et enkelt mappetre, som både kan være mindre eller større enn ett filsystem. Ulik tilgang Ulike filsystemer kan ha ulik tilgang. Vi kan f.eks. ha noen filsystemer som er skrivbare og noen som bare er lesbare. Filsystemer som ikke er skrivbare øker sikkerheten. Tidligere har f.eks. en del sørget for at /usr ikke er skrivbart, det hindrer til en viss grad crackere i å overskrive programmer. Kommandoen mount /usr -o remount,rw vil gjøre filsystemet skrivbart igjen, noe enhver hacker vet. Men mange angrep utføres av scriptkiddies8 som bare bruker et rootkit9 uten å forstå hva som skjer. De lar seg ofte stoppe av slike små hindringer. I det siste har distribusjonene lagt om oppstartrutinene slik at /usr trengs tidlig i oppstarten. Det anbefales derfor ikke lenger å ha /usr på en egen partisjon. Andre sikkerhetsrelaterte mount-opsjoner: nodev Hindrer devicenoder på filsystemet. Bør brukes på alle filsystemer utenom det som inneholder /dev, det hindrer brukere/hackere i å opprette devicenoder på uventede steder. Devicenoder kan misbrukes til å ta kontroll over maskinen. noexec Hindrer eksekverbare filer. Bør brukes overalt hvor slike ikke trengs. Det begrenser bl.a. muligheten til å «gjemme vekk» rootkit-filer. nosuid Hindrer eksekverbare filer i å skifte prosessens identitet10 . Bør brukes på alle filsystemer hvor eksekverbare filer tillates, utenom /bin, /usr/bin, /usr/local/bin og tilsvarende for sbin. Disse mappene har normalt bruk for suid-programmer, mens f.eks. /home og /usr/src kan ha bruk for exec men neppe suid. 7 Unified Extensible Firmware Interface Umodne personer med liten innsikt, som morer seg med datainnbrudd o.l. 9 Automatisert verktøy for å bryte seg inn å skaffe tilgang til brukeren root. Utnytter kjente svakheter i operativsystem og tjenerprogramvare og representerer derfor liten fare for de som til enhver tid holder tjeneren sin oppdatert. 10 Ett suid-program skifter identitet fra brukeren som kjører det, til brukeren som eier programfilen. Programmet passwd, som bytter passord for oss, er et slikt program. Det bytter identitet til root for å kunne legge inn det nye passordet i den beskyttede passordfilen. 8 © Helge Hafting og stiftelsen TISIP Harddisker – partisjoner sync side 9 av 38 All tilgang til filer skjer synkront. Dette er mye tregere enn async, men sikrer oss mot datatap i forbindelse med plutselig strømbrudd eller andre former for kræsj. Dette brukes sjelden da programmer som avhenger av synkron lagring kan bruke fflush() og fsync() på normale asynkrone filsystemer. Noen velger likevel å bruke synkron lagring for epost, særlig hvis de bruker en eposttjener som ikke bruker fsync(). Hvis man tillater brukere å bruke egne minnepinner eller cd’er bør man absolutt bruke nodev og nosuid, noe annet er naivt. Noen velger å legge /tmp på en ramdisk (tmpfs) for å få raskest mulig tilgang til midlertidige filer. En må imidlertid være klar over at de midlertidige filene vil bruke av minnet, og programmer som lagrer midlertidige filer gjør det til tider nettopp fordi de opererer med datastrukturer som er store. Å bruke tmpfs kan likevel være en god idé, for det som var for stort for gårsdagens minne er ikke nødvendigvis for stort i dag. Ulike filsystemer I underkapittel 1.4 på side 21 ser vi på filsystemer med forskjellige egenskaper. Flere partisjoner gjør det mulig å bruke ulike filsystemer på ulike partisjoner. 1.2.3 Minimum partisjonering Det går an å skille ut /home, /var og /tmp som egne partisjoner. (Evt. kan man ha /tmp på en ramdisk) Dermed står vi også igjen med en liten partisjon for /, rotfilsystemet, og en partisjon for swap. Det har etterhvert blitt vanlig å ha /usr som en del av rotfilsystemet, fordi programvaren som ligger der kan være nyttig å ha i oppstartfasen før andre filsystemer blir montert. På en filtjener (eller hjemmemaskin) er /home det filsystemet som er viktigst å skille ut. Det er der brukerne lagrer filer. Vi vil ikke at maskinen skal få problemer bare fordi brukerne fyller opp disken. Og hvis vi må reinstallere, er det veldig praktisk at /home er et eget filsystem. Da kan vi formatere rotfilsystemet på nytt, mens brukerne likevel får beholde sine filer uendret. Ofte legger man /tmp i tmpfs, et filsystem på ramdisk. Det er raskt, men kan sluke minne, og det er naturligvis ikke mer plass her enn det er minne i maskinen. Har man bruk for store filer i /tmp, er det bedre å bruke plass på en SSD-disk. Noen liker å ha /var på et eget filsystem. Her ligger mye som får problemer hvis disken skulle bli helt full. F.eks. pakkedatabasen i maskinen, som holder orden på installert programvare. Enkelte tjenester, som databaser, epost og nettjener havner i undermapper på /var. Hvis en slik tjeneste er plasskrevende, er det vanlig å skille den ut i et eget © Helge Hafting og stiftelsen TISIP side 10 av 38 Planlegge og installere en linux-server filsystem. Dermed er den beskyttet mot at /var fylles opp på annet vis, og /var er beskyttet mot at tjenesten plutselig tar opp plass. For snurredisker er partisjonenes rekkefølge på disken heller ikke tilfeldig. Den ytterste delen av disken, som vanligvis har de lavest nummererte sylindrene, kan være opptil dobbelt så rask som den innerste delen (høye sylindernumre.) De mest brukte partisjonene bør dermed ligge på den raskeste delen av disken. Når lesehodene flyttes er det dessuten raskere å flytte kort enn langt. Filsystemer som brukes lite bør dermed legges ut mot den trege enden av disken. Rotfilsystemet brukes lite, det er ingen grunn til å legge det først på disken slik mange gjør når de installerer. I en filtjener er gjerne /home viktig, i andre typer tjenere (epost, web, . . . ) er sannsynligvis /var viktigere. En del velger å legge swap-partisjon og /tmp midt på disken. Det er ikke den raskeste plassen når det gjelder båndbredde, men det er dit veien er kortest å flytte lesehodene på disken. Dette passer bra for swap og /tmp som ofte er tidskritisk og preget av hyppige diskaksesser med små datamengder. 1.2.4 fdisk og cfdisk – partisjonering av disker Disse programmene brukes for å partisjonere disker. Vær forsiktig med disse. Gjør du feil, sletter du fort et helt filsystem eller alt på disken. Disse programmene brukes ikke bare ved installering, men også når man monterer ekstra disker i maskinen. Programmet fdisk er noe tungvint å bruke, en starter programmet, f.eks. med fdisk /dev/hda, og gir en og en kommando for å slette eller opprette partisjoner. Nybegynnere bør bruke kommandoen p ofte, den skriver ut hvordan partisjonstabellen ser ut for øyeblikket. Programmet cfdisk er noe greiere å bruke. Det viser hele tiden hvordan disken er partisjonert, og lar deg velge partisjoner og ledige områder med en tekstbasert meny. Programmet har de samme mulighetene som fdisk, men er mer brukervennlig uten å bli tungt. Begge programmer arbeider med én disk om gangen, og man angir denne disken som parameter når man starter opp programmet. De har innebygd en viss sikkerhet mot feil ved at en må gi en skrivekommando for å lagre forandringer, og dessuten bekrefte kommandoen. I tillegg til å dele opp disken, kan man bestemme hvilken partisjon som skal bootes (hvis noen), og partisjonstyper. Alle linux filsystemer legges normalt på en partisjon av typen Linux (83). Typen Linux swap (82) brukes for swap-partisjoner, og Linux raid autodetect (fd) brukes for software-raid. Det finnes mange andre typer også, som stort sett brukes av andre operativsystemer. © Helge Hafting og stiftelsen TISIP Flere harddisker side 11 av 38 1.3 Flere harddisker 1.3.1 Hvorfor Sikkerhet Den mest opplagte grunnen til å ha flere harddisker er mer plass. Men det er mange flere grunner enn det. Flere harddisker kan også øke datasikkerhet og oppetid, hvis vi lagrer samme data på flere disker tåler vi at en går i stykker. Hvis vi kjører en tjener over flere år må vi regne med at harddisker ryker i blant, en ansvarlig administrator må være forberedt på det. Spørsmålet er når, ikke om det skjer! I en tjener med bare en harddisk kan det bli nødvendig å skaffe en ny og legge inn alt fra siste sikkerhetskopi. Da mister vi for det første alt som har skjedd siden kopien ble tatt, og tjeneren er nede en stund. For en nettbutikk kan nedetid fort bli dyrt. Skjer det etter arbeidstid kan det fort gå en stund før noen oppdager feilen også. Har man et godt raid-system og hotplug-disker kan man klare seg helt uten nedetid. Som administrator får man en epost om at en disk har gått dukken, og at systemet inntil videre klarer seg med de andre. Så er det bare å skaffe en ny og installere den når det passer . . . Vi kan også oppnå bedre sikkerhet mot innbrudd. I underkapittel 1.2.2 på side 8 så vi på fordelen med et skrivebeskyttet filsystem. Det kan dessverre omgåes med kommandoen mount. Men en harddisk kan skrivebeskyttes ved å sette en jumper – dermed blir det umulig å skrive til den, og dette kan ikke omgåes med programmerte triks. Administrator er nødt til å flytte jumperen hvis innholdet på disken skal oppdateres på noe vis, en som bryter seg inn via nettet har ingen muligheter. Slik kan man beskytte filsystemer som f.eks. /usr, men ulempen er at det blir mer bry med nødvendige endringer som f.eks. sikkerhetsoppdateringer. I ekstreme tilfeller har sikkerhetsbevisste administratorer lagt /usr, /bin og /sbin ut på CD, for å være 100% sikker på at eksekverbare filer ikke kan overskrives ved innbrudd. Men vær oppmerksom på at CD er et tregt medium sammenlignet med harddisk. Ytelse Det er søketiden som begrenser ytelsen for roterende harddisker. Når en harddisk er travelt opptatt bruker den mesteparten av tiden på å flytte lese/skrivehodene rundt omkring. Med mange aktive prosesser kan det gå mange slike søk mellom hver gang en bestemt prosess får lest eller skrevet. Hvis vi har flere harddisker kan vi imidlertid oppnå at en er relativt ledig og gir god ytelse selv om en annen er overbelastet. La oss se på en maskin som både er fil- post- og nettjener på en gang. Med alt på en harddisk er det nok at en av tjenestene overbelaster disken, så © Helge Hafting og stiftelsen TISIP side 12 av 38 Planlegge og installere en linux-server går alt tregt fordi alle filoperasjoner ender opp med å vente på hverandre. Hvis vi derimot bruker en harddisk per tjeneste vil de ikke forstyrre hverandre. En overbelastning på nettjeneren vil fortsatt gi tregere tilgang til web, noe vi bare må akseptere. Men post og filtilgang vil fortsatt gå med full fart ettersom disse diskene ikke er overbelastet i øyeblikket. Tilsvarende vil ikke en epost-storm virke inn på web- eller filservice. Enkelte som kommer fra windowsverdenen vil si at det er bedre å kjøre en maskin per tjeneste — å samle fire–fem tjenester i den samme maskinen kan virke useriøst på slike. Denne tankegangen har sin rot i stabilitetsproblemer, windows har en forhistorie med tilfeller hvor en tjeneste kræsjer og trekker med seg hele maskinen og alle andre tjenester som kjører på den. Men i unixverdenen har vi stabilitet nok til at mange tjenester i én maskin ikke er noe problem.11 Nedetid er stort sett planlagt, f.eks. når man legger inn sikkerhetsoppdateringer eller oppgraderer prosessoren. Så lenge vi unngår overbelastning lønner det seg med mange tjenester i samme maskin. Færre maskiner å vedlikeholde sparer oss for mye administrasjonsarbeid og utgifter til utstyr, særlig i forbindelse med oppgraderinger. 1.3.2 Hvordan For en tjener som skal kjøre flere uavhengige tjenester må vi se på hvilke som til tider er disk-intensive og fordele dem på hver sine disker. Dette gjelder ikke bare ulike tjenester som i det forrige eksempelet. Outsourcing/sky-tjenester er populært for tiden, og som konsulent kan man fort ende opp med å kjøre f.eks. nettjenester for flere kunder på en maskin. En kunde bør ikke vente unødig på grunn av mye trafikk til en annen kundes sider. Dette kan vi unngå ved å ha de travleste nettsidene på egne disker. Ideelt en disk per kunde, men det kan kanskje bli litt mye. Det kan også være fornuftig å ha filsystemet /usr på en disk som ikke er travelt opptatt. Nesten alle programfiler ligger på /usr, og det er en fordel at de starter raskt. Vær også oppmerksom på at linuxkjernen ikke henter hele programmer inn i minnet når de starter. Et program som er godt igang kan dermed få bruk for å hente inn mer av programfilen når en annen del av programmet plutselig tas i bruk. Igjen er det en fordel om dette kan skje uten å måtte vente på filtjenere, nettjenere o.l. 11 Forutsatt, naturligvis, at maskinvaren er stabil. De fleste linuxkræsj skyldes hardware-problemer som dårlig utstyr, overklokking, strømproblemer og lignende. En administrator som eksperimenterer med betaversjoner av kjernen kan også lage problemer. Ellers regnes kræsj som unormalt, en linuxtjener kan normalt holde ut kontinuerlig drift i årevis. På nettet finnes eksempler ved å søke etter ordet uptime. © Helge Hafting og stiftelsen TISIP Flere harddisker side 13 av 38 1.3.3 RAID RAID12 RAID er en teknikk for å få flere disker til å fremstå som én, på det viset kan vi øke lagringkapasitet, ytelse, feiltoleranse eller alle på en gang. Det fins spesielle diskkontrollere som implementerer RAID i hardware, linux vil da se disk-samlingen som én stor disk. Linux har også software-raid som gjør det mulig å bruke RAID med ordinære billigere diskkontrollere. Vær klar over at selv om RAID kan sikre oppetid og øke sikkerheten med tanke på diskfeil, så beskytter ikke RAID mot operativsystemfeil, virus, innbrudd eller operatørfeil. Slike problemer krever en backup-løsning i stedet. Her ser vi på RAID-0, RAID-1, RAID-10, RAID-5 og RAID-6. Det finnes også andre kategorier, men de har liten praktisk interesse. RAID-0 Også kalt striping. Med n disker n - dobles både lagringskapasitet og ytelse, men sikkerheten er dårlig. Hvis én disk ryker er alt tapt. Hvorvidt ytelsen faktisk øker har mye å gjøre med hva slags stripestørrelse en bruker. Ytelsen kan også bli dårligere med et dårlig oppsett – dette bør testes under installasjon. På grunn av dårlig sikkerhet bør det ikke brukes til annet enn midlertidige filer som vi tåler at går tapt. Datafiler for en webcache eller newstjener er typiske eksempler. En kan også ha /tmp på raid-0. Nå har en vanligvis ikke behov for så mye plass på /tmp alene et en setter opp raid-0 bare for det, men hvis en har raid-0 for andre formål kan også /tmp plasseres der og få fordel av den høye overføringskapasiteten. Her ser vi hvordan raid-0 fungerer. Arrayet bygges opp stripe for stripe, ved å plukke en og en blokk fra hver disk. Med to disker A og B, kommer blokken R0 fra A, R1 fra B, R2 fra A igjen, og så videre. Raid-0 kan lages med flere disker også. Til venstre i figuren er diskene, inndelt i x blokker. Til høyre er arrayet slik operativsystemet ser det. Hvis en fil lagres på blokkene R1 · · · R3 , ligger den altså egentlig på blokkene B0 , A1 og B1 . 12 Redundant Array of Inexpensive Disks © Helge Hafting og stiftelsen TISIP side 14 av 38 Planlegge og installere en linux-server Virkelige disker z A0 = R0 A1 = R2 A2 = R4 A3 = R6 .. . Ax−1 = R2x−2 }| + Raid-0 B0 = R1 B1 = R3 B2 = R5 B3 = R7 .. . Bx−1 = R2x−1 { z = }| { Stripe 0 Stripe 1 Stripe 2 Stripe 3 .. . Stripe x − 1 Hastighetsgevinsten får vi fordi maskinen kan lese/skrive de ulike diskene samtidig. Men vær oppmerksom på hvordan én ødelagt disk vil ødelegge alt; Hvis f.eks. disk A ryker, mister vi stripene R0 , R2 , R4 . . . R2x−2 , og står igjen med stripene R1 , R3 , R5 , . . . R2x−1 Vi mister altså annenhver stripe, og filsystemet på R-disken tåler ikke slikt. Eksempelet viste raid-0 med to disker, men man kan godt slå sammen mange flere for enda mer kapasitet og ytelse. R-disken bygges da opp med en stripe fra hver av diskene, deretter en til fra hver disk, og så videre. Å miste én av dem vil fortsatt være katastrofalt. RAID-1 Også kalt speiling. Lagringskapasiteten øker ikke, men vi tåler at n − 1 av n disker går i stykker samtidig. Linux optimaliserer lesing fra RAID-1 ved å alltid lese fra den disken som har lesehodene nærmest det som skal leses, det kan gi en brukbar ytelsesforbedring. Skriving skjer parallelt til alle diskene, og kan gå langsommere hvis det ikke er overføringskapasitet nok. Ettersom kapasiteten ikke øker med flere disker er det sjelden man bruker mer enn 2 eller 3 disker på dette viset. I tillegg til diskene som er med i raid-1 kan vi ha en eller flere reservedisker13 . Dette er disker som bare er montert i maskinen uten å brukes. Hvis en raid-1 disk ryker tas en reservedisk disk i bruk automatisk, og oppdateres med data fra en disk som er i orden. Dermed blir tiden uten ekstra sikkerhet veldig kort. Systemadministrator kan deretter fjerne den ødelagte disken ved en passende anledning, og montere en ny disk som blir ny reserve. Her ser vi hvordan raid-1 fungerer. De to diskene A og B inneholder det samme. Hver raid-blokk er lagret to ganger. Vi kan ha mer enn to disker i raid-1, men det er ikke vanlig. Sikkerheten (og prisen) øker med flere disker, men ikke kapasiteten. 13 eng: hot spare © Helge Hafting og stiftelsen TISIP Flere harddisker side 15 av 38 Virkelige disker z }| A0 = R0 A1 = R1 A2 = R2 A3 = R3 .. . + Ax−1 = Rx−1 Raid-1 { B0 = R0 B1 = R1 B2 = R2 B3 = R3 .. . = z }| { R0 R1 R2 R3 .. . Bx−1 = Rx−1 Rx−1 RAID-4 Øker lagringskapasitet og sikkerhet. Med n disker økes kapasiteten n − 1 ganger. Den n − 1 første diskene brukes til striping, akkurat som RAID-0. Den siste disken er paritetsdisk. Hver byte på paritetsdisken inneholder en xor-sum av tilsvarende bytes på de n − 1 diskene i stripesettet. Hvis vi skulle miste én disk, kan innholdet på den beregnes som en xor-sum av de andre diskene og paritetsdisken. Hvis vi derimot mister paritetsdisken, kan den beregnes på nytt ut fra de andre. Til tross for mange gode egenskaper, som god kapasitet og sikkerhet, brukes ikke RAID4. Problemet er paritetsdisken. Hver gang vi oppdaterer én av de andre diskene, må paritetsdisken også oppdateres. Men siden det er n − 1 «normale» disker blir det n − 1 ganger så mange skriveoperasjoner på paritetsdisken. Da vi ikke kan få kjøpt disker som er n − 1 ganger så raske som de andre diskene våre, blir paritetsdisken en plagsom flaskehals som begrenser ytelsen for RAID-4 settet. Dette problemet løses fullstendig med RAID-5. Grunnen til at jeg tar med informasjon om raid-4, er at det fungerer som en introduksjon for raid-5. Her ser vi hvordan et raid-4 sett med fire disker blir seende ut. Diskene A, B og C fungerer på akkurat samme måte som et raid-0 sett med tre disker. I tillegg ligger paritetsdata på disk D. Virkelige disker z A0 = R0 A1 = R3 A2 = R6 A3 = R9 .. . Ax = R3x−3 + B0 = R1 B1 = R4 B2 = R7 B3 = R10 .. . Bx = R3x−2 }| + C0 = R2 C1 = R5 C2 = R8 C3 = R11 .. . Cx = R3x−1 Raid-5 + D0 = p0 D1 = p1 D2 = p2 D3 = p3 .. . Dx = px−1 { z = }| { Stripe 0 Stripe 1 Stripe 2 Stripe 3 .. . Stripe x − 1 © Helge Hafting og stiftelsen TISIP side 16 av 38 Planlegge og installere en linux-server RAID-5 RAID-5 fungerer akkurat som RAID-4, men med én viktig forskjell: Paritetsinformasjonen ligger ikke på én disk, men spres utover alle de n diskene. Enhver oppdatering skriver til to disker, data lagres på én og paritetsinformasjon på en annen. Men siden paritetsinformasjon havner på ulike disker avhengig av hvilken diskblokk det gjelder, så er det ingen av diskene som overbelastes. Både lagringskapasitet og sikkerhet øker. Med n disker økes kapasiteten n − 1 ganger. Hvis én disk ryker mister vi ingen data. Den ødelagte disken kan byttes ut og innholdet på den gjenskapes. Ytelsen ved lesing kan i beste fall øke n − 1 ganger, skriving kan det være verre med. Raid-5 kan benytte reservedisker, akkurat som raid-1. Ytelsesproblemer ved skriving kommer av følgende: Ved skriving må vi i tillegg til data-sektoren også oppdatere paritetssektoren. Hvis denne informasjonen ikke er i cache, må den leses inn først. Dette tar tid. Anvendelser som stort sett leser fra diskene virker bra med raid-5, fordi lesing kan gjøres parallelt på samme måte som for raid-0. Anvendelser som stort sett skriver store datamengder går også fort; hvis en skriver et datasett så stort at det trenger en blokk fra hver disk er det nemlig ikke nødvendig å lese inn paritetsinformasjon. Fordi alle sektorene i en stripe oppdateres samtidig vil linux kunne generere paritetsinformasjon ut fra data som skrives. Anvendelser som stadig skriver mindre datamengder her og der, vil forsinkes ganske mye av paritetsoppdateringene. Raid-5 er dermed ikke egnet til alle anvendelser, travle filtjenere og oracle-databaser sies å være spesielt uheldige kombinert med raid-5. Når det er nødvendig med svært høy io-kapasitet kan vi få et annet problem; prosessoren overbelastes med paritetsberegninger. Dette er imidlertid bare et problem for softwareraid, en raid-kontroller som gjør slikt i hardware avlaster cpu i slike tilfeller. Her ser vi hvordan raid-5 fungerer. Figuren er nesten den samme som for raid-4. Linja med 0-blokkene er lik, legg merke til hvordan paritetsblokken flyttes fra disk til disk etterhvert som vi kommer nedover. I en normal installasjon er det mange flere blokker, og når paritetsblokken har kommet frem til første disk begynner den på den siste igjen slik at mønsteret gjentar seg. Virkelige disker Raid-5 z }| { z }| { A0 = R0 B0 = R1 C0 = R2 D0 = p0 Stripe 0 A1 = R3 B1 = R4 C1 = p1 D1 = R5 Stripe 1 A2 = R6 + B2 = p2 + C2 = R7 + D2 = R8 = Stripe 2 A3 = p3 B3 = R9 C3 = R10 D3 = R11 Stripe 3 .. .. .. .. .. . . . . . © Helge Hafting og stiftelsen TISIP Flere harddisker side 17 av 38 RAID-6 RAID-6 er forholdsvis nytt. Det ligner RAID-5, men tåler at 2 hvilke som helst disker ryker samtidig uten å tape data. Med n disker økes kapasiteten med n − 2. De som er interessert i hvordan RAID-6 fungerer kan ta en titt på: Eksempel14 http://www.acnc.com/04_01_06.html Matematikken bak http://kernel.org/pub/linux/kernel/people/hpa/ raid6.pdf Også raid-6 kan ha reservedisker klare i fall noe skulle skje. Problemene med io-kapasitet og cpu-belastning er verre enn for raid-5. Hver skriving oppdaterer i tillegg to paritetsdisker og beregner to ulike sorter paritet. Dette må som regel gjøres i software, da få kontrollere har støtte for RAID-6. Det finnes de som mener raid-5/6 har utspilt sin rolle på grunn av ytelsesproblemet ved paritetsoppdateringer. Teknikker som raid-1+0 har langt bedre ytelse og tåler også bedre tap av disker. Man trenger selvsagt flere disker for å få samme kapasitet som raid-5/6, men dette kan man tjene inn med mindre venting på grunn av høyere overføringskapasitet, og bedre håndtering av diskkræsj. Disker koster ikke så mye som de en gang gjorde. Skal man ha bra fart i sakene, er det raid-10 som gjelder. Raid i flere nivåer Komponenter i et RAID-system behøver ikke være enkeltdisker. En komponent kan også være et annet RAID-sett. Dette kalles å bruke RAID i flere nivåer. RAID-5+1 En kombinasjon for de som krever høy sikkerhet, er å ha to like store RAID-5 sett, og så slå disse sammen med speiling. Dermed tåler vi å miste opptil tre disker på en gang. Mister vi 3 disker i ett RAID-5 sett er det naturligvis dødt, men på grunn av speilingen får vi data fra det andre RAID-5 settet. Mister vi 2 disker på det ene RAID-5 settet, er det også dødt, men data er fortsatt tilgjengelig fra det andre settet som bare har mistet én disk. Vi må miste minst to disker på hvert RAID-5 sett før vi mister data. Med n disker i en slik kombinasjon blir kapasiteten n2 − 1. RAID-10 En annen kombinasjon som brukes en del, er RAID 1+0. Dette kalles også RAID-10. Her har vi flere RAID-1 sett som består av parvis like disker. Disse settene stripes deretter © Helge Hafting og stiftelsen TISIP side 18 av 38 Planlegge og installere en linux-server sammen for å oppnå større kapasitet. Her tåler vi alltid å miste én disk, siden den andre i paret fortsatt virker. Vi tåler også å miste mange disker, så lenge vi ikke mister to disker i samme RAID-1 sett. Med to disker i hvert RAID-1 sett og n disker, blir kapasiteten n/2. Denne varianten gir høy ytelse, også om den er implementert i software. Her er det ingen problemer med tidkrevende paritetsberegninger. For å unngå å miste to disker i samme speil, lager man gjerne speilparene av disker fra ulike produsenter. Ulik teknologi gjør gjerne at de ikke feiler samtidig under identiske forhold. En bedrift med et slikt oppsett klarte seg bra når samtlige disker fra en produsent gikk dukken i løpet av noen uker, det var gjort feil i produksjonen. Mange røk samtidig, men de var altså speilet mot disker fra en annen produsent som ikke hadde det samme problemet. Vær oppmerksom på at kombinasjonen RAID 0+1 ikke er like sikker som raid 1+0. (To store stripe-sett kombinert med speiling.) RAID 0+1 tåler forsåvidt å miste én disk, men sjansen for havari er mye større hvis vi mister to ettersom sjansen er omtrent 1/2 for at de to ødelagte diskene er i hvert sitt speil. Mange PC-hovedkort leveres med en begrenset mulighet for raid-10, der to og to disker speiles og så kjører man raid-1 på toppen av de to speilene. Men RAID-10 kan være mer enn opplegg med akkurat fire disker. Det er fullt mulig å ha RAID-1 over mer enn to speilsett. Og et speilsett kan forsåvidt inneholde mer enn to disker også, hvis man vil ha mye redundans. Linux RAID-10 Så langt er beskrivelsen av RAID-10 generelt og passer for de fleste operativsystemer. Linux har imidlertid noen ekstra muligheter. Vi kan f.eks. ha RAID-10 med 3 disker og dobbeltlagring. Eller 5 disker. Vi kan også ha opplegg hvor datablokker lagres mer enn 2 ganger, f.eks. 5 disker med tredobbelt lagring. eksemplene blir som følger: Vanl. 2 disker A B 0 0 1 1 2 2 3 ... 3 disker, A–C A B C 0 0 1 1 2 2 3 3 4 4 ... A 0 2 5 7 5 disker, A–E B C D 0 1 1 3 3 4 5 6 6 8 8 ... E 2 4 7 5 disker, tredobbelt A B C D E 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 ... I stedet for å legge kopiene rett etter hverandre, har linux mulighet for å organisere blokkene slik at den første halvparten av diskene ser ut akkurat som raid-0 (striping). På den andre halvparten av diskene kommer kopiene av blokkene. På dette viset kan raid-10 leses like raskt som raid-0, og likevel ha samme sikkerhet som raid-1. Skriving kan bli langsommere på dette viset, men mange anvendelser har mye mer lesing enn skriving. Dessuten venter vi som regel ikke på treg skriving, fordi det skjer i bakgrunnen. Men © Helge Hafting og stiftelsen TISIP Flere harddisker side 19 av 38 for lesing har vi ikke noe valg, vi får ikke resultatene før de er lest inn. Denne typen RAID-10 med 2 disker vil se slik ut: A 0 2 ... 1 3 B 1 3 ... 0 2 Implementasjoner i hardware og software Hardware raid går ut på å ha en spesiell diskkontroller som tar seg av raid-funksjonalitet for disker koblet til kontrolleren. Operativsystemet trenger dermed ikke bruke tid på dette, for linux ser en raid-enhet ut som en hvilken som helst annen disk. Dette kan være en fordel med raid-5, da beregning av sjekksummer både tar tid og ekstra io-kapasitet. Fordelen er mindre med raid-1 og raid-0, da disse er så enkle at de ikke stjeler noen kapasitet av betydning. Software-raid går ut på å bruke vanlige diskkontrollere, og la linux gjøre jobben med å beregne sjekksummer (for raid-5) og doble eller splitte opp io-operasjoner for raid1 og raid-0. Fordelen med dette er fleksibilitet. Diskene i et software-raid kan være spredt på flere kontrollere. Disse behøver ikke være fra samme leverandør, de kan til og med være av ulik type, f.eks. både SATA og SCSI. Flere kontrollere gir bedre ytelse, ettersom hver kontroller har sine egne begrensninger. Dessuten arbeider software-raid med partisjoner, ikke hele disker. Når budsjettet setter begrensninger kan vi dermed ha en to-disk tjener hvor deler av de to diskene brukes til et raid-1 for data vi ikke tåler å miste, f.eks hjemmemapper. Resten av de to diskene kan brukes til mindre kritiske data. Operativsystemet er, overraskende for noen, lite kritisk. Dette fordi det lett kan reinstalleres ved behov. Webcache og /tmp er andre eksempler på lite kritiske data. Raid og planlegging Vær oppmerksom på at siden raid får flere disker til å tilsynelatende fremstå som én, så har vi ingen innflytelse på hvordan data organiseres innenfor ett raid-sett. Planlegging som i avsnitt 1.3.2 på side 12, av hvilke filer eller tjenester som havner på hvilken disk innenfor ett raid5-sett er altså umulig. Med tilstrekkelig mange disker kan en forsåvidt ha flere separate raid-sett, for ulike anvendelser. Da blir maskinen ganske stor, en får fort bruk for et ekstra kabinett til diskene. En maskin med mange disker har også lett for å trenge ekstra strømforsyning. © Helge Hafting og stiftelsen TISIP side 20 av 38 Planlegge og installere en linux-server Hvis du planlegger en stor filtjener, sjekk hvor mange watt diskene og andre komponenter trenger. Så sørger du får tilstrekkelig kraftig strømforsyning, eller evt. separat strøm til diskene. Raid i praksis, og partisjoner Hardware-raid settes opp ved hjelp av programvare som følger med raid-kontrolleren. Ofte skjer dette ved hjelp av kontrollerens BIOS-oppsett, som aktiveres ved å trykke en bestemt tast når maskinen starter opp. Software-raid settes opp ved hjelp av programmet mdadm15 . De som er interessert, kan installere debianpakken mdadm og lese man-sider og annen dokumentasjon. Så langt har vi sett på RAID som en sammenstilling av hele disker. Software-raid i linux tillater imidlertid at vi setter sammen ulike diskpartisjoner i RAID. Et eksempel: Vi har to harddisker, hver med to partisjoner. Altså hda1, hda2, hdb1 og hdb2. Her kan vi f.eks. kombinere hda1 og hdb1 med RAID-1, for å få økt sikkerhet. Vi kan fortsatt bruke hda2 og hdb2 som separate partisjoner med egne filsystemer. De to partisjonene hda1 og hdb1 er ikke tilgjengelige for å legge vanlige filsystemer på, de er nå slått sammen til en ny enhet, kalt md0. Første raid-enhet får navnet md0, den andre får navnet md1 osv. Tallene har altså ingenting å gjøre med hvorvidt det er raid-1, raid-0 eller raid-5. For å legge et filsystem på vår nye sikre raid1-enhet, bruker vi mkfs og oppretter filsystemet på /dev/md0. For å bruke dette filsystemet, legger vi /dev/md0 inn i /etc/fstab hvor alle filsystemene er listet opp. Sett aldri sammen flere partisjoner fra samme disk til en RAID-enhet. Ytelsen blir elendig fordi lesehodene hele tiden må flytte seg mellom de to partisjonene, og sikkerheten uteblir helt ettersom begge partisjoner ryker hvis hele disken ryker. Til slutt vil jeg nevne at raid-enheter kan partisjoneres. Dette er nokså nytt. I eksempelet over kunne vi altså ha delt opp /dev/md0 i partisjoner som /dev/md0p1, /dev/md0p2 og så videre. Hvis en har kompliserte diskoppsett bør en ta notater i maskinens loggbok, slike notater er gode å ha hvis det noensinne blir problemer med oppsettet. 1.3.4 Mer informasjon For mer informasjon om harddisker og partisjonering, se http://www.tldp.org/ HOWTO/Multi-Disk-HOWTO.html. Dette bør leses! 15 multi-disk administration © Helge Hafting og stiftelsen TISIP Filsystemer side 21 av 38 1.4 Filsystemer 1.4.1 Ext2 – enkelt og raskt Det finnes mange filsystemer for linux, og flere av dem kan være aktuelle på en tjener. Ext2 velprøvd og det eldste av de praktisk brukbare filsystemene. Det er også det raskeste i vanlig bruk. Ext2 har imidlertid et problem. Hvis filsystemet avbrytes ukontrollert (strømbrudd, systemkræsj) må det gjennom en tidkrevende sjekk etterpå. Dette fordi filsystemet kan havne i en tilstand med delvis oppdaterte mapper og strukturer, som må rettes før filsystemet kan brukes. Sjekken kan ta flere minutter for en håndfull gigabyte, og den kan dermed bli plagsomt lang med flere ti- eller hundretalls gigabyte. For mer informasjon om ext2, ta en titt på http://e2fsprogs.sourceforge. net/ext2intro.html. 1.4.2 Ext3 – et journalførende filsystem Ext3 er stort sett som ext2, men er i tillegg et journalførende filsystem. Journalen øker datasikkerheten og unngår tidkrevende sjekking etter kræsj. Ulempen er at journaloperasjonene også tar tid, ext3 er dermed ikke fullt så raskt som ext2. En fordel med ext3 er at man kan konvertere eldre ext2-baserte systemer til ext3. Det går også greit å konvertere tilbake til ext2 om det skulle bli nødvendig. Generelt om journalførende filsystemer Journalføring vil si at alle endringer i filsystemet (blokkallokeringer, forandring av mapper o.l.) først skrives ut til en journalfil, for deretter å bli skrevet ut på sine riktige områder på disken. Hvis maskinen kræsjer mens disken oppdateres får vi samme slags feil i filsystemet som med en ext2-kræsj. Men det er ikke nødvendig å lete etter feil når maskinen starter opp igjen, det er bare å hente inn de siste oppdateringene fra journalen og legge dem ut på disken på rett sted. Det tar bare noen sekunder, og deretter vet vi at filsystemet er i orden og klart til bruk. Hvis maskinen kræsjer mens ext3 oppdaterer journalen får vi en ødelagt journal, men på et slikt tidspunkt er det garantert ingen halvgjorte forandringer i filsystemet. Når maskinen starter opp igjen kan den dermed nøye seg med å lage en ny journal, og anta at filsystemet er i stand uten ytterligere sjekking. Journalen for ext3 er typisk på 32MB, og ligger vanligvis på en skjult fil. Vi kan imidlertid få bedre ytelse ved å legge journalen på en annen disk, skriving til journalen vil dermed ikke konkurrere med vanlig bruk av filsystemet. For maksimal ytelse bruker noen en © Helge Hafting og stiftelsen TISIP side 22 av 38 Planlegge og installere en linux-server batteridrevet ram-disk for journalformål. RAM er mye raskere enn en vanlig harddisk, og batteriene sørger får at ingenting går tapt ved strømbrudd eller kræsj. Data skrives til journalen til den går full, deretter skrives alt sammen ut på disken også før ext3 starter en ny omgang i journalen. Journalen har altså fast størrelse, som vi kan velge når vi oppretter filsystemet. Alternativer for journalføring i ext3 Ext3 har tre måter å håndtere journalen. «data=writeback» er den raskeste måten, og tilsvarer måten andre journalførende filsystemer virker på. Det er bare metadata (mapper, allokeringsinformasjon) som journalføres. Vanlige data, altså innhold i filer, journalføres ikke. Ved kræsj kan vi dermed garantere at filsystemet er konsistent, men filer som var åpne da maskinen kræsjet kan inneholde søppel i form av tilfeldige data. Den viktigste grunnen til å bare journalføre metadata er at det er lite metadata i forhold til vanlige data, dermed får det lite å si for ytelsen. Standard-alternativet er «data=ordered». Det er fortsatt bare metadata som journalføres, men metadata overføres ikke til journalen til før data for de tilhørende filene også er skrevet ut på disken. Dette fører til at data må skrives ut hver gang journalen går full. Det gir noe dårligere ytelse fordi filene oppdateres oftere, men større sikkerhet ved kræsj. Etter kræsjet vil det ikke være noen filer med ubrukelig innhold, ettersom innholdet skrives før journalen. Vi risikerer imidlertid at filer som var i ferd med å bli utvidet blir kuttet ned i forbindelse med kræsjet. For maksimal sikkerhet har vi alternativet «data=journal». Med dette alternativet journalføres alt, både metadata og vanlig data. Det gir dårligere ytelser fordi absolutt alt må skrives to ganger, først en gang i journalen og deretter en gang på disken. Det er dermed et tungt alternativ for filsystemer med mye skriving. Til gjengjeld har vi perfekt sikkerhet, ingenting av det som skrives til disk går tapt ved kræsj! Vær imidlertid oppmerksom på at et program som var kommet halvveis med å oppdatere en fil fortsatt etterlater seg en halvveis oppdatert fil etter kræsjet. Hvis programmet er såpass velskrevet at det kan finne igjen hvor det stoppet går dette bra, ettersom ingenting går tapt. Det er slett ikke alle programmer som får til dette, men f.eks. en kommersiell database bør klare det. Mer informasjon om ext3 finnes på følgende steder: http://batleth.sapienti-sat.org/projects/FAQs/ext3-faq.html http://www.redhat.com/support/wpapers/redhat/ext3/ © Helge Hafting og stiftelsen TISIP Filsystemer side 23 av 38 1.4.3 Ext4 Ext4 er en videreutvikling basert på ext3, som har høyere ytelse og støtter større filsystemer. Filsystemet kan være opptil en exabyte, og enkeltfiler kan være opptil 16 terabyte. Ext4 har også bedre støtte for SSD; Når en sletter filer på ext4, vil ext4 bruke TRIM-kommandoen for å gi SSD-disken beskjed om at den aktuelle blokken ikke lenger er i bruk. SSD-disker slites ved bruk, og minimerer slitasjen ved flytte blokker som brukes mye til andre deler av flashminnet. Men for å kunne gjøre slikt, må disken vite hvilke blokker som ikke brukes av filsystemet. Ext4 har også en mer effektiv organisering av store filer, basert på extents. Dermed gjør det noe mindre arbeid ved oppdatering i store filer. Mer informasjon om ext4: http://ext4.wiki.kernel.org/index.php/Main_Page http://en.wikipedia.org/wiki/Ext4 1.4.4 Reiserfs Reiserfs er et annet journalførende filsystem. Det er raskere enn ext3 og mer effektivt på mapper som inneholder mange16 filer. Det er også mer plass-effektivt når det gjelder små filer, da det kan lagre flere små filer i én diskblokk. For mer informasjon om reiserfs, se http://www.namesys.com/ 1.4.5 JFS Dette er linux-versjonen av IBM’s JFS fra AIX. JFS står for «Journalling File System». Ta en titt på http://oss.software.ibm.com/jfs/ for mer informasjon. 1.4.6 XFS Dette er et journalførende filsystem utviklet av SGI. Det er utviklet med tanke på høy ytelse, spesielt for store filer og store mapper. Ta en titt på http://oss.sgi.com/ projects/xfs/ for mer informasjon. 1.4.7 Btrfs Et av de nyeste og mest eksperimentelle filsystemene for linux. Interessant for de som forsker på filsystemer. Nå og da sammenlignes det med ext4, sjekk hvorvidt det har bra 16 tusenvis, titusenvis eller mer © Helge Hafting og stiftelsen TISIP side 24 av 38 Planlegge og installere en linux-server ytelse for din type anvendelse før du bruker det. Btrfs har noen imponerende muligheter, men er ennå ikke raskest/best for alle anvendelser. Se https://btrfs.wiki.kernel.org/index.php/Main_Page 1.5 Minne For en tjener bør en ha minne med paritet. Det er litt dyrere, men oppdager evt. feil. Feil på enkeltbits rettes automatisk, og logges av operativsystemet. Hvis en plages med minnefeil bør minnet byttes ut. Hvis det ikke hjelper bytter man hovedkort eller prosessor. En tjener skal ikke ha ustabil hardware! En velkonfigurert linux-tjener skal være så stabil at tilsynelatende tilfeldige kræsj, som ikke kan spores til et bestemt program eller en spesiell driver, bør få en til å mistenke og undersøke hardware. Linux trenger ikke mye minne selv, så lite som noen få titalls megabyte kan fungere17 . En trenger selvsagt mer for de fleste praktiske anvendelser. Hvis man ønsker å bruke enkle grafisk brukergrensesnitt er det en god idé å ha minst 128MB. For å bruke mer krevende gnome/kde, kan 1 GB være praktisk. Det grafiske brukergrensesnittet er praktisk å ha installert for administrasjonsbruk. Men siden tjenere ofte står for selv mesteparten av tiden velger mange å bare starte det opp ved behov. Dermed kan minnet nyttes til andre formål, som f.eks. diskcache. Det er sjelden man behøver å sette seg ned ved en linux-tjener, all programvare for administrasjon (både tekst- og grafikkbasert) kan kjøres via nettverket18 . Grafiske programmer kan fint kjøres via nett selv om tjeneren ikke har noe skjermkort i det hele tatt. Ellers må en se på minnebehovene for programmene en kjører. Dette oppgis gjerne i et grunnbehov pluss en mengde minne per bruker. Se http://linuxselfhelp. com/HOWTO/HP-HOWTO/linux-intranet.html for noen eksempler på dette. Filtjeneren SAMBA bruker f.eks. ca. 800kB per bruker. Når tjeneren er i gang kan man bruke kommandoen «vmstat 1» for å se hvordan minnet og diskene brukes. Hvis det er mye swapping, ser vi at tallene kolonnene si og so19 er større enn 0 mesteparten av tiden. Da kan det være fornuftig med mer minne. 17 8MB kan være nok i en maskin som brukes som ruter og evt. brannmur. Nye maskiner har alltid mye mer, en får ikke lenger kjøpt så små minnebrikker. 18 Vi ser på fjernadministrasjon i en senere leksjon 19 si: swap in, so: swap out © Helge Hafting og stiftelsen TISIP Prosessor side 25 av 38 1.6 Prosessor Man skal ha mange brukere for at prosessoren skal bli en begrensning, dette fordi linux utnytter prosessoren veldig effektivt. Hvis tjeneren har andre og tyngre oppgaver, som f.eks. databaser, stadig kompilering på en utviklingstjener, produksjon av animasjoner e.l., kan dette skje. Kjør i så fall top. Hvis belastningen (load) er over 1 over tid er prosessoren for svak. En raskere prosessor, eller en løsning med fler prosessorkjerner vil hjelpe. Eksempel på top Se figur 1.1 Figur 1.1: Eksempel på top Her ser vi at kompilatoren (cc1) bruker 26% av cputiden, mens resten av programmene bruker veldig lite. Det er 107 programmer i gang, belastningen er på 0.33, dvs. 33% av hva prosessoren kan klare. For øyeblikket er det altså ingen mangel på prosessorkraft. Hvis noen lurer på hvorfor kompilatoren ikke bruker resten av prosessorkraften er det © Helge Hafting og stiftelsen TISIP side 26 av 38 Planlegge og installere en linux-server flere grunner til det. Innimellom venter den på å få lest programkode fra harddisken, andre ganger stopper den når den er ferdig med en fil og startes opp igjen for den neste. Prosesser med kort levetid rapporteres ikke presist av verktøyet top. Kort forklaring av kolonnene: PID Process ID. Et greit nummer å vite f.eks. hvis vi ønsker å drepe en brysom prosess med kommandoen kill. USER Brukeren som kjører prosessen, så vet vi hvem vi kan kjefte på. :-) PR Prioritet. NI Nice. Positivt tall betyr en «snill» prosess som kjører med lavere prioritet og dermed slipper til andre prosesser oftere. Negativt tall betyr en «ikkesnill» prosess som har fått ekstra høy prioritet. Høy prioritet brukes gjerne for midi-synthesizere og lydmiksere, vi vil ikke at lyden skal hakke bare fordi det kommer inn en epost e.l. VIRT Hvor mye virtuelt minne prosessen bruker. Tallet er overdrevet, prosesser får omtrent aldri bruk for alt. Og noe er gjerne delt med andre prosesser også. RES Resident size – hvor mye virkelig minne prosessen bruker nå. SHR Hvor mye av minnet som er delt minne. Dette er minne som går med til delte biblioteker, f.eks. C-bibliotek og brukergrensesnitt-biblioteker. Slikt minne er delt mellom alle prosesser som bruker den delte ressursen, og er dermed mye mindre problematisk enn den delen av RES som ikke er med i SHR. S State, tilstand. S=Sovende, R=kjører %CPU Prosentandel av cpu-kapasiteten prosessen bruker. %MEM Tilsvarende for fysisk minne. TIME+ Hvor mye cputid prosessen har brukt frem til nå. COMMAND Kommandoen brukt for å starte prosessen. 1.7 Nettverk Linux støtter de fleste PCI-baserte 10Mb/s–10Gb/s ethernet nettverkskort. Se http: //www.scyld.com/network/ for detaljer. Hvis man bruker kort med flere porter, pass på at det ikke bare er et kort med ett enkelt interface og en innebygd hub. (En hub har flere plugger, men overføringskapasiteten øker ikke når man bruker flere av dem. Dette fordi bare én kan brukes om gangen!) © Helge Hafting og stiftelsen TISIP Andre maskinvarebehov side 27 av 38 1.8 Andre maskinvarebehov Hva slags skjerm og skjermkort en bruker er ikke viktig, ettersom skjermen bare brukes til administrasjon og ikke tjener-oppgaver. CD/DVD spillere kan deles ut over nett akkurat som harddisker. I så fall er det lurt å investere i raske spillere. Jeg anbefaler å selv kompilere linuxkjernen for en tjener. Velg riktig prosessortype, så blir den noe raskere enn de generelle kjernene som leveres med distribusjonene. Dette er også en fordel sikkerhetsmessig. Hvis det kommer en viktig sikkerhetsoppgradering er det bare å patche koden man har liggende og kompilere. Dermed har man sikret seg flere dager eller uker før distribusjonen. 1.9 Teksteditorer En editor20 er et program for å redigere tekst. Til forskjell fra en tekstbehandler, opererer en editor på rene tekstfiler uten formatering. Du kan altså ikke velge skrifttyper og slikt. Siden så og si all systemkonfigurering på linux gjøres ved å redigere tekstfiler, er det viktig å ha en god editor og kunne bruke den skikkelig. Når du bruker din favoritt-editor, bør du ihvertfall mestre disse funksjonene: • Skrive inn og slette tekst. • Søke etter, og evt. bytte ut tekst. • Kopiere/flytte tekst fra ett sted til et annet. • Avslutte med eller uten lagring. Nokså banalt, men hvis du er nybegynner med linux vet du ikke nødvendigvis hvordan alt dette gjøres i en ukjent editor. Ofte nok har jeg sett studenter som sitter og skriver lange kompliserte kommandoer om igjen når de kunne kopiert alt sammen på et par sekunder. Derfor, finn deg en editor du trives med (linux har mange!) og lær den skikkelig. Det vil du spare mye tid og tastetrykk på. Noen editorer er enkle, og tilbyr ikke så mye mer enn funksjonene ovenfor. Andre er mer kompliserte og har massevis av tilleggsfunksjoner. Den mest ekstreme er emacs, som tilbyr enhver funksjon man kan tenke seg i en editor. Og en del mer — av de mer spesielle ting emacs tilbyr er innebygd nettleser, epostklient, diverse spill o.l. Noen av de mer praktiske tingene du finner i avanserte teksteditorer: 20 Fra engelsk, edit betyr redigere. © Helge Hafting og stiftelsen TISIP side 28 av 38 Planlegge og installere en linux-server • Søk med regulære uttrykk,21 der du kan søke etter mer avanserte sammenhenger enn enkeltord. Du kan f.eks. angi slike ting som: ◦ Flere ord med ukjent mengde tilfeldig tekst imellom. Aktuelt når bare ett søkeord finnes mange steder, mens kombinasjonen av flere finnes få steder. ◦ Lete spesielt etter start og slutt på linja. Ofte aktuelt når en søker etter kommandoer, og ved søk i kildekodefiler og script. ◦ Ulike stavemåter for samme ord, i ett søk. Greit når en er usikker på stavemåten. Vær oppmerksom på at samme ord med store eller små bokstaver typisk er ulikt! • Syntax highlighting, som passer for linux konfigurasjonsfiler, html/xml, shellscript og de fleste programmeringsspråk. Nøkkelord og tekststrenger utheves slik at det er lettere å se strukturen i filen. • Parentesmatching. Når markøren flyttes over tegn som {[()]} uthever editoren også det motstående tegnet. Dermed er det lett å oppdage parentesfeil. Gjør programmering greiere ved å avsløre feil. • Integrerte utviklingsmiljø, som gjør det mulig å kompilere/testkjøre programmer direkte fra editoren. Editoren emacs har dette for de fleste programmeringsspråk. 1.9.1 Grafisk eller tekstbasert editor? Grafiske editorer ser penere ut, og forutsetter at du har installert det grafiske brukergrensesnittet. De har som regel bedre støtte for mus enn de tekstbaserte editorene, og kan også ha menyer som gjør det enkelt for nybegynnere å finne frem i de mer avanserte funksjonene. Ofte oppgis aktuelle hurtigtaster i menyene, og jeg anbefaler på det sterkeste å lære å bruke hurtigtastene for mye brukte funksjoner, som søk/erstatt og lagring. Tekstbaserte editorer trenger ikke grafisk brukergrensesnitt, og kan derfor brukes også når grafikken ikke er tilgjengelig. 22 Slike editorer kan selvsagt brukes innenfor det grafiske miljøet også, da kjøres de i en terminalemulator som xterm. Tekstbaserte editorer har vanligvis mindre støtte for mus. Det er f.eks. vanlig at du ikke kan posisjonere markøren med musen, du må bruke piltastene. Musen kan likevel brukes til å kopiere og lime inn tekst, hvis det grafiske brukergrensesnittet er i drift. En tekstbasert editor starter gjerne raskere enn de grafiske. Noen av de aller enkleste tekstbaserte editorene brekker om linjer hvis de blir «for lange». Det er jo greit hvis man skriver et brev, noe som nesten ingen lenger bruker 21 Eng: regular expressions vindussystemet mangler/kræsjet, eller fordi du fjernstyrer maskinen over en forbindelse som er for treg for grafikk. Eller du fjernstyrer fra en standard windowspc som ikke støtter linux-grafikk. 22 Fordi © Helge Hafting og stiftelsen TISIP Teksteditorer side 29 av 38 teksteditorer til. Det passer veldig dårlig hvis man redigerer en konfigurasjonsfil eller kildekode. Editoren pico/nano har dette problemet, jeg anbefaler at du lærer deg å bruke en bedre editor enn det! Noen editorer fins både i grafisk og tekstbasert versjon. Det gjelder f.eks. emacs og vim/gvim. Dermed kan en bruke den samme editoren og likevel utnytte brukergrensesnittet optimalt. 1.9.2 Noen editorer pico/nano Veldig enkel å bruke, alle hurtigtaster vises på skjermen hele tiden. Denne har dessverre ombrekkingsproblemet. For den som vil jobbe en del med linux, anbefaler jeg å satse på noe bedre. emacs Stort tungt program, om enn ikke så tungt som en tekstbehandler. Har «alt», men kan ta tid å lære seg. Den grafiske varianten har menysystem. vi/nvi/vim/gvim Lettstartet kjapp editor. Uvant for begynnere, men kan brukes effektivt. Det fins mange varianter av vi, noen har mange nyttige tilleggsfunksjoner som syntax highlight o.l. Den grafiske varianten gvim har brukervennlig menysystem. yudit Det spesielle for denne grafiske editoren er at den har veldig god støtte for unicode. Den har dermed ingen problemer med norske bokstaver, eurosymbolet, eller andre skriftsystemer som kyrillisk, gresk og kinesisk. Tekstfiler kan også konverteres mellom ulike kodesystemer som unicode, 8-bits iso8859-koder tidligere brukt på linux, og codepagesystemet som windows bruker. 1.9.3 Teksteditoren vi Hvorfor vi Editoren vi er elsket av noen, og hatet av mange andre. En administrator som ikke liker vi står selvfølgelig fritt til å installere noe annet. Teksteditorer for linux fins i bøtter og spann, både grafiske og tekstbaserte. Grunnen til at alle bør kjenne litt til vi er at den praktisk talt alltid er tilgjengelig. Hvis X23 streiker en dag må du rette opp feil i konfigurasjonsfiler uten grafiske editorer, og vi klarer seg fint uten grafikk. (Det finnes forsåvidt flere andre tekstbaserte editorer også.) Et nyinstallert linuxsystem har ikke nødvendigvis andre editorer installert, og hvis du må boote fra en redningsdiskett 23 Vindussystemet i linux © Helge Hafting og stiftelsen TISIP side 30 av 38 Planlegge og installere en linux-server i et forsøk på å berge et system med alvorlig disktrøbbel e.l. er sannsynligvis vi den eneste editoren som er liten nok til at den finnes på disketten. Det samme gjelder når maskinen kræsjer i boot og vi sitter med en veldig begrenset bootloader, før rotfilsystemet er montert. Hvordan bruke vi, og litt historie I dag kan vi virke temmelig sær på noen områder, f.eks. det faktum at en må trykke i før det går an å skrive inn tekst. Dette har å gjøre med at vi ble laget før musen ble oppfunnet, og en del tastaturer på den tiden hadde heller ikke piltaster for å flytte på markøren. De fleste tastaturer hadde mer enn bare bokstaver og tall, men det de hadde ekstra var lite standardisert bortsett fra tab, shift og ctrl. Selv vanlige taster som enter/return og backspace kunne variere en del i funksjonalitet24 . En teksteditor som vi trengte imidlertid en måte å flytte markøren på, i alle fire retninger. Og det kunne ikke være en tungvint måte heller, så kompliserte kombinasjoner av tastetrykk var utelukket. Det er fremdeles slik at en som virkelig er god i vi kan redigere svært raskt, raskere enn hva en får til med mange av de mer «brukervennlige» programmene. Det tar tid å bli så god, men tastatur er mye raskere enn mus for den som kan å bruke det effektivt. For å få en enkel måte å flytte markøren, som virket på alle tastaturer, falt valget på tastene h j k l. Prøv gjerne dette i vi. Disse tastene brukes selvsagt også for å skrive tekst, så vi har to modus — kommandomodus og inputmodus. Kommandomodus er aktivt når vi starter opp. Da kan vi flytte markøren (med h j k l eller vanlige piltaster), og slette tegn med x. Mange andre bokstaver fungerer også som kommandoer til vi. Kommandomodus er aktivt ved oppstart for at du raskt skal kunne flytte deg rundt i filen til det stedet du vil gjøre forandringer. En del kommandoer aktiverer inputmodus, f.eks. i. Deretter kan du skrive som normalt. På et moderne tastatur fungerer piltastene også i inputmodus, så du kan flytte deg rundt i fila uten å måtte gå tilbake til kommandomodus igjen. Det neste nybegynnere setter seg fast i etter å ha lært om i, er problemet med å lagre og avslutte. Jeg har selv opplevd frustrasjonen ved å ikke få til dette – jeg ble nødt til å drepe vi-prosessen og mistet alle endringer. Her er oppskriften: Trykk escape for å bytte fra inputmodus til kommandomodus. Deretter :w fulgt av enter om du vil lagre, og :q fulgt av enter for å avslutte vi. For å både lagre og avslutte kan du bruke :wq fulgt av enter. 24 PC-tastaturer har både backspace (merket «←») og delete, som fungerer ulikt. Det har vært mange tastaturer som bare hadde den ene eller den andre. PC-tastaturer har også både return og enter, plassert henholdsvis på det alfabetiske og det numeriske tastaturet. På en PC gjør disse to som regel samme jobb, men historisk har det vært nok av forskjeller. De gjør f.eks. forskjellig jobb på IBM stormaskiner. Frustrasjonen har til tider vært stor hos de som har måttet bytte fra et slags tastatur til et annet. I dag opplever vi en mildere variant av slike problemer når tastaturet feilaktig settes opp etter amerikansk standard. © Helge Hafting og stiftelsen TISIP Kompilere en linuxkjerne side 31 av 38 Generelt kan man kombinere kommandoer i vi. Kolon angir at du vil gi en kommando, w står for write og q står for quit. Hvis du prøver å avslutte uten å lagre nekter vi, men du kan bruke utropstegnet for å angi at du virkelig vil utføre en slik «farlig» kommando. Avslutte uten å lagre blir altså :q! fulgt av enter. Klipp- og lim-funksjoner finnes også i vi. yy kopierer linja markøren står på, og p limer inn kopien på linja etter den som markøren står på. I mellomtiden kan man selvsagt flytte markøren, så linjer kan kopieres hvor som helst. Har en det grafiske brukergrensesnittet i drift, kan en også merke tekst med musen og lime inn ved å trykke midtknappen. Kommandoen man vi gir noe mer informasjon om vi, og komplett dokumentasjon finnes på nettet. Varianter av vi Siden vi er såpass populær, finnes det nyere versjoner med utvidet funksjonalitet. Prøv f.eks. vim (apt-get install vim) som er mer moderne og enklere i bruk. gvim har grafikk og menyer, menyene angir dessuten hvilke hurtigtaster du kan bruke i kommandomodus. Menyene gjør livet lettere for nybegynnere, men lær deg de mest brukte tastekombinasjonene også. Det går mye raskere å bruke tastaturet, hvis du skriver etter touch-metoden og slipper å strekke deg etter musa i utide. Dessuten er det kjekt å kunne noen kommandoer utenat når du i blant trenger å jobbe i tekstmodus. 1.10 Kompilere en linuxkjerne 1.10.1 Hvorfor Distribusjonen din har installert en kjerne, så hvorfor kompilere en ny? Det er mange grunner: • En ny kjerne har gjerne sikkerhetsoppdateringer og ytelsesforbedringer som ikke fins i den gamle. • Den nye kjernen kan ha drivere for utstyr den gamle ikke kjenner, eller nye protokoller og filsystemer. • Ved å kompilere selv kan du optimalisere kjernen for din prosessor. Det kan gi ytelsesforbedringer, til og med om det er samme kjerneversjon som distribusjonen bruker. Distribusjoner går gjerne inn for en kjerne som skal virke overalt, og kompilerer derfor for 386 eller enkleste sort pentium. Hvis du har noe bedre, som f.eks en i7-prosessor, har du noe å vinne. Og det gjelder nok de fleste av oss. © Helge Hafting og stiftelsen TISIP side 32 av 38 Planlegge og installere en linux-server • Du kan ha bruk for spesielle kjernepatcher eller drivere som ikke er med i distribusjonen. Noen programmer krever en oppdatert kjerne. • Prestisjen ved å ha «denne ukas25 linuxkjerne»! 1.10.2 Programpakker du trenger For å kompilere en kjerne, trenger du foruten kildekoden en del programvare for programutvikling. Spesielt må du ha en passende teksteditor, kompilatoren gcc, og programmer som make, diff, og patch. Hvis du mangler noe av dette, bør du installere følgende debian-pakker: gcc, make, patch, diff, libncurses5, xz-utils, bzip2, gzip, tar. Ennå enklere er det å installere pakka build-essentials som selv sørger for at alle de andre pakkene er på plass. 1.10.3 Laste ned kode Kildekode laster du ned fra http://ftp.kernel.org/pub/linux/kernel. I skrivende stund er den nyeste kjernen v3.x/linux-3.2.2.tar.xz. Når du leser dette har det muligens kommet en nyere, det er gjerne 4–6 uker mellom versjonene. Pakk ut den komprimerte filen. Det er vanlig å bruke mappa /usr/src, eller evt. hjemmemappa. 1.10.4 Eventuelle patcher Hvorfor patcher Kildekoden er i utgangspunktet komplett, men noen ganger ønsker en å bruke nye eksperimentelle drivere, protokoller, uprøvde feilrettinger eller andre tilpasninger. Slikt lastes ned i form av patcher til kildekoden. Hva er en patch En patch er en liten fil som forteller hva som skal være anderledes enn standardkoden. Ettersom patchen bare inneholder forskjeller, blir den mye mindre enn om forfatteren skulle distribuert et komplett sett med kildekode. En patch er typisk fra noen få hundre 25 Å ha nyeste kjerne på en privatmaskin er gøy, vær mer forsiktig med en tjenermaskin. Uansett pleier vi ikke reboote tjenere like ofte som nye kjerner kommer ut. For tiden kommer det en kjerne ca. annenhver måned, men en tjenermaskin kan godt være i drift i flere år sammenhengende. © Helge Hafting og stiftelsen TISIP Kompilere en linuxkjerne side 33 av 38 byte opptil noen få megabyte, komplett kildekoden for kjernen er på over 800MB. Systemet med patcher gjør det også lettere å kombinere flere uavhengige tilpasninger, så lenge to patcher ikke opererer på samme del av samme fil går det greit. Hvordan bruke en patch Bruk kommandolinja, og skift til mappa hvor linuxkjernen er. Vanligvis legger man en patch til kildekoden slik: patch -p1 < patchfil Skulle en senere angre på dette fjernes patchen slik: patch -p1 -R < patchfil Store patcher er gjerne komprimerte, de anvendes med en av følgende kommandoer: zcat patchfil.gz | patch -p1 bzcat patchfil.bz2 | patch -p1 xzcat patchfil.xz | patch -p1 Hvis patching går galt kan en i verste fall bli nødt til å slette hele kildekodemappa og pakke ut kjernen på nytt. For den som er usikker anbefales å bruke parameteren --dry-run. Da leser patch-programmet gjennom patchfilen og sjekke den, men oppdaterer ingen filer. Hvis du ikke får noen feilmeldinger kan du trygt kjøre kommandoen om igjen uten --dry-run. 1.10.5 Konfigurere Når kildekoden er klar, er tiden inne for å konfigurere. Det går ut på å velge slike ting som hvilke drivere vi vil ha med og hva slags prosessor kjernen skal tilpasses for. Konfigurasjonen lagres i en fil som heter .config. Konfigurere når vi har en bra konfigurasjon fra før Ofte har vi en bra konfigurasjon fra før. Det er f.eks. tilfelle hvis vi har kompilert linuxkjernen før og bare skal oppdatere til en nyere versjon. Hvis du kompilerer for første gang kan det også hende du har en brukbar eksisterende konfigurasjon, i form av konfigurasjonsfilen (.config) fra distribusjonen du bruker. Hvis distribusjonen din har 2.6-kjerne, kan du sannsynligvis få tak i konfigurasjonen slik: zcat /proc/config.gz > .config For å konfigurere kjernen med en eksisterende konfigurasjon bruker du denne kommandoen: © Helge Hafting og stiftelsen TISIP side 34 av 38 Planlegge og installere en linux-server make oldconfig Da leses den gamle .config-filen, og du får bare spørsmål om eventuelle nye ting som har kommet til i den nye kjernen du har lastet ned. For å se mer på konfigurasjonen og kanskje gjøre noen tilpasninger kan du bruke denne kommandoen: make menuconfig Konfigurere fra bunnen av Hvis du ikke har noen gammel konfigurasjon å bygge videre på, bruker du kommandoen make menuconfig og velger rett prosessortype samt drivere for alt du har bruk for. Dette kan ta litt tid, for det er mye å velge i. Det går an å simpelthen svare ja til (nesten) alt, men da kan man ende opp med en veldig stor og plasskrevende kjerne som tar lang tid å kompilere. Har man linux fra før kan kommandoen lspci gi litt informasjon om hva slags utstyr som finnes i maskinen. Kommandoen lsmod forteller hvilke drivermoduler som er i bruk. Jeg vil også anbefale hjelpesystemet i menuconfig, som har informasjon om de fleste valgene. 1.10.6 Kompilere Når kjernen er konfigurert, kompileres den med kommandoen make bzImage. Det tar sin tid, regn med fra 2 minutter på en rask maskin, til timer på en gammel/svak en. Bruk ventetiden til noe bedre enn å sitte og se på kompileringen! Hvis alt går greit får du produsert en fil som heter arch/x86_64/boot/bzImage26 . Hvis du har konfigurert kjernen din med moduler, trenger du også kommandoen make modules. 1.10.7 Installere kjernen Noen distribusjoner har egne mekanismer for å installere kjerner, se i så fall distribusjonens dokumentasjon. Her beskriver jeg hvordan kjernen kan installeres manuelt, på en maskin som bruker lilo til å laste den inn. De som bruker grub eller noe annet får se på tilhørende dokumentasjon. Siden kjernen er det første som trengs når linux booter, må den legges på et sted hvor maskinen kan finne den når den booter. Kopier derfor arch/x86_64/boot/bzImage til en passende mappe, f.eks. /boot. Det er en god idé å gi kjernefilen et mer beskrivende navn også. Ta gjerne med versjonsnummeret i filnavnet, f.eks. linux4.1. 26 Forutsatt at du har valgt en 64-bits prosessor, men det gjelder for alle vanlige PCer. En 32-bits kjerne for eldre prosessorer havner på arch/x86/boot/bzImage i stedet. Arm-baserte kjerner (for mobiltlf, nettbrett o.l.) havner på arc/arm/boot/bzImage © Helge Hafting og stiftelsen TISIP Kort om distribusjoner side 35 av 38 Deretter må vi gi lilo beskjed om å laste inn den nye kjernen ved oppstart. Lilo har konfigurasjonsfilen /etc/lilo.conf hvor vi legger inn følgende: image=/boot/linux3.9 label=3.9 Hvis det er flere linjer med image, setter vi den nye kjernen først. Det er lurt å beholde de som finnes fra før i fall det blir problemer med den nye kjernen. Når du har lagret /etc/lilo.conf kjører du kommandoen lilo som oppdaterer bootsector på harddisken. Hvis du bruker moduler, bruk kommandoen make modules_install i tillegg. Til slutt bruker du kommandoen shutdown -r now så maskinen starter på nytt med den nye kjernen. Når den er kommet i gang, kan du bruke uname -r for å sjekke at det virkelig er den nye kjernen som er i drift. En vanlig nybegynnerfeil er å glemme å kjøre lilo, eller å gjøre feil i /etc/lilo.conf. Da ender en fort opp med at det er den gamle kjernen som starter i stedet. Etter å ha fått opp rett kjerne er det lurt å kjøre dmesg27 for å sjekke oppstartmeldingene, og gjerne sjekke at alle tjenester har kommet i gang som de skal. Hvis en har glemt en driver e.l. i den nye kjernen, viser det seg som regel med uventede feilmeldinger under oppstart, eller ved at tjenester som trenger den aktuelle driveren ikke kommer i gang. Hvis den nye kjernen ikke starter i det hele tatt resetter du PC’en, og holder skift-tasten nede mens den starter opp. Da vil LILO vise en oppstartsmeny med alle kjernene du har. Da kan du velge den forrige kjernen i stedet for den som står først. Dermed kommer maskinen i gang med gammel kjerne slik at du får mulighet til å rette feilen. 1.11 Kort om distribusjoner 1.11.1 Distribusjoner og dette faget Selv bruker jeg stort sett testing-versjonen av debian. Faget kan gjennomføres med enhver distribusjon, men hvis distribusjonen mangler noen av programmene som brukes kan det bli mye kompilering og lignende ekstraarbeid. Et år ble det f.eks. en del ekstraarbeid for studenter som brukte slackware-distribusjonen, fordi denne i utgangspunktet ikke hadde støtte for PAM. Dermed måtte de kompilere nye versjoner av programmer som login o.l. for å kunne gjøre LDAP-øvingene. 27 Det er gjerne mange oppstartmeldinger, bruk dmesg|less for å se en skjermfull av gangen. © Helge Hafting og stiftelsen TISIP side 36 av 38 Planlegge og installere en linux-server 1.11.2 Installere og oppgradere debianpakker Jeg forutsetter her at /etc/apt/sources.list er satt opp til å hente pakker fra nettet. Hvis ikke, les man sources.list og sett opp dette først. Ta sikkerhetskopi av filen, med feil i /etc/apt/sources.list kan man ikke installere noe som helst. Å kopiere konfigurasjonsfiler før en endrer på dem er forresten alltid en god idé – da er det lett å gå tilbake. For å oppdatere pakkedatabasen med siste nytt: apt-get update For å oppgradere hele distribusjonen med nye versjoner og evt. sikkerhetsoppdateringer: apt-get dist-upgrade For å installere pakkene ftp og ssh: apt-get install ftp ssh Med debian-pakker skal du normalt aldri få problemer med avhengigheter. Hvis en pakke avhenger av andre pakker, vil apt-get laste ned og installere disse andre pakkene også. Bli derfor ikke overrasket om apt-get legger inn to–tre eller ti–tjue pakker i tillegg til de du ba om. 1.11.3 Installere rpm-pakker De fleste distribusjoner utenom debian/ubuntu bruker rpm-pakker. De brukes slik: 1. Hvis du har pakken på din installasjonsCD, fortsett fra punkt 2. Hvis ikke: Last ned rpm-pakken. Pass på at det er rett versjon for din distribusjon. (Noen ganger bruker f.eks. mandrake og redhat ulike versjoner. Ulike versjoner av distribusjonene kan også ha ulike rpm-pakker for noen programmer.) 2. Installer pakken med følgende kommando: rpm -i pakkefilnavn.rpm Enkelte grafiske filhåndteringsprogrammer kan installere rpm-filer når du klikker på dem. Det kan være et greit alternativ til denne kommandoen, men pass på at du får med deg eventuelle feilmeldinger. 3. Hvis du får beskjed om at det mangler andre filer eller pakker, skaff og installer disse først og prøv punkt 2 igjen. 1.11.4 Andre distribusjoner Distribusjoner som gentoo og slackware gjør ting anderledes. Har du en av disse regner jeg med at du vet nok om hvordan programmer installeres. Gentoo bruker f.eks. «emerge pakkenavn» i stedet for «apt-get install pakkenavn» © Helge Hafting og stiftelsen TISIP Kort om distribusjoner side 37 av 38 1.11.5 Installere .tar.gz-filer Hvis et program ikke er pakket for distribusjonen din, eller hvis pakken er for gammel, kan det bli nødvendig å installere fra kildekode i stedet. Det gjøres slik: 1. Last ned kildekode, vanligvis i form av en .tar.gz-fil fra programmets hjemmeside. 2. Pakk ut filen med følgende kommando: tar xvzf filnavn.tar.gz Hvis du har fått en .tar.bz228 -fil i stedet, blir kommandoen tar xvjf filnavn.tar.bz2 3. Gå inn i mappa som ble pakket ut, les eventuelle filer kalt README og eller INSTALL. Her finnes tips og instruksjoner for konfigurering, kompilering og installasjon. Her står det gjerne hva du trenger av programvare ellers også. Store programpakker har gjerne en undermappe kalt doc e.l. hvor du finner mer informasjon. 4. Konfigurer programmet, om nødvendig. Det gjøres vanligvis slik: ./configure 5. Kompiler programmet, vanligvis med følgende kommando: make 6. Installer programmet, vanligvis slik: make install 7. Tilpass eventuelle konfigurasjonsfiler, om nødvendig. Hvis det bare er én fil, heter den som regel /etc/programnavn.conf. Hvis det er flere, ligger de vanligvis i mappa /etc/programnavn. 8. Start opp programmet. Informasjon om bruken av det finnes på ett eller flere av følgende steder: a) Ved hjelp av kommandoen man programnavn. b) I dokumentasjonsmappa sammen med kildekoden. c) På programmets hjemmesider. 28 .bz2 er noe bedre komprimert enn .gz © Helge Hafting og stiftelsen TISIP side 38 av 38 Planlegge og installere en linux-server 1.12 Oppsummering Vi har sett på valg vi gjør før vi installerer linux. For maskinvare gjelder det å velge passende prosessor, minne og harddisk(er) for det tjenermaskinen vår skal brukes til. Harddisker organiseres i RAID og deles inn i partisjoner. På hver partisjon brukes et passende filsystem. Vi har også sett litt på hvordan vi kompilerer en linuxkjerne, fått en oversikt over distribusjoner, og repetert en del informasjon om debian linux. © Helge Hafting og stiftelsen TISIP