Experiente cu optiunile de configurare NFS ------------------------------------------ Dorim sa vedem ce se intampla cu un proces care acceseaza un sistem de fisiere montat de pe un alt calculator (sa-l numim in continuare NFS1) in cazul in care NFS1 nu mai e disponibil. Acest lucru se poate intampla in realitate daca se strica hardiscul pe care e localizat fizic NFS1, sau se opreste calculatorul care exporta NFS1. Vom scrie un program C care scrie date (numere intregi) in NFS1, apoi vom intrerupe exportarea lui NFS1, dupa care vom porni la loc exportarea lui NFS1. Sa vedem daca se pierd date in acest caz, toate sau doar o parte, ce se intampla daca micsorez/maresc bufferul de date pe care NFS il foloseste pentru scriere, dar time-out-ul, dar modul de acces (sincron/asincron), dar tipul montarii (hard/soft), si alte optiuni. codul programului C: #include #include #include int main() { FILE *f; long int i; char *c; c=(char*)malloc(255*sizeof(char)); for (i=0;i<254;i++) c[i]=' '; c[254]='\0'; // ca sa fie 255 de caractere in sir, cu tot cu terminatorul de sir if ((f=fopen("/root/unu/a.txt","w+"))==NULL) //in cazul in care /root/unu este NFS1 printf("Eroare la deschidere fisier"); else { for(i=0;i<40;i++) // in 40 de secunde programul termina executia { fprintf(f,"%s%s%s%s %d",c,c,c,c,i); // ca sa fie exact 1024 de bytes pt. o scriere sleep(1); } } fclose(f); } ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // CyclicWrite.cpp : Defines the entry point for the console application. // //#include "stdafx.h" #include #include #include #include #include #include using namespace std; int main() { FILE *f; //ofstream outFile("/root/unu/a.txt"); ofstream outFile("/root/luc/a.txt", ios::out); //ofstream outFile("c:\\temp\\a.txt", ios::out); long int i; char *c; c=(char*)malloc(255*sizeof(char)); for (i=0;i<254;i++) c[i]=' '; c[254]='\0'; // ca sa fie 255 de caractere in sir, cu tot cu terminatorul de sir /* if ((f=fopen("/root/unu/a.txt","w+"))==NULL) //in cazul in care /root/unu este NFS1 printf("Eroare la deschidere fisier"); */ //outFile.open("w"); if ( ! outFile.is_open() ) { cout << "Problem " << endl; } else { for(i=0;i<40;i++) // in 40 de secunde programul termina executia { while ( (! outFile.is_open()) )//|| (!outFile.good()) ) { cout << "NOT good" << endl; sleep(1); } //cout << "Printing" << endl; outFile << c << c << c << c << i << " " << endl; //cout << c << c << c << c << i << " " << endl; //outFile << "Test " << endl; outFile.flush(); sleep(1); //cout << "Test" << endl; //outFile.write("Test\n", 5); } //fprintf(f,"%s%s%s%s %d",c,c,c,c,i); // ca sa fie exact 1024 de bytes pt. o scriere } //fclose(f); outFile.close(); free(c); } Fiecare student va modifica "/root/unu" si va pune aici propriul sau director, de exemplu "/root/doi" O succesiune a etapelor necesare ar fi: 1, pe server) se modifica fisierul /etc/exports ca sa se exporte si sistemul NFS1 (in cazul acestui exemplu acesta este /root/unu, dar fiecare dintre voi aici va pune propriul lui director, pe care, bineinteles, va trebui sa-l creeze mai intai cu comanda mkdir) 2, pe server) se verifica daca sistemul NFS este pornit, cu comanda rpcinfo -p trebuie sa fie portmapper, mountd, nfslock porniti, din lista afisata de comanda. Daca nu sunt porniti, se pornesc, cu comanzile service nfs start service nfslock start 3, pe server) se exporta sistemul de fisiere, cu comanda exportfs -a 4, pe server) se verifica daca s-a reusit, cu comanda exportfs -v comanda trebuie sa returneze in lista de directoare exportata si o linie care incepe cu /root/unu, urmat de cine anume are dreptul sa importe acest sistem de fisiere si cu ce drepturi, drepturile sunt intre paranteze. Printre drepturi trebuie sa fie si rw si no_root_squash pentru ca altfel nu vom avea dreptul sa scriem acolo Restrictionarea spatiului pe disc --------------------------------- Vezi doi.pdf