escola universitÀria d‟enginyeria tÈcnica de...
TRANSCRIPT
ESCOLA UNIVERSITÀRIA D‟ENGINYERIA
TÈCNICA DE TELECOMUNICACIÓ LA SALLE
TREBALL FI DE CARRERA
ENGINYERIA TÈCNICA EN INFORMÀTICA DE SISTEMES
ALUMNE PROFESSOR PONENT
Oriol Martí Agustí Xavier Canaleta Llampallas
ESTUDI DEL SISTEMA DE
FITXERS REISERFS
ACTA DE L'EXAMEN DEL TREBALL FI DE CARRERA
Reunit el Tribunal qualificador en el dia de la data, l'alumne
D. Oriol Martí Agustí
va exposar el seu Treball de Fi de Carrera, el qual va tractar sobre el tema següent:
ESTUDI DEL SISTEMA DE FITXERS REISERFS
Acabada l'exposició i contestades per part de l'alumne les objeccions formulades pels Srs. membres del tribunal, aquest valorà l'esmentat Treball amb la qualificació de
Barcelona,
VOCAL DEL TRIBUNAL VOCAL DEL TRIBUNAL
PRESIDENT DEL TRIBUNAL
Estudi del Sistema de Fitxers ReiserFS
Abstract
Aquest treball pretén fer un estudi, disseny i implementació d‟una eina docent que ajudi
a l‟estudiant a entendre el funcionament d‟un sistema de fitxers específic en profunditat.
En aquest cas es centra en el sistema de fitxers ReiserFS per a Linux i donar suport a
l‟assignatura de sistemes operatius mitjançant una aplicació docent que doni una visió a
nivell de programació.
Estudi del Sistema de Fitxers ReiserFS
Resum
Aquest treball pretén fer un estudi dels sistemes de fitxers de Linux, ens centrarem en
un sistema de fitxers ReiserFS que va integrar funcionalitats que més endavant van ser
usades per altres sistemes de fitxers.
També farem una referència als sistemes operatius per a situar-nos, on es troba el
sistema de fitxers en el sistema operatiu i de quines altres capes esta compost.
L‟estudi pretén donar més informació d‟alguns sistemes de fitxers que han aparegut, la
importància que ha significat l‟aparició del ReiserFS, mes enllà d‟un sistema que
implementa journaling i una comparativa entre els sistemes de fitxers per Linux.
El treball també consta d‟una part de documentació dels orígens d‟aquest sistema de
fitxers, les noves funcionalitats que va incorporar i una mirada al futur als nous sistemes
de fitxers que estan sortint i sortiran en l‟actualitat.
A continuació analitzarem totes les parts d‟aquest sistema de fitxers part per part i
profunditat de programador per entendre tot el seu funcionament tant a l‟hora
d‟emmagatzemar les dades com les eines per organitzar-les.
Per acabar implementarem la nostra eina docent i la compararem amb altres aplicacions
semblants, la intenció d‟aquesta aplicació docent creada amb la intenció d‟ajudar als
alumnes de l‟assignatura de sistemes operatius, és que mitjançant aquesta eina i altres
eines ja creades en altres TFC ( ext2 i FAT16) , tinguin una visió més àmplia dels
sistemes de fitxers i les diferents funcionalitats.
Estudi del Sistema de Fitxers ReiserFS
Índex
1.Introducció ................................................................................. 4
1.1 Enfocament del treball ......................................................................... 4
1.2 Objectius .............................................................................................. 4
1.3 Estructura de la memòria ..................................................................... 5
2.Descripció de l’entorn ............................................................... 6
2.1. Introducció als sistemes operatius ...................................................... 6
2.2. Introducció als sistemes de fitxers ...................................................... 7
2.3. Origen de ReiserFS ............................................................................. 8
2.4. Funcionalitats de ReiserFS ................................................................. 8
2.5. Nous sistemes de fitxers ................................................................... 10
2.6 Evolució del Sistemes de Fitxers ....................................................... 11
2.6.1 Sistemes de Fitxers “Prehistòrics” ................................................................. 11
2.6.2 CP/M .............................................................................................................. 11 2.6.3 Temps de FAT ............................................................................................... 12
2.6.4 HFS ................................................................................................................ 13 2.6.5 Sistemes de Fitxers Amiga ............................................................................ 13
2.6.6 Sistemes de Fitxers Unix i Linux .................................................................. 14 2.6.6.1 Minix .................................................................................................. 14 2.6.6.2 EXT2 .................................................................................................. 15
2.6.6.3 ReiserFS ............................................................................................. 15 2.6.6.4 EXT3 .................................................................................................. 15 2.6.6.5 JFS ...................................................................................................... 16
2.6.6.6 XFS ..................................................................................................... 16 2.6.6.7 Reiser4 ................................................................................................ 16
2.6.7 IBM i Microsoft ............................................................................................. 17 2.6.7.1 OS2/2 i HPFS ..................................................................................... 17
2.6.7.2 NTFS .................................................................................................. 17 2.6.8 ZFS ................................................................................................................ 18 2.6.9 Figura de la evolució dels sistemes Linux. .................................................... 19
3.Estructura física de dades ...................................................... 20
3.1 SuperBlock ......................................................................................... 20
3.2 Bitmap Block ..................................................................................... 23
3.3 Arbre del Sistema de Fitxers .............................................................. 25
3.3.1 Block Header ................................................................................................. 26 3.3.2 Key Block ...................................................................................................... 26
3.3.2.1 Key versió 1 ........................................................................................ 27
Estudi del Sistema de Fitxers ReiserFS
3.3.2.2 Key versió 2 ........................................................................................ 27 3.3.3 Tipus de Node ................................................................................................ 28
3.3.3.1 Node Intern ......................................................................................... 28 3.3.3.2 Node Fulla .......................................................................................... 29
3.3.4 Items .............................................................................................................. 30 3.3.4.1 Stat items ............................................................................................ 30 3.3.4.2 Directory Ítems ................................................................................... 32 3.3.4.3 Direct Ítems ........................................................................................ 33 3.3.4.4 Indirect Ítems ...................................................................................... 34
3.4 Journal ................................................................................................ 35
3.4.1 Journal Header ............................................................................................... 35
3.4.2 Transaccions .................................................................................................. 36 3.4.2.1 Description bloc .................................................................................. 36 3.4.2.2 Commit bloc ....................................................................................... 38
4.Explicació comandes bàsiques ............................................... 40
4.1. Llistat root ......................................................................................... 40
4.2. Arbre de directoris ............................................................................ 41
4.3. Mostrar el contingut d‟un fitxer ........................................................ 42
4.3.1 Fitxer petit (direct item) ................................................................................. 43 4.3.2 Fitxer gran (indirect item) ............................................................................. 44
4.4. Creació d‟una carpeta ....................................................................... 46
4.5. Creació d‟un fitxer ............................................................................ 47
4.6. Esborrat d‟un fitxer ........................................................................... 48
4.7. Esborrat d‟un directori ...................................................................... 49
5.Aplicacions similars ................................................................ 50
5.1.RFSTOOL .......................................................................................... 50
5.2.UFS Explorer Batch ........................................................................... 51
6.Aplicació resiserfs_rdr ............................................................ 52
6.1. Introducció ........................................................................................ 52
6.2. Anàlisi requisits ................................................................................ 52
6.2.1. Requisits funcionals ...................................................................................... 52 6.2.2. Requisits usabilitat ........................................................................................ 53
6.3. Decisions disseny .............................................................................. 53
6.3.1. Entorn execució ............................................................................................ 53 6.3.2. Entorn programació ...................................................................................... 53
Estudi del Sistema de Fitxers ReiserFS
6.4. Anàlisi funcional ............................................................................... 54
6.4.1. Modelat estàtic .............................................................................................. 54 6.4.1.1. Diagrama de casos d‟ús ..................................................................... 54 6.4.1.2. Diagrama de classes........................................................................... 58
6.4.2. Modelat dinàmic ........................................................................................... 64
6.5. Proves realitzades ............................................................................. 64
6.6. Posada en explotació ......................................................................... 65
7.Manual de funcionament ........................................................ 66
7.1 Partició ReiserFs ................................................................................ 66
7.1.1 Creació de la partició ReiserFS ..................................................................... 66
7.1.2 Muntar partició en Linux ............................................................................... 66
7.2 Execució del programa ...................................................................... 67
7.2.1 Contingut Superblock .................................................................................... 68
7.2.2 Contingut Bitmap Block ................................................................................ 69
7.2.3 Arbre de directoris ......................................................................................... 70 7.2.4 Journal ........................................................................................................... 71
8.Cost realització projecte ......................................................... 75
9.Conclusions .............................................................................. 76
10.Línies de futur ....................................................................... 77
11.Bibliografia ............................................................................ 78
Estudi del Sistema de Fitxers ReiserFS
Índex de figures Figura 1. Model 4 capes d‟un sistema operatiu [1] .......................................................... 6 Figura 2. Floppy Disck amb FAT ................................................................................... 12
Figura 3. Piscines d'emmagatzemament, ZFS [2] .......................................................... 18 Figura 4. Evolució dels sistemes Linux .......................................................................... 19 Figura 5. Imatge d‟una partició ReiserFS ....................................................................... 20 Figura 6. SuperBlock ...................................................................................................... 20 Figura 7. Part del bitmap bloc del journal ...................................................................... 23
Figura 8. Part d‟un bitmap bloc de dades ....................................................................... 24 Figura 9. Block Header ................................................................................................... 26
Figura 10. Key Versió 1 ................................................................................................. 27
Figura 11. Key Versió 2 ................................................................................................. 27 Figura 12.Esquema d'un node intern .............................................................................. 28 Figura 13. Camps del Node Intern.................................................................................. 28 Figura 14. Camps del Punter .......................................................................................... 28 Figura 15. Esquema d'un node fulla ............................................................................... 29
Figura 16. Camps Item Header ....................................................................................... 29 Figura 17.Stat Item i direct item ..................................................................................... 30 Figura 18. Posició dels bytes en un stat item versió 1 [3] .............................................. 30 Figura 19. Estructura d'un Stat item versió 2 ................................................................. 31
Figura 20. Directory Item ............................................................................................... 32 Figura 21. Capçalera d'un item de directori .................................................................... 32
Figura 22. Exemple d‟ítem directe ................................................................................. 34 Figura 23. Fitxer amb item indirecte .............................................................................. 34
Figura 24. Journal del sistema ReiserFS ........................................................................ 35 Figura 25. Journal Header .............................................................................................. 35 Figura 26. Esquema d‟una Transacció ........................................................................... 36
Figura 27. Description Block.......................................................................................... 37 Figura 28. Modificació del Superblock desprès d‟una transacció .................................. 38
Figura 29. Commit Block ............................................................................................... 39 Figura 30. Camí cap al Root node .................................................................................. 40 Figura 31. Llistat del directori de root ............................................................................ 41 Figura 32. Contingut del directori arrel. ......................................................................... 41
Figura 33. Funcions de hash i keys dels elements .......................................................... 42 Figura 34. Arbre de directoris ........................................................................................ 42
Figura 35. Root node ...................................................................................................... 43 Figura 36. Item del Fitxer i contingut. ............................................................................ 44 Figura 37.Root node fitxer indirecte .............................................................................. 44 Figura 38.Fitxer Indirecte ............................................................................................... 45 Figura 39. Part del bloc 8704 ......................................................................................... 46
Figura 40. Un disc local consultat amb RFSTOOL [4] .................................................. 50 Figura 41. Exemple UFS Explorer Batch [5] ................................................................. 51 Figura 42. Diagrama casos d'ús ...................................................................................... 54 Figura 43. Diagrama de classes ...................................................................................... 58
Figura 44. Classe Program ............................................................................................. 58 Figura 45. Classe principal ............................................................................................. 59 Figura 46.Classe info_superbloc .................................................................................... 59
Figura 47.Classe superblock ........................................................................................... 60 Figura 48. Classe Bitm_bloc .......................................................................................... 60
Estudi del Sistema de Fitxers ReiserFS
Figura 49. Classe ItemTreeAux ...................................................................................... 61 Figura 50. Formulari de L'arbre de directoris ................................................................. 61 Figura 51. Classe journal ................................................................................................ 62 Figura 52. Classe frmRealBlocks ................................................................................... 62
Figura 53.Classe frmCommitBlock ................................................................................ 63 Figura 54. Classe frmDescriptionBlock ......................................................................... 63 Figura 55. Diagrama de seqüència d'obrir una imatge ReiserFS .................................... 64 Figura 56. Finestra Principal ReiserFs_reader ............................................................... 67 Figura 57. Informació del Superblock ............................................................................ 68
Figura 58. Superblock valors nivell de bytes ................................................................. 68 Figura 59. Bitmap Block ................................................................................................ 69 Figura 60. Propietats del fitxer ....................................................................................... 70
Figura 61. Contingut d'un fitxer ..................................................................................... 71 Figura 62. Journal ........................................................................................................... 72 Figura 63.Formulari del Description Block .................................................................... 73 Figura 64. Formulari de Blocs Modificats...................................................................... 74
Figura 65.Formulari del Commit Block ......................................................................... 74
Estudi del Sistema de Fitxers ReiserFS
Índex de taules
Taula 1. Explicació dels diferents camps del SuperBlock............................................. 21
Taula 2. Offset i numero de bytes dels camps del SuperBlock ...................................... 22 Taula 3. Localització dels blocs de bitmap..................................................................... 24 Taula 4. Camps Block Header ........................................................................................ 26 Taula 5. Camps de la Key versió 1 ................................................................................. 27 Taula 6. Camps de la Key versió 2 ................................................................................. 27
Taula 7.Camps del Node intern ...................................................................................... 29 Taula 8.Camps del Item Header ..................................................................................... 29 Taula 9.Stat Item versió 1 ............................................................................................... 31
Taula 10. Descripció dels camps d'un stat item versió 2 ................................................ 31 Taula 11. Valors de tipus d'arxius .................................................................................. 32 Taula 12. Camps d'un directori item ............................................................................... 33 Taula 13. Dades del Journal Header ............................................................................... 36 Taula 14. Description bloc de la Figura 9 ...................................................................... 38
Taula 15. Dades del Commit Block................................................................................ 39 Taula 16. Especificació cas d'ús mostrar ajuda .............................................................. 55 Taula 17. Especificació cas d'ús Obrir Imatge ............................................................... 55 Taula 18. Especificacio cas d'ús Mostrar Superblock .................................................... 56
Taula 19. Especificació Mostrar BitmapBlock............................................................... 56 Taula 20. Especificació cas d'ús Mostrar Journaling ...................................................... 57
Taula 21. Especificació cas d'ús Mostrar arbre directoris .............................................. 57 Taula 22.Estimació del cost de realització de cada etapa ............................................... 75
Estudi del Sistema de Fitxers ReiserFS
4
1.Introducció
1.1 Enfocament del treball
Aquest treball esta enfocat com ha material de suport per a l‟assignatura de sistemes
operatius que es cursa a 3r d‟informàtica, en l‟apartat de sistemes de fitxers.
El Reiserfs és una eina del sistema operatiu pionera en implementar un sistema de
journaling o “diari” per a contrarestar la pèrdua d‟informació en front de caigudes
fortuïtes del sistema. En aquest treball no veurem tot el funcionament del ReiserFS, sinó
que inicialment ens limitarem a veure com organitza les dades i com accedeix a elles,
les diferents eines i mètodes que empleades per aquest sistema, com gestiona d‟espai
lliure
A continuació explicarem una mica dels sistemes de fitxers, per entendre com s‟ha
arribat a desenvolupar el ReiserFS i perquè va caldre implementar un sistema de
journaling. Tot seguit analitzarem les línies de futur, l‟evolució de ResiserFs, el Reiser4
i les millores que implementa, i també altres sistemes d‟arxius importants com son el
ext3, XFS, JFS.
Un cop ja estem introduïts en el ReiserFS continuarem amb l‟estudi en detall de les
seves estructures internes, el Superblock, Bitmap Bloc, l‟arbre S+ on es guarda tota la
informació i el journaling. Aquesta última la part mes innovadora.
Posteriorment s‟explicarà el comportament bàsic del sistema de fitxers, mostrar l‟arbre
de directoris, com els organitza el contingut d‟un directori, i com els esborrarà.
Per acabar un estudi de les diferents eines que ja existeixen, passarem a detallar tot el
procés de creació de la nostra eina docent començant per l‟anàlisi de requisits, passant
per les decisions de disseny així com l‟anàlisi funcional per tal d‟acabar finalment en la
fase de proves i la posterior posada en explotació de l‟aplicació.
1.2 Objectius
Els objectius que aquest treball pretén assolir son els següents:
Entendre que és un sistema de fitxers i el paper que desenvolupa en el sistema
operatiu.
Entendre el funcionament dels sistemes de fitxers.
Entendre el funcionament del sistema de fitxers ReiserFS.
Estudi del Sistema de Fitxers ReiserFS
5
Entendre el funcionament del journaling que avui en dia esta estès a molts
sistemes de fitxers a part de sistemes gestors de bases de dades.
1.3 Estructura de la memòria
L‟estructura d‟aquest treball esta dividida en 3 parts:
Descripció dels sistemes de fitxers.
Estudi del funcionament de ReiserFS.
Disseny, implementació de l‟eina docent.
Estudi del Sistema de Fitxers ReiserFS
6
2.Descripció de l’entorn
Per entendre l‟entorn en el que treballarem hem de fer una introducció del que entenem
per sistema operatiu i de quines parts esta format, i en quina es troba el sistema de
fitxers.
2.1. Introducció als sistemes operatius
Un sistema operatiu és un conjunt de programes d‟un computador destinat a permetre
una administració eficient dels seus recursos. Comença a treballar quan es carrega a
memòria un programa específic, que s‟executa al iniciar la màquina, gestiona el
hardware de la maquina des dels nivells més bàsics, mantenint una interfície amb
l‟usuari.
En la figura següent podem veure les 4 capes que intervenen en un sistema operatiu.
Figura 1. Model 4 capes d’un sistema operatiu [1]
El sistema de fitxers es troba en la capa “Gestió d‟informació”, a continuació definirem
les diferents capes i a què es dedica cada una.
Interfície amb l’usuari : és la part del sistema operatiu que permet comunicar-
se amb l‟usuari, de tal manera que es poden carregar programes, accedir a
fitxers. Existeixen tres tipus bàsics d‟interfícies, les que es basen en línia de
comandes, les que utilitzen menús i les interfícies gràfiques d‟usuari.
Gestió d’informació: un sistema d‟informació que conté els programes
d‟administració de fitxers que controlen la creació, esborrat i accés de fitxers de
dades i de programes. També implica mantenir un registre de la ubicació física
Estudi del Sistema de Fitxers ReiserFS
7
dels fitxers en els dispositius d‟emmagatzemament. En aquest nivell és on és
centre aquest treball, manipulació i tractament de la informació de l‟usuari.
Gestió de Memòria: Els programes d‟administració de tasques d‟un sistema
operatiu administren la realització de les tasques informàtiques dels usuaris. Els
programadors controlen quines àrees tenen accés a la CPU i per a quan de
temps. Les funcions d‟administració de tasques poden distribuir una part
específica del temps de la CPU per a una tasca en particular, e irrompre la CPU
en qualsevol moment per substituir-la per una tasca de major prioritat. Un
exemple serien les tècniques de scheduling.
Gestió d’Entrada/Sortida: Serveix per administrar els recursos hardware i de
xarxes d‟un sistema informàtic, com la CPU, memòria, dispositius
d‟emmagatzemament secundari i perifèrics d‟entrada i de sortida.
2.2. Introducció als sistemes de fitxers
Un sistema de fitxers és l‟estructura que emmagatzema la informació en els discs. Un
sistema de fitxers és una estructura lògica que és la més adequada pel maneig de dades
en base a les característiques del hardware disponible. Per aquesta raó, el seu estudi es
troba en la frontera entre el hardware i el software.
El disseny del sistema de fitxers té una gran influencia en l‟eficiència, seguretat,
flexibilitat i capacitat de creixement dels emmagatzemaments en disc, i per tant, en el
rendiment del propi Sistema Operatiu. Una de les seves funcionalitats més importants
és la manipulació de les dades.
Precisament el SO Unix va néixer a partir de la idea de crear un sistema de fitxers que
permetés als usuaris GE 635 dels Laboratoris BELL & AT&T, treballar simultàniament
sense interferir-se.
En els sistemes de fitxers hi ha dos tipus de dades:
Les Dades, que és la informació que l‟usuari guarda ( fitxers, directoris,
programes...)
Les Metadades, que son les estructures que organitzen e indexen les dades, en
aquest punt és on resideix la importància del resultat final del sistema de fitxers.
En el cas del ReiserFs, és un sistema de fitxers implementat en Linux, un
sistema desenvolupat per un estudiant (Linux Benedict Thorwald). Aquest sistema va
ser inspirat per Minix, un dialecte de UNIX i posteriorment convertit en un SO
"freeware" pel seu creador i ràpidament "adoptat" per la comunitat informàtica
internacional, amb el temps se li han afegit infinitat d‟opcions, utilitats i millores, això
ha fet que s‟hagi convertit en un sistema ràpid, fiable i molt optimitzat.
Estudi del Sistema de Fitxers ReiserFS
8
Amb el temps s‟ha dotat Linux de diferents sistemes de fitxers, de forma que els
usuaris poden escollir entre una amplia varietat d‟opcions i tenir a accés a una gran
quantitat de formats. El sistema és molt flexible, permetent inclòs muntar un sistema de
fitxers a partir d‟una arrel amb unitats físiques amb sistemes diferents entre si, més
endavant en el punt 2.6 farem un estudi de la evolució dels sistemes operatius i dels
sistemes de fitxers.
2.3. Origen de ReiserFS
ReiserFS és un sistema de fitxers de propòsit general, dissenyat e implementat per un
equip de l‟empresa Namesys, liderat per Hans Reiser. Actualment suportat per Linux i
existeixen plans futurs per incloure‟l en altres sistemes operatius.
També té suport amb Windows no oficial de manera inestable i rudimentària. A partir
de la versió 2.4.1 del nucli de Windows, ReiserFS va ser el primer sistema de fitxers en
incorporar el journal al nucli estàndard. També és el sistema d‟arxius per defecte a
vàries distribucions, com SuSE ( excepte en openSuSE 10.2 que el seu format per
defecte es ext3), Xandros, Yoper, Linspire, Kurumin Linux, FTOSX, Libranet i
Knoppix.
Les tres funcionalitats principals del sistema ReiserFS són:
Journaling, protegeix del risc de corrupció del sistema d‟arxius
Repartiment amb el sistema de fitxers muntat i desmuntat. Podem augmentar la
mida del sistema mentre el tenim muntat i desmuntat. Per a disminuir-lo,
únicament es permet estant desmuntat.
Tail packing, és un esquema per reduir la fragmentació interna.
2.4. Funcionalitats de ReiserFS
Una de les raons pel qual el ReiserFs va ser tan important va ser la incorporació del
journaling, que és un mecanisme per al qual un sistema informàtic pot implementar
transaccions.
El journaling es basa en journal en el que s‟emmagatzema la informació necessària per
restablir les dades afectades per la transacció en cas que aquesta sigui errònia.
El procediment és el següent:
1. Es bloquegen les estructures de dades afectades per la transacció per a
que cap altre procés pugui modificar-les mentre dura la transacció.
Estudi del Sistema de Fitxers ReiserFS
9
2. Es reserva un recurs per emmagatzemar el journal. En general solen ser
blocs de disc, de manera que si el sistema es para de forma abrupta ( tall
elèctric, fallada del sistema operatiu, etc..) el journal segueixi disponible
un cop reiniciat el sistema.
3. S‟efectuen una a una les modificacions en les estructures de dades. Per a
cada una:
S‟apunta en el journal com desfer la modificació i s‟assegura de
què aquesta informació s‟escriu físicament al disc.
Es realitza la modificació
4. Si en qualsevol moment es vol cancel·lar la transacció es desfan els
canvis un a un llegint i esborrant del journal
5. Si tot és correcte, s‟elimina el journal i es desbloquen les estructures de
dades afectades.
Les aplicacions mes freqüent dels sistemes de journaling s‟utilitzen per implementar
transaccions de sistemes de bases de dades i, mes recentment, per evitar la corrupció de
les estructures de dades en la que es basen els sistemes de fitxers moderns.
En el cas dels sistemes de fitxers, el journaling sol limitar les operacions que afecten a
les estructures que mantenen informació sobre:
Estructures de directoris ( S+Tree cas ReiserFS)
Blocs lliures de disc
Descriptors d‟arxius ( Mida, data, ...)
Una de les funcions del journaling dels sistemes d‟arxius és evitar les comprovacions de
disc que efectuen els sistemes al apagar-se de forma abrupte, ja que el sistema al posar-
se en marxa només haurà de desfer el journal per tenir un sistema coherent de nou.
Una altra funcionalitat del sistema ReiserFs és el reparticionament amb el sistema
muntat o desmuntat, Es pot augmentar la mida del sistema online o offline. Per a reduir-
lo només es permet offline. Namesys ens proporciona les eines per aquestes operacions,
inclòs es poden utilitzar sota gestors de volums lògics com per exemple LVM o EVMS,
que es detallaran a continuació.
LVM és una implementació d‟un administrador de volums pel kernel Linux. No
implementa RAID1 o RAID5. Inclou la gestió de volums lògics proporcionant
una visió d‟alt nivell d‟emmagatzemament d‟un ordinador, en comptes de la
tradicional visió de discs i particions, entre altres.
Estudi del Sistema de Fitxers ReiserFS
10
EVMS és un software de gestió de volums flexible e integrat a Linux, les
principals característiques són, primer que és compatible amb diferents sistemes
de fitxers, gestió multi disc, RAID software de tipus 0, 1, 4, 5. Pot expandir i
contraure volums i sistemes de fitxers online i offline, reorganització de blocs
erronis, entre altres.
L‟ultima funcionalitat que detallarem és el Tail packing que és un esquema per a reduir
la fragmentació interna, també anomenada Block suballocation permet que els blocs
grans que han d‟utilitzar-ne al mateix temps fent un ús eficient del "slack" al final de
fitxers llargs . Espai que d‟altra manera es desaprofitaria i quedaria com a fragmentació
interna. Se l‟anomena Tail packing, perquè intenta arrodonir aquest espai final de
diversos fitxers per formar un sol bloc.
2.5. Nous sistemes de fitxers
Amb l‟excepció d‟actualitzacions de seguretat i errors crítics, Namesys ha deixat de
banda el desenvolupament de ReiserFS( també anomenat Reiser3) per a centrar-ne el
seu successor Reiser4.
Reiser4 és un sistema de fitxers per computadors, es tracta de la versió mes recent del
sistema de fitxers ReiserFS, rescrit des de zero, desenvolupat per Namesys i patrocinat
per la DARPA i Linspire.
Actualment no es distribueix de forma conjunta amb kernel de Linux. Els programadors
del kernel Linux argumenten que Reiser4 no es regeix per la convenció de codificació
estàndard.
Millores respecte ReiserFS:
Journaling mes eficient gràcies a la tècnica de "wandering log".
Suport mes eficient de fitxers petits, en termes d‟espai en disc i gràcies a "tail
packing".
Optimització dinàmica de l‟estructura del disc mitjançant "allocate-on-flush",
anomenat "delayed allocation" en el sistema de fitxers.
Transaccions atòmiques
Integració de metadades en l‟espai de noms del sistema de fitxers
En qüestió de rendiment Reiser4 utilitza dancing trees, on els inodes poc poblats no es
fusionen fins que les guarda a disc, aquest sistema permet crear fitxers i directoris sense
perdre temps i espai mitjançant blocs de mida prefixada.
Estudi del Sistema de Fitxers ReiserFS
11
2.6 Evolució del Sistemes de Fitxers
A continuació explicarem la evolució dels Sistemes de Fitxers, perquè va ser necessària
aquesta evolució i mostrarem un figura on es veu aquesta evolució.
2.6.1 Sistemes de Fitxers “Prehistòrics”
La companyia Digital Equipment Corporation, va donar nom al primer sistema físic per
emmagatzemar els fitxers dels DECTape. Eren cintes que actuaven com disc durs molt
lents, aquets emmagatzemaven 184 Kilobytes, de dades per cinta.
Es considerava mini computadora, ja que encara que fos de la mida d'una nevera, era
més petit que les computadores behemoth de IBM, que ocupaven sales senceres.
Després del invent del transistor i del circuit integrat (silicon chip) va permetre la
minimització. DEC es va quedar extingit, mentre que la resta del món es va canviar a
microcomputadores.
2.6.2 CP/M
Al 1973 Gary Kildall va inventar un programa anomenat “Control Program for
Microcomputers” que el permetia guardar fitxers i fer funcionar programes des de un
Shugart floppy drive, en el seu ordinador de casa, aquest tenia un sistema de fitxers,
però no tenia nom.
Aquest sistema estava basat en una jerarquia de “flat” sense directoris, Els noms dels
fitxers tenien un límit de 8 caràcters, més tres caràcters d‟extensió que determinaven el
tipus de fitxers.
El motiu per al qual Gary va fer aquest programa va ser, que no volia conduir fins al
treball cada dia, es curiós que la peresa pot ser en algunes ocasions una cosa
increïblement intel·ligent.
Tim Patterson, al 1977, va escriure el seu propi sistema operatiu, QDOS (Quick & Dirt
Operating Sistem), ja que era una copia “bruta” i “ràpida” del sistema CP/M, el sistema
de fitxers era lleugerament diferent, encara que era la mateixa idea i tampoc tenia
directoris.
Es va basar en un programa de Microsoft anomenat Microsoft Disk Basic, on es podia
copiar els fitxers en floppy disks. Utilitzava una organització anomenada File
Allocation Table, així que el van anomenar FAT.
Aleshores Bill Gates va comprar el QDOS de Patterson, per $50.000, i el va renombrar
a MS-DOS.
Estudi del Sistema de Fitxers ReiserFS
12
2.6.3 Temps de FAT
El sistema FAT descrivia quines àrees del disc es guardaven els fitxers, a quines els
espais lliures i quines estaven en mal estat, “bad sectors”. Ja que el floppy disk tenia poc
espai, la taula havia de ser petita, per mantenir-la la taula es dividia en clústers (grups de
sectors), la primera versió de FAT, es va anomenar FAT-12, perquè utilitzava un
número de 12 bits per comptar els clústers.
Figura 2. Floppy Disck amb FAT
Aquest discs no tenien intencionalitat de incorporar directoris o optimització de
emmagatzemar el fitxers, en part aquests discs eren simplement per guardar pocs fitxers.
En canvi IBM estava a punt d‟alliberar el PC-XT amb un disc opcional de 20 MB, en
aquella època un gran espai i aleshores va significar que la FAT necessitaria un sistema
per emmagatzemar els fitxers en una jerarquia adequadament. Per MS-DOS 2.0, van
afegir els directoris que els hi van assignar la contrabarra „\‟ com a separador
“C:\MYFILES\NOTES”, en aquest cas no es podia usar la „/‟ ja que s‟usava per altres
opcions, com ara a l‟hora de formatjar el floppy disk i afegir fitxers “FORMAT A: /S” i
es va anomenar C, perquè A i B estaven reservats per el primer i segon floppy disk, que
tothom en aquell moment tenia i es va quedar com un estàndard.
En aquest moment el FAT-12 queda obsolet, així que Microsoft va treure una versió de
16 bits en DOS 3.31, alliberada en 1987. Tenia clústers de 32KB i podia adreçar 216,
per una mida de disk de 2 GB.
Aquí podien aparèixer problemes de memòria, apareix el concepte de fragmentació
interna.
Estudi del Sistema de Fitxers ReiserFS
13
Per el 1995, els discs es feien més grans i el límit de 8.3 era un problema que havia de
desaparèixer.
Per solucionar aquests problemes, Microsoft va introduir la FAT-32 amb 8TB de límit i
amb una habilitat per donar noms llargs als fitxers, aquesta habilitat era VFAT. Podia
tenir qualsevol nom fins a 255 caràcters i la feia ajustar-se al 8.3, consistia en qualsevol
nom, per exemple “nom_de_fitxer_llarg.txt” el guardava com “nom_d~1.TXT” les
lletres pendents quedaven guardades com a directoris fantasma que estaven marcades en
els atributs de metadades com Volum Label, System, Hidden, i Read-Only.
2.6.4 HFS
Al 1984 Macintosh va aparèixer a un únic floppy drive, quan la gent començava a
utilitzar els discs durs. El sistema de fitxers s‟anomenava MFS (Macintosh File
System). Tenia directoris i al mateix temps no en tenia. L‟usuari podia crear directoris
gràfics i podia deixar fitxers, però no es mostraven, tot estava en un “Directori Buit”,
que s‟anava esborrant i creant a cada modificació, per a un floppy disk funcionava
correctament però per als discs durs es realentitzava molt. Els noms per contra es va
permetre que poguessin tenir 63 caràcters.
El MFS va ser reemplaçat al 1985 per un sistema que tenia jerarquia de directoris, per
això es va anomenar Hierarchal File System, o HFS. En aquesta ocasió els noms
estaven limitats a 31 caràcters. La informació del directori, fitxer i el espai lliure es
guardava en un arbre B, aquesta estructura permetia una ordenació ràpida. HFS emprava
clúster de 512KB amb punter de 16 bits, i la mida màxima del disc dur es limitava a
32GB.
Les últimes versions arribaven a punters de 32 bits, i això feia arribar a 2TB de
indexació.
El MFS i HFS van introduir una innovació per la manipulació dels fitxers, anomenada
“fork”. En comptes d‟emmagatzemar les metadades en llocs separats, en el cas de HFS
feia que cada fitxer en creava dos, el fitxer (data fork) i l‟invisible (resource fork) que
contenia informació estructurada, incloent informació sobre el fitxer, per exemple la
icona. Aquests forks tenien utilitat mes enllà de les metadades.
El sistema HFS utilitzava un codi de quatre lletres per a definir la extensió en comptes
de les tres. Aquests s‟emmagatzemaven en les metadades del sistema de fitxers, on es
tractava com si fos la data de creació del fitxer.
2.6.5 Sistemes de Fitxers Amiga
Amiga, va sortir un any després que el Macintosh, tenia capacitats multimèdia que eren
avançades al seu temps. En canvi, el sistema de fitxers era una de les parts més dèbils,
degut a la pressió per treure el AmigaOS al mercat, el sistema de fitxers venia del
TripOS, utilitzava blocs de 512KB, però reservava 24KB de cada bloc per a les
Metadades.
Estudi del Sistema de Fitxers ReiserFS
14
Aquest sistema el van anomenar OFS (Old File System) per els enginyers d‟Amiga, que
el van reemplaçar tan aviat com va ser possible
El FFS (Fast File System) va sortir al mercat l‟any 1987 en els sistemes Amiga 500,
2000, AmigaOS 1.3. La principal diferència era que les metadades es van treure dels
blocs individuals a un bloc a part. Els noms dels fitxers estaven limitats a 32 caràcters
igual que el HFS
El sistema operatiu d‟Amiga va ser dissenyat de nou principalment per a que pogués
suportar els dos sistemes OFS i FFS, però també per a qualsevol altre sistema de fitxers
que mantingués el format, es a dir, qualsevol podia escriure el seu propi sistema de
fitxers. Gràcies això va donar com a resultat el PFS (Professional File System) i SFS
(Smart File System). Per al sistema operatiu Amiga OS4, va sortir el FFS2 que
acceptava noms de fitxers fins 105 caràcters de longitud.
2.6.6 Sistemes de Fitxers Unix i Linux
El sistema UFS (FFS) va començar com un sistema multi usuari time-sharing. Unix va
fer tot tipus de estàndards de com els usuaris haurien d‟emmagatzemar els fitxers. El
UFS o també conegut com Barkley Fast File System, es va convertir en el estàndard
quan els programadors de la Universitat de Barkley van desenvolupar una versió
millorada que el UFS.
El sistema es case-sensitive, això vol dir que diferencia entre minúscules i majúscules,
per exemple FITXER.TXT es un fitxer diferent que Fitxer.txt.
Com a altres sistemes de fitxers, la informació esta emmagatzemada en components
anomenats blocs. La mida de bloc estava estandarditzada a 8KB, perquè una mida més
gran podia significar una pèrdua d‟espai important, BSD va implementar un algoritme
anomenat bloc suballocation, on els blocs que no estan plens podrien emmagatzemar-ne
en un únic bloc.
Unix va dominar el mercat servidors abans de ser substituït per clon anomenat Linux.
2.6.6.1 Minix
Minix és el sistema de fitxers natiu del SO que te el mateix nom. Va ser el primer
disponible per Linux. Encara que Minix és un sistema dirigit a la docència que a
l‟explotació comercial. Encara se segueix utilitzant en disquets i en unitats de RAM.
"As most of you know, for me MINIX is a hobby, something that I do in the evening
when I get bored writing books and there are no major wars, revolutions, or senate
hearings being televised live on CNN. My real job is a professor and researcher in the
area of operating systems"...
Estudi del Sistema de Fitxers ReiserFS
15
..."I think the real issue is something else. I've been repeatedly offered virtual memory,
paging, symbolic links, window systems, and all manner of features. I have usually
declined because I am still trying to keep the system simple enough for students to
understand".
Andrew S. Tanenbaum en "Linus vs. Tanenbaum"
2.6.6.2 EXT2
ext2 és actualment una segona "extensió" del sistema Minix, és un sistema de fitxers
d‟alt rendiment que, en qüestió de velocitat i consum de CPU, presenta les millors
prestacions entre els sistemes suportats per Linux, tot i així té els seus avantatges i
desavantatges. El principal problema de ext2 és que utilitza una estructura estàtica i poc
espai per anotar particions de gran mida, els límits són considerables (32768
subdirectoris en cada directori, de 10k a 15k fitxers per directori i 4 TeraBytes de
capacitat). En canvi la principal limitació és que les metadades de llistes encadenades no
és adequada per volums molt grans.
2.6.6.3 ReiserFS
ReiserFS és un sistema de fitxers que implementa el journaling (apartat 2.3) de codi
lliure i disponible en la majoria de distribucions de Linux, dissenyat per Hans Reiser i
col·laboradors en Namesys. És un sistema que presenta unes excel·lents prestacions en
la manipulació de fitxers grans, encara que una de les seves característiques distintives
és la maniobrabilitat per a manipular infinitat de fitxers petits. La filosofia d‟aquest
sistema de fitxers es "Els fitxers petits estimulen la senzillesa del codi". El sistema
ReiserFS té un factor de 8 a 15 cops mes ràpid que ext2 a l‟hora de manipular els fitxers
de menys 1KB, i amb la configuració adequada, pot emmagatzemar un 6% més de
dades que ext2 en el mateix dispositiu. En comparació amb ext2 en comptes d‟utilitzar
clústers de mida fixa, el disseny de ReiserFS permet utilitzar l‟espai exacte que
necessita. Les metadades estan organitzades en un arbre ordenat (B+Tree o S+Tree) que
a mes de gestionar les metadades, emmagatzema i comprimeix les parts dels fitxers que
no arriben a ocupar un clúster ( Tail packing).
2.6.6.4 EXT3
Ext3 es la extensió de ext2, implementa el journaling el qual ajuda a la recuperació del
sistema, es un dels sistemes de fitxers usats per defecte per Linux, un dels avantatges
mes significatius es que permet la evolució de ext2 a ext3 sense pèrdua de informació
en el disc dur. Es considerat un dels sistemes mes segur a pesar de la seva simplicitat.
Les millores de ext3 respecte ext2 son les següents:
un sistema de journaling
permet augmentar la mida del sistema de fitxer online.
utilitza un Htree per indexar directoris grans.
Estudi del Sistema de Fitxers ReiserFS
16
Diferents nivells de journaling (journaling - lowest risk, ordered - medium risk,
writeback - highest risk)
Per contra els seus desavantatges son:
Fragmentació
Compressió
Límits de mida
No té checksum en el journal.
2.6.6.5 JFS
JFS a l‟igual que ReiserFS i ext3 és un sistema de fitxers "journalista". Desenvolupat
inicialment per IBM per al seu sistema operatiu OS/2 Warp, el seu codi ca ser
incorporat al Open Source Consortium a principis del 2000 i portat a Linux poc desprès.
És un sistema molt adequat per a entorns empresarials que permet volums molt grans i
utilitza tècniques avançades per a millorar el rendiment. Una de les característiques és
que utilitza un sistema d‟assignació dinàmica per als inodes, que assigna o allibera
l‟espai, segons les necessitats. L‟avantatge al contrari que en altres sistemes, no és
necessari una estimació prèvia de l‟espai que es reservarà als inodes a l‟hora de crear el
sistema de fitxers.
2.6.6.6 XFS
XFS és un sistema de fitxers implementat per la companyia Silicon Graphics,
inicialment va ser dissenyat pels seus sistemes IRIX, però va fer una versió per Linux.
Es tracta d‟un sistema journalista d‟altes prestacions, suporta un diari de bitàcola,
"granges" de discs (disk farms) extremadament extenses. Un d‟aquests sistemes té la
capacitat de gestionar 18000 Petabytes i un sol fitxer pot arribar als 9000 Petabytes.
2.6.6.7 Reiser4
Evolució del ReiserFS, aquesta evolució presenta un sistema de fitxers molt ràpid, a
més aquest sistema presenta una característica important atomicitat, les operacions
internes del sistema de fitxers es fan, o no es fan, d‟aquesta manera no es corrupteixen
les dades ja que s‟han implementat algoritmes que no dupliquen les dades.
Presenta una diferencia respecte al seu predecessor, dancing trees, ja que els algoritmes
per als arbres balancejats queden obsolets. Aquests arbres presentes una gran millora en
quan a crear infinitat de fitxers en un directori mentre altres sistemes de fitxers donen
problemes.
Està basat en pluggins per tant té tot de contribuïdors externs que faran que el sistema
s‟actualitzi amb innovacions.
Estudi del Sistema de Fitxers ReiserFS
17
2.6.7 IBM i Microsoft
IBM competia amb Microsoft per el domini dels sistemes operatius a nivell de
ordinadors personals. Però més inusual era el fet que més que una competició era
cooperació.
2.6.7.1 OS2/2 i HPFS
Amb una nova interfície gràfica, OS/2 havia de ser un sistema operatiu multi tasca, però
va tardar en arribar, tenia problemes al executar aplicacions per DOS i requeria més
RAM de la que la majoria d‟usuaris es podien permetre en aquella època. Al 1987 la
versió 1.2 va sortir al mercat i IBM va voles crear un nou sistema de fitxers per
substituir el FAT. Així va néixer High Performance File System (HPFS), escrit per un
equip dirigit per un empleat de Microsoft Gordon Letwin.
HPFS utilitzava arbres b, els noms de fitxers arribaven fins a 255 caràcters i emprava
extents. El directori de root, estava emmagatzemada en mig del disc, en comptes del
principi, per a millorar el temps d‟accés. No tenia suport de journaling, però tenia
l‟opció de forks i metadades molt extenses. Aquestes metadades van ser anomenades
Extended Attirbutes i es podia emmagatzemar inclòs en particions FAT, guarden els
atributs en fitxers anomenats EA_DATA.SF.
Quan Microsoft estava a punt de treure Windows 3, va haver problemes en la relació
entre Microsoft i IBM, Microsoft va enfocar de nou els seus esforços desprès que fos un
fracàs. En canvi IBM es va quedar el codi i va afegir un munt d‟extres d‟interfície
d‟usuaris. Va aparèixer OS/2 2.0 i la orientació d‟objectes de Shell, abans de la aparició
de Windows 95 que va enfonsar-lo. Més tard IBM va portar JFS a OS/2.
2.6.7.2 NTFS
Microsoft també sabia que el DOS necessitava un canvi, així que Bill Gates va decidir
contractar Dave Cutler, programador de DEC, aquest va agafar a tot el seu equip i va fer
un nou sistema operatiu, amb un nou sistema de fitxers, encara no tenia nom, però més
endavant se‟l va anomenar New Technology File System (NTFS), del nom del sistema
operatiu Windows NT, on NT era de New Technology. Una petita coincidència, que el
projecte de Dave Cutler a DEC fos el VMS que substituint la lletra per la següent es el
WNT.
Era un sistema de fitxers amb un volum màxim de 264
, que emmagatzemava tots els
noms de fitxers en Unicode, d‟aquesta manera qualsevol llenguatge podia llegir-lo. Els
atributs dels fitxers els van limitar a límits exagerats, des de el 1601 AD, fins a dates
posteriors al 60056 AD. La primera versió que va sortir al mercat de Windows NT es va
dir 3.1, va ser al voltant de 1993.
Estudi del Sistema de Fitxers ReiserFS
18
NTFS utilitzava B+Trees, incloïa journaling, també emprava opcions de seguretat ACL
(Access Control Lists, afegides al NT 3.5, 1994). NTFS té un suport de metadades molt
extens. Degut a això van haver d‟implementar un sistema de indexació que va trigar
cinc anys a tenir una interfície gràfica.
Aquest sistema guarda totes les metadades en fitxers separats, ocults, indicats amb el
nom de fitxer iniciat amb el caràcter $. En el moment que tot es guarda com a fitxer,
NTFS permet estructures que creixen dinàmicament. Resisteix la fragmentació al
implementar “Best Fit” això vol dir que no guarda la informació en el primer espai
lliure si no que busca el que millor s‟adapta en l‟espai de disc.
Per a facilitar la transició de FAT a NTFS, Microsoft proveït d‟una utilitat per usuaris
de Windows 98, que convertia de forma segura particions de FAT16 i FAT32 a NTFS.
Una cosa amb la que no estaria d‟acord sobre el NTFS era que el seu disseny era
propietat de Microsoft. D‟aquesta manera els codis de open-source van aconseguir
donar suport per a llegir la partició i més endavant, escriure. De particions NTFS des de
altres sistemes operatius. El projecte NTFS-3G permet qualsevol sistema operatiu llegir
i escriure en les particions NTFS.
2.6.8 ZFS
El sistema de fitxers Zettabyte, anunciat per al 2004, era un sistema de fitxers de 128
bytes que podia guardar fitxers des de una mida molt petita (16 exabytes) fins a fitxers
d‟una mida exagerada ( 256 zettabytes, 278
) com a màxim per a tot el sistema. El
director del projecte era Jeff Bonwick. Una particularitat es que el sistema ZFS té una
forma per tractar diverses particions, crea una especia de piscina anomenada “zpools”, i
així sembla que tots els discs durs connectats sembla que siguin part d‟una partició
gegant.
La opció del RAID fa el mateix en el sentit de que uneix tots els discs durs i pot
recuperar-se si un disc dur es danya. El sistema ZFS pot automàticament agafar petites
imatges de cada canvi fet en el sistema, salvant nomes les diferències, així les dades no
es perden mai.
Figura 3. Piscines d'emmagatzemament, ZFS [2]
Estudi del Sistema de Fitxers ReiserFS
19
2.6.9 Figura de la evolució dels sistemes Linux.
Figura 4. Evolució dels sistemes Linux
Estudi del Sistema de Fitxers ReiserFS
20
3.Estructura física de dades
Una partició del sistema Reiserfs esta composta per blocs d‟una mida fixa, aquests blocs
estan numerats de forma seqüencial començant pel bloc 0. En una partició hi ha un
número màxim de 2^32 blocs per partició.
La partició Reiserfs esta composta per:
SuperBlock, un en tota la partició.
Bitmap Block, un o més depenent de la quantitat que necessitem per adreçar tots
els blocs de la partició.
Arbre S+ pel sistema de fitxers, un arbre auto balancejat que conte tots els
directoris i fitxers de la partició.
Journal, el journal en Reiserfs és un conjunt de blocs de disc que descriu les
transaccions realitzades als sistemes d‟arxius
Un esquema lògic de una possible partició del sistema ReiserFs
Figura 5. Imatge d’una partició ReiserFS
3.1 SuperBlock
La partició comenta amb els 64kB inicials sense servir, aquest espai es deixa lliure per
possibles labels o boot loaders. Tot seguit be el Superblock, que conte tota la informació
important sobre la partició, mida del bloc, numero de blocs (mes endavant es detalla).
La quantitat de blocs que contenen el superblock difereix depenen de la mida de bloc,
però sempre comença en el 65536d.
Els camps del SuperBlock són els següents,
Figura 6. SuperBlock
Estudi del Sistema de Fitxers ReiserFS
21
Els camps més importants són,
Nombre de Blocs (groc) tenim 19000h en 102400d blocs
Nombre de Blocs Lliures (verd), 16FF3h en decimal 94195 blocs lliures
Numero del Bloc del root (blau) 2001h es el bloc 8193,
Numero del Bloc del journal (vermell) 42h es troba en el 66 decimal.
Mida de Bloc (Negre) 400h, equival a 1024d
Numero de Bitmaps (taronja) el D, son 13 blocs de bitmap.
Estat Partició (Morat), el estat es correcte que marca 1 igual en decimal.
A continuació es detalla l‟explicació dels diferents camps del Superblock
Nom del camp Explicació
Nombre de Blocs el número de blocs que hi ha a la partició.
Nombre de Blocs
Lliures
el número de blocs lliures que hi ha a la partició.
Numero de Bloc del
root
el número de bloc que conte el node del root.
Num. de Bloc del
Journal
el número de bloc que conte el primer node de journal
journal device és el journal device number¿?
Mida del journal mida del journal, es necessita quan usem la partició amb
altres sistemes amb un journaling diferent
Transaccions
màximes journal
Nombre de transaccions màximes que permet el journal
Journal Màgic un número aleatori
Màxims Blocs per
transacció
el nombre màxim de blocs en una transacció
Màxim temps de
commit
temps en segons de la màxima antiguitat un commit
asíncron pot ser.
Transacció més
antiga
temps en segons de la màxima antiguitat d‟una transacció
Mida de Block mida en bytes d‟un bloc
OID Mida mínim el mida màxim de cadena id d‟un objecte
OID Mida actual mida actual d‟una cadena íd d‟un objecte
Estat partició estat de la partició, vàlid (1) o error (2).
Màgic string La Màgic String de ReiserFs, ha de ser “ReIsEr2Fs”.
Codi Funció de Hash la funció de hash que s‟utilitza per ordenar els fitxers en
els directoris.
Profunditat arbre
directoris
la profunditat actual de l‟arbre
Nombre de bitmaps la quantitat de bitmaps que es necessiten per adreçar tots
els blocs del sistema de fitxers.
Versió el número de versió ReiserFS
Reservat camp reservat
Generació Inode número de l‟actua-la generació inode. Taula 1. Explicació dels diferents camps del SuperBlock
Estudi del Sistema de Fitxers ReiserFS
22
Tots els camps del SuperBlock, en aquesta taula es troba amb l‟offset a partir de la
posició en decimal 65536 i el número de bytes que ocupa cada camp, amb referència
dels camps més importants que s‟han detallat a la Figura 2.
Nom del camp Offset # Bytes Color
Nombre de Blocs 0 4 Groc
Nombre de Blocs Lliures 4 4 Verd
Numero de Bloc del root 8 4 Blau
Numero de Block de journal 12 4 Vermell
journal device 24 4
Mida del journal 28 4
Transaccions màximes journal 32 4
Journal Màgic 36 4
Màxims Blocs per transacció 40 4
Màxim temps de commit 44 4
Transacció més antiga 48 4
Mida de Block 50 2 Negre
OID Mida mínim 52 2
OID Mida actual 54 2
Estat partició 56 2 Morat
Màgic string 58 12
Codi Funció de Hash 70 4
Profunditat arbre directoris 74 2
Nombre de bitmaps 76 2 Taronja
Versió 78 2
Reservat 80 2
Generació Inode 82 4 Taula 2. Offset i numero de bytes dels camps del SuperBlock
Recordem que les dades es troben en l.e. ( little endian) vol dir que les dades de major
pes es troben en el byte de menys pes, és a dir, es fa un swap de les dades en
hexadecimal real.
Estudi del Sistema de Fitxers ReiserFS
23
3.2 Bitmap Block
Desprès del SuperBlock ve el bitmap bloc, aquest indica l‟estat dels blocs d‟informació,
amb un 1 esta ocupat i amb un 0 esta lliure, cada byte mostra l‟estat de 8 blocs. En el
cas de què els blocs no es puguin adreçar en un bitmap bloc, s‟afegiran tants blocs de
bitmap com facin falta.
Figura 7. Part del bitmap bloc del journal
En aquest cas veiem que tots els bytes estan ocupats (FF), si mirem la adreça veiem que
aquest es el primer bitmap bloc, que esta just després del superblock, aquest bitmap
sempre mapeja els blocs del journal i estan marcats com ocupats.
Per altra banda un altre bitmap bloc ja marcaria l‟estat dels seus blocs, en la figura a
continuació veurem una part d‟un bitmap bloc de dades, en aquesta figura veiem que
esta buit nomes els tres primers blocs de la partició estan ocupats
En el cas del número de blocs llegim 4 bytes, 00640000.
Separem els bytes 00 64 00 00, apliquem l.e. de tot el camp, per tant ens queda
64 00h, que convertit a decimal són el 25600 blocs.
Per a verificar que és correcte agafem la mida de bloc i apliquem la mateixa
tècnica, llegim dos bytes amb offset de 50, i obtenim 0010, els separem en
bytes 00 10, apliquem l.e. 10 00, convertim a decimal i el resultat és 4096
Bytes per Bloc.
Ara multipliquem la mida de bloc pel número de blocs ens ha de donar la mida
de la partició que en aquest cas és de 100MB.
25600 Blocs x 4096 Bytes / Blocs = 104857600 Bytes ≈ 100MB
Estudi del Sistema de Fitxers ReiserFS
24
Figura 8. Part d’un bitmap bloc de dades
En aquesta figura si mirem la adreça veiem que es el segon bitmap bloc, el 03 marca
que dels vuit primers blocs dels 8192 que avarca aquest bitmap, nomes estan ocupats els
3 primers (0000 0011)
Donat un número de bloc b, podem saber el seu estat com es mostra a continuació,
r div 8: byte dintre del bitmap bloc.
r mod 8: bit dintre del byte..
Els blocs de bitmap en el ReiserFS no estan consecutius, tot el contrari, després del bloc
de bitmap estan els blocs als que fa referència aquell bitmap bloc, i tot seguit el següent
bitmap bloc i els blocs, i així consecutivament.
La localització dels bitmap blocs vindrà donada, segons la mida del bloc, a continuació
tenim una taula amb alguns exemples de les mides del bloc i el número de bloc en el
que es troben els bitmap blocs.
Mida bloc (bytes) 512 1024 4096
# blocs un bitmap pot adreçar 4096 8192 32768
# bloc Superblock 128 64 16
# bloc del primer bitmap bloc 129 65 17
# bloc del segon bitmap bloc 4096 8192 32768
# bloc del tercer bitmap bloc 8192 16384 65536
Taula 3. Localització dels blocs de bitmap
b div (8 * mida_de_bloc) : bitmap block # (divisió entera)
r = b mod (8* mida_de_bloc)
Estudi del Sistema de Fitxers ReiserFS
25
Aquí veiem una figura d‟exemple de la Taula 3, en el cas de la mida de bloc a 1024, el
bitmap #1, estaria situat en el bloc número 65 a continuació del superblock, els 1024
blocs consecutius a aquest bitmap estan mapejats dintre el bitmap #1. El bitmap #2 es
trobaria en el bloc 8192 després dels blocs del bitmap #1, i el mateix amb el bitmap #3.
Figura 4. Posició dels bitmap blocks en la partició (no a escala)
En el cas que un bitmap bloc no s‟arribi a ocupar en la seva totalitat, la part restant
constarà com ocupada. Emprant l‟exemple de la figura 4, en el cas que necessitéssim
2,5 blocs de bitmap per mapejar tots els blocs de la partició, la segona meitat del tercer
bitmap bloc es marcarà amb els bytes a FF, aquests bytes no compten com a blocs
ocupats, ja que no existeixen dintre de la partició.
Els blocs que avarca el primer bloc de bitmap, sempre estan reservats pel journal
depenent de la mida de la partició necessitarà tots els blocs o menys, sempre esta fixat a
un número de 8192, sempre que la partició ho permeti, en el cas de que la mida de bloc
sigui de 4096 o més gran, sempre hi hauran els 8192 a més del journal header. Per altra
banda si la mida de bloc es més petita el bloc de bitmap no podrà assolir aquest número
de blocs, però ocuparà tot l‟espai que un bitmap bloc pot adreçar, deixant espai per un
últim bloc, el bloc header del journal.
Això es pot observar en el camp Num_blocs_journal del superblock.
3.3 Arbre del Sistema de Fitxers
L‟arbre de sistema de fitxers esta compost per un arbre balancejat, utilitzant un arbre B+
o S+, aquest arbre esta compost de nodes i fulles, cada node és un bloc. Cada objecte o
ítem en ReiserFS se li assigna una clau única que es pot comparar amb les claus dels
altres objectes.
Estudi del Sistema de Fitxers ReiserFS
26
3.3.1 Block Header
Dintre de cada bloc que pertany a un node intern o a un node fulla de l‟arbre comença
amb un bloc header. Un bloc header sempre esta compost per 24 bytes. Només els blocs
formatjats contenen el bloc header.
El bloc header està compost de cinc camps,
Camp Definició #Bytes Color
Nivell Indica el nivell en el que ens trobem dins de l‟arbre 2 Groc
# Items Indica el número de ítems que conté el bloc 2 Verd
Espai lliure Espai lliure que hi ha dins del bloc 2 Blau
Reservat Camp reservat 2 Taronja
Key Indica la clau que limita la dreta del node 16 Vermell
Taula 4. Camps Block Header
Figura 9. Block Header
En aquesta figura mostrem,
El nivell d‟aquest node es el root ( 8389632 / 1024 = 8193)
El nivell de l‟arbre indica que es un node fulla
En aquest node tenim set elements.
Tenim 328 bytes lliures en aquest bloc.
El camp de nivell de l‟arbre del bloc header no nomes indica a quina profunditat estem,
també ens indica si es un node intern o un node fulla, si el nivell de l‟arbre es superior a
1, vol dir que es un node intern. Si es igual a 1 vol dir que és un node fulla.
3.3.2 Key Block
Un node intern o un node fulla també conte una clau, aquesta clau s‟utilitza per
identificar els ítems, però també per a localitzar-los dintre de l‟arbre i per agrupar els
ítems que pertanyen als mateixos grups locals.
Hi han dos versions de Keys, les dues estan compostes pels mateixos camps però amb
un nombre de bytes diferents. El fet de tenir dos tipus de keys fa que al no tenir la versió
de la clau inclosa en si mateixa fa que sigui problemàtic. Per solucionar això els 16 bits
reservats en el bloc header ara contenen el número de versió, així que es pot obtenir
d‟allà. En el cas dels nodes fulla això es simple, el problema ve quan el sistema es troba
en un node intern, per tant hauria d‟anar fins al node fulla per mirar la key.
Estudi del Sistema de Fitxers ReiserFS
27
3.3.2.1 Key versió 1
Figura 10. Key Versió 1
Nom Valor
Hex/ Dec # Bytes Descripció
ID Directori 01/ 1 4 Identificador del directori on es troba l‟objecte
(Vermell)
ID Objecte 02 / 2 4 Identificador actual de l‟objecte (Verd)
Offset 01/ 1 4 L‟offset en bytes al que aquesta clau fa
referència ( taronja)
Tipus 1F4/ 500 4
El tipus de l‟ítem, els possibles valors són:
Stat: 0
Indirect: 0xfffffffe
Direct: 0xffffffff
Directori: 500
Qualsevol: 555
(Lila) Taula 5. Camps de la Key versió 1
En la figura 9 veiem que es tracta de un directori ( 1F4h = 500d ), es una de les claus
que es troba en bloc de root.
3.3.2.2 Key versió 2
Figura 11. Key Versió 2
Nom Valor
Hex/ Dec # Bytes Descripció
ID
Directori 01/ 1 4
Identificador del directori on es troba l‟objecte
(vermell)
ID Objecte 02 / 2 4 Identificador actual de l‟objecte (verd)
Offset 00/ 0 60 bits L‟offset en bytes al que aquesta clau fa
referència (taronja)
Tipus 00/ 0 4 bits
El tipus de l‟ítem, els possibles valors són:
Stat: 0
Indirect: 1
Direct: 2
Directory: 3
Any: 15
(lila) Taula 6. Camps de la Key versió 2
En el cas de que sigui un Stat Item té un offset de 0. Els Fitxers ( ítems directes i
indirectes) i els directoris sempre comencen amb offset de 1 així estan ordenats desprès
del stat item en el node fulla. Per als directoris el camp “offset” conté el valor de hash i
Estudi del Sistema de Fitxers ReiserFS
28
el generation number de la capçalera del directori que es troba més a la esquerra, no el
offset en bytes.
3.3.3 Tipus de Node
Cada node de l‟arbre pertany a un bloc del sistema de fitxers, aquest node pot ser intern,
vol dir que no està al nivell més baix de l‟arbre i que té punters als seus fills, o be que és
un node fulla que aquest està al nivell més baix de l‟arbre i els seus punters realment
apunten als fitxers i a les meta dades
3.3.3.1 Node Intern
Un bloc d‟un node intern està format pel Block header, les claus, i punters a nodes fills (
ja poden ser un altre node intern o node fulla). Totes les claus estan ordenades pel seu
valor, i seguit de l‟ultima clau els punters en el mateix ordre de les claus. En el bloc
header ve indicat com a nivell de l‟arbre més gran que 1.
Figura 12.Esquema d'un node intern
A continuació detallarem un node intern amb el bloc header inclòs, en el bloc header el
camp marcat amb morat es el nivell de l‟arbre, 02 00 veiem que és un node intern.
Figura 13. Camps del Node Intern
Sempre hi ha un punter més que el nombre de keys, ja que es marquen les menors i les
majors.
Punters
Mirarem l‟exemple de la figura 13 el punter encerclat en verd, l‟estructura d‟un punter
en els nodes interns te aquesta forma,
Figura 14. Camps del Punter
Estudi del Sistema de Fitxers ReiserFS
29
Camp Valor
Hex/Dec #Bytes Definició
Numero de
Bloc 2001 / 8193 4
Numero de bloc en el que estan les keys. En
aquest cas les keys menors.
Mida 394 / 916 2 Mida de la informació que conte.
Camp
Reservat 00 / 0 2 Camp reservat
Taula 7.Camps del Node intern
3.3.3.2 Node Fulla
Un bloc d‟un node fulla, també està compost igual que els nodes interns per un bloc
header, també conté item headers i els ítems, entre els ítems headers i els ítems hi ha un
espai lliure. En aquest cas els ítems estan en ordre invers als ítems headers
Figura 15. Esquema d'un node fulla
En cas d' insertar un nou element, el item header corresponent es trobaria al final del
Item Header n i el item es ficaria abans del Item n. D‟aquesta manera no s‟han de
reorganitzar les dades.
Ítem Headers
Un node fulla, és la situació anterior a mirar el contingut de les dades ja que conté la
informació del item, ja sigui stat, direct, indirect o directori.
Figura 16. Camps Item Header
Nom Valor
Hex/ Dec # Bytes Descripció
Key 01/ 1 16 La Key que pertany a l‟objecte (Vermell)
Count FF / 0xffff 2
Espai lliure del últim node sense format per
ítems indirectes.
0xffff per stat items i direct items
Numero de entrades de directori per a
directory item.
(Verd)
Longitud 98/ 152 2 Mida de l‟ítem en el bloc (Groc)
Localització 204/ 516 2 Offset de l‟ítem dintre del bloc (Lila)
Versió 01/ 1 2 0 per les Key versió 1, 1 per les noves(versió 2)
(taronja)
Taula 8.Camps del Item Header
Estudi del Sistema de Fitxers ReiserFS
30
3.3.4 Items
Els ítems en ReiserFS és tota la informació que es guarda en el node fulla després del
espai lliure, són els fitxers o directoris, es tracta de forma genèrica però hi han quatre
tipus de ítems, on guardem les meta dades (stat item), directoris i depenent de la mida
del fitxer tindrem un direct item (fitxer petit) o indirect item (fitxer gran).
3.3.4.1 Stat items
El stat item mostra els atributs del item, una de les propietats del item header d‟aquests
és que l‟offset i el tipus de la key és igual a 0 (8 bytes), la resta de la key és la mateixa
que la del item header següent que és el fitxer o directori, en aquesta figura d‟un node
fulla veiem un exemple, en verd el stat item i en blau el direct item al que correspon el
stat item. Com veiem tenen la mateixa key, però amb els camps offset i tipus a 0. Sabem
que es un node fulla, per l‟ordre en el que es troba el item header i el item, que tenen
un ordre palíndrom.
Figura 17.Stat Item i direct item
El stat item al igual que la key, té dos versions, degut a que el camp de offset es va
augmentar per a que la màxima mida de fitxer fos de 260
, però com a màxim poden ser
232
blocs per 216
bytes per bloc, coma màxim suporta 248
bytes. Aprofitant aquest canvi
també es va augmentar la mida dels hard links, dels user id i dels grup id de 16 bytes a
32 bytes.
Stat item versió 1
En la versió 3.5 utilitzen la versió 1, té una mida de 32 bytes mentre que la versió 2
(3.6) és de 44 bytes.
Figura 18. Posició dels bytes en un stat item versió 1 [3]
Estudi del Sistema de Fitxers ReiserFS
31
Nom #Bytes Descripció
Mode 2 Tipus de fitxer i permisos
Num. links 2 Numero de hard links
UID 2 User id
GID 2 Grup id
Size 4 Mida del fitxer en bytes
Atime 4 Temps des de l‟últim accés
Mtime 4 Temps des de l‟ultima modificació del fitxer
Ctime 4 Temps des de l‟ultima modificació del stat item
Rdev/Blocs 4 Device
First dir.
byte 4
Primer byte del fitxer que s‟emmagatzema en un item directe
si es igual 1 és un symlink
si es igual 0xFFFF no hi ha direct item. Taula 9.Stat Item versió 1
Stat item versió 2
En la figura següent veiem un exemple de la estructura del stat item de la figura 17,
aquestes junt amb la informació del item header formen el conjunt de les meta dades.
Figura 19. Estructura d'un Stat item versió 2
Nom #Bytes Descripció Color
Mode 2 Tipus de fitxer i permisos Vermell
Numero links 4 Numero de hard links Groc
Mida 8 Mida fitxer en bytes Verd
UID 4 User id Blau
GID 4 Grup id Rosa
Atime 4 Temps des de l‟últim accés Taronja
Mtime 4 Temps des de l‟ultima modificació Verd
Fosc
Ctime 4 Temps des de l‟ultima modificació del stat Negre
Blocs 4 Número de blocs que utilitza el fitxer Marró
Rdev/gen/first 4
Device number/
Generació del fitxer/
Primer byte del fitxer que s‟emmagatzema en
un item directe
si es igual 1 és un symlink
si es igual 0xFFFF no hi ha direct item.
Turquesa
Taula 10. Descripció dels camps d'un stat item versió 2
Estudi del Sistema de Fitxers ReiserFS
32
En el camp mode, els 9 bits de menor pes indiquen els permisos per a tots, grup i usuari,
els 3 següents són el sticky bit, GID bit i UID bit. Els 4 bits de més pes indiquen el tipus
d‟arxiu, per un sistema Linux, els possibles valors són els següents:
Nom constant Màscara 16 bits Valor 4 bits Tipus Arxiu
S_IFSOCK 0xC000 12 socket
S_IFLNK 0xA000 10 symbolic link
S_IFREG 0x8000 8 regular file
S_IFBLK 0x6000 6 bloc device
S_IFDIR 0x4000 4 directory
S_IFCHR 0x2000 2 character device
S_IFIFO 0x1000 1 fifo Taula 11. Valors de tipus d'arxius
En aquesta figura extraiem la següent informació del fitxer,
Mode: 81A4h
Numero de links: 01h
Mida: 91h
UID: 00h
GID: 00h
Atime: 492C10DDh
Mtime: 492C10D8h
Ctime: 492C10D8h
Blocs: 2h
Rdev/gen/first: 00h
3.3.4.2 Directory Ítems
Els Directory Item, representen els directoris, si el directori té més entrades que les que
pot contenir l‟ítem, s‟expandirà a diversos directory items.
Al igual que els nodes fulla, en primer lloc van les capçaleres i desprès els noms dels
arxius.
Figura 20. Directory Item
Les capçaleres contenen el offset, les dos claus d‟ítems de referència, la localització del
nom dins del bloc i el estatus.
Figura 21. Capçalera d'un item de directori
Estudi del Sistema de Fitxers ReiserFS
33
Nom Valor
Hex/Dec #Bytes Descripció Color
Offset 01 / 1 4 Valor de hash i generation number Vermell
Dir ID 02 / 2 4 Referència al object id del directori
pare Verd
Object ID 06/ 6 4 Object ID del item Morat
Localització 50/ 80 2 Offset dintre del item Blau
Estat 04/ 4 2
Bit 0 indica stat data (no s‟usa)
Bit 2 indica que es visible(bit a 1) o
hidden (bit a 0)
Taronja
Taula 12. Camps d'un directori item
El camp de offset, els bits del 7 al 30 indiquen la funció de hash i els bits de 0 a 6
indiquen la generació en cas de que dos noms de fitxers tinguin la mateixa funció de
hash. La funció de hash té el propòsit de crear diferents valors per a dos strings amb
possibilitats altes de col·lisió.
En la figura 19, es pot extreure la següent informació,
Capçalera 0: {hash 0, gen. 1, 2, 6, byte 0x50, 4 (bit 2 set: visible)}
Capçalera 1: {hash 0, gen. 2, 1, 2, byte 0x48, 4 (bit 2 set: visible)}
Capçalera 2: {hash 15130330, gen. 0, 2, 9, byte 0x30, 4 (bit 2 set: visible)}
Nom 2: "fitxerdirectori1.txt"
Nom 1: ".."
Nom 0: "."
En cas que un directori contingui un número de elements elevat i no es pugui guardar la
informació del contingut en un sol bloc, es propagarà el contingut al següent bloc del
node pare, aquest dividirà la informació del directori i indicarà que es un directori ( els
quatre últims bytes indicaran 1F4) i del byte num 9 al 13 mostraran un número diferent
de cero. D‟aquesta manera queda una part del contingut en el bloc inicial i l‟altre part
queda en el bloc següent.
3.3.4.3 Direct Ítems
Un ítem directe és aquell que conté tot el contingut del fitxer, la resta de la informació
es troba en el stat item corresponent i en el item header.
En la figura a continuació veiem que el item header ( @8389824) marca,
Key del item: {2,5,1,2} en vermell
Count: 0xffff en groc
Mida: 98h / 152d bytes en verd
Offset: 204h / 516d bytes en blau
Versió: 1 (nova) en morat
El contingut del fitxer en turquesa.
Estudi del Sistema de Fitxers ReiserFS
34
Figura 22. Exemple d’ítem directe
3.3.4.4 Indirect Ítems
Els fitxers indirectes contenen punters que apunten a blocks sense format que pertanyen
al fitxer. Cada punter ocupa 4 bytes i conté el número de bloc del bloc. Cada bloc fulla
conté com a màxim (mida_bloc – 48) / 4 bytes, els 48 anteriors contenen el bloc i el
ítem header. Els fitxers llargs com veurem en un exemple en el punt 4.3.2 estan
compostos per múltiples punters, en la figura següent veiem un exemple d‟un fitxer
indirecte.
Figura 23. Fitxer amb item indirecte
Estudi del Sistema de Fitxers ReiserFS
35
3.4 Journal
El journal en ReiserFS és un conjunt de blocs que indiquen transaccions realitzades pel
sistema de fitxers. Cada cop que el sistema es modifica en comptes d‟aplicar els canvis
directament en el sistema es guarden primer al journal. Més endavant quan els canvis
s‟han realitzat es fa un “flush” de la transacció i es marcarà com a correcte.
El journal en ReiserFS es troba després del primer bloc de bitmap, està fixat a 8192
blocs més un bloc de journal header, sempre que la mida de bloc sigui igual o superior a
4096, els blocs estan formats per transaccions de mida variable. Una transacció ocupa
almenys tres blocs, en canvi el header ocupa un.
Aquest journal empra una cua circular estàtica, el funcionament consisteix a que el
journal comença pel primer bloc reservat per transaccions, i les va omplint, quan arriba
a la última després d‟utilitzar-la torna a la primera, i busca la que estigui disponible.
Figura 24. Journal del sistema ReiserFS
En una transacció es podria considerar que es guarden dades redundants, ja que en
l‟arbre hi ha informació que també es guarden en el journal, aquestes dades però estan
per guardar la consistència del journal i un cop que s‟ha realitzat el “commit” la
transacció passa a disponible, per tant quan la cua circular torni a arribar en aquest punt
pugui reescriure les dades.
3.4.1 Journal Header
El Journal Header, com el seu nom indica, és la capçalera del journal que conté la
informació de la última transacció feta amb resultat correcte, el offset fins a la següent
transacció a realitzar i l‟identificador de muntatge d‟aquesta.
Aquesta capçalera es troba al final de totes les transaccions, es tot un bloc però en
realitat només s‟utilitzen els 12 Bytes inicials tota la resta del bloc no està definit.
Les tres dades que guarda el journal header es detalla un exemple en al figura següent.
Figura 25. Journal Header
Estudi del Sistema de Fitxers ReiserFS
36
Els tres camps del journal header són els següents.
Nom del camp #
Bytes
Explicació camp Color
Figura
Id Ultima
transacció
4 Identificador de la última transacció
realitzada amb èxit
Vermell
Offset prox
Transacció
4 Offset fins a la següent transacció del journal Verd
Id Mount 4 Identificador de Mount de la Transacció Groc
Taula 13. Dades del Journal Header
En aquesta figura podem veure que ens trobem en la adreça 8387584d, la partició que
hem emprat d‟exemple, es la mateixa que en les figures anteriors, mida de bloc 1024,
per tant el numero de blocs pel journaling és menor 8192, en aquest cas és de 8125
blocs (extret del superblock). En aquest cas trobem aquesta adreça després de sumar als
blocs de journal, els blocs inicials fins al primer bloc de bitmap (66 blocs), aquests blocs
es multipliquen per la mida de bloc (1024) i obtenim la adreça del header. Aquesta
adreça es el bloc anterior al segon bloc de bitmap.
3.4.2 Transaccions
Les Transaccions són les operacions que s‟han fet en el nostre sistema, en comptes de
modificar-les directament sobre l‟arbre de fitxers, d‟aquesta manera mantenim una
l‟estabilitat. Primer són escrites en el journal i desprès les escrivim en la seva posició
real.
Una transacció esta composta per un description bloc, un llistat de blocs i un Commit
bloc, tots aquests blocs estan col·locats seqüencialment en el sistema de fitxers.
Figura 26. Esquema d’una Transacció
En el Superblock esta la informació de quantes transaccions i quants blocs per
transacció podem tenir com a màxim. A continuació descriurem les parts d‟una
transacció.
3.4.2.1 Description bloc
Estudi del Sistema de Fitxers ReiserFS
37
El Description bloc esta al inici de la transacció, en aquest bloc conté tres camps
importants.
L‟identificador de la transacció
El número de blocs que es modificaran en aquesta transacció (En aquest camp
no es compten ni el Description bloc ni el commit bloc.
L‟identificador de Muntatge.
Apart d‟aquests tres camps que són els 12 bytes inicials (4 bytes per camp), tenim a
continuació el que s‟anomena “blocs reals”. Aquest blocs indiquen quins blocks es
modificaran. Les modificacions que es faran venen donades en el mateix ordre dels
blocs posteriors ordenats seqüencialment.
El superblock al ser el nucli d‟aquest sistema de fitxers, es un bloc que es modificarà
quasi be a totes les transaccions, ja que gestiona el numero blocs lliures, els nivells de
l‟arbre, etc... Per tant ja que es modificarà molts cops s‟ha de assegurar la consistència
de les dades, cosa que el journaling ho aconsegueix, ja que en els blocs següents que
s‟han de modificar pel journaling, venen els blocs que s‟han de reemplaçar pels que
estan escrits a l‟adreça pertinent.
Es pot pensar que les metadades d‟aquest sistema de fitxers es redueixen al journaling,
ja que com hem explicat en el paràgraf anterior guarda una copia, però tota la
informació que es troba en el journaling també es troba al arbre, per tant d‟aquesta
manera apareix redundància “temporal”.
Un exemple pràctic del Description Block veurem a la figura següent.
Figura 27. Description Block
Nom del
camp
Valor
Hex/decimal
Descripció Color
Estudi del Sistema de Fitxers ReiserFS
38
Id
transacció
0A / 10 Id. de la transacció Vermell
#blocs 02 / 2 Número de blocs que es modificaran en
la transacció
Verd
Id Mount 0A /10 Id. del muntatge Blau
“Blocs
reals”
40 / 64
2001 / 8193
Blocs que es modificaran Morat
Magic ReIsErLB “Frase Màgica” Marró
Taula 14. Description bloc de la Figura 9
En aquest exemple veiem com aquesta transacció modificarà dos blocs, el Superblock
(bloc # 64) i el bloc de root (8193). A continuació d‟aquest bloc vindrà el bloc que
substituirà el superblock, aquí veiem la comparativa de com quedaria el superblock
desprès de la transacció.
En la figura següent podem veure que el bloc envoltat en verd seria el equivalent al
Superblock si mirem les adreces es la consecutiva de la última de la figura 9, en aquest
cas es modifica tot el bloc original pel bloc modificat del journal. En vermell veiem que
la adreça correspon a la del Superblock original. Encerclat en blau tenim el resultat de
les modificacions en el camp estat de la partició. De correcte a incorrecte.
Figura 28. Modificació del Superblock desprès d’una transacció
En aquest cas marca la partició com ha no vàlida perquè està modificant blocs, mentre
no acabi la transacció no tornarà a posar el camp a vàlid, d‟aquesta manera si hi ha una
caiguda del sistema es podrà recuperar gràcies al journal. Quan es torni a encendre, el
sistema veurà que no es vàlid, llavors mirarà el journal i desfarà les operacions per a
recuperar un estat correcte i estable abans de la caiguda.
El camp en verd ja és part d‟un “bloc real”, en realitat és un bloc sencer però només ens
interessen aquests 80 bytes que són els valors del superblock, no és part del Description
bloc.
3.4.2.2 Commit bloc
Estudi del Sistema de Fitxers ReiserFS
39
El Commit bloc es l‟últim bloc de la transacció aquest bloc indica si la transacció ha
finalitzat. No té més utilitat que aquesta, té una copia del identificador de la transacció i
dels blocs que ocupa, a part té un camp a final “digest” o resum que en la actualitat no
fa servei.
En la Figura 11 mostrem l‟exemple del Commit Block de la transacció mostrada en les
Figures anteriors.
Figura 29. Commit Block
En la Taula 6, veiem els valors d‟aquest bloc.
Nom del
camp
Valor
Hex/decimal
Descripció Color
Id
transacció
0A / 10 Id. de la transacció Vermell
#blocs 02 / 2 Número de blocs que es modificaran en
la transacció
Verd
Digest 00 /0 Resum de la transacció Morat
Taula 15. Dades del Commit Block
Estudi del Sistema de Fitxers ReiserFS
40
4.Explicació comandes bàsiques
En aquest apartat s‟exposa l‟explicació de com s‟han efectuat les “comandes bàsiques”
necessàries per a entendre el funcionament d‟aquest sistema de fitxers, en alguns dels
casos l‟explicació serà més especifica, ja que estan contemplades en l‟aplicatiu i té
suport d‟algoritme, en canvi el que es esborrat serà a nivell informatiu però també baix
nivell de programació.
4.1. Llistat root
Per a llistar el contingut de la arrel del directori, primerament ens hem de situar en
l‟arrel de l‟arbre del sistema de directoris, aquest node té la estructura idèntica a un node
intern, per tant no es fa diferencia en el tractament d‟aquest. Seleccionem aquest node,
que ens ve donat el seu numero en el Superblock, el contingut del root es troba en el
bloc fulla que es troba en el primer bloc desprès de l‟últim Bitmap Block. Per tant
sempre aniríem al root de l‟arbre del sistema ReiserFS i avançaríem pel primer punter.
Figura 30. Camí cap al Root node
En l‟exemple de la figura 31, veiem que hem de desplaçar-nos al bloc 2001h/8193d per
a trobar el bloc de root. En aquest node fulla trobem en primer lloc el Block header del
node son els 24 bytes inicials, a continuació trobem el stat item del root node (blau) amb
la key {1,2,0,0} que ens diu les metadades del directori, seguit (en vermell) tenim la key
{1,2,1,500} aquí indica que es el directori arrel per el 500d del tercer element de la key,
com hem vist en apartats anteriors, a continuació de la key ens diu, el número de
elements, l‟offset fins a la informació entre altres.
En verd veiem tota la informació del directori, com hem explicat en apartats anteriors.
Estudi del Sistema de Fitxers ReiserFS
41
Figura 31. Llistat del directori de root
La informació que conté el directori de root veiem que es la següent,
Figura 32. Contingut del directori arrel.
4.2. Arbre de directoris
Per a pintar tot l‟arbre de directoris seguirem una tècnica molt semblant a la esmentada
en l‟apartat anterior, però en aquest cas més genèric.
Seguirem el procediment per a llistar els elements del node arrel, en quan estem mirant
els elements mirem llegim les keys i busquem l‟element, es a dir, tornem al node arrel i
busquem per l‟arbre de directoris aquest element, que encara no sabem si es un fitxer
directe, indirecte o un directori, en la figura que ve a continuació podem observar que
Estudi del Sistema de Fitxers ReiserFS
42
en vermell es troba la funció de hash que diferencia els elements en cas que el nom sigui
igual. En verd i morat, trobem els dos primers elements d‟uns key que ens son suficient
per a buscar el fitxer o directori, les guardem i un cop les tenim tronem al node arrel a
buscar-les, si es un directori repetim operació, si es un fitxer acaba la recursivitat i
segueix amb el següent element així fins que recórrer tot l‟arbre de directoris.
Figura 33. Funcions de hash i keys dels elements
A continuació veiem el resultat del recorregut de l‟arbre en una partició d‟exemple.
Figura 34. Arbre de directoris
4.3. Mostrar el contingut d’un fitxer
A continuació estudiarem com el sistema reiserfs arriba a un fitxer que estem buscant en
tres casos, un fitxer amb un item directe, amb un item indirecte i amb un fitxer gran.
Estudi del Sistema de Fitxers ReiserFS
43
En tots casos el recorregut s‟inicia en el root node tenim el número de bloc i té la clau
{1,2,0,0}. En aquest apartat donem per fet que comencem en el root node ja que en el
apartat 4.1 ja es parla de com s‟accedeix al root i com es llista el seu contingut, en canvi
si que seguirem pas per pas el camí a seguir a partir del root node.
4.3.1 Fitxer petit (direct item)
Per exemple estem buscant el fitxer “/directori1/fitxerdirectori1.txt” en aquest cas té el
número de key {2,9,1,0}.
Ens situem en el root node que en aquest cas es el bloc numero 8195, que pertany a la
@8391680d, en aquest cas podem comprovar que es troba al nivell 2 de l‟arbre ( com es
marca amb verd) , per tant es un node intern, aquest node estava compost de keys i a
continuació els punters que apunten en aquest cas al node fulla, que conté la informació
d‟aquest fitxer, com estem comparant les keys anem avançant fins que es compleix la
condició que la key que estem mirant sigui inferior, un cop ho trobem (groc) anem al
punter on ens indica a quin numero de bloc pertany (els dos primers bytes de la secció
en vermell indica el número de bloc en little endian) en aquest cas el 2006h/8198d.
Figura 35. Root node
El punter 2006h ens porta a la @8394752d com podem veure en la figura 30, es un node
fulla, en primer lloc trobem una key que es igual a la que estem buscant (vermell fosc),
aquest mostra l‟stat item ja que la key te la forma {2,9,0,0} i indica totes les propietats
del fitxer.
En vermell a continuació del stat item ve el item, que en vermell indica la clau del
directori i veiem com el valor de l‟últim byte de la key es 2d, això ens indica que es un
Estudi del Sistema de Fitxers ReiserFS
44
fitxer directe. En groc indica la longitud del fitxer en aquest cas veiem que es 10d, per
tant es un fitxer realment petit que conté 10 bytes d‟informació, i finalment en morat,
podem veure l‟offset on es troba la informació respecte el començament del bloc
25Ch/604d, per tant en l‟@8395356 trobem el principi del contingut del fitxer contem
10 bytes i tenim tota la informació.
Figura 36. Item del Fitxer i contingut.
Així tenim que en el fitxer “/directori1/fitxerdirectori1.txt” tenim en valor hexadecimal
els següents valors, 62 6C 61 62 6C 61 62 6C 61 0A, aquest valors se li aplica el codi
ASCII i tenim que el contingut d‟aquest fitxer es “blablabla”.
4.3.2 Fitxer gran (indirect item)
El fitxer que es troba “/directori3/reiserf.txt” té la key {2,20,1,0} en aquest cas com la
key es més gran que l‟última key que guarda el root node, ens anirem pel punter n+1, en
aquest cas el bloc destí es el 2009h/8201d.
Figura 37.Root node fitxer indirecte
Un cop ens desplacem al bloc seleccionat i trobem l‟ítem indirecte (podem veure que a
sobre de l‟ítem header trobem l‟ítem header del stat item del fitxer, en aquest cas ara ens
interessa troba els punters a blocs sense format, per el número de punter utilitzats (41)
veiem que ocupa al voltant de 42KB en cas que tots estiguin plens. Si mirem l‟ítem
Estudi del Sistema de Fitxers ReiserFS
45
header del item indirecte, veiem que ens indica que es troba a un desplaçament de
202h/544d, i que ocupa A4h/164d, que són els punters (cadascun de 4 Bytes com hem
vist en apartats anteriors.
Veiem en la figura 37 que a partir de la @8398368 tota aquesta informació són punters
a blocs sense format, que mantenen les dades tal qual les llegeixen, cada 4 Bytes són
blocs, comencen en el bloc 2200h i el fitxer acaba en el bloc 2228h.
En aquest cas estan tots consecutius però no te perquè se així poden estar en llocs
diferents depenen com estigui distribuïda la memòria.
Figura 38.Fitxer Indirecte
Aquest punters indirectes, finalment apunten a la informació del fitxer, en la figura
següent mostrem la informació d‟un dels blocs en aquest cas el 2200h/8704d.
Estudi del Sistema de Fitxers ReiserFS
46
Figura 39. Part del bloc 8704
4.4. Creació d’una carpeta
En aquest apartat avaluarem com crea les carpetes el sistema ReiserFS, a més a més
comentarem i avaluarem algunes de les complexitats que presenta un sistema com
aquest, el arbre balancejat assegura més robustesa en la organització i seguretat de les
dades però també incrementa la problemàtica a l‟hora de tractar la informació i per
suposat generar el codi que implementa.
En la creació de la carpeta s‟han de tenir en compte diversos aspectes, en primer lloc
s‟ha d‟entendre que la creació del directory item, no es en si el final, ja que es pot
modificar a mesura que creix. Sabem que el sistema ReiserFS treballa amb un arbre
balancejat, es a dir a cada cop que es crea un node nou s‟ha d‟ordenar i balancejar
l‟arbre, es un cost molt elevat de recursos i es en aquest punt on la creació del ítem
directori (tant directori com en fitxer) entra en un fase que necessita d‟optimitzacions i
de disseny d‟algoritmes avançats.
A continuació diferenciarem entre prerequisits i seguidament explicarem el procés que
segueix el ReiserFS per crear la carpeta.
Prerequisits:
Mida de Bloc : l‟obtenim del Superblock.
Bitmapblock: En aquest cas hi han diverses tècniques empleades per a trobar el
bitmapblock buit, no en totes les compilacions d‟aquest sistema s‟agafa el
primer buit que seria la evident, sinó que en alguns casos es comença per l‟últim
bitmapblock i es llegeix cap enrere fins a trobar el primer buit, això es fa per
evitar salts innecessaris a memòria (optimitzacions de codi).
Generar la Key que pertany a l‟element.
Estudi del Sistema de Fitxers ReiserFS
47
Explicació:
Crear nou node: que es situa en la part esquerra del node fulla de més a la
esquerra, allà es situa el item juntament amb el seu stat item.
Optimitzacions de balancejar el node: En aquest cas es fan servir 4
optimitzacions per a balancejar l‟arbre:
1. Minimitzar el nombre de nodes utilitzats.
2. Minimitzar el nombre de nodes afectats a l‟hora de balancejar
l‟arbre.
3. Minimitzar el nombre de nodes lliures durant les operacions de
balancejar l‟arbre.
4. Si la mida del directori sobrepassa fa que sobrepassi la mida de
bloc, shiftar el màxim d‟elements a un nou node, d‟aquesta
manera s‟evita balancejar més cops.
Generar una entrada per al journaling amb els bloc afectats per a les
modificacions realitzades.
En el cas dels directoris pot anar creixent per tant cada cop que es guardi un fitxer o es
creï un nou directori es repetiran les operacions d‟aquesta manera es tindrà control i si
es necessari es farà un nova redistribució del contingut entenent-se al bloc següent.
4.5. Creació d’un fitxer
En aquest cas el prerequisits passant a ser el mateix, la diferencia es a l‟hora de guardar
el contingut, aquí apareix una de les principals característiques del ReiserFS Tail
Packing, que ens pot estalviar espai en el disc dur.
Prerequisits:
Mida de Bloc: l‟obtenim del Superblock.
Bitmapblock: En aquest cas hi han diverses tècniques empleades per a trobar el
bitmapblock buit, no en totes les compilacions d‟aquest sistema s‟agafa el
primer buit que seria la evident, sinó que en alguns casos es comença per l‟últim
bitmapblock i es llegeix cap enrere fins a trobar el primer buit, això es fa per
evitar salts innecessaris a memòria (optimitzacions de codi).
Generar la Key que pertany a l‟element.
Explicació:
Comprovem mida del fitxer, que no superi l‟espai restant al disc.
Mida de fitxer: en cas que no sobrepassi la mida prefixada pel tail packing
(4kB) s‟afegeix en el mateix node, d‟aquesta manera evitem crear un altre node
i perdre espai. En cas que sobrepassi aquest mida crearem els links als nodes on
Estudi del Sistema de Fitxers ReiserFS
48
esta el contingut del fitxer i el final del fitxer el ficarem com si fos un node
directe en el mateix node (Tail Packing).
Crear nou node: que es situa en la part esquerra del node fulla de més a la
esquerra, allà es situa el item juntament amb el seu stat item.
Copiar el fitxer al nou node.
Optimitzacions de balancejar el node: En aquest cas es fan servir 4
optimitzacions per a balancejar l‟arbre:
5. Minimitzar el nombre de nodes utilitzats.
6. Minimitzar el nombre de nodes afectats a l‟hora de balancejar
l‟arbre.
7. Minimitzar el nombre de nodes lliures durant les operacions de
balancejar l‟arbre.
8. Si la mida del directori sobrepassa fa que sobrepassi la mida de
bloc, shiftar el màxim d‟elements a un nou node, d‟aquesta
manera s‟evita balancejar més cops.
Generar una entrada per al journaling amb el bloc anterior a la modificació i
posterior.
En cas que el contingut del directori que emmagatzema els fitxers augmenti seguirem el
mateix pas, s‟expandirà als nodes veïns.
Són els mateixos passos que en la creació de la carpeta ja que la veritable dificultat
d‟aquest procés es la optimització dels algoritmes de balanceig.
4.6. Esborrat d’un fitxer
Per al esborrat d‟un fitxer, tant si es directe com indirecte, s‟allibera amb els següents
passos.
Prerequisits:
Mida de Bloc: l‟obtenim del Superblock.
Bitmapblock: En aquest cas hi han diverses tècniques empleades per a trobar el
bitmapblock buit, no en totes les compilacions d‟aquest sistema s‟agafa el
primer buit que seria la evident, sinó que en alguns casos es comença per l‟últim
bitmapblock i es llegeix cap enrere fins a trobar el primer buit, això es fa per
evitar salts innecessaris a memòria (optimitzacions de codi).
Generar la Key que pertany a l‟element.
Explicació:
Es localitza l‟element a l‟arbre de directoris. S‟elimina la entrada del node i es
balanceja, en cas que sigui un node indirecte els nodes sense format, es
Estudi del Sistema de Fitxers ReiserFS
49
mantenen com a lliures al bitmap block, d‟aquesta manera si un altre els
requereix, el reescriu.
4.7. Esborrat d’un directori
Consisteix en esborrar una entrada de directori, en aquest cas recordem que el directori
té els noms dels elements que conté i les seves keys.
Prerequisits:
Mida de Bloc: l‟obtenim del Superblock.
Bitmapblock: En aquest cas hi han diverses tècniques empleades per a trobar el
bitmapblock buit, no en totes les compilacions d‟aquest sistema s‟agafa el
primer buit que seria la evident, sinó que en alguns casos es comença per l‟últim
bitmapblock i es llegeix cap enrere fins a trobar el primer buit, això es fa per
evitar salts innecessaris a memòria (optimitzacions de codi).
Generar la Key que pertany a l‟element.
Explicació:
S‟elimina els elements de dins del directori, mitjançant la seva key, com s‟ha
especificat en el cas anterior, un cop el directori es troba buit, s‟elimina
l‟element es marquen els blocs que es modifiquen per deixar-ho al journaling, i
es procedeix als algoritmes de balanceig de l‟arbre i es modifiquen els blocs.
Estudi del Sistema de Fitxers ReiserFS
50
5.Aplicacions similars
5.1.RFSTOOL
Aquesta eina permet accedir a les particions de ReiserFS des de un sistema Windows.
Ara també té la opció d‟accedir a la inversa, dissenyat per Gerson Kurz.
El conjunt de funcionalitats que ens dona aquest eina:
o Eina de consulta d‟una partició formatada amb ReiserFS.
o Interfície amigable i simple.
o Enfocada únicament per funcionalitat, consulta del arbre de directoris.
o Permet copiar al directori actual fitxers de la partició ReiserFS.
Alguns inconvenients, o mancances
o No modifica la partició de ReiserFS.
o Ignora el journaling.
o No mostra informació Superblock.
o No mostra informació del arbre de directoris.
o No permet muntar particions externes.
Figura 40. Un disc local consultat amb RFSTOOL [4]
Estudi del Sistema de Fitxers ReiserFS
51
5.2.UFS Explorer Batch
UFS Explorer Batch no es exclusiva per consultar particions de ReiserFS, també llegeix
de ext2, ext3, XFS, etc...
Aquesta es un eina bastant potent en quan a exportació, copia i lectura de fitxers d‟altres
particions. Algunes de les avantatges són,
o Permet carregar particions des de un disc local, un USB i des de particions
virtuals.
o Serveix per a més d‟un sistema de fitxers.
o Permet copiar i crear carpetes i directoris a les particions.
Alguns del desavantatges són:
o Interfície poc amigable, ja que s‟ha de fer en mode consola.
o Enfocada únicament per funcionalitat, no consulta cap tipus d‟informació
respecte el sistema de fitxers.
Figura 41. Exemple UFS Explorer Batch [5]
Estudi del Sistema de Fitxers ReiserFS
52
6.Aplicació resiserfs_rdr
6.1. Introducció
ReiserFS_rdr es tracta d‟una eina docent orientada a l‟estudi i aprenentatge dels
sistemes de fitxers de Linux i més concretament del sistema de fitxers ReiserFS.
Com ens suggereix el seu nom es tracta d‟una eina que permet la lectura de particions
ReiserFS fent especial èmfasi en com s‟accedeix a la informació que s‟està mostrant.
A continuació veurem com està dissenyada i implementada l‟eina i en detallarem el seu
funcionament tant des d‟una visió d‟usuari com de programador.
6.2. Anàlisi requisits
Aquesta eina esta destinada als alumnes de la assignatura de Sistemas Operatius com a
suport del sistema ReiserFS.
L‟assignatura té poc material respecte a varietat de sistemes, fins al moment disposen
del sistema FAT i ext2, d‟aquesta manera amb aquest treball s‟amplia la matèria i per
tant dona una visió més amplia dels sistemes de fitxers.
6.2.1. Requisits funcionals
Per a la elaboració d‟aquest treball s‟han tingut en compte els requisits funcionals
següents,
L‟usuari pot carregar qualsevol imatge i poder accedir a les funcionalitats del
aplicatiu.
Disposarà de botons d’ajuda, aquí podrà extreure la informació més
significativa, i petites ajudes per a entendre el que esta veient.
L‟usuari podrà veure tota la informació que fa referència al sistema de fitxers, es
a dir,
Informació sobre el Superblock, i la localització en el mapa de
memòria.
Informació sobre el Bitmap Block, posició de memòria, número
de bloc.
Informació sobre el arbre de directoris, i veure les propietats
d‟aquests com dates de consulta, permisos, tipus de fitxers.
Visió de Fitxers dins la partició en ASCII, com en hexadecimal,
ambdues traduccions per que l‟alumne pugui entendre el
funcionament.
Observar el journaling i les seves transaccions com estan
formades, com les tracta i la seva funció.
Estudi del Sistema de Fitxers ReiserFS
53
6.2.2. Requisits usabilitat
Apart de les funcionalitats anteriorment esmentades, l‟eina havia de ser usable. Per
aquest motiu, l‟eina havia de complir amb un seguit de requisits que tot seguit
assenyalarem:
L‟aplicació com a eina didàctica ha de tenir una interfície amigable i
intel·ligible.
Es comptarà en tot moment amb una ajuda que permetrà a l‟usuari entendre què
fa l‟aplicació.
Es tractarà de minimitzar el nombre de clics que hagi de fer l‟usuari per tal
d‟accedir a una determinada informació.
6.3. Decisions disseny
6.3.1. Entorn execució
Degut a que ja s‟han entregat treballs d‟estudis de fitxers per l‟assignatura, hem decidit
seguir l‟exemple d‟anys anteriors ja que han donat molt bon resultat i dona la
possibilitat de que l‟alumne pugui treballar en el mateix entorn, al ser una aplicació
semblant, la interacció amb l‟usuari no es més dificultosa sinó que agilitza la consulta, i
es manté la interfície amigable i senzilla.
6.3.2. Entorn programació
Com ha entorn de programació també vam seguir les pautes dels treballs anteriors, en
.NET, més concretament C#, ja que no només servia per aprendre sinó que es un tipus
de programació que es semblant a altres amb els que si s‟havia treballat com C++ i no
resultava tant costos.
També el fet de que l‟ interfície gràfica fos senzilla va animar a seguir amb aquest
llenguatge.
Estudi del Sistema de Fitxers ReiserFS
54
6.4. Anàlisi funcional
6.4.1. Modelat estàtic
6.4.1.1. Diagrama de casos d’ús
L‟aplicació disposa de un seguit de funcionalitats que detallarem en el diagrama de
casos d‟ús
Figura 42. Diagrama casos d'ús
Estudi del Sistema de Fitxers ReiserFS
55
Ara detallarem cada cas d‟ús,
Cas ús: Mostrar Ajuda
ID CU1
Objectiu Mostrar manual d‟ajuda
Actors A1 Usuari
Precondició -
CU Relacionats Tots
Activació A discreció de l‟usuari
Flux Principal 1. L‟usuari clica sobre l‟opció d‟ajuda.
2. S‟escull sobre quina opció es vol
seleccionar
Variacions -
Excepcions -
Postcondicions -
Comentaris - Taula 16. Especificació cas d'ús mostrar ajuda
Cas ús: Obrir Imatge
ID CU2
Objectiu Obrir una imatge de ReiserFS
Actors A1 Usuari
Precondició -
CU Relacionats -
Activació A discreció de l‟usuari
Flux Principal 1. Obrir una imatge valida de ReiserFS
2. Guardar certa informació relativa al
Superblock
Variacions -
Excepcions Imatge no vàlida
Postcondicions -
Comentaris - Taula 17. Especificació cas d'ús Obrir Imatge
Estudi del Sistema de Fitxers ReiserFS
56
Cas ús: Mostrar Superblock
ID CU3
Objectiu Mostrar La Informació del Superblock
Actors A1 Usuari
Precondició Haver obert una imatge de ReiserFS
vàlida
CU Relacionats -
Activació A discreció de l‟usuari
Flux Principal 1. L‟usuari clica la opció del Superblock
Variacions -
Excepcions -
Postcondicions -
Comentaris - Taula 18. Especificació cas d'ús Mostrar Superblock
Cas ús: Mostrar Bitmap Block
ID CU4
Objectiu Mostrar contingut dels Bitmapblock en
format hex
Actors A1 Usuari
Precondició Haver obert una imatge de ReiserFS
vàlida
CU Relacionats -
Activació A discreció de l‟usuari
Flux Principal 1.L‟usuari clica sobre la opció mostrar el
bitmapblock
2.L‟usuari pot clicar per mostrar un
bitmapblock concret.
Variacions -
Excepcions -
Postcondicions -
Comentaris - Taula 19. Especificació Mostrar Bitmap Block
Estudi del Sistema de Fitxers ReiserFS
57
Cas ús: Mostrar Journaling
ID CU5
Objectiu Mostrar informació relativa al sistema de
Journaling de ReiserFS
Actors A1 Usuari
Precondició Haver obert una imatge de ReiserFS
vàlida
CU Relacionats -
Activació A discreció de l‟usuari
Flux Principal 1. L‟usuari clica sobre la opció mostrar el
Journaling
2. L‟usuari clica per consultar la
informació del Journaling
Variacions -
Excepcions -
Postcondicions -
Comentaris - Taula 20. Especificació cas d'ús Mostrar Journaling
Cas ús: Mostrar Arbre Directoris
ID CU6
Objectiu Navegar per l‟estructura de directoris de la
imatge ReiserFS
Actors A1 Usuari
Precondició Haver obert una imatge de ReiserFS
vàlida
CU Relacionats -
Activació A discreció de l‟usuari
Flux Principal 1.L‟usuari clica sobre la opció mostrar
arbre directoris.
2. L‟usuari clica sobre els
fitxers/directoris per veure les propietats i
opcions.
Variacions -
Excepcions -
Postcondicions -
Comentaris - Taula 21. Especificació cas d'ús Mostrar arbre directoris
Estudi del Sistema de Fitxers ReiserFS
58
6.4.1.2. Diagrama de classes
L‟aplicació està formada per un gran nombre de classes. Tot seguit passarem a detallar
les relacions entre aquestes fent ús d‟un diagrama de classes.
Figura 43. Diagrama de classes
A continuació comentarem cadascun de les classes (atributs i mètodes), també
descriurem per a que serveixen així com una breu descripció de la seva funció dins del
programa principal.
Figura 44. Classe Program
Aquesta classe es la que comença el programa, de fet aquesta classe es crea per defecte
sempre que es fa un programa amb C#, aquesta crida conté la crida al formulari
principal del nostre aplicatiu.
Estudi del Sistema de Fitxers ReiserFS
59
Figura 45. Classe principal
La classe principal es el formulari principal, aquesta es crida a al començament de
l‟execució, dona la opció d‟obrir la partició de ReiserFS. Un cop validada correctament
permet accedir als diferents apartats de l‟aplicació
Figura 46.Classe info_superbloc
Aquesta classe conté tota la informació del Superblock d‟aquesta manera per consultar
alguna propietats, farem accés a memòria i no haurem de llegir de la partició, d‟aquesta
manera evitem salts innecessaris i agilitzem el procés.
Estudi del Sistema de Fitxers ReiserFS
60
Figura 47.Classe superblock
La classe Superblock conté tots els atributs i mètodes necessaris per a mostrar tota la
informació rellevant, i crear el formulari de la aplicació.
Figura 48. Classe Bitm_bloc
El Bitmapblock és el formulari amb tots els mètodes per a mostrar el contingut agrupar
les seves propietats i la interfície.
Estudi del Sistema de Fitxers ReiserFS
61
Figura 49. Classe ItemTreeAux
Per crear aquest ítem s‟ha utilitzat herència del ItemTree ja que ens interessava guardar
molta més informació de cada node. No teníem prou amb guardar l‟adreça on
començava pel que hem comentat abans, agilitzar les consultes i no llegir del fitxer tota
la informació. Si la podem guardar en una classe més senzill.
Figura 50. Formulari de L'arbre de directoris
La classe Tree s‟encarrega de la consulta i visió del arbre de directoris, tenim les
diferents opcions per veure tot el necessari per a consultar els fitxers i directoris de la
partició.
Estudi del Sistema de Fitxers ReiserFS
62
Figura 51. Classe journal
La classe journal s‟activa quan l‟usuari vol consultar la informació referent al
journaling, també conté la interfície per a consultar la seva informació
Figura 52. Classe frmRealBlocks
Aquest formulari conté la interfície, els mètodes i els atributs necessaris per a consultar
la informació dels blocs que es guarden en el journal, també guardem les dades
principals a memòria per evitar estar saltant dins de la imatge, sense comptar que la
velocitat d‟accés a memòria es més ràpida que la lectura de disc.
Estudi del Sistema de Fitxers ReiserFS
63
Figura 53.Classe frmCommitBlock
Al igual que la classe anterior s‟encarrega de la part gràfica de la consulta del commit
block de la part del journaling, en aquest cas només cal emmagatzemar la informació
bàsica.
Figura 54. Classe frmDescriptionBlock
Al igual que en el cas anterior dona la informació necessària i les propietats per a l‟
interfície gràfica dels description block de la part de journaling
Estudi del Sistema de Fitxers ReiserFS
64
6.4.2. Modelat dinàmic
Tot seguit passarem a veure els diagrames de seqüència dels processos més
rellevants que porta a cap l’aplicació.
Figura 55. Diagrama de seqüència d'obrir una imatge ReiserFS
6.5. Proves realitzades
Les proves realitzades per la posta a punt del treball i la verificació de totes les seves
funcionalitats en tot tipus de particions són les següents.
Particions de diverses mides: Es van utilitzar tres mides de particions 500KB,
100MB i de 200MB, per a comprovar que per gran que sigui la partició es pot
treballar sense problemes de mida.
Diverses mides de Bloc: S‟ha treballat també amb tres mides de bloc en aquest
cas son les mides de 1K, 4K i 8K. Aquestes proves van certificar no nomes la
mobilitat de totes les parts, aquesta part poc problemàtica en el sentit que aquest
sistema acostuma a utilitzar blocs més grans de 8k, per a la millor distribució de
l‟espai.
Profunditat de directoris: En aquest aspecte s‟ha arribat fins a 10 nivells de
directoris, simplement per garantir que la recursivitat es correcte.
Mida de fitxers: Aquesta prova consistia en el tractament de fitxers de gran
capacitat que no canvien en un bloc, en aquest cas s‟han passat fitxers des de 1K
fins a 100k, també es interessant per veure el funcionament del tail packing, que
optimitza la gestió d‟espai.
Estudi del Sistema de Fitxers ReiserFS
65
Nombre de fitxers dins d’un directori: S‟ha provat amb un nombre de fitxers
dins d‟un directori igual a 30, com hem explicat amb anterioritat, el
comportament varia, ja que el directori (en un node) s‟expandeix al node
contigu, maximitzant l‟aprofitament de l‟espai i la minimització del balanceig de
l‟arbre.
6.6. Posada en explotació
Per tal de poder utilitzar l‟aplicació i com s‟explica en el punt 7.1 es necessita tenir una
imatge ReiserFS creada. Apart de la imatge ReiserFS necessitarem òbviament el binari
amb l‟aplicació. Aquest binari però, no ens funcionarà en qualsevol màquina ja que en
estar creat amb .NET es necessitarà el framework de .NET que inclou les API‟s i
llibreries més comuns per al correcte funcionament d‟una aplicació desenvolupada en
aquest entorn.
Trobem diverses opcions per generar el binari:
Directament: Ens generarà un .exe que només es podrà executar en màquines
amb el framework .NET instal·lat.
Fent ús de la opció publish: Aquesta és una opció que ofereix el Visual Studio
que permet publicar una aplicació ja sigui en una web com en un cd. Aquesta
opció resulta molt útil ja que ens generarà un fitxer setup.exe que quan s‟executi
en qualsevol màquina es comprovarà si aquesta disposa del framework, en cas
negatiu es procedirà a la descarrega del framework i posteriorment s‟instal·larà
l‟aplicació en la màquina. Finalment tindrem instal·lada l‟aplicació en la
màquina completament funcional.
Estudi del Sistema de Fitxers ReiserFS
66
7.Manual de funcionament
7.1 Partició ReiserFs
Per a estudiar aquest sistema de fitxers, prèviament s‟ha de preparar una partició
formatada en ReiserFS, per a la creació hem utilitzat Ubuntu, una distribució de Linux
basat en Debian.
7.1.1 Creació de la partició ReiserFS
Primer per a crear una partició buida i indiquem la mida de la partició amb la
comanda
o dd if=/dev/zero of=<nomImatge> bs=1024 count=104857600
En aquest cas em indicat que creem una partició buida amb la mida de bloc
de 1024 (bs) i 100MB de mida de la partició (count).
A continuació hem de formatar la nostra partició buida, utilitzarem les següents
comandes.
o mkreiserfs -b 1024 -l label -d -f <nomImatge>
Per aquesta instrucció indiquem la mida de bloc ( -b 1024), una etiqueta
temporal, també forcem i mostrem totes les possibles errades que puguin
sorgir ( -f, -d respectivament), per últim indiquem a quina imatge apliquem
aquest format.
7.1.2 Muntar partició en Linux
Muntar la partició en Linux dona la opció per a tractar-lo com si fos un altre sistema de
fitxers a part del que ja tenim instal·lat, es a dir, ens permet introduir informació ja
siguin fitxers o directoris.
Utilitzem la següent comanda en Linux:
o mount <nomImatge> /mnt -t reiserfs -o loop=/dev/loop0
Aquí muntem la imatge en el /mnt, li indiquem que es tracta de una partició
amb el sistema de fitxers ReiserFS ( -t reiserfs), accedirem a aquesta partició
a traves de la carpeta /mnt.
o umount /mnt
Amb aquesta comanda estem desmuntant la partició i deixem lliure la
carpeta /mnt.
Estudi del Sistema de Fitxers ReiserFS
67
7.2 Execució del programa
Aquest software permetrà obrir les particions formatades en ReiserFS, desprès de fer
unes comprovacions i validar que és una partició vàlida, podrem realitzar diferents
operacions.
Un cop executem el programa s‟obre la finestra principal.
Figura 56. Finestra Principal ReiserFs_reader
En la finestra principal l‟única operació que es pot fer és la de carregar una imatge en
ReiserFS, un cop validat, els camps que estan a la part inferior esquerra s‟actualitzen
amb les dades del superblock i podem realitzar les quatre operacions per a estudiar la
partició.
Estudi del Sistema de Fitxers ReiserFS
68
7.2.1 Contingut Superblock
Com ja hem dit, després de validar la partició tenim accés al contingut del Superblock,
en la finestra que s‟obre a continuació tenim dos pastilles, la primera que esta per
defecte mostra la informació del Superblock, el nom del camp i el seu valor en decimal.
Figura 57. Informació del Superblock
La segona ens dona la opció de mirar com estan les dades a nivell de byte, un cop es
polsa el botó es marca en el camp de text el valor en hexadecimal del camp, en aquest
camp de text es veu l‟adreça en decimal i els valors en hexadecimal. També apareix el
valor en decimal.
Figura 58. Superblock valors nivell de bytes
Els camps més importants del Superblock ordenats per ordre d‟aparició són els
següents:
Mida de partició
Estudi del Sistema de Fitxers ReiserFS
69
Bloc del root
Bloc del Journal
Mida del Journal
Mida de bloc
Estat de la partició
Nombre de bitmaps
7.2.2 Contingut Bitmap Block
Aquesta part mostra l‟estat dels bitmap blocks, si hi ha més d‟un tenim l‟opció de
seleccionar quin volem veure.
Figura 59. Bitmap Block
El bitmap mostra l‟estat dels blocs que venen a continuació, en aquests cas els bits tenen
dos estats possibles.
Si el bloc està ocupat es marcarà amb 1
Si el bloc està lliure es marcarà amb 0.
Estudi del Sistema de Fitxers ReiserFS
70
Cada byte hexadecimal s‟indica de la següent manera
0xFF indica que els 8 blocs als que corresponen estan ocupats
7.2.3 Arbre de directoris
Podem veure en la figura 58, que aquest apartat ens dona l‟esquema de l‟arbre de fitxers
de la partició, disposem de l‟esquema a la part dreta, mentre que a l‟esquerra podem
veure les Propietats de l‟ítem, la codificació hexadecimal, tant pel fitxer en ASCII com
el seu contingut traduït.
En aquest apartat es disposa de varies opcions per a l‟usuari, en aquest cas, podem
consultar, les propietats del ítem com es veu en la captura següent. Veurem totes les
opcions que ens dona del fitxer només clicant a sobre del fitxer en l‟arbre de directoris.
Figura 60. Propietats del fitxer
L‟altre opció es mostra a continuació poder veure el contingut del fitxer.
Estudi del Sistema de Fitxers ReiserFS
71
Figura 61. Contingut d'un fitxer
7.2.4 Journal
Aquesta funcionalitat té mostra el funcionament del Journal amb detall, també esta
compost per dos opcions.
Journal Header, que mostra l‟identificador de la transacció, offset fins a
la següent transacció i l‟identificador del mount. A més de la adreça i els
bytes que mostren aquests valors.
Transaccions, es correspon amb la Figura 16, aquí es mostra la
transacció sencera, també tenim la opció de veure totes les transaccions
que hi ha al journal, a més a cadascun dels botons de la banda dreta es
mostra la part per separat a la que correspon, en aquest cas, el description
bloc, els blocs que es modifiquen en el journal i el commit bloc per a cada
transacció.
Estudi del Sistema de Fitxers ReiserFS
72
Figura 62. Journal
A més com a totes les finestres tenim la opció d‟ajuda que explicarà a que correspon
cada part i quines són les parts més importants.
Prement el botó de description bloc s‟activa el següent formulari, com es mostra en la
Figura 57, aquesta dona la opció de veure els valors del camps, i el seu valor en
hexadecimal al mapa de memòria i en decimal al costat del nom del camp.
En aquest formulari podem veure, els diferents camps, però el més important es els
blocs que s‟han modificat.
Estudi del Sistema de Fitxers ReiserFS
73
Figura 63.Formulari del Description Block
Al fer clic al botó “blocs Transició” activem el formulari i es pot veure els dos blocs,
tant el nou com el substituït, per en cas de restaurar el sistema a un punt anterior estable
es desfaran les transaccions.
També ens ofereix la opció de veure tots els blocs que s‟han modificat, tot això amb el
codi hexadecimal d‟aquesta manera es pot comparar els dos blocs i veure les
diferencies. També es pot apreciar, que el camp “Estat de partició” del SuperBlock es va
modificant.
Estudi del Sistema de Fitxers ReiserFS
74
Figura 64. Formulari de Blocs Modificats
L`última captura mostra el Commit Block que es un formulari similar al del Description
Block, mostra el mapeig de memòria i mostra els camps més importants.
Figura 65.Formulari del Commit Block
Estudi del Sistema de Fitxers ReiserFS
75
8.Cost realització projecte
El cost del projecte el desglossarem en les següents 5 etapes:
Documentació
Disseny
Implementació
Memòria
Proves
Un cop calculat el temps total aquest ens dóna unes 650 hores aproximadament. La
següent taula mostra la distribució d‟aquestes hores en les 5 etapes esmentades
anteriorment.
Etapes Hores Percentatge
Documentació 160 24%
Disseny 40 6%
Implementació 315 46%
Memòria 120 17%
Proves 45 7%
TOTAL 680 100%
Taula 22.Estimació del cost de realització de cada etapa
Com es pot observar la etapa que té un cost més elevat ha estat la d‟implementació
motivada pel fet de que s‟ha programat amb un llenguatge que no havíem tocat mai
(Visual C#). També caldria destacar la etapa de documentació ja que aquesta ens ha
portat un gran nombre d‟hores motivat pel fet de que pocs llibres aprofundeixen sobre el
funcionament intern del ReiserFS. Finalment també caldria esmentar la fase de proves
en que s‟han realitzat diferents proves d‟usabilitat per part del professorat de
l‟assignatura.
Estudi del Sistema de Fitxers ReiserFS
76
9.Conclusions
Amb l‟elaboració d‟aquest treball hem vist que el sistema de fitxers ReiserFS presenta
innovacions i millores respecte altres sistemes de fitxers. Mitjançant la creació de l‟eina
docent hem vist que ReiserFS empra una estructura de dades complexa però que
garanteix més robustesa en quan a la seguretat i la durabilitat de les dades.
El sistemes de fitxers el ReiserFS, va ser dissenyat per Hans Reiser com
desenvolupador en cap amb la col·laboració de l‟empresa namesys, va sortir al 2001 i va
introduir tres millores que han fet que sigui un bon sistema, la primera que té un sistema
de journaling ràpid, el cas es que una recuperació del sistema suposa molt poc temps en
cas d‟una caiguda de corrent o desconnexió inesperada del sistema. També esta basat en
arbres balancejats que presenta més robustesa en la seva implementació i amb
algoritmes més sofisticats preparats per a un sistema de fitxers, al inici del projecte els
programadors van veure aquesta problemàtica, però si es dissenya des de cero pensant
en la seva utilitat final es fan millor, finalment es més eficient respecte a la utilització de
l‟espai, en comparació amb alguns sistemes de fitxers, si s‟escriuen una gran quantitat
de fitxers petits, cadascun està en un bloc i es perd espai, en canvi en el sistema
ReiserFS minimitza l‟espai arribant a ser capaç de ficar una gran quantitat de fitxers en
un sol bloc, d‟aquesta manera s‟acostuma a estalviar una mitja del 6% de la capacitat
del disc dur.
En l‟actualitat a sortit al mercat un nou sistema de fitxers desenvolupat per la empresa
Namesys, el Reiser4, la evolució de ReiserFS que com ja hem vist presenta millores
considerables.
Per al estudiant aquest estudi també suposa una visió més amplia respecte als sistemes
de fitxers vistos a la assignatura de sistemes operatius, no només disposaran d‟un nou
sistema per ampliar els coneixements, sinó que és disposarà d‟una eina per acaba
d‟assolir els coneixements.
El procés per a realitzar l‟aplicatiu s‟ha empleat amb un entorn de programació dels que
no tenia coneixements previs, el programa s‟ha fet amb .NET, i més concretament
Visual C#. Es un llenguatge que s‟assembla a altres ja treballats com és el cas de C++
però presenta peculiaritats i característiques pròpies el que va fer que haguéssim de
documentar-nos i preparar amb més cautela la programació.
Per finalitzar dir que en certs casos al ser un sistema de fitxers open source fa que es
trobi molta informació variada el que dificulta que en certs casos el fet de consultar a un
lloc o a un altre fa que la informació varií i complica la feina, ja que s‟ha de validar. Per
altra banda en certs punts la mancança de fonts ha fet que la documentació s‟hagi hagut
de validar amb la poca informació disponible i certificar-la mitjançant l‟observació de la
informació a memòria.
Estudi del Sistema de Fitxers ReiserFS
77
10.Línies de futur
Un cop finalitzat el treball se‟ns acudeixen algunes línies de futur, tant per continuar el
treball com d‟altres nous, com es detalla a continuació.
Creació d’imatges ReiserFS: Per començar aquesta seria la primera millora
que se‟ns ha acudit respecte al aplicatiu per conseqüentment dotar l‟aplicatiu
com una eina completa respecte estudi del sistema ReiserFS. L‟usuari escolliria
la mida de la partició i la mida del bloc. Aquesta s‟hauria de mirar la
compatibilitat amb el compilador Linux per a crear particions ReiserFS
(mkreiserfs).
Creació / Esborrat de carpetes i fitxers: Aquesta millora implicaria en dotar
l‟aplicatiu de capacitat de modificar la imatge afegint carpetes i fitxers, aquesta
part es una part complicada ja que com hem explicat en l‟apartat 4.4 consisteix
en la creació de nodes, omplir l‟arbre, aplicar algoritmes d‟ordenació i tot això
sense tenir en compte l‟escriptura en el journal.
Estudis dels algoritmes d’ordenació d’arbres i possibles millors: Aquesta
millora de futur se‟ns ha ocorregut quan vam plantejar la opció de fer lectura i
escriptura en l‟aplicatiu, com hem plantejat anteriorment hi ha també diverses
opcions i es podria mirar quina es l‟opció més eficient i possibles millores tant
en l‟algorisme d‟ordenació, com en el tractament d‟inserció de nodes.
Accés a particions locals: Aquí podríem dotar l‟aplicació d‟accés a les
particions del disc local ReiserFS. Per poder accedir i compartir fitxers amb les
particions Windows, seria complicat ja que s‟hauria d‟estudiar la compatibilitat
dels sistemes de fitxers.
Creació d’un propi sistema de fitxers: Aquesta última opció es una línia de
futur que consistiria més encarada a un sistema de fitxers, amb el coneixement
adquirit a la assignatura es podria formar un sistema de fitxers amb les millors
prestacions dels diferents que s‟estudien a l‟assignatura com per exemple (Ext2,
ReiserFS, XFS), en aquest cas caldria un estudi profund i gran anàlisis, seria
més propi d‟un PFC.
Estudi del Sistema de Fitxers ReiserFS
78
11.Bibliografia
Pàgines Web
ELIE DE BRAUDER ( 2008, 12 de desembre).CodeDump: EliteDeBrauder [en línia].
CodeDump: ReiserSuperBlock. [Consultat: 13 agost 2008]. Disponible a Internet:
http://www.de-brauwer.be/wiki/wikka.php?wakka=ReiserSuperBlockw
[3] FLORIAN BUCHHLOZ ( 2006, gener). The Structure of the Reiser File System [en
línia]. [Consultat: 15 agost 2008]. Disponible a Internet:
http://homes.cerias.purdue.edu/~florian/reiser/reiserfs.php
GERSON KURZ ( 2007, 9 setembre).p-nand-q.com:Computer:rfstool:reiserFS docs
[en línia]: The ReiserFS filesystem [Consultat: 7 agost 2008]. Disponible a Internet:
http://p-nand-q.com/download/rfstool/reiserfs_docs.html
[2] JEREMY REIMER( 2008, 16 Març). From BFS to ZFS: past, present, and future of
file system[en línia].[Consultat: 11 desembre 2008]. Disponible a Internet :
http://arstechnica.com/articles/paedia/past-present-future-file-systems.ars/1
OPTIMUM DATA RECOVERY, INC. ( 2007, 21 d‟agost ). Linux ReiserFS File
System Data Recovery [en línia] : File System for Linux. [Consultat: 9 agost 2008].
Disponible a Internet: http://www.optimumrecovery.com/data/linux-reiserfs.html
[1]ZATOR SYSTEMS ( 2008, 25 d‟abril). Sistemas de ficheros [en línia] : Tecnologías
del PC. [Consultat: 9 desembre 2008]. Disponible a Internet:
http://www.zator.com/Hardware/H8_1_2a.htm
[4] ANDREAS KUNZ( 2004, 7 Març). YAReG - Yet Another R(eiser)FStool GUI.
[Consultat: 25 de setembre 2009]. Disponible a Internet: http://yareg.akucom.de/
[5] SOFTWARE PICKS NETWORK ( 2009, 2 gener). SPN Software Picks Network.
[Consultat: 25 de setembre 2009]. Disponible a Internet:
http://www.softpicks.net/software/UFS-Explorer-Batch-30500.htm
TFC’s
VELASCO, Albert (2008). Anàlisi de l’estructura del sistema d'arxius Ext2 i disseny i
implementació d’una aplicació de caire docent de suport a l’aprenentatge, Treball
Final de Carrera, Enginyeria i Arquitectura La Salle, Universitat Ramon Llull.