Skocz do zawartości

Formatowanie Kilku Dsykow Ext3 Hotplug


digger123

Rekomendowane odpowiedzi

Witam

jesttem tutaj nowy niezaprzeczam ;) mmam pytanko. potrzebuje machnac cos takiego jak w tytule. potrzebuje sformatowac kilka dyskow "naraz" albo "osobno" na ext3 wszystko bedzie podpiete pod karte advanteha sata wykorzystujaca HOTPLUG, potrzebuje napisac cos takiego ( dla usera ) ze se kliknie na przycisk GO dysk sie sformatuje i juz, i tak chociaz dla 1 dysku reszte ogarne, nie wiem jak sie zabardzo za to zabrac szczegolnie ze ma byc to w Hotplug-u. problem polega na tym ze potrzebuje sformatowac w EXT3 kolo 200-350 dyskow

za wszelkie sugestie jak to ugryzc THX

Odnośnik do komentarza
Udostępnij na innych stronach

Podłączasz dysk i uruchamiasz skrypt (szkic)

#!/bin/bash

lista_menu(){
     for p in $( fdisk -l | grep '^/dev/' | cut -d' ' -f1 ); do
         echo "TRUE $p "
     done
}

menu(){
     zenity --title "Formatowanie Dysków" --text "bedzie formacik panie?" \
         --width=400 --height=300 \
         --list  --checklist \
         --column="zaznacz" --column "partycja" \
         $(lista_menu) \
         --separator " " --multiple \
         --print-column=2
}

for d in $(menu); do
     echo "mkfs.ext3 $d"
done

o to chodziło mniej więcej :?:

Odnośnik do komentarza
Udostępnij na innych stronach

Zaraz zaraz, ale mówimy o czystych dyskach? Ups :ph34r: Ten skrypt wyżej to wyłapywał już istniejące partycje. Wszystko da się zautomatyzować, ale czy nie możesz użyć po prostu http://gparted.sourceforge.net ?

 

Ja to bym jeszcze podłączył ten skrypt pod jakiś messagebus or something w celu pełnej automatyzacji :)

mówisz masz :)

#!/bin/bash

lista_menu(){
    for p in $( fdisk -l $1 | grep '^/dev/' | cut -d' ' -f1 ); do
        echo "TRUE $p "
    done
}

menu(){
    zenity --title "Formatowanie Dysków" --text "bedzie formacik panie?" \
        --width=400 --height=300 \
        --list  --checklist \
        --column="zaznacz" --column "partycja" \
        $(lista_menu $1) \
        --separator " " --multiple \
        --print-column=2
}

disk_format(){
    for d in $(menu $1); do
        echo "mkfs.ext3 $d"
    done
}

get_device(){
    echo "$1" \
        | grep "interface=org.freedesktop.DeviceKit.Disks.Device" \
        | cut -d'/' -f7  \
        | cut -d';' -f1 
}

dbus_out(){
    dbus-monitor --system --monitor interface="org.freedesktop.DeviceKit.Disks.Device"
}

dbus_read(){
    while read line; do
        DISK=$( get_device "$line" )
        for a in {a..z}; do
            if [ "$DISK" == "sd${a}" ]; then
                disk_format /dev/$DISK
                break
            fi
        done
    done
}

dbus_out | dbus_read

To jest wersja dla hotplug pendrive, który u mnie pojawia się jako sdc, czyli powinno być ok dla zwykłych dysków.

Kurcze nie wiedziałem jak zrobić coś w rodzaju sd[a-z] chyba że to kwestia literówki i dlatego taki brzydki for.

Po uruchomieniu skrypt sobie cichutko nasłuchuje i jak podłącze pendriva to jest event z menu tylko dla tego podłączonego dysku.

 

[EDIT]

poprawiłem skrypt, teraz zareaguje na dowolny dysk sda-sdz

Odnośnik do komentarza
Udostępnij na innych stronach

Jedynie zenity trzeba doinstalować, wszystko inne to podstawowe komponenty fedory.

yum install zenity

Nie napisałeś nic konkretnego więc nie wiem co Ci może nie działać. Gdybyś chociaż spróbował rozłożyć ten skrypt na poszczególne kroki to byś miał jakieś dane.

 

1) Pokaż wynik polecenia

fdisk -l

( parametr to l jak lampa, nie jedynka)

i napisz, który to dysk w tych wynikach

 

2) Wpisz polecenie

dbus-monitor --system --monitor interface="org.freedesktop.DeviceKit.Disks.Device"

podłącz dysk i po paru sekundach powinien się się jakiś monit pojawić. Wklej tutaj całe wyjście.

 

ps. jeśli nie potrafisz tego skryptu rozłożyć na części i dostosować do własnych potrzeb to może lepiej żebyś skorzystał z gparted, bo odpowiadasz tak jakbyś był nowicjuszem, a nie mam ochoty tłumaczyć każdego kroku w skrypcie.

Odnośnik do komentarza
Udostępnij na innych stronach

a wiec tak

zenity mam zainstalowane - takze to nie to. fdisk wyrzuca cos takiego ( wiem ze l nie 1 ;))

Disk /dev/dm-0 doesn't contain a valid partition table

Disk /dev/dm-1 doesn't contain a valid partition table

/dev/sda1

/dev/sda2

/dev/sda5

/dev/sdb1

/dev/sdb5

/dev/sdc1

/dev/sdd1

/dev/sde1

/dev/sde2

/dev/sde5

/dev/sde6

/dev/sdf1

 

Dbus wyrzuca cos takiego

signal sender=org.freedesktop.DBus -> dest=:1.46 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired

string ":1.46"

problem polega na tym ze (_wogole_ ? w ogóle) ORT tego skryptu nie moge uruchomic ( - tak atrybuty sa nadane ), krok po kroku wyglda na dzialajacy ale razem ni huhuhu

uzywam fedory z USB jesli to ma jakies znaczenie

 

bez $1 w wersji bez dbus odpala zenity ale tak jakby nieczytalo listy dev z $, okno zenity jest pusciutkie a w konsoli mam liste,

 

kiedys cos tam dlubalem sobie w skrypcikach ale zardzewialem lekko prze ostatnie 3 lata ;)

 

 

jeszcze raz wyjasnie o co dokladnie mi chodzi

potrzebuje sformatowac ok 300hdd na ext3, ma to wygladac tak

podlaczam dysk ( hot plug na sata ) to lata

klikam sobie w zenity ten dysk formatuje go wycigam dysk podlaczam nastepny klikam itd.

Odnośnik do komentarza
Udostępnij na innych stronach

* Może ten błąd "Disk /dev/dm-0 doesn't contain a valid partition table" rozwala listę. Skasuj błędy 2>/dev/null

ten kod

lista_menu(){
       for p in $( fdisk -l $1 2>/dev/null | grep '^/dev/' | cut -d' ' -f1 ); do
           echo "TRUE $p "
       done
   }
lista_menu

musi wyświetlać dane w takim formacie i nic poza tym

TRUE /dev/sdb1 
TRUE /dev/sdb2 
TRUE /dev/sda1 
TRUE /dev/sda2 
TRUE /dev/sda5 
TRUE /dev/sda6 
TRUE /dev/sda7

Swoją drogą co to za urządzenie /dev/dm-0 ? to nie są przypadkiem dyski z LVM? jeśli LVM jest na tych podłączanych dyskach to musisz to trochę przebudować, a jak nie to tylko zadbaj o to by się nie pojawiało.

 

* sygnał z dbus, który podałeś pojawia się u mnie jeszcze przed podłączeniem pendriva, a po podłączeniu pojawia się następny i to o niego chodzi. Jeśli nic nie widać w ciągu paru sekund to użyj w konsoli (ale nie w skyrpcie! ) --profile zamiast --monitor dla mniej gadatliwych komunikatów

dbus-monitor --system --profile

Zobacz który wiersz zawiera nazwę dysku i kombinuj.

reszta: man dbus-monitor

Odnośnik do komentarza
Udostępnij na innych stronach

rozbilem skrypt na kroczki

lista_menu(){

for p in $( fdisk -l $1 2>/dev/null | grep '^/dev/' | cut -d' ' -f1 ); do

echo "TRUE $p "

done

}

lista_menu

wynik

TRUE /dev/sda1

TRUE /dev/sda5

TRUE /dev/sdc1

TRUE /dev/sdb1

TRUE /dev/sdd1

TRUE /dev/sdd2

TRUE /dev/sdd5

TRUE /dev/sdd6

TRUE /dev/sde1

TRUE /dev/sde2

TRUE /dev/sde5

TRUE /dev/sdg1

TRUE /dev/sdf1

 

zenity w terminalu odpala mi okienko w ktorym tak jak powinno sa wszystkie dyski

 

ale jak proboje to odpalic w skrypcie to okno zenity jest puste - dlaczego ?? w terminalu chodzi a w skrypcie nie chce - jak znam zycie to jakis czeski blad tylko ze go nie moge znalezc - ktos mi moze pomoc

dzieki

 

Odnośnik do komentarza
Udostępnij na innych stronach

* no skoro z jednej funkcji masz już poprawne wyjście to przejdź do drugiej, czyli dodaj teraz funkcję menu() itd. małymi kroczkami.

Jeśli naprawdę masz takie trudności z tym skryptem to może poćwicz najpierw robienie krótszych skryptów i okienek zenity. Poza tym, nie widzę Twoich błędów, a u mnie to działa, więc jak do cholery mam pomóc Ci ja lub ktokolwiek inny? Pokaż jak uprościłeś ten kod, pokaż próby które poczyniłeś, pokaż wyjście z terminala dla nie działających skryptów. Jeśli dalej będziesz się ograniczał tylko do wypowiedzi "nie działa mi" to darujmy sobie dalszą pogawędkę. Poćwicz, porób kilka skryptów i wtedy wróć. Może bash to nie Twój język, może na co dzień programujesz w czymś innym, może lepiej zrobić to w tym w czym potrafisz.

 

* i w trochę innej sprawi.

Przypadkiem zostawiłem ten skrypt włączony i po paru minutach nagle zadziałał po raz drugi sam z siebie. Ozn. to tylko tyle, że dbus sprawdza okresowo stan. Wniosek jest prosty: wyłącz jak skończysz :)

Odnośnik do komentarza
Udostępnij na innych stronach

ok

postaram wyjasnic sie moj problem jeszcze raz, skrypt "dziala" ale tylko w konsoli. jesli uruchomie kazdy z krokow z osobna to lepiej albo gozej cos tam jest ( kwestia jeszcze dopasowania) ale jak tylko chce chocby uruchomic lista_menu i menu w 1 skrypcie to albo kompletnie nic sie niedzieje ( brak jakichkolwiek oznak nawet w terminalu albo odpala sie puste okienko zenity ( sporadycznie jest tam checkbox ), i nie za bardzo moge znalezc gdzie lezy przyczyna, natomiast jak odpale menu() z terminala to piekniepokazuje mi to co ma pokazywac.

 

p.s.

kazda z definicji musi konczyc sie nazwa tej definicji n.p.

menu() {

bla bla bla

}

menu

 

bo jak sobie daruje to ostanie menu to (_wogole_ ? w ogóle) ORT skrypt nie chce sie uruchomic

 

moze musze u siebie cus doinstalowac zeby to zagralo

 

wyglada jakby skrypt omija pierwsza definicje lista_menu () robi jakgdyby tylko ta druga ( obciolem to tylko do tych dwoch pierwszych )

Odnośnik do komentarza
Udostępnij na innych stronach

obcilem to tylko do podstawowych 3 funkcji

#!/bin/bash

lista_menu()
{
   for p in $( fdisk -l $1 2>/dev/null | grep '^/dev/' | cut -d' ' -f1 ); do
       echo "TRUE $p "
   done
}
lista_menu

menu()
{
   zenity --title "Formatowanie Dysków" --text "bedzie formacik panie?" \
       --width=400 --height=300 \
       --list  --checklist \
       --column="zaznacz" --column "partycja" \
       $(lista_menu $1) \
       --separator " " --multiple \
       --print-column=2 ;
}

disk_format()
{
   for d in $(menu $1); do
       echo "mkfs.ext3 $d"
   done
}
disk_format

 

i dziala jak narazie z tym ze na wyjsciu w konsoli mam cos takiego

 

TRUE /dev/sda1

TRUE /dev/sda5

TRUE /dev/sdb1

TRUE /dev/sdc1

TRUE /dev/sdc2

TRUE /dev/sdc5

TRUE /dev/sdd1

TRUE /dev/sde1

TRUE /dev/sde2

TRUE /dev/sde5

TRUE /dev/sde6

TRUE /dev/sdg1

TRUE /dev/sdf1

 

mkfs.ext3 /dev/sdf1

 

z tym ze formatowanie sie nie odbywa mkfs.ext3 /dev/sdf1 jest wyswietlane jako tekst nie jeako cos wykonywalnego.

 

moglby mi ktos pomoc z tym. nigdy nie uzywalem fedory, kiedys pisalem pare skryptow ale ten zaczyna mnie po malu denerwowac bo labo mam cos nie tak z swoja instalacja albo nie wiem

 

pozatym jak odpale ten skrypt z terminala to chodzi ( oprocz tego formatowania ) ale jak tylko sproboje kliknac na niego normalnie to uruchamia sie tylko menu() i okno zenity reszta jest jakby niewykonywana. Wiem ze na forum sa osoby dla ktorych te problemy to pryszcz dlatego prosze o pomoc w zaoszczedzeniu dupo-godzin przed monitorem

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

"lista_menu" jest uruchamiana raz wewnątrz funkcji "main" a nie pod zapisem definicji funkcji jak to zrobiłeś. To że widzisz w terminalu "TRUE /dev/sda1 ...itd. " to nic nie znaczy. Ta lista ma się wygenerować jako parametr zenity i wtedy to ma sens, czyli funkcja main pisana na piechotę dla Twojego jednego przymadku:

zenity --title "Formatowanie Dysków" --text "bedzie formacik panie?" \
     --width=400 --height=300 \
     --list --checklist \
     --column="zaznacz" --column "partycja" \
     TRUE /dev/sda1 \
     TRUE /dev/sda5 \
     TRUE /dev/sdb1 \
     TRUE /dev/sdc1 \
     TRUE /dev/sdc2 \
     TRUE /dev/sdc5 \
     TRUE /dev/sdd1 \
     TRUE /dev/sde1 \
     TRUE /dev/sde2 \
     TRUE /dev/sde5 \
     TRUE /dev/sde6 \
     TRUE /dev/sdg1 \
     TRUE /dev/sdf1 \
     --separator " " --multiple \
     --print-column=2;

A wiesz dlaczego jedynie wyświetla się mkfs.ext3 /dev/sdf1 zamiast formatować partycję?

wpisz w konsoli

man echo

man mkfs.ext3

itd. do każdego polecenia z tego skryptu.

 

Zamiast męczyć się nad tym skryptem, zleć to komuś albo zacznij czytać:

http://wiki.fedora.pl/wiki/Podstawy_Linuksa

http://dief.republika.pl/main.html

http://www.google.pl/search?q=bash+podstawy

http://library.gnome.org/users/zenity/

 

lub podejdź do tego trochę ambitniej i zmień język np.: http://www.google.pl/search?q=python+dbus

 

Jak widzisz nawet napisanie i edycja prostego skryptu wymaga odrobiny ćwiczeń. Nic nie zrobisz dalej jeśli nie zaczniesz czytać i wykonywać na bieżąco ćwiczeń. Odłóż ten skrypt na bok i się trochę poducz, bo widzę, że w życiu nie napisałeś żadnego programu.

 

Pozdrawiam i jeszcze raz proszę Cię, żebyś najpierw nauczył się języka, w którym chcesz ten skrypt/program wykonać.

Odnośnik do komentarza
Udostępnij na innych stronach

zawsze myslalem ze od tego sa fora aby ludzie mogli sobie jakos pomoc - jak widzisz nie jestem wtym biegly jak ty - jakbym mial z tym doczynienia na codzien to (_napewno_ → na pewno) ORT bym nie zadawal takich pytan tutaj. Niemniej jednak nie uazam tego skrypciku za jakis wyskokowy aby to komus zlecac ( pozatym siedzac na rozynch forach zauwazam ta sama tendencje wszyscy chca na wszystkim zarabiac, zlecac, polecac itd itp). ten skrypt spadl mi na leb jak cegla w drewnianym kosciele i ktos sie uparl ze mam go napisac, i go napisze tak czy siak. P.S. jakbym mial czas sie zaglabiac w setki tutoriali ksiazek itd poto zeby walnac 50 linijek kodu - na bank bym to zrobil ale niestety nie mam za bardzo czasu ( choci zaluje ) i reczej wiecej w zyciu mi sie to nie przyda ( chociaz kto wie ). Z gory i tak dziekuje za wszelaka pomoc jaka tu uzyskalem.

P.S.

moze ktos zna jakis sofik ktory sformatuje mi ext 3 pod winda - dlubne cus w c++, bo zanim dokopie sie do wszystkigo w fedorze to mi broda urosnie

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...