Tid för mig att röja upp bland min lagring

Å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.

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.

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.

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 chunks

unused 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:

md3 : active raid0 sdc2[1] sda4[0]
62868480 blocks super 1.2 512k chunks

unused devices: <none>

md3 : active raid0 sdc2[1] sda4[0]
62868480 blocks super 1.2 512k chunks

unused devices: <none>

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.

  1. 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.
  2. 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 chunks

unused 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.

md127 : 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/sec

unused devices: <none>

Bloggar om: Linux, lvm, md, mdadm, parted, raid, raid5, ubuntu