Btrfs händerna på: En extremt cool filsystem

I mitt första inlägg om detta ämne, btrfs grunderna, diskuterade jag hur man skapar en enkel btrfs filsystemet, eller ett komplett btrfs Linux-system.

Btrfs händerna på: Mina första försök med en ny Linux-filsystem

Händerna på med openSUSE 13.1: En annan enastående utgåva, använder Linux för att hantera mitt tangentbord och mus med Logitechs Unifying-mottagare, testa en ny bildskärm med OpenSuSE, Fedora, Linux Mint, Ubuntu … och Windows 7

Den information och exempel i denna tjänst kommer att vara viktigt eftersom jag kommer att använda dem som grund för vad som följer.

Ett ämne som jag inte dicuss i föregående inlägg var diskpartitionering. Förhoppningsvis de grundläggande begreppen är bekant: en fysisk hårddisk kan logiskt delas in i partitioner.

Enterprise Software, söt SUSE! ? HPE hakar sig en Linux-distributioner, Cloud, Red Hat fortfarande planer på att vara Openstack företag, Enterprise Software, Från och med Linux i början, Linux, Linux överlevnadsguide: Dessa 21 program kan du enkelt flytta mellan Linux och Windows

Omväxlande kallas “B-träd” eller “bättre” eller “Butter”, här är vad jag hittade när jag började utforska denna “snabbrörliga mål” av ett filsystem.

För Linux-användare, är den vanligaste användningen av denna uppdelning för att ladda flera operativsystem på en enda hårddisk (till exempel Windows och Linux), eller kanske för att segregera filer i olika grupper, såsom operativsystemfiler, startfiler, användardata filer och sådant.

Det viktiga kännetecken för uppdelning för denna diskussion är att diskkontroller och föraren genomdriva skilje gränser. Mer avancerade användare eller systemadministratörer kan ha behandlat opartitionerat hårddiskar, vanligen i samband med en RAID-system där hela disken (flera diskar, faktiskt) ges till RAID-kontroller för ledningen. Som vi kommer att se nedan, btrfs filsystem införa några nya intressanta vändningar på detta koncept.

Så, låt oss hoppa rätt in med en uppdelning exempel (fråga). I tidigare inlägg gav jag det här exemplet för att skapa en btrfs filsystemet

mkfs.btrfs / dev / sda16

Det kommando förutsätter att partitionen / dev / sda16 redan existerar, men då jag kjolar snabbt denna fråga genom att säga att du kan göra samma sak med gparted – den viktiga skillnaden är att GParted kommer att skapa partition för dig, och sedan skapa btrfs filsystem inom den partitionen.

Hursomhelst, är resultatet av ovanstående kommando en btrfs filsystemet som fyller den angivna partitionen. När det gäller mitt exempel, hade jag skapat en 16GB partition, så jag fick då en 16GB btrfs filsystemet. Trevligt och enkelt. Jag kan kontrollera att med btrfs hjälpprogram

btrfs filsystemet visa / dev / sda16

Etikett: “BTEST ‘uuid: a8a0ea98-5746-4d34-92b7-cfd447af9ddf

Totalt enheter 1 FS byte används 28.00KiB

Devid en storlek 16.00GiB används 2.04GiB sökväg / dev / sda16

Nu är en av de riktigt intressanta saker om btrfs filsystem som du kan ändra storlek på dem “on the fly” – medan de fortfarande monterade.

Det är bara underbart – hur många gånger under årens lopp har jag haft ett filsystem fylla upp, och jag var tvungen att skapa en helt ny filsystem och sedan kopiera allt över – eller ännu värre, kopiera allt från hela filsystemet till band, sedan ta bort det filsystem och återskapa den större och kopiera allt tillbaka igen. Usch. Så förmågan att göra detta utan att störa ett system som körs får mig att le. Mycket.

Kommandot för detta är btrfs filsystem omformateringsstorlek . Storleken värde kan ges i absoluta tal, med alla typer av mänskliga vänliga förkortningar (K eller kilobyte, M eller megabyte, G eller gigabyte), och är där filsystemet är monterad. Vid användning för att utöka vår filsystem till 20 gigabyte, om jag har den monterad på / mnt, skulle det vara

btrfs filsystemet ändra storlek 20G / mnt

Resize “/ mnt” av “20G

Vidare läsning

FEL: Det går inte att ändra storlek på “/ mnt” – Fil för stor

Hoppsan. “Filen är för stor” – du inte tror jag ingår att hela diskussionen ovan om partitionering för ingenting, gjorde du? Den partition som jag skapade (väl, gparted skapade) är 16GB, så jag kan inte berätta btrfs att filsystemet något större än så – i logiska termer, är min “disk” full. Jag kunde ta den enkla vägen ut här, och gå tillbaka till gparted att öka storleken, naturligtvis. Men det är inte poängen just nu. Så snarare än att öka filsystemet storlek, kommer vi att börja genom att minska det

btrfs filsystemet ändra storlek -4G / mnt

Resize “/ mnt” av “-4G

Detta visar en annan notation, i stället för att ge den absoluta storleken jag har talat om att minska storleken av 4GB. Det ser ut som mer lovande resultat, och vi kan kontrollera att det verkligen fungerade: (Obs: storleksändring av filsystemet kommer att ta lite tid, exakt hur länge beror på hur snabbt eller långsamt systemet är, så inte bli förvånad om resultatet inte visas omedelbart)

btrfs filsystemet visa / dev / sda16

Etikett: “BTEST ‘uuid: a8a0ea98-5746-4d34-92b7-cfd447af9ddf

Totalt enheter 1 FS byte används 284.00KiB

Devid en storlek 12.00GiB används 2.04GiB sökväg / dev / sda16

Tja, det är bara extremt cool! Annat än att vara en allmänt värdelös exempel, eftersom krympa ett filsystem är inte något du vill / behöver göra mycket ofta, men wow, gjorde det det, medan filsystemet monterades!

Nu när vi har (artificiellt) skapat ett fritt utrymme i partitionen, kan vi titta på andra, mer användbart exempel – att öka storleken på ett filsystem. Återigen kan storleken ges antingen som en ökning (med “+” före numret), eller som en absolut storlek

btrfs filsystemet ändra storlek 14G / mnt

Resize “/ mnt” av “14G

Slutligen, innan denna bit blir för tråkigt, det finns en mer nyckelord som kan användas för att utöka filsystemet att fylla oavsett dess gränser är

btrfs filsystemet ändra storlek max / mnt

Resize “/ mnt” av “max

btrfs filsystemet visa / dev / sda16

Etikett: “BTEST ‘uuid: a8a0ea98-5746-4d34-92b7-cfd447af9ddf

Totalt enheter 1 FS byte används 284.00KiB

Devid en storlek 16.00GiB används 2.04GiB sökväg / dev / sda16

Hurra! Om hade kunnat göra detta många år sedan skulle det ha sparat mig en hel del långa nätter och helger flytta filer runt och ändra filsystem.

Åh, och det finns ett annat sätt att hålla detta från att få tråkigt … en del av den dokumentation som jag läst nämnas att om du behövs för att expandera ett filsystem i en partition som redan var full, en alternativ var att använda fdisk för att ta bort partitionen och skapa en ny större en – och se till att använda samma startcylindern.

Nåväl, låt mig berätta för dig, om du är modig nog att ta bort och återskapa en partition runt en levande filsystem, då ZOWIE, är hatten för dig! Personligen kommer jag hålla med GParted och dess motsvarigheter för att, tack …

Ok, så nu kan jag ändra filsystems storlekar, inom ramen för den partition eller hårddisk som innehåller det. Hmm … men den sista biten kan visa sig vara ett problem, eftersom det om det inte finns någon mer utrymme på hårddisken, eller ingen angränsande utrymme att expandera partitionen? Det är där btrfs förmåga att spänna filsystem eller ens span enheter är ovärderlig. (OBS: på denna punkt jag fortfarande bara diskuterar enkla filsystem, jag ännu inte kommer att ta itu med RAID kapacitet.)

För tillämpningen av denna illustration, har jag skapat en ny oformaterad partition (/ dev / sda17). I den verkliga världen, är denna nya partition mest sannolikt att vara på en annan hårddisk, men det viktigaste här är att så långt som btrfs är conderned, inte bryr sig om det är, det är bara en annan partition.

För att lägga till den nya partitionen till den befintliga btrfs filsystemet, jag använder bara kommandot btrfs igen. För att göra detta, har den ursprungliga btrfs filsystemet ska monteras, och du måste ge enhetens namn på partitionen som skall tillsättas, följt av monteringspunkten för den ursprungliga filsystem, som den här

btrfs enhet add / dev / sda17 / mnt

Detta kommando ger ingen utgång – gamla Unix / Linux händer kommer att vara bekväm med “inga nyheter är goda nyheter” filosofi, men om du vill vara säker på att det fungerade, kan du kontrollera det igen

btrfs filsystemet visa / dev / sda16

Etikett: “BTEST ‘uuid: a8a0ea98-5746-4d34-92b7-cfd447af9ddf

Totalt enheter 2 FS byte används 284.00KiB

Devid 2 storlek 16.00GiB använde 0,00 väg / dev / sda17

Devid en storlek 16.00GiB används 2.04GiB sökväg / dev / sda16

Hej, kyla, där det är, det fungerade! Två enheter listade, alla med 16GB kapacitet. Ett annat sätt att kontrollera detta är att titta på den totala storleken på den monterade filsystem – kom ihåg, ursprungligen skapade vi det som en 16GB partition

df -h / mnt

Filsystem storleken Avail Använd% Monterad på

/ Dev / sda16 32G 312k 30G 1% / mnt

Ja ja, är det nu 32GB! Mycket trevlig. Inom monterade att filsystemet på / mnt det inte finns någon skillnad mellan de två enheterna, och vi kan använda det helt normalt. Operativsystemet kommer att använda det utrymme från båda delarna som necessasry. Vi kan kontrollera distributionen av data mellan de två delarna med btrfs kommandot ovan. En annan intressant notering här, om jag hade gjort detta eftersom den befintliga filsystemet var full, sedan efter att ha lagt den nya enheten jag kunde omfördela data jämnt över de två partitioner så här

btrfs filsystemet balans / mnt

Detta är en engångsåtgärdskommendering, det balanserar nuvarande innehåll i alla enheter inom filsystemet, när det är gjort, kommer fördelningen av efterföljande data göras normalt igen, inte nödvändigtvis upprätthålla balanserat tillstånd.

Ok, jag vill täcka bara ett par mer städning kommandon innan inslagning. Först, om du har att göra med relativt stora filer och vill sanering oavsett fragmentering av filen kan ha smugit sig in över tiden, kan du använda kommandot

btrfs filsystemet defragmentera

Oh my. Tänk bara på att defragmentera en enda specifik fil. För att vara ärlig, när någon börjar prata om defragmentering, tror jag genast om gamla Dilbert komisk remsa, där Dogbert arbetar i kundtjänst, och han säger att någon i telefon: “Ja, jag kan ge er några falska förhoppningar och berätta du försöka defragmentera hårddisken “.

Men i det här fallet, när jag kan ange en viss fil som jag vet är stort och skulle gynna, kan detta vara mycket bra. Det finns ett antal alternativ till detta kommando, så att du kan ange filer och fragmentstorlekar, men det bästa är – är du redo för detta – du kan också berätta btrfs att slå på komprimering av filens innehåll som det defragmenterar det!

Så, jag har en stor fil, som har blivit utspridda på skivan över tiden, och nu har jag ett kommando som kommer att samla bitar och göra dem sammanhängande igen, och samtidigt kommer det att komprimera innehållet så att jag kan återhämta sig diskutrymme samtidigt? Jag tror att jag måste ha dött och gått till himlen …

Jag har inte nämnt det förrän nu, men en annan mycket viktig egenskap hos btrfs är att det håller kontrollsummor på data (och metadata, såsom katalogstrukturer). Dessa kan hjälpa till att identifiera och eventuellt återhämta skadade data. De av oss som minns “alternativa superblock” i Unix filsystem kan vända lite grönt när vi först lära om detta.

Den btrfs Verktyget innehåller en funktion för att använda dessa kontrollsummor för att kontrollera dataintegritet, antingen en hel filsystem eller enskilda enheter eller partitioner i filsystem

btrfs scrub start

I sin enklaste form, startar detta en scrub på den angivna monteringspunkt eller enhet, och skrubba kommer att köras i bakgrunden så att den inte binda upp din terminal för vad som kan vara en ganska lång tid. Vad det egentligen gör läses alla data, och jämföra cheksums att validera den. Om den hittar ett fel det kommer att försöka fixa det. I detta enklaste fallet när det körs i bakgrunden, måste du använda kommandot status för att få resultat

btrfs scrub status

Om scrub är fortfarande igång, kommer detta att berätta vad som händer, om det är klart att det kommer att ge dig de resultat. Hmmm. Kanske det låter lite förvirrande, så en riktig exempel kan hjälpa. På min helt trivialt btrfs filsystemet, ser det ut så här

# btrfs scrub start / mnt

scrub började på / mnt, FSID a8a0ea98-5746-4d34-92b7-cfd447af9ddf (pid = 3414)

Någon gång senare

# Btrfs scrub status / mnt

scrub status för a8a0ea98-5746-4d34-92b7-cfd447af9ddf

scrub började på fre 29 nov 09:58:44 2013 och slutade efter 1 sekunder

totalt antal byte rensat: 312.00KiB med 0 fel

Det finns alternativ för detta kommando för att ställa in prioritet den körs på, hålla den från att gå in i bakgrunden, gör det mer eller mindre utförlig, och även inaktivera reparation och helt enkelt rapportera fel. Så trevligt.

Ok, är tillräckligt nog. Detta har varit en hel del information, och mina fingrar är trött. För nästa inlägg jag kommer att dra ut en gammal deskside-server som har två hårddiskar, och det kommer att bli ännu mer intressant, med RAID, subvolymer och ögonblicksbilder. Jag hoppas att det blir klart varför btrfs är en sådan intressant och viktig utveckling i Linux.

Söt SUSE! HPE hakar sig en Linux-distributioner

? Red Hat fortfarande planer på att vara Openstack företag

? Från och med Linux i början

Linux överlevnadsguide: Dessa 21 program kan du enkelt flytta mellan Linux och Windows