Ingen av oss är immun från misstag. Ibland leder syndromet med krokiga händer till mycket sorgliga konsekvenser. Ibland är det väldigt svårt att motstå och att inte genomföra "antivetenskapliga" experiment med systemet eller köra ett skript/applikation som laddats ner från en overifierad källa. Och här kommer olika verktyg för att köra applikationer i en isolerad miljö och utökade filsystemsmöjligheter till undsättning.
*nix-system har alltid varit relativt resistenta mot dåligt skrivna applikationer (förutsatt att de inte kördes som root). Men ibland finns det en önskan att experimentera med systemet - att leka med konfigurationer, av vilka några kan vara viktiga, köra ett misstänkt skript, installera ett program som erhållits från en opålitlig källa ... Annars övervinner paranoian helt enkelt, och jag vill att bygga så många barriärer som möjligt för att skydda mot potentiell skadlig programvara. Artikeln kommer att beskriva några sätt att undvika konsekvenserna av optvingade fel genom att rulla tillbaka till en tidigare skapad returpunkt (Btrfs-ögonblicksbilder), köra ett misstänkt program i en begränsad miljö och roa din paranoia (Arkose och chroot).
Chroot har varit känt sedan länge. Den har en enorm fördel gentemot andra verktyg - den fungerar överallt, även på mycket gamla distributioner. Alla dessa nymodiga sandlådor är inget annat än dess vidareutveckling. Men det finns också nackdelar. Till exempel finns det inget sätt att begränsa nätverk, root kan komma ur det med viss ansträngning, och viktigast av allt, det är ganska svårt att konfigurera det. Trots detta är det idealiskt för vissa ändamål, som att installera paket från källan.
Det finns minst tre sätt att skapa en chroot-miljö:
Troligtvis, när du startar från Btrfs-partitionen, kommer Grub att svära på att glesa filer inte är tillåtna och ber dig att trycka på valfri tangent. För att förhindra att det här meddelandet dyker upp, öppna det i din favorit textredigerare fil /etc/grub.d/00.header och kommentera följande rad där:
Om [ -n "\$(have_grubenv)" ]; sedan om [ -z "\$(boot_once)" ]; sedan save_env recordfail; fi; fi
Egentligen är variabeln recordfail nödvändig för att förhindra en cyklisk omstart, för vilken den spärras vid start, och sedan, i händelse av lyckad laddning, sätts den till 0. Även om det är oönskat att kommentera koden som är ansvarig för denna procedur, Jag tror att på ett stationärt system är det ganska du kan klara dig utan det.
Ognelis i sandlådan – så här står det i rubriken
Låt oss först installera paketet debootstrap, som används just för detta ändamål.
$ sudo apt-get install debootstrap
Sedan kommer vi att skapa en katalog där chrooten kommer att finnas och distribuera det kvantala bassystemet i den. I allmänhet kan den skapas var som helst, men dess traditionella plats är /var/chroot. Eftersom de flesta av följande kommandon kräver root-behörigheter, är det vettigt att byta till superanvändarkontot:
$ sudo su - # mkdir /var/chroot && cd /var/chroot # debootstrap quantal ./quantal-chr1 http://mirror.yandex.ru/ubuntu
Låt oss ta en titt på det sista kommandot. Den distribuerar Quantal Ubuntu-utgåvan i en separat quantal-chr1-katalog (man vet aldrig, du behöver plötsligt en annan chroot) från närmaste spegel. När distributionen är klar måste du mappa procfs, sysfs-filsystemen och (om tillämpligt) /dev-katalogen till detta underträd. Om chroot endast kommer att användas för textapplikationer tills en omstart, bör följande kommandon räcka:
# mount --bind /proc /var/chroot/quantal-chr1/proc # mount --bind /sys /var/chroot/quantal-chr1/sys # mount --bind /dev /var/chroot/quantal-chr1/ dev
Om du vill att det här underträdet ska fungera efter en omstart, lägg till lämpliga rader i /etc/fstab. Tja, för vissas arbete grafiska applikationer katalogerna /tmp och /var/run/dbus bör också visas. Efter det kan du redan ange följande kommando, som faktiskt gör chroot:
# chroot /var/chroot/quantal-chr1/
Och du är redan låst i det. För att inte förväxla chroot med ett riktigt system rekommenderar jag att du ändrar skalprompten. Låt oss till exempel installera och köra Skype i chroot. För att göra detta måste du installera schroot-paketet på värdsystemet, vilket gör det enklare att köra program i en chroot-miljö:
Sedan lägger vi till en post i filen /etc/schroot/schroot.conf. I mitt fall lade jag till följande:
/etc/schroot/schroot.conf description=Quantal Skype-katalog=/var/chroot/quantal-chr1 priority=3 users=rom groups=rom root-groups=root,rom
Vi vidarebefordrar /dev, /proc, /sys, /tmp och /var/run/dbus - se ovan för hur du gör detta. Lägg till en skype-användare och grupp till chroot - det är önskvärt att uid och gid matchar uid / gid för huvudanvändaren av det verkliga systemet (i mitt fall, rom), för vilken vi skriver följande kommandon:
# schroot -c quantal-skype -u root # addgroup --gid 1000 skype # adduser --disabled-password --force --uid 1000 --gid 1000 skype
Efter det lägger vi nyladdade Skype - igen i chroot - och tillfredsställer dess beroenden:
# dpkg --force-all -i skype-ubuntu-precise_4.1.0.20-1_i386.deb # apt-get -f install # exit
På huvudsystemet tillåter vi anslutningar till X-servern från localhost och anger chroot som en normal användare:
$ xhost +localhost $ cd / && schroot -c quantal-skype -u rom /bin/bash
Ställ in DISPLAY-variabeln (som du behöver titta på i huvudsystemet) och starta Skype:
$ export DISPLAY=":0.0" $ skype --dbpath=/home/skype/.Skype &
Skype installerades och lanserades framgångsrikt i en chroot-miljö.
Det skulle vara möjligt att skriva ett manus för att underlätta lanseringen, men du kan göra det själv.
Arkose fungerar på ett liknande sätt som Windows-sandlådor, som Sandboxie. I praktiken är detta ett bekvämt omslag för LXC-behållare. Men som du vet är bekvämlighet och flexibilitet ibland oförenliga - att finjustera de skapade behållarna är svårt. Av plusen noterar jag ett intuitivt gränssnitt (detta är om du använder GUI - dock startar från kommandoradär också väldigt enkelt), men från nackdelarna - som standard kräver det ganska mycket ledigt utrymme på hårddisken och det finns några möjliga sätt gå förbi; men om du använder Arkose som ett extra omslag för potentiella sätt att introducera skadlig programvara (webbläsare) eller till och med bara för att experimentera med vissa intressant applikation, det kommer inte att skada.
Seccomp är en föga känd mekanism som introduceras i 2.6.12-kärnan som tillåter en process att göra en enkelriktad övergång till ett "säkert" tillstånd, där endast fyra systemanrop är tillgängliga för den - exit(), sigreturn(), read() och write(), och de två sista är endast tillgängliga för redan öppna filer. Om processen försöker anropa någon annan syscall, kommer den att dödas omedelbart.
Uppenbarligen är denna lösning inte särskilt flexibel. I detta avseende dök seccomp-bpf upp i 3.5-kärnan, som låter dig finjustera, med hjälp av BPF-regler, vilka systemanrop (och deras argument) som är tillåtna och vilka inte. Seccomp-bpf används i Google Chrome, Chrome OS och backporterad till Ubuntu 12.04.
Innan du använder Arkose måste den installeras. Proceduren är standard:
$ sudo apt-get installera arkose-gui
Både GUI (arkose-gui) och kommandoradsverktyget (arkose) kommer att installeras. Det grafiska gränssnittet är så enkelt att jag inte ser poängen med att beskriva det, det är bättre att genast gå vidare till praktiken.
Låt oss starta Firefox som ett exempel:
$ sudo arkose -n direkt -p firefox
Detta kommando kommer att starta Firefox med webbåtkomst och PulseAudio. Eftersom varje nyskapad behållare har sin egen hemkatalog som standard, kommer firelis-profilen också att vara ny, utan installerade tillägg, om du har några.
"Men vänta! Varför sudo? - en rimlig fråga kan uppstå. Faktum är att vissa förberedande operationer endast är tillgängliga från under roten. Men jag skyndar mig att försäkra dig - det lanserade programmet kommer att fungera med rättigheterna för den nuvarande användaren.
Det händer att systemet kollapsar efter installation av uppdateringar. Verktyg som liknar komponenten Windows Systemåterställning skulle vara användbara här. Jag är stolt över att kunna säga att vi har dem! Och ett av dessa verktyg är Btrfs. Av fördelarna med det nya filsystemet från Oracle är det värt att notera följande:
För att utföra operationer på en ny generations filsystem, som att skapa ögonblicksbilder, defragmentera en volym och många andra, används kommandot btrfs. Dess syntax är i allmänhet följande:
btrfs<команда> <аргументы>
Vilken typ av operationer kan utföras på Btrfs? Nedan är de kommandon som jag tyckte var intressanta.
De återstående kommandona, även om de är intressanta, är relaterade till ämnet för artikeln endast i den mån, och vi kommer inte att överväga dem. Så för att skapa en ögonblicksbild av en undervolym med det aktuella datumet, till exempel rotkatalogen, skriver vi följande kommando:
$ sudo btrfs subvol snap -r / /snapshot-2013-01-16
$ sudo btrfs subvol del /snapshot-2013-01-16
En Btrfs-undervolym kan agera på två sätt: som en katalog och som ett VFS-objekt - något som kan monteras. Till exempel, när du installerar Ubuntu skapas två undervolymer - @ och @home. Den första innehåller systemfiler, den andra är användardata. Detta liknar att partitionera en disk, bara om tidigare en partition kunde innehålla, som regel, bara ett VFS-objekt, nu kan det finnas flera objekt på en partition samtidigt, och de kan kapslas.
Jag ser ingen mening med att skapa ögonblicksbilder manuellt - du kan helt enkelt glömma att göra detta. Tre automatiseringsscenarier kommer att tänka på:
Tyvärr, i Ubuntu 12.10 är den sista metoden inte tillgänglig av någon anledning, så det finns praktiskt taget inget val som sådan. Personligen föredrog jag att skriva ett cron-skript, men låt oss först skapa en undervolym där våra ögonblicksbilder kommer att lagras. För vad? Åtminstone för att inte skräpa ner rotmappen.
# mkdir /mnt/sda11 # montera /dev/sda11 /mnt/sda11 # btrfs subvol skapa /mnt/sda11/@snapshots # umount /mnt/sda11
Låt oss se vad dessa kommandon gör. Eftersom den faktiska roten av FS i det här ögonblicket otillgänglig (i ubuntu används subvolym @ som rot istället), vi måste montera den manuellt. I mitt fall är det på /dev/sda11. Med det tredje kommandot skapar vi undervolymen @snapshots - så om vi inte monterar den eller den verkliga roten kommer dess innehåll att vara otillgängligt. Och nu själva manuset:
Autosnap.sh #!/bin/bash set -e VOLUME=/dev/sda11 TMP_PATH=/tmp/snapshots MOUNT_OPTS=" [e-postskyddad]" # Aktuellt datum och tid - behövs för att namnge ögonblicksbildsmappar NOW="$(date +%Y%m%d%H%M)" NOW_SEC="$(date +%s)" if [ $# -ne 1 ] ; sedan # Om skriptet körs utan argument, ställ in standard till för en dag sedan OLDER_SEC="$(datum --datum "1 dag sedan" +%s)" annars # Om vi har ett argument, antar vi att detta är ett datum i vilket format som helst som datumkommandot förstår, med alla konsekvenser OLDER_SEC="$(datum --datum "$1" +%s)" fi # Subtrahera önskat datum från det aktuella datumet och konvertera det till minuter OLDER=$ (($NOW_SEC-$ OLDER_SEC)) OLDER_MIN=$(($OLDER/60)) [ ! -d "$(TMP_PATH)/" ] && mkdir "$(TMP_PATH)/" [ -z "`grep "$( TMP_PATH)" /proc/ mounts`" ] && montera "$(VOLUME)" "$(TMP_PATH)/" -o "$(MOUNT_OPTS)" && ( # Montera mkdir "$(TMP_PATH)/$(NU)/" # Skapa ögonblicksbilder btrfs subvol snap / "$(TMP_PATH)/$(NOW)/rootsnap" > /dev/null 2>&1 btrfs subvol snap /home "$(TMP_PATH)/$(NU)/homesnap" > /dev/ null 2>&1 ) && ( # Leta efter mappar med ögonblicksbilder äldre än det angivna datumet för f i `hitta "$(TMP_PATH)" -mindepth 1 -maxdepth 1 -typ d -cmin +"$OLDER_MIN" -print0 |xargs - 0`; gör btrfs subvol del "$(f)/rootsnap" > /dev/null 2>&1 && btrfs subvol del "$(f)/homesnap" > /dev/null 2>&1 && # och ta bort ögonblicksbilder och mappar som innehåller dem rmdir "$f" klar ) umount -l "$(TMP_PATH)" && rmdir "$(TMP_PATH)"
Det här skriptet kan placeras där det är bekvämt (jag personligen föredrar att placera sådana saker i /usr/local/bin, men detta är en smaksak), och köra det antingen från cron eller från rc.local. Som standard roterar skriptet ögonblicksbilder som är äldre än en dag, men du kan ange vilket nummer som helst i formatet för datumkommandot - viktigast av allt, glöm inte att omsluta citattecken.
För att inte dra skivan med den inspelade ubunten varje gång när några viktiga filer skadas, är det möjligt att lägga till startobjektet från ISO-bilden i Grub-menyn, vilket jag föreslår att göra. För att göra detta behöver du en icke-Btrfs-partition (eftersom av okända anledningar, standardinitramfs för Ubuntu ISO vill inte se bilden om den finns på partitionen med den beskrivna FS) och direkta händer. Lägg till följande rader i filen /etc/grub.d/40_custom:
Menypost "Ubuntu 12.10 i386 iso" ( insmod part_msdos insmod fat # Installera roten där vi får ISO-uppsättningen root="hd0,msdos7" # Sökväg till bilden i förhållande till ovanstående rotuppsättning isofile=/ubuntu-12.10-desktop- i386.iso # Montera som en loopback-enhet direkt i Grub loopback loop $isofile linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noeject noprompt -- initrd (loop)/casper/initrd.lz )
och kör kommandot för att uppdatera huvudkonfigurationen för Grub:
$ sudo update grub
Nu, även vid allvarlig skada på systemet - såvida inte starthanteraren och dess filer påverkas, kan du alltid starta från en ISO-avbild och ändra skadade filer eller återgå till ett tidigare systemtillstånd.
Om du arbetar i en chroot-miljö som root, så finns det en möjlighet att fly därifrån. Ett sätt är att använda systemanropet mknod() och sedan montera den riktiga roten. Att installera grsecurity patchset löser detta problem.
Btrfs-kommandon har standard- och förkortade former. Till exempel kan kommandot "btrfs undervolym ögonblicksbild" skrivas som "btrfs su sn".
Så låt oss säga att du tappade systemet och du måste återställa det från en Btrfs-ögonblicksbild. För att göra detta, starta från denna ISO-avbild, montera partitionen som du tappade systemet på - exakt partitionen, inte undervolymen! - och skriv in följande kommandon (naturligtvis justerat för dina ögonblicksbilder och partitioner):
# cd /mnt/sda11 # mv @ @_badroot # mv @snapshots/201302011434/rootsnap @
Detsamma, om nödvändigt, gör vi med @home och startar om. Om allt gick bra kan du ta bort @_badroot:
$ sudo btrfs subvol del @_badroot
På *nix-system finns det många sätt att skydda dig mot eller mildra dåliga experiment. Jag har recenserat några av dem. Det är dock värt att notera att alla dessa metoder är främst avsedda för experimenterande som gillar att gräva djupare in i systemet. De är inte lämpliga för att fånga skadlig programvara – de är lätta nog att upptäcka, även om de säkerligen ger en viss nivå av säkerhet.
btrfs(ibland uttalas smör fs) är ett nytt gratis filsystem som utvecklas med stöd av Oracle. Distribueras under GPL-licensen. Trots att utvecklingen fortfarande är långt ifrån klar, den 9 januari 2009, integrerades filsystemet i Linux kärna, och är tillgänglig i Debian Squueze.
Även om Btrfs inkluderades i 2.6.29-kärnan, säger utvecklarna att "med början från 2.6.31-kärnan planerar vi bara att göra diskändringsformatet kompatibelt hädanefter." Utvecklarna vill fortfarande förbättra användar-/hanteringsverktygen för att göra dem mer användarvänliga. För att få ytterligare information om Btrfs, på länken i avsnitt.
Ext2/3/4 kan omvandlas till Btrfs (men inte vice versa).
Debian Squeeze och nyare versioner stöder Btrfs.
btrfs-tools (i DebianSqueeze och högre)
Se även: Btrfs wiki FAQ
Skapa ett filsystem:
mkfs.btrfsHantera volymer, delvolymer, ögonblicksbilder; kontrollera filsystemets integritet:
btrfsctlSkanna efter btrfs filsystem:
btrfsctl -a btrfsctl -A /dev/sda2Skapa ögonblicksbilder och undervolymer:
montera -t btrfs -o subvol=. /dev/sda2 /mnt btrfsctl -s new_subvol_name /mnt btrfsctl -s snapshot_of_default /mnt/default btrfsctl -s ögonblicksbild_av_ny_subvol /mnt/new_subvol_namn btrfsctl_of_new_snapshot_ofn_s_snapshot_ofn_s_snapshot subvol ls /mntKontrollera filsystemets omfattningsträd:
btrfsckMata ut metadata i textform:
debug-tree debug-tree /dev/sda2 >& big_output_fileVisa btrfs-filsystem på hårddisken:
btrfs-show /dev/sda*Defragmentera (krävs inte som standard):
# btrfs filsystem defragmentera /mnt eller # btrfs filsystem defragmentera /mnt/file.isoExt3-filsystemet kan omvandlas till btrfs och arbeta vidare med det som ett nytt filsystem. Dessutom kommer tillståndet för det ursprungliga ext3-filsystemet att bli tillgängligt senare.
# Kör alltid fsck först %# fsck.ext3 -f /dev/xxx # Konvertera från Ext3->Btrfs %# btrfs-convert /dev/xxx # Montera det resulterande Btrfs-filsystemet %# mount -t btrfs /dev/xxx /btrfs # Montera ext3-ögonblicksbilden %# mount -t btrfs -o subvol=ext2_saved /dev/xxx /ext2_saved # Loopback-montera bildfilen %# mount -t ext3 -o loop,ro /ext2_saved/image /ext3Katalogen /ext3 visar nu tillståndet för det ursprungliga filsystemet.
Avmontering sker i omvänd ordning:
% # umount /ext3 % # umount /ext2_saved % # umount /btrfsDu kan återgå till ett ext3-filsystem och förlora dina ändringar:
% # btrfs-convert -r /dev/xxxEller så kan du stanna på btrfs och ta bort den sparade ext3 filsystembilden:
% # rm /ext2_saved/imageNotera: det nya filsystemet har ibland en mycket stor metadatastorlek efter konvertering.
Visa metadatastorlek:
# btrfs filsystem df /mnt/data1tb/Normalisera deras storlek:
btrfs fi balans /mnt/btrfsLäs mer: Konvertering från ext3 (engelska) och Konvertering av ext3fs till btrfs (ryska)
För btrfs, online (i farten) storleksändring av filsystemet är tillgänglig. Först måste du montera önskat avsnitt:
# mount -t btrfs /dev/xxx /mntLägger till 2 GB:
# btrfs filsystem ändra storlek +2G /mnt eller # btrfsctl -r +2g /mntMinska med 4 GB:
# btrfs filsystem ändra storlek -4g /mnt eller # btrfsctl -r -4g /mntStäll in storleken på 20 GB filsystem:
# btrfsctl -r 20g /mnt eller # btrfs filsystem ändra storlek 20g /mntAnvänder allt ledigt utrymme:
# btrfs filsystem ändra storlek max /mnt eller # btrfsctl -r max /mntOvanstående kommandon är endast giltiga för filsystemet. För att ändra storlek på en partition måste du använda andra verktyg som fdisk. Tänk på ett exempel för att minska en partition med 4 GB. Montera och reducera partitionen:
# mount -t btrfs /dev/xxx /mnt # btrfsctl -r -4g /mntAvmontera nu partitionen och använd fdisk:
# umount /mnt fdisk /dev/xxx # där dev/xxx är HDD med den sektion vi behöverOriginal: Hur man skapar och använder BTRFS ögonblicksbilder - Handledning
Författare: Igor Ljubuncic
Publiceringsdatum: 25 februari 2012
Översättning: A. Krivoshey
Överföringsdatum: april 2012
BTRFS är ett relativt nytt filsystem baserat på Suns ZFS, som förde mest innovation till Unix under de senaste 25 åren innan det togs över av Oracle. BTRFS anses fortfarande vara instabilt och därför inte lämpligt för produktionsapplikationer. Det här filsystemet har dock många användbara funktioner som är värda att utforska. En av dem är skapandet av ögonblicksbilder av systemet.
Låt mig förtydliga. Ögonblicksbilder är ögonblicksbilder av ett systems tillstånd. På sätt och vis, om du kopierar en fil och gör en säkerhetskopia, tar du en ögonblicksbild av den vid tidpunkten för kopieringen. Detta kan göras var som helst och när som helst. Tänk på ett filsystem som faktiskt kan hantera flera kopior av dina filer inom sin struktur, och låter dig använda dem hur du vill. Låter intressant, låt oss undersöka.
Innan vi börjar gräva djupare vill jag kort beskriva funktionerna i detta filsystem. BTRFS bör hantera alla systemoperationer relaterade till diskar och filhantering, som vanligtvis kräver ytterligare verktyg. BTRFS tillhandahåller defragmentering, lastbalansering, krympning, växande, hot swapping, RAID, ögonblicksbilder, komprimering, kloning och mer, allt inbyggt i filsystemdrivrutinen. Med andra filsystem kommer du sannolikt att behöva en mängd andra drivrutiner och användarverktyg för att hantera alla dessa typer av operationer, såsom en filsystemsdefragmenterare, RAID- och LVM-drivrutiner och så vidare.
Inbyggd funktionalitet betyder prestanda och användarvänlighet. Men för närvarande är BTRFS ännu inte fullt användbar på grund av instabilitet och prestandaförsämring jämfört med andra filsystem som Ext4. Men den har en enorm potential, så den kan inte ignoreras, utan måste studeras.
I den här guiden kommer jag att visa dig hur du hanterar ögonblicksbilder. Detta är en superrelevant funktion som gör att du kan skapa säkerhetskopior viktiga filer innan du gör några ändringar i dem och återställ dem vid behov. På ett sätt är det som Windows Systemåterställning plus en återställningsdrivrutin på filsystemnivå. Förresten, förutom ögonblicksbilder, i den här artikeln kan du också hitta några användbar information om det dagliga arbetet med filsystemet BTRFS. Testning gjordes på ett Fedora 16 Verne-system med ett KDE-skrivbord.
Du kan använda BTRFS för rotfilsystemet, med undantag för /boot, som måste formateras med ett traditionellt journalfilsystem. För enkelhetens skull kommer vi i den här guiden att arbeta med en separat enhet /dev/sdb1 formaterad i BTRFS och använd vid behov. I praktiken kan detta vara /home eller /data, eller vad som helst.
Vi tar /dev/sdb1 och monterar den. Sedan kommer vi att skapa några underavdelningar. Tänk på undersektioner som virtuella rotade träd, eftersom var och en av dem är en separat, oberoende träddatastruktur, även om data är densamma.
Nedan är sekvensen av kommandon som krävs för detta. Var inte rädd, vi ska förklara hur de fungerar.
$ btrfs undervolym skapa /mnt/data $ btrfs undervolym skapa /mnt/data/orig $ echo "Dedoimedo är l33t" > /mnt/data/orig/fil $ btrfs undervolym ögonblicksbild /mnt/data/orig /mnt/data/backup
/dev/sdb1 är monterad på /mnt. Vi skapar en undernyckel som heter data. Inuti den skapar vi ett annat underavsnitt som heter orig. Och redan inuti den kommer våra filer att skapas. Ur användarens synvinkel ser undersektioner ut som vanliga kataloger. Data och data/orig är med andra ord kataloger.
Därefter skapar vi en textfil i ursprunget som kallas fil som innehåller lite text. Slutligen skapar vi en ögonblicksbild av den ursprungliga undernyckeln och kallar den backup. Vi har nu en identisk kopia av det ursprungliga underavsnittet. Här är beviset:
Dessutom använder vi kommandot för att kontrollera btrfs undervolymlista för att se alla underavsnitt:
$ btrfs undervolymlista
Observera att varje underavdelning har sitt eget ID-nummer. Som vi snart kommer att se är detta viktigt.
För närvarande visar /mnt både original och backup som standard (allt i data). Vi kan ändra det. Kommer du ihåg att jag tidigare nämnde virtuella rotträdstrukturer? BTRFS låter dig ändra den virtuella rotkatalogen till någon av undernycklarna.
Att använda undersektioner och ögonblicksbilder innebär alltså helt enkelt att växla mellan olika datahierarkier. Du behöver inte ta bort, skriva över filer eller göra något annat. Du byter bara till en annan underavdelning. Vi ska nu se hur detta går till.
Team btrfs undervolym set-standard IDär allt vi behöver. Vi kommer att ställa in standardvyn till en annan partition, sedan avmontera enheten och montera den igen. Det är viktigt!
Nu, om du arbetar på ett filsystem som inte kan avmonteras eftersom det används, såsom /usr eller /etc, måste du starta om datorn för att ändringarna ska träda i kraft. Nu kommer ytterligare ett underavsnitt att visas i det givna katalogträdet. Användaren kommer inte att märka skillnaden, men data i katalogerna kommer att ändras.
För att verkligen se hur detta fungerar kommer vi att redigera filfilen i säkerhetskopian. Byt ut texten Dedoimedo är l33t med Dedoimedo är INTE l33t.
$ echo "Dedoimedo är INTE l33t" > /mnt/data/backup/file
Okej, vi känner till ID för alla underavdelningar. Därför kommer vi att montera ID:t som standardvy. Det betyder att så snart du monterar om /mnt kommer vi att se en fil med detta innehåll här.
$ btrfs undervolym set-default 257 /mnt $ umount /mnt $ mount /dev/sdb1 /mnt
Låt oss nu lägga tillbaka allt:
Detta kan göras så många gånger som behövs:
Ovan ändrade vi vyn mellan 257 och 260, det vill säga mellan ursprung och säkerhetskopiering, som ett resultat av detta kunde vi se innehållet i den modifierade filen. Vi visade helt enkelt användaren olika underavdelningar.
Som ett resultat, om vi vill se både ursprung och säkerhetskopia i datakatalogen, måste vi återställa standardvyn för undersektionen på översta nivån, det vill säga data. Observera att all data visas i /mnt-katalogen, eftersom vi valde den som monteringspunkt. Du kan dock använda vilken annan katalog som helst istället.
Snapshot-funktionen i BTRFS är implementerad ganska snyggt, och dess användning är inte svår. Naturligtvis måste du vara noga med att använda rätt dataträd och inte blanda ihop saker. Men nu känner du redan till de grundläggande BTRFS-kommandona och kan agera mer självsäkert. I framtiden kommer vi att testa Snapper, ett BTRFS-gränssnitt tillgängligt från openSUSE som gör att samma funktionalitet kan implementeras via ett grafiskt användargränssnitt för de som inte gillar kommandoraden.
Som en nörd har jag fortfarande för vana att ständigt experimentera med systemet: bygga om, installera icke-stabila RC-kärnor, inklusive experimentella uppdateringsgrenar. Ofta skulle jag till och med säga att jag bryter systemet för ofta (mitt personbästa, 2 veckor utan att installera om).
Vad betyder bryta? När något fungerar extremt dåligt, till exempel LibreOffice och Compiz som ofta kraschar och gillar att frysa, försöker jag antingen konfigurera om systemet, men det här är ganska långt och trist.
Exakt vad jag menar.
Om någon, som jag, gillar att experimentera med systemet och är trött på att återställa det varje gång, så här är ett alternativ för dig hur jag löste det här problemet för mig själv. Jag kommer att gå under katten.
How-to eller vanlig cykel.
Och klistra in något sånt här efter kommentarerna:
menypost "Ubuntu 12.10 amd64" (set isofile=/ubuntu-12.10-desktop-amd64.iso loopback loop $isofile linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofil noeject noprompt -- initrd (loop )/casper/initrd.lz )
Egentligen konfigurerades det i bilden och likheten (officiell ubuntu-wiki):
/Grub2/ISOBoot
Nu "nästan" det viktigaste, vi återskapar konfigurationen:
sudo update-grub
Allt, nu efter omstarten, genom att hålla nere shift-tangenten, kan vi starta minisystemet med Internet och GUI, oavsett tillståndet i det underliggande systemet.
Lite bakgrund:
Det var ursprungligen planerat att köra skriptet genom rc.local, men det kördes inte, sedan implementerades det genom dagliga cron, senare besegrade jag rc.local och stängde av ögonblicksbilder åt helvete i cron.
Skriptkod:
#!/bin/bash #Detta skript för att automatiskt skapa ögonblicksbild vid start #Version 1.2.9 set -e DATA="$(datum +%g%m%d%k%M%S)" VOLUME=/dev/sda1 [ ! -d "/tmp/$DATA/" ] && sudo mkdir "/tmp/$DATA/" montera $VOLUME "/tmp/$DATA/" && ( [ ! -d "/tmp/$DATA/snapshots/" ] && sudo mkdir "/tmp/$DATA/snapshots/" mkdir "/tmp/$DATA/snapshots/$DATA/" && cd "/tmp/$DATA/" btrfs undervolym ögonblicksbild ./@ ."/snapshots/$DATA /@_$(DATA)/" btrfs undervolym ögonblicksbild ./@home ."/snapshots/$DATA/@home_$(DATA)/" [ ! -f ./snapshots/snapshots.log ] && peka på ./snapshots/ snapshots.log chmod 777 ./snapshots/snapshots.log echo on_startup_$(datum +%X_%x) >> ./snapshots/snapshots.log umount -l "/tmp/$DATA/" && sudo rmdir "/tmp/ $DATA/" )
Den finns på /etc/btrfs_snapshot_onstartup
Lägg till den i /etc/rc.local och ge körrättigheter till båda filerna via sudo chmod +x "filsökväg"
Körningsloggningen till filen ./snapshots/snapshots.log kanske inte fungerar, då måste du skapa den manuellt under roträttigheter. Efter omstarten kommer han själv att få de nödvändiga rättigheterna.
Vi kan när som helst se status för systemögonblicksbilder genom att skriva:
cat /var/log/snapshots.log
Alla ögonblicksbilder läggs till partitionen med systemet i mappen ögonblicksbilder, där en mapp skapas för varje lyckad systemstart.
Vissa kanske säger att det inte lönar sig att ta ögonblicksbilder vid start. Inte alls, det motiverar, på en dag kan jag göra en massa ändringar i systemet och starta om det hundra gånger, och i alternativa fall kommer jag inte att kunna återvända till ögonblicket för en lyckad lansering (faktisk), men bara en dag sedan.
Möjlighet att starta manuellt:
#!/bin/bash #Detta skript för att automatiskt skapa ögonblicksbild #Version 1.2.8 set -e DATA=$(datum +%g%m%d%k%M%S) ########### ######################## [ ! -d /tmp/$DATA/ ] && sudo mkdir /tmp/$DATA/ sudo mount /dev/sda2 /tmp/$DATA/ && ( ################## ############################################### # [ ! -d /tmp/$DATA/snapshots/ ] && mkdir /tmp/$DATA/snapshots/ mkdir /tmp/$DATA/snapshots/$DATA/ cd /tmp/$DATA/ sudo btrfs undervolym ögonblicksbild ./@ . /snapshots/$DATA/@_$(DATA)/ sudo btrfs undervolym ögonblicksbild ./@home ./snapshots/$DATA/@home_$(DATA)/ ############## # ############################################### ## ### sudo chmod 777 ./snapshots/snapshots.log sudo echo this.hands_$(datum +%X_%x) >> ./snapshots/snapshots.log sudo cat ./snapshots/snapshots.log sov 1 sudo umount - l /tmp/$DATA/ && sudo rmdir /tmp/$DATA/ ############################## # ############################### sudo btrfs filsystem df / #information om fs ) read exit 0
Också, ögonblicksbilder tillåter inte bara att rulla tillbaka till ett visst tillstånd av systemet, utan också att extrahera den nödvändiga filen eller konfigurationen från den, vilket också ger en viss frihet när du tar bort filer av okänt ursprung.
#!/bin/bash #Version 0.0.9 set -e DATA=$(datum +%g%m%d%k%M%S) [ ! -d "/tmp/$DATA" ] && sudo mkdir "/tmp/$DATA" sudo mount /dev/sda1 "/tmp/$DATA" && ( cd "/tmp/$DATA/snapshots/" för i in * /* do sudo btrfs undervolym radera "$i" gjort för i in * do sudo rmdir -v "$i" klar echo cleanup_$(datum +%g%m%d%k%M%S) > "./snapshots .log" sudo cp "./snapshots.log" "/var/log/snapshots.log" sudo umount -l "/tmp/$DATA" && sudo rmdir "/tmp/$DATA" ) read exit 0
Det skulle också vara coolt att avsluta rengöringsskriptet så att det rensar upp alla ögonblicksbilder som är äldre än till exempel veckor, och inte alla tillgängliga, jag försökte ärligt talat, men det fungerade inte för mig. Sedan skulle den också kunna köras till exempel in i cron som standard, att köras en gång om dagen, och sedan inkluderas i det officiella btrfs installationsskriptet, jag tror med mindre modifieringar, detta är en ganska universell lösning, baserat på standardfunktioner btrfs.
Ja, jag vet lvm, men jag behöver inte ett extra lager av abstraktion från hårdvara och att sätta bilder på ett separat avsnitt är inte heller comme il faut.
UPD 1:
Tack vare användarna
Att flytta till ett nytt filsystem är alltid en svår uppgift. Vi litar redan på det gamla, beprövade filsystemet. Det kan till och med ha vissa begränsningar i funktionalitet och prestanda, men det har aldrig svikit oss. De nya filsystemen erbjuder mycket Ett stort antal funktioner, men frågan uppstår, kan man lita på dem?
Ett sådant filsystem är Btrfs. Detta är ett relativt nytt filsystem som dök upp 2007 och utvecklades av Oracle. Det erbjuder ett mycket brett utbud av nya funktioner och är därför av stort intresse för användare, men det finns fortfarande rykten på nätet om att detta filsystem ännu inte är lämpligt för permanent användning. I den här artikeln kommer vi att försöka ta reda på vilka möjligheter Btrfs ger oss, och även om det redan kan användas.
Btrfs utvecklades som sagt av Oracle 2007. Det finns ingen enskild avkodning av namnet, vissa säger att det betyder B-träd FS, andra Bättre Fs. Precis som i andra filsystem lagras all data på disken på specifika adresser. Dessa adresser lagras i metadata. Och det är här skillnaderna börjar. All metadata är organiserad som b-träd. Detta ger bättre prestanda när du arbetar med filsystemet, och låter dig även lägga till ett obegränsat antal filer.
Men inte ens det är allt. När du skriver över en fil skrivs inte data över, utan bara den modifierade delen kopieras till den nya platsen, sedan uppdateras metadatan helt enkelt. Detta gör att du kan skapa ögonblicksbilder av filsystemet som inte tar upp diskutrymme förrän många ändringar har gjorts. Om det gamla blocket inte längre behövs eftersom det inte är en del av någon ögonblicksbild, så raderas det automatiskt.
Btrfs har på grund av sin struktur en hel del möjligheter, till exempel kan den hantera dagens mycket stora lagringsmedia. Den maximala filsystemets storlek är 16 exabyte. Allt detta är möjligt tack vare korrekt användning av diskutrymme. Andra filsystem använder hela hårddisken, från början till slut, för att registrera sin struktur.
Btrfs gör saker annorlunda. Varje disk, oavsett dess storlek, är uppdelad i block om 1 GB för data och 256 MB för metadata. Dessa block sätts sedan ihop i grupper som var och en kan lagras på olika enheter, kan antalet sådana block i en grupp bero på RAID-nivå för gruppen. Volymhanteraren är redan integrerad i filsystemet, så ingen ytterligare programvara behöver användas.
Dataskydd och komprimering stöds även på filsystemsnivå, så här behöver du inte heller ytterligare program. Filsystemet btrfs stöder även dataspegling över flera medier. Här är andra funktioner i btrfs som kan nämnas:
Allt detta är mycket bra, men är det möjligt att använda det här filsystemet redan? Låt oss försöka hantera detta.
Det finns fortfarande många missuppfattningar kring Btrfs. Många av dem härrör från verkliga problem som var i början av utvecklingen av filsystemet. Men folk som tittar på denna information tittar inte på dess datum. Ja Btrfs var verkligen instabil och instabil. Det fanns många problem med dataförlust och många användare skrev om det, men det var redan 2010.
Den viktigaste delen av ett filsystem är dess lagringsformat på disk. Men formatet på Btrfs-filsystemet är redan fixat, det hände redan 2012 och det ändras inte längre om det inte är absolut nödvändigt. Bara detta är tillräckligt för att känna igen stabiliteten hos btrfs.
Men varför anses Btrfs av många vara instabila? Det finns flera anledningar till detta. För det första är det användarnas rädsla för ny teknik. Detta var inte bara i Linux, utan också i Microsoft, med deras övergång till NTFS, och i Apple. Men det finns en paradox här, XFS-filsystemet har gått igenom 20 år av stabil utveckling, men det mest stabila filsystemet är ext4, som utvecklades från en gaffel av ext3 2006. Faktum är att den är ett år äldre än Btrfs.
Det andra skälet är i aktiv utveckling, även om datalagringsformatet är fruset, är huvudkodbasen fortfarande aktivt utvecklad och det finns fortfarande mycket utrymme för prestandaförbättringar och nya funktioner.
Men det finns redan många bekräftelser på att filsystemet är klart. Detta filsystem används på Facebooks servrar, där företaget lagrar sin känsliga data. Och det i sig är en viktig faktor. Företag som Facebook, SuSE, RedHat, Oracle, Intel och andra arbetar med att förbättra filsystemet. Detta filsystem har använts som standard i SUSE Linux Enterprise sedan release 12. Alla dessa faktorer tillsammans bevisar att filsystemet är ganska klart att använda. Och med tanke på funktionaliteten och funktionerna hos btrfs kan den redan användas.
Varför det är värt att använda Btrfs och om det är värt det alls, kom på det. Nu skulle jag vilja visa lite övning så att du kan utvärdera detta filsystem i aktion. Jag kommer att ge exempel baserade på Ubuntu. Installera först filsystemhanteringsverktygen:
sudo apt installera btrfs-tools
Först måste du skapa ett filsystem. Låt oss säga att vi har två hårddiskar/dev/sdb och /dev/sdc vill vi skapa ett enda filsystem på dem med dataspegling. För att göra detta, gör bara:
sudo mkfs.btrfs /dev/sdb /dev/sdc
Standard är RAID0 för data (ingen redundans och RAID1 för metadata (duplicera till en enda disk). När du använder en enda disk dupliceras även metadata, om du vill inaktivera detta beteende kan du använda -m singeln alternativ:
sudo mkfs.btrfs -m singel /dev/sdb
Men genom att göra detta ökar du risken för dataförlust, för om metadatan går förlorad så är även datan det.
Du kan visa information om det nyskapade filsystemet med kommandot:
sudo btrfs filsystem visa /dev/sdb
Eller om alla monterade filsystem:
sudo btrfs filsystem show
För att montera, använd det vanliga kommandot:
sudo mount /dev/sdb /mnt
Du kan montera vilken som helst av enheterna, det kommer att ha samma effekt. Raden i /etc/fstab kommer att se ut så här:
/dev/sdb /mnt btrfs standardvärden 0 1
Nu tittar vi på information om upptaget diskutrymme:
sudo btrfs filsystem df /mnt
För att aktivera komprimering, lägg bara till komprimeringsalternativet vid montering. Du kan skicka lzo- eller zlib-algoritmen till den:
sudo mount -o compress=lzo /dev/sdb /mnt
$ sudo mount -o compress=zlib /dev/sdb /mnt
För att återställa en skadad Btrfs, använd alternativet för återställningsmontering:
sudo mount -o återställning /dev/sdb /mnt
Du kan ändra storlek på en volym i realtid med kommandot resize:
sudo btrfs filsystem ändra storlek -2g /mnt
Minska storleken med 2 gigabyte. Öka sedan med 1 gigabyte:
sudo btrfs filsystem ändra storlek +1g /mnt
Du kan skapa logiska partitioner, undervolymer inuti huvudpartitionen med Btrfs. De kan monteras inuti huvudpartitionen:
sudo btrfs undervolym skapa /mnt/sv1
$ sudo btrfs undervolym skapa /mnt/sv2
$ sudo btrfs undervolymlista /mnt
Du kan montera undervolymen med det id du fick med det senaste kommandot:
sudo umount /dev/sdb
sudo mount -o subvolid=258 /dev/sdb /mnt
Eller så kan du använda namnet:
sudo mount -o subvol=sv1 /dev/sdb /mnt
Montera först btrfs-roten istället för undervolymen:
sudo umount /mnt
sudo mount /dev/sdb /mnt/
För att ta bort en undervolym kan du använda monteringsvägen, till exempel:
sudo btrfs undervolym radera /mnt/sv1/
Filsystem Btrfs låter dig skapa ögonblicksbilder av ändringar. Snapshot-kommandot används för detta. Låt oss till exempel skapa en fil och sedan ta en ögonblicksbild:
tryck på /mnt/sv1/test1 /mnt/sv1/test2
Skapa en ögonblicksbild:
sudo btrfs undervolym ögonblicksbild /mnt/sv1 /mnt/sv1_snapshot