Btrfs je datotečni sistem Copy-on-Write (CoW), ki temelji na obsegu. Velike datoteke so shranjene v več obsegih podatkov; in ko se te velike datoteke spremenijo, se ekstenzije, ki jih je treba spremeniti, kopirajo v nove, prazne ekstenzije na drugem mestu shranjevalne naprave in se spremenijo na novem mestu. Nato se ekstenzije velikih datotek ponovno povežejo, da kažejo na posodobljene ekstenzije. Stare ekstenzije se nikoli ne odstranijo takoj.
Tako funkcija kopiranja na zapis (CoW) v datotečnem sistemu Btrfs povzroči razdrobljenost. Razdrobljenost pomeni, da so obsegi podatkov velikih datotek razpršeni po celotni pomnilniški napravi. Niso trenutni. Torej se lahko zmanjša zmogljivost (hitrost branja / pisanja) datotečnega sistema.
Da bi rešili to težavo, je treba vsake toliko časa defragmentirati datotečni sistem Btrfs. Ta članek prikazuje, kako defragmentirati datotečni sistem Btrfs.
Okrajšave
Okrajšave (kratke oblike), uporabljene v tem članku, so naslednje:
- KRAVA - Kopiraj-na-piši
- Btrfs - Datotečni sistem B-drevesa
- HDD - Trdi disk
- SSD - SSD
- GB - Gigabajt
- VM - Navidezni stroj
Pogoji
Če želite preizkusiti primere iz tega članka:
- V računalniku morate imeti nameščen datotečni sistem Btrfs.
- Imeti morate rezervni HDD / SSD (katere koli velikosti) ali vsaj 1 brezplačno particijo HDD / SSD (katere koli velikosti).
Imam 20 GB trdega diska sdb na mojem računalniku Ubuntu. Na trdem disku bom ustvaril datotečni sistem Btrfs sdb.
$ sudo lsblk -e7Opomba: Vaš HDD / SSD bo verjetno imel drugačno ime kot moje in tudi particije. Zato jih odslej ne pozabite zamenjati z vašimi.
Če imate rezervni HDD / SSD, lahko na trdem disku / trdem disku ustvarite datotečni sistem Btrfs (brez particije). Lahko tudi ustvarite particijo na trdem disku / trdem disku in tam ustvarite datotečni sistem Btrfs.
Za pomoč pri namestitvi datotečnega sistema Btrfs v Ubuntu si oglejte članek Namestitev in uporaba Btrfs v Ubuntu 20.04 LTS.
Za pomoč pri namestitvi datotečnega sistema Btrfs v Fedori si oglejte članek Namestitev in uporaba Btrfs v Fedori 33.
Ustvarjanje datotečnega sistema Btrfs
Datotečni sistem Btrfs lahko ustvarite na trdem disku / trdem disku (nerazdeljen) ali na particiji HDD / SSD.
Če želite ustvariti datotečni sistem Btrfs na sdb HDD (celoten HDD, brez particij) in mu dajte oznako datotečnega sistema podatkov, zaženite naslednji ukaz:
$ sudo mkfs.btrfs -L data / dev / sdb
Zdaj bi bilo treba v datoteki sdb HDD.
Ustvari imenik / podatki za namestitev datotečnega sistema Btrfs, ki ste ga pravkar ustvarili, z naslednjim ukazom:
$ sudo mkdir -v / data
Če želite namestiti datotečni sistem Btrfs, ustvarjen na sdb Trdi disk na / podatki imenik, zaženite naslednji ukaz:
$ sudo mount / dev / sdb / data
Datotečni sistem Btrfs je zdaj treba namestiti, kot lahko vidite na spodnjem posnetku zaslona:
$ df -h / podatki
Ročno defragmentiranje datotečnega sistema Btrfs
Kot lahko vidite na spodnjem posnetku zaslona, sem kopiral dve datoteki v datotečni sistem Btrfs, nameščen na / podatki imenik za prikaz procesa defragmentacije datotečnega sistema Btrfs:
$ ls -lh / podatki
Rekurzivno lahko defragmentirate eno datoteko ali celoten podzvok / imenik.
Če želite defragmentirati eno datoteko / data / ubuntu-20.04.1-strežnik-v živo-amd64.izo, zagnali bomo naslednji ukaz:
$ sudo btrfs defragment datotečnega sistema -vf / data / ubuntu-20.04.1-live-server-amd64.izo
Datoteka / data / ubuntu-20.04.1-live-server-amd64.izo je treba defragmentirati.
Če želite defragmentirati vsako datoteko ali imenik datoteke / podatki imenik rekurzivno zaženite naslednji ukaz:
$ sudo btrfs defragmentira datotečni sistem -rvf / data
Kot lahko vidite, so vse datoteke v / podatki imenik so defragmentirani.
Na enak način, če ste imeli podvolumen / data / osimages, potem bi lahko defragmentirali vse datoteke / data / osimages subvolume rekurzivno z naslednjim ukazom:
$ sudo btrfs defragmentira datotečni sistem -rvf / data / osimages
Stiskanje datotečnega sistema Btrfs med defragmentiranjem
Datotečni sistem Btrfs vam omogoča stiskanje datotek, medtem ko jih defragmentirate.
Če želite defragmentirati vse datoteke v / podatki in jih stisnite z ZLIB hkrati stisnite algoritem, zaženite ukaz za defragmentiranje z -czlib možnost, kot sledi:
$ sudo btrfs defragmentira datotečni sistem -rvf -czlib / data
Če želite defragmentirati vse datoteke v / podatki in jih stisnite z ZSTD hkrati stisnite algoritem, zaženite ukaz za defragmentiranje z -czstd možnost, kot sledi:
$ sudo btrfs defragment datotečnega sistema -rvf -czstd / data
Če želite defragmentirati vse datoteke v / podatki in jih stisnite z LZO hkrati stisnite algoritem, zaženite ukaz za defragmentiranje z -clzo možnost, kot sledi:
$ sudo btrfs defragmentira datotečni sistem -rvf -clzo / data
Datoteke v / podatki imenik je treba hkrati defragmentirati in stisniti.
Na enak način lahko defragmentirate in stisnete tudi datoteke podskupina Btrfs.
Samodejno defragmentiranje datotečnega sistema Btrfs
Ob namestitvi lahko v datotečnem sistemu Btrfs omogočite samodejno defragmentacijo. Ta funkcija datotečnega sistema Btrfs bo samodejno defragmentirala vse datoteke vašega datotečnega sistema Btrfs.
Če želite namestiti datotečni sistem Btrfs, ustvarjen na sdb HDD v / podatki V imeniku z omogočeno samodejno defragmentacijo ob zagonu morate dodati vnos za datotečni sistem Btrfs v / etc / fstab mapa.
Najprej poiščite UUID datotečnega sistema Btrfs, ustvarjenega na sdb Trdi disk, kot sledi:
$ sudo blkid / dev / sdb
Kot lahko vidite, je UUID datotečnega sistema Btrfs, ustvarjenega na sdb HDD je 60afc092-e0fa-4b65-81fd-5dfd7dd884de.
Za vas bo drugače. Torej, odslej ga ne pozabite zamenjati s svojim.
Odprite / etc / fstab datoteko z nano urejevalnik besedila:
$ sudo nano / etc / fstab
Na konec vrstice dodajte naslednjo vrstico / etc / fstab mapa:
UUID = 60afc092-e0fa-4b65-81fd-5dfd7dd884de / data btrfs autodefrag 0 0
Ko končate, pritisnite
Da bodo spremembe začele veljati, znova zaženite računalnik z naslednjim ukazom:
$ sudo znova zaženite
Kot lahko vidite, je datotečni sistem Btrfs, ustvarjen v sdb HDD je nameščen na / podatki imenik z omogočeno samodejno defragmentacijo.
Težave z defragmentiranjem datotečnega sistema Btrfs
Čeprav se zdi, da defragmentacija izboljša delovanje datotečnega sistema, obstaja nekaj težav z defragmentiranjem datotečnega sistema Btrfs.
Ker je Btrfs datotečni sistem Copy-on-Write (CoW), morate za razumevanje težav z defragmentacijo datotečnega sistema Btrfs razumeti funkcijo Copy-on-Write datotečnega sistema Btrfs.
Recimo, da imate veliko datoteko (datoteka1), ki uporablja 100 ekstenzij (ekstente si lahko predstavljate kot bloke datotek) datotečnega sistema Btrfs. Če ustvarite novo kopijo te velike datoteke (datoteka2) v istem datotečnem sistemu Btrfs boste videli, da ni zaseden dodaten prostor na disku. To je zato, ker so datoteke enake in 100 obsegov vsake datoteke je enakih. Torej datotečni sistem Btrfs uporablja enake ekstenzije za obe datoteki.
Slika 1: datoteka1 in datoteka2 so enaki in si delijo iste ekstenzije datotečnega sistema Btrfs, da prihranijo prostor na disku
Zdaj ste recimo spremenili eno od kopij velike datoteke (datoteka2). Sprememba mora spremeniti 10 od 100 obsegov. Datotečni sistem Btrfs bo kopiral zahtevanih 10 ekstenzij na drugo neuporabljeno mesto (recimo, e101-e110) datotečnega sistema in jih tam spremenite. Ko so spremembe zapisane na disk, bo datotečni sistem Btrfs ponovno povezal ekstente, tako da se spremembe odražajo v veliki datoteki. Postopek je prikazan na spodnji sliki:
Slika 2: 10 razširitve se spremenijo v datoteka2. Torej, ekstenzije so znova povezane v datotečnem sistemu Btrfs.
Iz slik 1 in 2 lahko razumete, kako deluje kopiranje na zapis (CoW) in kako datotečni sistem Btrfs uporablja kopiranje na zapis (CoW) za prihranek prostora na disku.
Zdaj, ko veste, kako deluje funkcija kopiranja na zapis (CoW) v datotečnem sistemu Btrfs, boste razumeli težave z defragmentiranjem datotečnega sistema Btrfs.
- Defragmentirane datoteke premikajo obsege podatkov Btrfs in jih poskušajo poravnati eno za drugo. Torej, povezave Copy-on-Write med kopijami datoteke se prekinejo. To bo povečalo odvečne obsege podatkov in tudi uporabo diska datotečnega sistema Btrfs, ki je bil prej shranjen z delitvijo obsegov podatkov med enakimi (ali skoraj enakimi) kopijami datoteke.
- Če ima podzvok Btrfs več posnetkov, bo defragmentiranje podzvoka prekinilo povezave Kopiraj-na-zapis med podzvokom in posnetki. To bo povečalo uporabo diskovnega sistema Btrfs.
- Če datotečni sistem Btrfs uporabljate za velike zbirke podatkov ali slike navideznih strojev (za shranjevanje podatkov / diskov VM), bo defragmentiranje datotečnega sistema negativno vplivalo tudi na delovanje datotečnega sistema.
Zaključek
V tem članku ste se naučili, kako rekurzivno defragmentirati eno datoteko in datoteke v imeniku / podvolumu datotečnega sistema Btrfs. Naučili ste se tudi, kako omogočiti samodejno defragmentacijo v datotečnem sistemu Btrfs v času priklopa. Na koncu je članek razpravljal o nekaterih težavah z defragmentiranjem datotečnega sistema Btrfs.