Пријава


Да ли сте заборавили лозинку?
prijatelji LUGoNSa
gnu.gif
linuxzasve.jpg
hulk.jpg
zextras_logo.png
 
Налазите се овде: Дом / Uputstva / Opšte / Btrfs

Btrfs

аутор: Goran Mekić Последња измена 14:31 12.12.2008.
Male tajne velikih kuvara

Btrfs ima neke veoma zgodne trikove u rukavu koji će biti opisani u ovom uputstvu. Na žalost, ovaj fajl sistem nije dovršen, ali kako se on bude razvijao i ovo uputstvo će biti dopunjivano. Da ne biste uništili neke bitne podatke, savetujem Vam da uzmete USB stick i koristite ga za isprobavanje btrfs-a. To je upravo ono što sam i ja uradio.

Ovo uputstvo će pretpostaviti da je Vaš USB stick prijavljen kao /dev/sdb. Ukoliko nije tako, zamenite svaku pomenu sdb sa Vašim uređajem.

Prvo, treba napraviti btrfs fajl sistem na uređaju:

# mkfs.btrfs /dev/sdb

Potom, uraditi mount:

# mount /dev/sdb /mnt/usb

Ovo je izlgedalo kao svaki drugi fajl sistem, zar ne? Pa da vidimo šta je to tako specijalno kod ovog fajl sistema.

 

Snapshot

Definitivno najzanimljivija vidljiva opcija je snapshot. Snapshot je "slika" fajl sistema u nekom trenutku vremena. Naime, svaki fajl sistem može da ima snapshot, koristeći komandu dd da prekopirate bitove nekog uređaja (obično je taj uređaj particija) na drugi uređaj ili fajl. U slučaju da se bitovi kopiraju u fajl, dobija se snapshot. Ovo ima 2 nedostatka. Prvi, što ne možete snapshot praviti na uređaju čije bitove kopirate i to što je dd veoma dugačka operacija, posebno u današnje vreme kada diskovi imaju i veličine oko 1TB. Btrfs snapshot je nešto drugo. On se čuva interno i ma kolika veličina diska/particije bila, operacija snimanja snapshot-a traje oko 1 sekunde, ako i toliko. Još bolje je što ako se fajl sistem ne menja, snapshot ne zauzima mesto. Ovo se postiže tako što snapshot čuva samo razlike između trenutnog stanja i stanja u trenutku uzimanja snapshot-a. Da bismo ilustrovali ovo, recimo da imate fajl od 1GB i uzmete snapshot. Ako na taj fajl dodate još 100MB, snapshot će zapamtiti samo razliku, tj. 100MB, pošto se prvih 1GB fajla nije menjalo. Zgodno, zar ne?

Sada kada znamo šta je snapshot, hajde da iskoristimo prednosti nove tehnologije. Prvo, napravimo jedan fajl na /mnt/usb a potom uzmimo snapshot /mnt/usb fajl sistema:

# echo "Ovo je testni fajl" >/mnt/usb/test.fajl
# btrfsctl -s noviSnapshot /mnt/usb

U buduće, ako ne dođe do hardverskog kvara, krađe USB stick-a ili formatiranja istog, Vaš fajl će uvek biti dostupan. Kako? Tako što svaki snapshot možete mount-ovati. Evo kako:

# mkdir /mnt/noviSnapshot
# mount -o subvol=noviSnapshot /dev/sdb /mnt/noviSnapshot

Veoma zgodno, zar ne? Samo pazite da ne obrišete fajlove sa snapshot-a, pošto je i to moguće. Dakle, Vaš test.fajl nije bezbedan od grešaka u rukovanju.

Do sad je moguće da ste se zapitali "A kako da znam koji sve snapshot-i su na kom uređaju". Postoji veoma jednostavna komanda koja će mount-ovati sve snapshot-e koji su prisutni na uređaju:

# mkdir /mnt/snapshots
# mount -o subvol=. /dev/sdb /mnt/snapshots
# ls -l /mnt/snapshots
total 1
dr-xr-xr-x 1 root root 18 Dec 12 12:12 default
drwx------ 1 root root  0 Dec 12 12:13 noviSnapshot

Svaki direktorijum koji je prikazan, osim "default" predstavlja snapshot, dok default predstavlja "običan" fajl sistem. To znači da /mnt/snapshots/default i /mnt/usb imaju isti sadržaj. Pogledajmo kako izgleda, recimo, /mnt/snapshots/noviSnapshot:

# ls -l /mnt/snapshots/noviSnapshot
total 1.0K
dr-xr-xr-x 1 root root 18 Dec 12 12:12 ./
dr-xr-xr-x 1 root root  0 Jan  1  1970 ../
-rw-r--r-- 1 root root 19 Dec 12 12:12 test.fajl

 

Subvolume

Verovatno ste primetili da je korišćena samo jedna particija, /dev/sdb. Tačnije, ceo disk ili USB stick u ovom slučaju. Dosta nezgodno, reći ćete, ako je uređaj koji želite da koristite hard disk i više particija. Nema problema. Rešenje je subvolume. Napravite snapshot, obrišite sve fajlove iz njega i dobili ste subvolume. Recimo, da želite da napravite /var subvolume. Uradite sledeće:

# mount /dev/sdb /mnt/usb
# mount -o subvolume=. /dev/sdb /mnt/snapshots
# btrfsctl -s var /mnt/usb
# ls -l /mnt/usb
total 2
dr-xr-xr-x 1 root root 18 Dec 12 12:12 default
drwx------ 1 root root  0 Dec 12 12:13 noviSnapshot
dr-xr-xr-x 1 root root  0 Dec 12 13:31 var
# rm -Rf /mnt/snapshots/var/*

Ništa specijalno niste napravili, zar ne? Ono što je moguće uraditi sada je ograničiti veličinu var subvolume-a:

# btrfsctl -r 1g /mnt/snapshots/var

Ovime ste ograničili veličinu var subvolume-a na 1GB. To ne znači da ste zauzeli 1GB prostora samo za var, nego da ste osigurali da količina podataka u var subvolume-u neće prerasti 1GB. Pretpostavimo da želite da dodate još 1GB prostora za var. Evo kako se to radi:

# btrfsctl -r +1g /mnt/snapshots/var

Naravno, var možete i smanjiti za neku količinu, recimo 100MB, pri čemu se ne piše +1g, nego -100m.

Verovatno ste se zapitali koja je onda razlika između snapshot i subvolume. Skoro pa nikakva, jer svaki snapshot predstavlja subvolume, dok nije svaki subvolume snapshot. Zvuči komplikovano, znam, ali evo jednostavnijeg objašnjenja. Kada napravite snapshot, on interno čuva razlike između trenutnog stanja i stanja u trenutku pravljena snapshot-a. Ako obrišete sve fajlove, govorite btrfs-u da ne čuva pomenute razlike, čime snapshot postaje subvolume. Dakle, te razlike koje se čuvaju su jedina razlika između snapshot-a i subvolume-a.

 

Copy on write

Ova opcija znači da Vaši podaci nikada neće biti nekonzistentni usled nestanka struje, recimo. Naravno, uvek postoji hadverski kvar koji kvari sreću. Copy on write, skraćeno COW, zauzima dosta memorije u radu. Ukoliko COW nije potreban, možete ga onemogućiti pri mount-ovanju:

# mount -o nodatacow /dev/sdb /mnt/usb

Osiguranje konzistentnosti podataka se na ovaj način gubi, ali se ne troši memorija za COW. Ovo je zgodno za, recimo, /tmp i /var/tmp.

 

Fstab

Sve je sjajno dok ručno radite sve, ali šta ako poželite da se mount-i odrade automatski? Sredite /etc/fstab, logično. Recimo da želite da /var bude var snapshot koji smo upravo napravili. Ovo, naravno, još uvek nije pametno uraditi jer btrfs nije stabilan, ali pretpostavimo da ne brinemo za podatke pa da želimo baš ovo da uradimo. Ovako bi izgledao deo /etc/fstab fajla vezan za var subvolume:

/dev/sdb               /var        btrfs            subvol=var    0 0

Dovoljno jednostavno. Zamislimo sad da na /var ne želimo COW. U tom slučaju, deo /etc/fstab fajla vezan za var subvolume bi izgledao ovako:

/dev/sdb               /var        btrfs            subvol=var,nodatacow    0 0

 

Mane

Kako je btrfs nedovršen, ima poveći broj mana. Recimo, brisanje snapshot-a je nemoguće. Naime, možete obrisati sve fajlove iz snapshot-a, čime će snapshot izgubiti svoju funkciju i postati normalan subvolume, ali ne možete obrisati direktorijum koji predstavlja subvolume (još nije implementirano, u planu je). Kako je svaki snapshot i subvolume, ista priča važi i za subvolume, pa vremenom možete dobiti ogromnu količinu subvolume direktorijuma koji ničemu ne služe.

 

Дејства на документ

« март 2024 »
март
поутсрчепесуне
123
45678910
11121314151617
18192021222324
25262728293031
lugons projekti

bal2con

Kako postati haker

tor.lugons.png

slackbook.png

gentoo_handbook

machine

BARBOSSA