Implementarea unui modul de Software RAID ce folosește un dipozitiv logic de tip bloc ce va citi și scrie date de pe două dispozitive fizice, asigurând consistența și sincronizarea datelor de pe cele două dispozitive fizice. Tipul de RAID implementat va fi asemănător unui RAID1.
Să se scrie un modul de kernel care să implementeze funcționalitatea de software RAID. Software RAID oferă o abstractizare între dispozitivul logic și dispozitivele fizice. Implementarea va utiliza schema RAID1.
Mașina virtuală dispune de două hard disk-uri care vor reprezenta dispozitivele fizice: /dev/vdb
și /dev/vdc
. Sistemul de operare va oferi un dispozitiv logic (de tip bloc) care va interfața accesul din user space. Cererile de scriere în dispozitivul logic vor rezulta în două scrieri, câte una pentru fiecare hard disk. Hard disk-urile nu sunt partiționate. Se va considera că fiecare hard disk are o singură partiție ce acoperă întregul disk.
Fiecare partiție va stoca un sector împreună cu o sumă de control asociată (CRC32) pentru a asigura recuperarea din eroare. La fiecare citire se citesc informațiile aferente de pe ambele partiții. Dacă un sector al primei partiții deține date corupte (valoarea CRC este greșită) atunci se va citi sectorul de pe cea de-a doua partiție; în acelasi timp se va corecta sectorul primei partiții. Similar în cazul unei citiri a unui sector corupt de pe a doua partiție. În cazul în care un sector are valori CRC greșite pe ambele partiții, se va returna un cod de eroare corespunzător.
Pentru asigurarea recuperării din eroare se asociază fiecărui sector un cod CRC. Codurile CRC sunt stocate după LOGICAL_DISK_SIZE
octeți ai partiției (macro definit în header-ul de suport al temei). Structura pe disc va avea următoarea formă:
+-----------+-----------+-----------+ +---+---+---+ | sector1 | sector2 | sector3 |.....|C1 |C2 |C3 |..... +-----------+-----------+-----------+ +---+---+---+
unde C1
, C2
, C3
sunt valorile CRC pentru sectoarele sector1
, sector2
, sector3
. Zona CRC-urilor se regăsește imediat după LOGICAL_DISK_SIZE
octeți ai partiției.
Ca seed pentru CRC folosiți 0
(zero).
SSR_MAJOR
și minorul SSR_FIRST_MINOR
sub numele /dev/ssr
(prin macro-ul LOGICAL_DISK_NAME
)LOGICAL_DISK_NAME
- /dev/ssr
) va avea capacitatea de LOGICAL_DISK_SECTORS
(folosiți set_capacity pe structura struct gendisk)/dev/vdb
, respectiv /dev/vdc
, definite prin intermediul macro-urilor PHYSICAL_DISK1_NAME
, respectiv PHYSICAL_DISK2_NAME
KERNEL_SECTOR_SIZE
)
Pentru simplificarea procesului de corectare a temelor, dar și pentru a reduce greșelile temelor trimise, corectarea temelor se va face automat cu ajutorul testelor publice care se găsesc în noua infrastructură. Pentru testarea locală folosiți următoarele comezi:
$ git clone https://github.com/linux-kernel-labs/linux.git $ cd linux/tools/labs $ LABS=assignments/3-raid make skels # dezvoltarea temei se va efectua în directorul 3-raid/ $ make build $ make copy $ make boot
Dacă, în urma procesului de testare, sectoarele de pe ambele discuri conțin date nevalide, rezultând în erori de citire ce fac imposibilă funcționarea modulului, va trebui să refaceți cele două discuri în cadrul mașinii virtuale folosind comenzile:
dd if=/dev/zero of=/dev/vdb bs=1M dd if=/dev/zero of=/dev/vdc bs=1M
De asemenea, puteți obține același rezultat folosind următoarea comandă pentru pornirea mașinii virtuale:
rm disk{1,2}.img; make
/dev/vda
corespunzător yocto, va trebui să ștergeți imaginea de pe local core-image-minimal-qemux86.ext4
pentru ca scriptul qemu să o refacă.
Pentru a vă mări șansele de a obține nota maximă, citiți și respectați coding style-ul kernelului Linux descris din documentul Coding Style.
De asemenea, folosiți următoarele tool-uri de analiza statică pentru a verifica codul:
/path/to/linux-4.9.11/scripts/checkpatch.pl --no-tree --terse -f /path/to/your/src-file.c
sudo apt-get install sparse
cd /path/to/linux-4.9.11 make C=2 /path/to/your/src-file.c
sudo apt-get install cppcheck
cppcheck /path/to/your/src-file.c
Depunctările generale pentru teme se găsesc pe pagina de Indicații generale.
În cazuri excepționale (tema trece testele prin nerespectarea cerințelor) și în cazul în care tema nu trece toate testele se poate scădea mai mult decât este menționat mai sus.
Arhiva temei va fi submisă pe vmchecker, în conformitate cu precizările din pagina de reguli.
Din interfața vmchecker alegeți opțiunea Software RAID
, aferentă acestei teme.
Pentru întrebări legate de temă puteți consulta arhivele listei de discuții sau puteți trimite un e-mail (trebuie să fiți înregistrați). Vă rugăm să urmăriți și să respectați indicațiile de utilizare a listei.