Åter igen har jag lyckats med att producera ett lite väl långt inlägg, jag satt och skrev på det här under tiden jag höll på under tre dagar, fredag, lördag och söndag förra helgen. Det innehåller mycket text av varierande kvalité, allt är nog inte helt hur man kanske ska göra det, men det var i alla fall så här jag gjorde det. Det här är inte tänkt som en guide eller nått utan som en informativ läsning om hur jag gjorde för att få en liten genomgång om hur en del av sakerna funkar.
Inledning
Så nu sitter jag med totalt tre 2T diskar, två nya och en som sitter i datorn. Tanken är att bygga en RAID5 av diskarna för att få lite mer säkrare lagring. (I en RAID5 så förlorar jag utrymmet från en disk, men jag vinner att valfri disk kan gå sönder utan att jag förlorar någon data).
Först lite bakgrund
Det skönt att ha lite extra utrymme på hårddisken så det inte tar slut så jag har köpt en ny disk till datorn lite då och då under många år. Efter det har jag regelbundet köpt nya diskar i den storlek som var mest prisvärt. 20G, 120G, 200G, 250G, 500G, 1T, 1,5T och slutligen 2T. I början kostade en 20G nästan 3000 kr, för en vecka sedan kostade 2T 600kr.
Den uppmärksamme noterade att jag skrev “för en vecka sedan” och inte “i dag”. Orsaken till det är att priset har ökat kraftigt senaste tiden på disk, så pass mycket att det är värt att nämnas. Dustin har just nu rabatt på en disk på 2T, den kostar “bara” 1990 kr. Det är långt över dubbla priset. Hur kommer det sig? Det har varit mycket översvämningar i Thailand, fabriker, leverantörer och vägar står/är stilla/nere/förstörda och det kommer mycket få leveranser av diskar till omvärlden. Det har skapat ett underskott av hårddiskar på marknaden och inte förvånande så stiger priserna.
Så här ser det ut nu
Jag började leka med RAID för något år sedan på min dator hemma mellan två av mina diskar, för ett halvår sedan köpte jag en ny dator och slog till på en del bra saker så som en Sandy Bridge i7 2600K, 16G RAM, 2 st SSD:er på 60G samt lite saker runt det som moderkort, låda m.m. Tanken var att installera om och bygga upp saker ordentligt.
Orsaken att det blev två SSD:er på 60G i stället för en på 120G som jag från början tänkte köpa var att det var extrapris på de mindre, jag har sedan slagit ihop de med en RAID0 (stripe) och fått samma storlek men betydligt snabbare disk. Ja, jag gjorde det mest för att det var kul, inte för att jag behövde det.
Mitt system ligger på den RAID:en och den funkar bra och gör vad den ska, jag vet att det är långt från datasäkert då det räcker med att en av SSD:erna ska sluta funka för att allt ska försvinna men de sakerna som jag har i mitt system som jag är rädd om och inte kan återskapa ligger på andra diskar eller är regelbundet säkerhetskopierade.
Problemet är de andra diskarna, alla är olika stora. Just nu sitter det tre vanliga diskar i min dator. 320G, 500G och 2T. 320 disken är en disk som Windows får använda för att installera stora saker på vid behov, startar sällan Windows så den gör inte mycket nu för tiden. Tanken var sedan att bygga en RAID1 (spegel) mellan min 500G-disk och en partition på 500G på min 2T disk. Det skulle ge mig 500G av speglad säker lagring, och 1,5T osäker lagring. Tyvärr blev det inte så då min spegel råkade bli lite större än 500G och jag hade inte tid och ork att fixa det så nu ser det ut så här.
Nu räddningen
När jag är klar så tänker jag bli av med den gamla 320G disken, Windows får 500G disken att leka med i stället och kvar för Linux blir två SSD:er och tre 2T-diskar. Här kommer en bild på hur det ska se ut när jag är klar.
Nu det jobbiga (men roliga)
Som du säkert förstår så är det mycket saker som kommer behövas flyttas, jag kommer flytta datan med LVM, det kommer ta tid att få över all data så det här är ett projekt som förmodligen ta hela helgen innan jag är klar. Det vackra är att jag kommer kunna använda datorn som vanligt under nästan hela helgen.
Jag vill flytta data på ett säkert sätt, d.v.s jag vill inte riskera att förlora någon data under tiden jag håller på. Jag börjar med att kolla att min spegel mår bra.
$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md127 : active raid1 dm-6[1] sdd1[0]
591786304 blocks [2/2] [UU]md3 : active raid0 sdc2[1] sda4[0]
62868480 blocks super 1.2 512k chunksunused devices: <none>
md3 är SSD:erna och ska ej röras, spegeln heter md127. Allt ser bra ut, både 600G-partitionen på min 2T disk, samt raid-i-lvm-hacket ska innehålla samma data. Jag kommer börja med att ta ut både 320 och 500G diskarna för att få bort dem. De innehåller tillsammans spegeln och jag vill vara säker att jag har en backup som jag inte kan råka förstöra, jag behöver även platsen som de sitter på i lådan.
Efter det stoppar jag in mina två nya 2T diskar och bootar dator igen och nu bör det se ut så här:
Nu stänger jag av datorn, öppnar lådan och flyttar om disk.
Nu är jag tillbaka och allt är enligt plan, den speglade disken ville ej komma upp automatisk. Något som var väntat. En RAID kan användas för att få mer prestanda, för att slå samman flera diskar, för att få datasäkerhet och/eller för att göra systemet robust. Linux tar det säkra före det osäkra, som standard så startar den ej RAID:s där en eller flera diskar saknas utan det är något användaren manuellt måste göra. Vill man ändra det beteendet så går det så klart att göra.
$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md127 : inactive sdd1[0](S)
591786304 blocksmd3 : active raid0 sdc2[1] sda4[0]
62868480 blocks super 1.2 512k chunksunused devices: <none>
Som synes så saknas det en disk på md127. Samt man ser att den är stoppad (S). Då det är en spegel så finna all data på sdd1 så det är bara en fråga om att tvinga igång den. Du kan använda det trevliga inbyggda programmet “Disk Utility” för att göra det, men för sakens skulle gör jag det från skalet.
$ sudo mdadm --run /dev/md127
mdadm: started /dev/md127$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md127 : active raid1 sdd1[0]
591786304 blocks [2/1] [U_]md3 : active raid0 sdc2[1] sda4[0]
62868480 blocks super 1.2 512k chunksunused devices: <none>
Som synes körs md127 nu, på en disk. Jag har ett par partitioner som ligger på den spegeln som inte blev anslutna vid start, för att montera dem så räcker det med att skriva:
$ sudo mount -a
Det ska vara allt för nu. Nu har jag tillgång till all min data och kan börja kolla på mina nya diskar. Men innan jag börjar göra det så kan det vara en god idé att kolla igenom dem. Nästan alla diskar har något som heter SMART, det är mjukvara på disken för att hålla reda på hur den mår. Den kör regelbundna tester men det går att manuellt trigga lite mer utförliga texter och det är något jag tänkte göra nu. Kommandot för att kontrollera diskar heter smartctl men den här gången tänkte jag använda mig av “Disk Utility”.
Jag ser tre diskar som heter “2.0 TB Hard Disk”, det är lätta att se vilka diskar som är nya då de är helt tomma. Jag klickade på SMART Data-knappen och valde att köra ett “extended test”. Det kommer ta lång tid men jag har ingen broska utan kan använda datorn som vanligt.
Det går bra att stänga fönstret om du så vill, lät datorn stå eller använd den för fullt. Lämna bara de nya diskarna i fred. Själv blir det nog lite film eller minecraft medan jag väntar.
cirka sex timmar senare…
Jag passar på att köra lite benchmark på diskarna, alltid kul och veta vad de klarar av. Efter det är det tid för att skapa RAID5:an.
Vänta nu kanske du säger, behöver jag inte tre diskar för det? Jo, tre diskar är minimun för en RAID5 med full redundans, det är dock möjligt att temporärt köra den med två diskar, den extra disken innehåller bara redundant data.
Jag väljer åter igen att använda mig av kommandoraden för att arbeta med min RAID, tycker det känns som man har mer kontroll. Men det går att arbeta med den från Disk Utility med om du föredrar.
Det finns olika sätt man kan bygga RAID:en på, du kan använda rådisken rakt av, eller en partition på den. Jag rekommenderar att du använder en partition av två orsaker.
- Om du någon gång behöver kunna boota från disken så behöver du de där 512 byten i början av disken, om du partitionerar disken så är de reserverade.
- Alla tre diskar på 2T är på 2000398934016 bytes, låt säga att en av diskarna behöver bytas. Låt säga att utbytesdisken är på 2T den med men den är lite mindre, låt säga 2000397885440 bytes (1 MB mindre). Den kommer ej gå att använda då den är för liten. Min rekommendation är att du lämnar “lagom mycket” på slutet av disken för att undvika att sånt här händer.
Jag dog till med ett runt och fint värde på 1998 och lämnar lämnar strax över 2G på slutet. Jag hade kunnat lämna lite mindre men 2G duger fint och lämnar bra marginal. Som synes lämnade jag även lite plats i början av disken (1 räcker förmodligen) för att ge parted möjlighet att aligna partitionen efter diskens fysiska block.
Skapa en partitionstabell på diskarna, jag valde gamla klassiska msdos men GPT bör funka lika bra om du föredrar det.
$ sudo parted /dev/sdb mktable msdos
$ sudo parted /dev/sde mktable msdos
Nu skapar jag partitionerna
$ sudo parted /dev/sdb mkpart p 4 1998G
$ sudo parted /dev/sde mkpart p 4 1998G
Nu skapar vi vår nya RAID5 på två diskar, och en disk som saknas:
$ sudo mdadm --create /dev/md4 --level=raid5 --raid-devices=3 /dev/sdb1 /dev/sde1 missing
Nu ser det ut så här
$ cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md4 : active raid5 sde11 sdb1[0]
3902331904 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]md127 : active raid1 sdd1[0]
591786304 blocks [2/1] [U_]md3 : active raid0 sdc2[1] sda4[0]
62868480 blocks super 1.2 512k chunksunused devices: <none>
Som synes är md4 uppe och kör, även om den saknar en disk. Nu är det tid att börja flytta över LVM till den nya disken.
Jag formaterade vår nya raid för LVM, nu verkar LVM vara duktig på just att aligna i 4k block men det skadar inte att vara lite petig och ange några parametrar.
$ sudo pvcreate --dataalignment 4096 /dev/md4
Jag har sedan tidigare följande volymgrupper i LVM
$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
RD_mirror 1 2 0 wz--n- 564.37g 380.00m
RD_pool 1 6 0 wz--n- 1.27t 190.58g
SSD 1 2 0 wz--n- 59.95g 22.70g
RD_mirror är den gamla spegeln, RD_pool är den stora poolen av data som inte var RAID:ad samt SSD är föga förvånande mina SSD:s. Tanken är att flytta alla volymer över från RD_mirror till vår nya raid. Jag tänker göra det genom att utöka RD_mirror så den innefattar vår nya RAID för att sedan ta bort den gamla disken från volymgruppen. Det kommer ta ett tag men när det är gjort bör all data i RD_mirror bara ligga på vår nya RAID.
Så här ser det ut nu, vår volymgrupp är på ca 564G och ligger bara på den gamla speglade RAID:en.
$ sudo vgdisplay RD_mirror | grep Size
VG Size 564.37 GiB
PE Size 4.00 MiB
Alloc PE / Size 144384 / 564.00 GiB
Free PE / Size 95 / 380.00 MiB
Jag stoppar in den nya stora RAID5-raiden i volymgruppen
$ sudo lvextend RD_mirror /dev/md4
Vi har nu ca 3,6T att leka med, nu ligger volymgruppen över både gamla och nya RAID:en.
$ sudo vgdisplay RD_mirror | grep Size
VG Size 4.19 TiB
PE Size 4.00 MiB
Alloc PE / Size 144384 / 564.00 GiB
Free PE / Size 952811 / 3.63 TiB
Nu vill vi få bort datan från den gamla spegeln och in i vår nya fina RAID. Om man kör pvmove på bara en måldisk så utryms den på alla volymer, i det här fallet så kommer allt åka över till md4.
$ sudo pvmove /dev/md127
Det här kommer ta lång tid, som ni ser har jag 564.37G att kopiera. Passande nog så är jag ganska trött och klockan är mycket så nu går jag och lägger mig. En sista sak först, pvmove är en destruktiv handling, om något går fel så får du dataförlust, även om det inte är troligt så är det bra att ha en backup först. Jag har redan en backup (de två diskarna som nu ligger på mitt skrivbord).
Nu har jag vaknat och allt har gått bra, nu plockar jag bort spegeln från volymgruppen.
$ sudo vgreduce RD_mirror /dev/md127
Som synes har vi nu “bara” ca 3T, allt ligger nu på /dev/md4
$ sudo vgdisplay RD_mirror | grep Size
VG Size 3.63 TiB
PE Size 4.00 MiB
Alloc PE / Size 144384 / 564.00 GiB
Free PE / Size 808332 / 3.08 TiB
Jag tycker inte att namnet RD_mirror passar så bra länge så jag döper om den till RD_raid
$ sudo vgrename RD_mirror RD_raid
Glöm inte bort att om du har monteringar som använde RD_mirror så kan det vara en bra idé att uppdatera sökvägarna.
Nu är det tid för volymerna i RD_pool att flyttas över till RD_raid, för det så gör jag så här:
Jag kommer använda mig av vgmerge, för att det ska funka så måste extents i volymgruppen vara lika stora, i mitt fall är dom det. Funkar inte det så kan du alltid ta en snapshot (eller avmontera volymen och kopiera direkt från den), skapa en lika stor volym där du vill ha den och dd:a över datan. Lösningen med dd har jag gjort förr och den funkar bra men den här gången blir det vgmerge för mig.
Vi behöver stänga av RD_pool innan vi kan slå samman den med RD_raid
$ sudo vgchange -a n RD_pool
Här slår vi samman RD_pool med RD_raid
$ sudo vgmerge RD_raid RD_pool
Som synes finns ej RD_pool längre utan allt ligger i RD_raid
$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
RD_raid 2 8 0 wz--n- 4.90t 3.27t
SSD 1 2 0 wz--n- 59.95g 22.70g
Nu börjar vi närma oss, även om datan ligger i rätt volymgrupp så ligger den fortfarande kvar på samma fysiska disk.
$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/md127 lvm2 a- 564.37g 564.37g
/dev/md3 SSD lvm2 a- 59.95g 22.70g
/dev/md4 RD_raid lvm2 a- 3.63t 3.08t
/dev/sdd5 RD_raid lvm2 a- 1.27t 190.58g
Vi applicerar samma teknik som innan:
$ sudo pvmove /dev/sdd5
Förra gången flyttade jag bara 564G, den här gången är det 1,1T så det kommer ta strax över dubbelt så lång tid, vilken tur att jag har planer för dagen. Det blir en tur för mig till tekniska för att se på NASA utställningen.
Wow, förvirringen nästan ett dygn senare, men det står 100% på min högra skärm så det är klart. Det blev nog klart för 7-8 timmar sedan tror jag men då sov jag. Nu blir det lite kaffe och några minuter för att samla tankarna vart jag var och vad jag ska göra nu (så bra att jag har skrivit ner det).
Jag tar bort sdd5 from RD_raid:
$ sudo vgreduce RD_raid /dev/sdd5
Så, nu är omflyttningen kvar. Det som återstår är att stoppa in den sista 2T disken i RAID:en (md4). Men innan det så vill jag vara lite ordentlig och kolla att att viktig data funkar. Det i min värld enklaste sätter för att vara 100 000% säker att jag kan läsa datan från de nya diskarna och RAID:en är helt enkelt att stänga av datorn och dra ut den gamla disken och ser om saker startar om om jag kan nå all min data.
Det finns även en fil /etc/mdadm/mdadm.conf, under Debian måste man manuellt uppdatera den, jag väljer att inte göra det nu då jag vill se om Ubuntu gör nått själv med den. Kan vara intressant och se.
Återkommer efter att ha dragit ut lite sladdar och testat.
Nope, var tvungen att updatera mdadm.conf, det görs enklast med att bli root och köra:
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
Nu har du sparat information om alla dina RAID:s i slutet på filen, redigera den nu och ta bort dubbletter samt gamla RAID:s som du inte längre vill ha kvar (md127 i mitt fall).
Efter två ombooter (drog ut fel disk först) så funkar allt fint, jag uppdaterade /etc/fstab så att de pekar på de nya sökvägarna (jag bytte namn på mina volymgrupper) samt körde:
$ sudo mount -a
$ sudo swapon -a
Voilá, jag allt funkar fint, den nya raiden heter dock md127 i stället för md4. Ska jag vara ärlig så vet jag inte exakt vad som får den att namnge den 127, det verkar som att den använder 127, 126, o.s.v. som namn när något inte är helt 100. I mitt fall så döpte den om sig själv tillbaka till md4 efter att jag var klar. Men annars ska logiken vara att göra en --stop, följt av en --remove och slutligen --assemble på allt igen. Det funkar dock oberoende vad den heter.
Nu sätter jag in sista disken, tar bort partitionerna och partitionerar den på nytt på samma sätt som på de andra två, jag bygger sedan ut RAID:en över den och testar att allt funkar. Rundar av med att starta om datorn för att verifiera att allt kommer upp rätt.
$ sudo parted /dev/sdd mkpart p 4 1998G
$ sudo mdadm --add /dev/md127 /dev/sdd1
Nu är RAID:en komplett, det kommer trigga en synkronisering, något du kan se här:
$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md3 : active raid0 sdc2[1] sda4[0]
62868480 blocks super 1.2 512k chunksmd127 : active raid5 sdd1[3] sdb1[0] sde1[1]
3902331904 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
[>....................] recovery = 0.0% (182400/1951165952) finish=534.7min speed=60800K/secunused devices: <none>
Synkroniseringen är något som sker transparent i bakgrunden, det är inget problem att göra vad du vill, inklusive starta om datorn då den kommer fortsätta snällt i bakgrunden. Tänk dock på att du har ingen fullt komplett RAID5:a med redundans förrän den är klar.
Det var allt, några timmar senare var allt klar och jag passade på att uppdatera datorn till 10.11.