Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: defragmentace v Linuxu  (Přečteno 21948 krát)

nettezzaumana

  • Host
defragmentace v Linuxu
« kdy: 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
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

« Poslední změna: 24 Března 2008, 22:00:24 od nettezzaumana »

nettezzaumana

  • Host
Re: defragmentace v Linuxu
« Odpověď #1 kdy: 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

Milhouse

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 5726
Re: defragmentace v Linuxu
« Odpověď #2 kdy: 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. Á. V. O. D. Y.
 "...naše práce není vidět, ale je důležitá!"

karel kudrna

  • Stálý člen
  • **
  • Příspěvků: 869
  • skill :: googllama
Re: defragmentace v Linuxu
« Odpověď #3 kdy: 26 Března 2008, 22:34:53 »
ntz, jak jsi věděl, že to zrovna potřebuju? ;D
prostý user
...selským rozumem...

nettezzaumana

  • Host
Re: defragmentace v Linuxu
« Odpověď #4 kdy: 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

« Poslední změna: 27 Března 2008, 18:01:47 od nettezzaumana »

karel kudrna

  • Stálý člen
  • **
  • Příspěvků: 869
  • skill :: googllama
Re: defragmentace v Linuxu
« Odpověď #5 kdy: 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
prostý user
...selským rozumem...

nettezzaumana

  • Host
Re: defragmentace v Linuxu
« Odpověď #6 kdy: 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

pavolzetor

  • Host
Re: defragmentace v Linuxu
« Odpověď #7 kdy: 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  ;)

ameriko

  • Návštěvník
  • Příspěvků: 71
Re: defragmentace v Linuxu
« Odpověď #8 kdy: 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....:-((

Tomáš Pikálek

  • Závislák
  • ***
  • Příspěvků: 1859
    • Tomáš Pikálek
Re: defragmentace v Linuxu
« Odpověď #9 kdy: 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

nettezzaumana

  • Host
Re: defragmentace v Linuxu
« Odpověď #10 kdy: 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
Mas tam chybu. Vyhledej na strance "obouch". ;)
« Poslední změna: 29 Března 2008, 11:40:27 od nettezzaumana »

ameriko

  • Návštěvník
  • Příspěvků: 71
Re: defragmentace v Linuxu
« Odpověď #11 kdy: 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...:-)

Tomáš Pikálek

  • Závislák
  • ***
  • Příspěvků: 1859
    • Tomáš Pikálek
Re: defragmentace v Linuxu
« Odpověď #12 kdy: 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á ::)

nettezzaumana

  • Host
Re: defragmentace v Linuxu
« Odpověď #13 kdy: 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

karel kudrna

  • Stálý člen
  • **
  • Příspěvků: 869
  • skill :: googllama
Re: defragmentace v Linuxu
« Odpověď #14 kdy: 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 ;)
prostý user
...selským rozumem...

nettezzaumana

  • Host
Re: defragmentace v Linuxu
« Odpověď #15 kdy: 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'

nezik

  • Stálý člen
  • **
  • Příspěvků: 723
    • Chalupa Himmelreich
Re: defragmentace v Linuxu
« Odpověď #16 kdy: 29 Března 2008, 15:27:31 »
Tak to já provedu defrag výrazně jednodušeji. Hned jak vyjde HH :D
Ubuntu 16.04
Kdesu není první slovo Hanáckeho opilce po probuzení, ale příkaz systému.
Ubuntu - nejlepší pařba od Diabla II. ;D

karel kudrna

  • Stálý člen
  • **
  • Příspěvků: 869
  • skill :: googllama
Re: defragmentace v Linuxu
« Odpověď #17 kdy: 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
prostý user
...selským rozumem...

Senior

  • Návštěvník
  • Příspěvků: 63
Re: defragmentace v Linuxu
« Odpověď #18 kdy: 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


nettezzaumana

  • Host
Re: defragmentace v Linuxu
« Odpověď #19 kdy: 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
}
« Poslední změna: 01 Dubna 2008, 09:39:28 od nettezzaumana »

Senior

  • Návštěvník
  • Příspěvků: 63
Re: defragmentace v Linuxu
« Odpověď #20 kdy: 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é.

Senior

  • Návštěvník
  • Příspěvků: 63
Re: defragmentace v Linuxu
« Odpověď #21 kdy: 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

nettezzaumana

  • Host
Re: defragmentace v Linuxu
« Odpověď #22 kdy: 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

Senior

  • Návštěvník
  • Příspěvků: 63
Re: defragmentace v Linuxu
« Odpověď #23 kdy: 31 Března 2008, 17:39:48 »
Jo je to tam.Dík

jirihuf

  • Stálý člen
  • **
  • Příspěvků: 894
Re: defragmentace v Linuxu
« Odpověď #24 kdy: 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.)
Have you tried turning it off and on again?

 

Provoz zaštiťuje spolek OpenAlt.