Fórum Ubuntu CZ/SK

Ostatní => Tipy a triky pro Linux => Téma založeno: nettezzaumana 24 Března 2008, 21:55:25

Název: defragmentace v Linuxu
Přispěvatel: nettezzaumana 24 Března 2008, 21:55:25
Fujtajbl vespolek ..

Defragmentujte si filesystem. Neni pravda, ze Unixove filesystemy se nefragmentuji. Ja jsem si provedl kompletni defragmentaci a vysledkem jest rychlejsi system a mensi namahani disku ..
Nejvice se fragmentuji adresare s castym pristupem a zapisem (jako /var) a zvlaste na plnych (80%+) svazcich.

Otevrete konzoli a prihlaste se jako root.

Doinstalujte si pripadnou zavislost ::
apt-get install rsync

dale muzeme doinstalovat nejakou konzolovou gamesu, pac v prubehu defragmentace nam budou Xka zapovezena. Milovnici muziky si naistaluji treba :: mp3blaster

Defragmentacni nastroj stahneme z :: http://download.tuxfamily.org/syzygy42/pool/edgy/reacocard/pyfragtools_0.1.tar.gz (http://download.tuxfamily.org/syzygy42/pool/edgy/reacocard/pyfragtools_0.1.tar.gz)
Rozbalte do /usr/src a vlezte do rozbalene slozky, kde si pro ukraceni dlouhe chvile muzete precist README, nastroj nainstalujete klasickou metodou ::
make install

Poznamka :: tento zpusob neni vhodny pro filesystem XFS, ale defragmentovat s nim lze take, akorat je pomalejsi.

Take doporucuji ulozit nize uvedene prikazy do textoveho souboru v terminalu, ktery umistime do /root, protoze v konzoli nebudeme mit k dispozici internet a mys (i kdyz na to je nejakej balik pro mys v terminalu). Na kazdy radek ulozte jeden z prikazu nize (staci tam mit ty tucne zvyraznene), aby jste nemeli moc dlouhy vypis, kdyz si budete osvezovat pamet, co zadat, prikazem ::
cat howto_defrag.info // pojmenujete-li ho jako "howto_defrag.info"

Vhodna metoda pro ulozeni prikazu je prihlasit se rovnou jako root (zadne gsudo ani jine hnusy), vlezt k sobe domu $(cd ~) a zadat ::
cat << 'EOF' > howto_defrag.info
zacatek radku se nam zmeni na '>', vzdy pastneme jeden z prikazu nize a odklepneme enter (samozrejme si muzeme na radek napsat nejaky komentar), kdyz jsme hotovi, odmackneme entrem jeden prazdny radek '>' a zadame :: EOF
tim se nam soubor uzavre a bude obsahovat, co jsem do nej nastrkali, overime :: cat howto_defrag.info

Nyni se odhlaste z xsek a v prihlasovaci obrazovce vlezte do terminalu :: ctrl+alt+F?

Prihlaste se o5 jako root a zadejte ::
cd ~ // timto vlezeme domu

Dejte si uroven behu na 3. V beznem Linuxu zadate prikaz :: init 3
V *buntu, pac ma same speciality, je to IMHO :: telinit 3

Pokud nekoho zajima, proc jsme se odhlasovali z Xsek a zadavali runlevel 3, tak vezte, ze defrag dle sve nalady preskakuje otevrene fajly $(lsof), takze by se nam nedefragmentovali pod Xkama napr. vsechny knihovny apod ..

Nyni muzeme defragmentovat ::
Budeme defragmentovat nasledujici adresare :: /boot, /home, /lib, /opt, /usr/lib, /usr/share, /var a $PATH
Do tohoto seznamu si muzete volitelne pridat Vase dalsi adresare s daty, u me :: /mnt/data

nejdriv si vyexportujeme co budeme defragmentovat ::

export FRAG_PATH=/boot:/home:/lib:/opt:/usr/lib:/usr/share:/var:$PATH

zjistete a ulozte do logu stav pred defragmentaci (abychom meli na konci srovnani) ::

for x in $(echo $FRAG_PATH | sed 's/\:/\n/g'); do defrag -a $x >>defrag_before.log; done

nyni muzeme defragmentovat ::

for x in $(echo $FRAG_PATH | sed 's/\:/\n/g'); do defrag -n 7 $x; done

po skonceni operace opet zalogujeme vysledek, abychom meli s cim srovnavat ::

for x in $(echo $FRAG_PATH | sed 's/\:/\n/g'); do defrag -a $x >>defrag_after.log; done

muzeme se vratit z5 do Xsek a uz jen porovname vysledky ::
cat defrag_before.log | sed '/^[0-9]/d;/^\//p;/^=\+\sCOM/,/^=\+$/!d' >defrag_before.info
cat defrag_after.log | sed '/^[0-9]/d;/^\//p;/^=\+\sCOM/,/^=\+$/!d' >defrag_after.info

diff defrag_before.info defrag_after.info | sed '/Improve/d' // vyse jsme si vytvorili tyto dva soubory

Pro uplne srovnani mame plne puvodni logy v cele krase a dva vyse vytvorene zkracene vypisy s koncovkou .info

ps. jako domaci ukol necht nekdo vymysli co nejelegantnejsi metodu vyparsovani vysledku a jejich srovnani z .log souboru a idealne tam jeste vlozi cesty, ktere jsme defragmentovali .. budiz mu inspiraci ma primitivni metoda s RE na konci.

ps2. maly tip: aby jste ve 3. runlevelu nemuseli otrocky vypisovat prikazy ze souboru "howto_defrag.info", muzete pouzit jednu z nasledujicich metod. Vzdy si ale pred pridanim `techto` zpetnych uvozovek overte, ze se Vam vypisuje opravdu radek s prikaze ktery chcete, takze napr. ::

cat howto_defrag.info // vypise co jsme si ulozili, muzeme zacit otrocky opisovat
cat howto_defrag.info | head -1 // vypise prvni radek
`cat howto_defrag.info | head -n 1` // provede prikaz na prvnim radku
`cat howto_defrag.info | tail -n 1` // provede prikaz na poslednim radku
`cat howto_defrag.info | grep defrag_before` // provede prikaz s obsahujici "defrag_before"
`cat howto_defrag.info | grep export` // provede prikaz z exportovanim, pac jsme si to zajiste uz ulozili ve spravne forme

Skutecne to neni treba potupne bez mysi opisovat, pote co to v terminalu pokockujeme (ie. vypiseme prikazem cat)

Doufam, ze navod je srozumitelny i pro naproste zacatecniky.

enjoy by ntz

Název: Re: defragmentace v Linuxu
Přispěvatel: nettezzaumana 25 Března 2008, 09:39:36
ue. napadlo me jeste jedno reseni .. postup je daleko jednosdussi, ulozit jako skript a poustet cronem

Kód: [Vybrat]
#!/bin/bash

# zkontrolujte, jestli vam cesta vyhovuje
export FRAG_PATH=/boot:/home:/lib:/opt:/usr/lib:/usr/share:/var:$PATH;

for x in $(echo $FRAG_PATH | sed 's/\:/\n/g'); do defrag -a $x >>defrag_before.log; done
for x in $(echo $FRAG_PATH | sed 's/\:/\n/g'); do defrag -n 7 $x; done
for x in $(echo $FRAG_PATH | sed 's/\:/\n/g'); do defrag -a $x >>defrag_after.log; done
Název: Re: defragmentace v Linuxu
Přispěvatel: Milhouse 25 Března 2008, 10:14:06
Díky, díky, tohle se bude zrovna hodit. :) V HH po všech těch aktualizacích mám 37% fragmentaci.
Název: Re: defragmentace v Linuxu
Přispěvatel: karel kudrna 26 Března 2008, 22:34:53
ntz, jak jsi věděl, že to zrovna potřebuju? ;D
Název: Re: defragmentace v Linuxu
Přispěvatel: nettezzaumana 27 Března 2008, 17:56:52
Kód: [Vybrat]
for a in $(for z in defrag_before.log defrag_after.log; do y=0 && for x in $(cat $z | sed '/Frags\/MB\ Before/!d;s/^.\+\s\+\([0-9]\+\.[0-9]\+\)$/\1/'); do y=$(echo $x + $y | bc); done && echo $y; done); do echo "pred: $a"; done | sed '$s/pred/po/'
jste lini .. zde je jeden z moznych vysledku domaciho ukolu .. ;) ani prase se v tom nevyzna, ale muzete si ho doplnit do skriptu.

ps. je to jeden radek

Kód: [Vybrat]
echo && for a in $(for z in defrag_before.log defrag_after.log; do y=0 && for x in $(cat $z | sed '/Frags\/MB\ Before/!d;s/^.\+\s\+\([0-9]\+\.[0-9]\+\)$/\1/'); do y=$(echo $x + $y | bc); done && echo $y; done); do echo "fragmentu pred: $a"; done | sed '$s/pred/po/'

fragmentu pred: 62830.48
fragmentu po: 2302.63

Název: Re: defragmentace v Linuxu
Přispěvatel: karel kudrna 27 Března 2008, 18:59:36
já teda řešil domácí úkol drobet jinej...Kterak přesvědčit filefrag, aby mi řek jak moc mám SYSTÉM fragmentovanej, že mám home rozstřílený je docela jasný...našel jsem nějaký skripty, ale nemám to vyzkoušený.
http://forums.gentoo.org/viewtopic-p-3081971.html
Název: Re: defragmentace v Linuxu
Přispěvatel: nettezzaumana 28 Března 2008, 11:10:36
..Kterak přesvědčit filefrag, aby mi řek jak moc mám SYSTÉM fragmentovanej..
for x in $(echo $FRAG_PATH | sed 's/\:/\n/g'); do defrag -a $x >>defrag_before.log; done  // uz jsem to psal vyse
Název: Re: defragmentace v Linuxu
Přispěvatel: pavolzetor 28 Března 2008, 20:16:22
ja to prave skusam podla tohto navodu http://www.root.cz/clanky/defragmentace-disku-v-linuxu/

ak kecam mimo temy tak prosim o prepacenie  ;)
Název: Re: defragmentace v Linuxu
Přispěvatel: ameriko 29 Března 2008, 11:09:17
Tak to jste mě trochu zklamali,myslel jsem že právě v Linuxu se toho blbýho fragmentování vyhnu,jak se někde uvádí a tuhle defragmentaci nezvládnu....:-((
Název: Re: defragmentace v Linuxu
Přispěvatel: Tomáš Pikálek 29 Března 2008, 11:12:00
Tak to jste mě trochu zklamali,myslel jsem že právě v Linuxu se toho blbýho fragmentování vyhnu,jak se někde uvádí a tuhle defragmentaci nezvládnu....:-((
Pokud nemáte zaponěný oddíl (řekněme více než z 80%), je fragmentace minimální.
Jinak tady je to trochu ujednodušeji:
http://wiki.ubuntu.cz/Optimalizace%20ext3#head-ab5ca3d0f16f2d4eb4e9e665fa2441cd71c96f79
Název: Re: defragmentace v Linuxu
Přispěvatel: nettezzaumana 29 Března 2008, 11:35:41
ja to prave skusam podla tohto navodu http://www.root.cz/clanky/defragmentace-disku-v-linuxu/

ak kecam mimo temy tak prosim o prepacenie  ;)
<< dyk to je podle tohoto clanku !!! stejnym nastrojem, akorat popsane, jak na to a co defragmentovat
Tak to jste mě trochu zklamali,myslel jsem že právě v Linuxu se toho blbýho fragmentování vyhnu,jak se někde uvádí a tuhle defragmentaci nezvládnu....:-((
<< zvladnes, to jen slozite vypada. Nemusis provest naprosto nic jineho, nez si zkontrolovat, jestli ti vyhovuje tato cesta ::
export FRAG_PATH=/boot:/home:/lib:/opt:/usr/lib:/usr/share:/var:$PATH

a udelat napsane prikazy.neni na tom naopak nic tezkeho

4tomas.pikalek <<
Autor návodu: TomášPikálek :: http://wiki.ubuntu.cz/Optimalizace%20ext3#head-ab5ca3d0f16f2d4eb4e9e665fa2441cd71c96f79 (http://wiki.ubuntu.cz/Optimalizace%20ext3#head-ab5ca3d0f16f2d4eb4e9e665fa2441cd71c96f79)
Mas tam chybu. Vyhledej na strance "obouch". ;)
Název: Re: defragmentace v Linuxu
Přispěvatel: ameriko 29 Března 2008, 11:44:07
No teda tak to zkusím,ale jestli bude bluesgreen tak Vám pošlu notesa poštou a naopak Vy za domácí úkol dávat vše do pořádku...:-)
Název: Re: defragmentace v Linuxu
Přispěvatel: Tomáš Pikálek 29 Března 2008, 11:57:06
Mas tam chybu. Vyhledej na strance "obouch". ;)
Pardon, pravopis nikdy nebyla moje silná stránka ;D Teď jsem se radil s kamarádkou přes češtinu a už by to mělo být dobře, i když je ta věta prý celá nějaká divná ::)
Název: Re: defragmentace v Linuxu
Přispěvatel: nettezzaumana 29 Března 2008, 11:59:56
neboj, proved nasledujici kroky:
1) prihlas se jako root a uloz si nasledujici skript do slozky root treba jako "do_defrag.sh" a dej mu priznak na spousteni :: 'chmod +x do_defrag.sh'
ulozit ho muzes v termnalu pomoci :
cat << 'EOF' > /root/do_defrag.sh  // pastni skript, odentruj dva prazdne radky a napis EOF
Kód: [Vybrat]
#!/bin/bash

# zkontrolujte, jestli vam cesta vyhovuje
export FRAG_PATH=/boot:/home:/lib:/opt:/usr/lib:/usr/share:/var:$PATH;

for x in $(echo $FRAG_PATH | sed 's/\:/\n/g'); do defrag -a $x >>defrag_before.log; done
for x in $(echo $FRAG_PATH | sed 's/\:/\n/g'); do defrag -n 7 $x; done
for x in $(echo $FRAG_PATH | sed 's/\:/\n/g'); do defrag -a $x >>defrag_after.log; done

echo && for a in $(for z in defrag_before.log defrag_after.log; do y=0 && for x in $(cat $z | sed '/Frags\/MB\ Before/!d;s/^.\+\s\+\([0-9]\+\.[0-9]\+\)$/\1/'); do y=$(echo $x + $y | bc); done && echo $y; done); do echo "fragmentu pred: $a"; done | sed '$s/pred/po/'

pripadne zkontroluj, jestli ti v hodnote FRAG_PATH vyhovuje cesta, pripadne dalsi adresare dopln oddelene dvojteckou

2) zmackni ctr+alt+F5 a prihlas se jako root ..
3) dostan se do rezimu behu 3 (muzes i 1) pomoci prikazu :: telinit 3  // ps nejsem si jisty, muze to byt i 'init 3'
4) spust skript a pockej na vysledek :: /root/do_defrag.sh

5) ctr+alt+F4 // vlez si do konzole vedle a precti si par manpagi a nauc se treba vim .. spust vim a <zmackni> nasledujici znaky :: ':syntax on<enter><F1>'

zadny strach. je to naopak jak facka.

zdravi ntz
Název: Re: defragmentace v Linuxu
Přispěvatel: karel kudrna 29 Března 2008, 13:21:03
hoj,
nerad dělám něco, když v tom mám i drobnou nejasnost. neviděli jste nekde nějakej polopatismus co je to PATH? vím to jenom zhruba a rád bych se ujistil že moje tušení je správně. dík ;)
Název: Re: defragmentace v Linuxu
Přispěvatel: nettezzaumana 29 Března 2008, 13:22:12
hoj,
nerad dělám něco, když v tom mám i drobnou nejasnost. neviděli jste nekde nějakej polopatismus co je to PATH? vím to jenom zhruba a rád bych se ujistil že moje tušení je správně. dík ;)
ty voe karliku .. a google nemas ?? pokud ne, zkus 'echo $PATH'
Název: Re: defragmentace v Linuxu
Přispěvatel: nezik 29 Března 2008, 15:27:31
Tak to já provedu defrag výrazně jednodušeji. Hned jak vyjde HH :D
Název: Re: defragmentace v Linuxu
Přispěvatel: karel kudrna 29 Března 2008, 20:50:17
4ntz: jestli jsem to tedy aspoň částečně pochopil echo je prostý výpis, $ přinutí proměnnou se vyjátřit a PATH je cesta ve které hledá shell spouštěč...ach jo moje práce je teda výrazně jednodušší, ty koníčky mě dost vyčerpávaj... ;D
Název: Re: defragmentace v Linuxu
Přispěvatel: Senior 29 Března 2008, 21:12:26

Název: defragmentace v Linuxu
Můj domácí úkol.

Stáhněte si defragmentačni nástroj, balíček "pyfragtools_0.1.tar.gz":

 wget -c http://download.tuxfamily.org/syzygy42/pool/edgy/reacocard/pyfragtools_0.1.tar.gz

měl by být ve Vašem domovském adresáři.

Rozbalíte balíček a z adresáře "pyfragtools-0.1" nakopírujete soubor "defrag" do kořenového adresáře.

 sudo cp defrag /

V "Synapticu" zkontrolujte zda máte nainstalovaný program "rsync",případně doinstalujte a zda je také nainstalovaný "Python".
U mne byly oba programy nainstalovany.

Já mám vytvořený adresář "bin" ve svém domovském adresáři,ve kterém mám svoje skripty.

 PATH=$PATH:/home/pepa/bin   # místo "pepa" vaše jméno.
 export PATH

Pro kontrolu jestli je "/bin" v "PATH".
 echo $PATH
 

Defragmentace jednoho nebo dvou vybraných adresářů ze "systémového" adresáře, včetně celého "home".
Defragmentace adresářů,zadáním názvu jednoho nebo dvou vybraných adresářů,oddělených mezerou, jako parametr skriptu,(napsat jména adresářů za název skriptu).
V tomto skriptu je použito programu "defrag" jen pro analýzu vybraných adresářů,pro vyzkoušení.
Pro pravé defragmentování je třeba změnit v řádku 25  "./defrag -a" na "./defrag".

Na př. v terminálu:

 defrag_system.sh var bin

Skript:
Název skriptu " defrag_system.sh ".

#!/bin/bash
# defrag_system.sh - můj název skriptu
# Defragmentace adresářů v "systémovém adresáři",zadáním názvu jednoho nebo dvou adresářů,oddělených mezerou, jako parametr
# skriptu,(napsat jména za název skriptu).
echo "-------------------------------------"
 if [ $1 ] ; then                              # testuje jestli je zadán "první adresář"
  frag_dir1=/$1                     
  if [ -d $frag_dir1 ] ; then                  # testuje jestli existuje "adresář"
   echo "Adresář $frag_dir1 existuje."
  else
   echo "Adresář $frag_dir1 neexistuje,nebo je špatně zadaný."
  fi
     if [ $2 ] ; then                          # testuje jestli je zadán "druhý adresář"
      frag_dir2=/$2
      if [ -d $frag_dir2 ] ; then              # testuje jestli existuje "adresář"
       echo "Adresář $frag_dir2 existuje."
      else
       echo "Adresář $frag_dir2 neexistuje,nebo je špatně zadaný."
      fi 
     else
       echo "Je zadaný jeden adresář"
     fi
      cd /                                     # přejít do kořenového adresáře,kde je soubor "defrag"
       for frag_dir in $frag_dir1 $frag_dir2     
        do sudo ./defrag -a $frag_dir          # ř.25 "./defrag -a" provede jenom analýzu, "./defrag" defragmentuje
       done
 else
  echo "Nebyl zadán žádný adresář!!!"
 fi
  echo "A je hotovo".
exit 0

Název: Re: defragmentace v Linuxu
Přispěvatel: nettezzaumana 30 Března 2008, 12:13:51
ad.1) tam, kde lze predpokladat bile znaky v podmince (\s) patri vzdy uvozovky

ad.2) test na prvni dva parametry je hloupost, co spis ::

if [ -z "$@" ]; then echo "chybi parametry .." && exit; fi

input=( $@ ); # udelame pole ze vstupu
input_cn=${#input[\*]} # pocet prvku v poli -- '*' neescapovat, me to mrvi SMF, takze ji tak mam

for((x=0;x<$input_cn;x++)) {
  if [ ! -d "${input[$x]}" ]; then
    echo "${input[$x]}" neni adresarem"; else
    defrag -a "${input[$x]}";
  fi
}
Název: Re: defragmentace v Linuxu
Přispěvatel: Senior 30 Března 2008, 21:26:58
Díky za odpověď na  "můj domácí úkol", byl to jen takový nápad,ale Vaše připomínky k němu jsou pro mně poučné.
Název: Re: defragmentace v Linuxu
Přispěvatel: Senior 30 Března 2008, 21:42:51
pro nettezzaumana
input_cn=${#input[\*]} # pocet prvku v poli -- '*' neescapovat, me to mrvi SMF, takze ji tak mam
prosím o bližší vysvětlení  {#input[\*]},ta "mřížka" # na začátku pole značí poslední a nebo jaký má tam význam v definici pole jsem se s tím ještě nesetkal.díky
Název: Re: defragmentace v Linuxu
Přispěvatel: nettezzaumana 31 Března 2008, 12:46:35
4 senior..

nejsem expert na bashove pole.. pamatuju si jen nekolik veci .., vice zde :: http://tldp.org/LDP/abs/html/arrays.html (http://tldp.org/LDP/abs/html/arrays.html)
Název: Re: defragmentace v Linuxu
Přispěvatel: Senior 31 Března 2008, 17:39:48
Jo je to tam.Dík
Název: Re: defragmentace v Linuxu
Přispěvatel: jirihuf 27 Září 2009, 19:45:43
Nezvládne totéž boot z live cd, překopírování souborů na externí disk a pak zase zpátky? Nebo by to něco pochroumalo? (Když se jedná o oddíl root.)
Název: Re: defragmentace v Linuxu
Přispěvatel: NoWin 27 Září 2009, 20:48:53
BBM: Znáš fidefrag?
Název: Re: defragmentace v Linuxu
Přispěvatel: Šuohob 28 Září 2009, 21:50:54
Zdar, muzete pls nekdo ten soft reuploadnout, nebo poslat link ke stazeni? hlasi to 404...