Các hệ thống file trong Linux
Trang 1PC WORLD VIETNAM JULY 2002
80
ÛÂNG DUƠNG
úâi sûơ hònh thađnh vađ phaât triïín
cuêa hïơ ăiïìu hađnh Linux, giúđ ăíy
chuâng ta coâ ríịt nhiïìu caâch trong
viïơc choơn lûơa caâc hïơ thöịng file
(file system) cho tûđng loaơi ûâng
duơng Trong bađi viïịt nađy töi muöịn giúâi
thiïơu caâc hïơ thöịng file tiïn tiïịn ặúơc sûê
duơng trong Linux nhû Ext3, Reiserfs, XFS,
vađ JFS coâ tñnh tin cíơy cao vađ coâ khaê nùng
ghi nhúâ quaâ trònh thao taâc trïn dûô liïơu
(journaling)
THÏỊ NAĐO LAĐ JOURNALING FILE
SYSTEM?
Chuâng ta haôy tòm hiïíu sú lûúơc vïì caâch
lađm viïơc mađ caâc hïơ thöịng Unix noâi chung,
Linux noâi riïng, thao taâc trïn hïơ thöịng file
Khi ặúơc khúêi ăöơng hïơ ăiïìu hađnh luön
luön duđng möơt chûúng trònh ăïí kiïím tra
tñnh toađn veơn cuêa hïơ thöịng file, ăoâ lađ trònh
fsck Nïịu noâ phaât hiïơn hïơ thöịng file coâ díịu
hiïơu bíịt thûúđng hoùơc chûa ặúơc unmount,
do caâc nguýn nhín nhû míịt ăiïơn hoùơc hïơ
thöịng bõ ặâng ăöơt ngöơt trong khi ăang
chaơy, luâc ăoâ fsck seô queât laơi toađn böơ hïơ
thöịng file ăïí cöị gùưng khöi phuơc laơi dûô liïơu
Quaâ trònh kiïím tra vađ khöi phuơc dûô liïơu
(nïịu coâ) nhanh hay chíơm phuơ thuöơc vađo
dung lûúơng cuêa öí cûâng, vađ vúâi nhûông hïơ
thöịng coâ dung lûúơng lûu trûô ríịt lúân nhû
hiïơn nay (tûđ hađng chuơc ăïịn hađng trùm
gigabyte) thò phaêi míịt hađng giúđ ăïí queât laơi
toađn böơ hïơ thöịng öí cûâng Caâch lađm nađy
ặúơc aâp duơng trïn caâc hïơ thöịng file Unix
chuíín ufs (Sun & HP) hoùơc ext2 mađ Linux
ăang sûê duơng
Nïịu hïơ thöịng file coâ khaê nùng ghi laơi
(log) ặúơc caâc hoaơt ăöơng mađ hïơ ăiïìu hađnh
ăaô vađ ăang thao taâc trïn dûô liïơu thò hïơ
thöịng xaâc ắnh ặúơc ngay nhûông file bõ sûơ
cöị mađ khöng cíìn phaêi queât laơi toađn böơ hïơ
thöịng file, giuâp quaâ trònh phuơc höìi dûô liïơu trúê nïn tin cíơy vađ nhanh choâng hún Hïơ thöịng file nhû víơy ặúơc goơi lađ journaling file system
HÏƠ THÖỊNG FILE EXT3
Ăûúơc xíy dûơng dûơa trïn cú súê cuêa hïơ thöịng file chuíín ext2 mađ Linux ăang sûê duơng, ext3 ặa vađo thïm chûâc nùng múâi
vö cuđng quan troơng, journaling file system, giuâp thao taâc dûô liïơu an toađn hún Ext3 cođn sûê duơng cú chïị JBD (Journaling Block Device) ăïí baêo vïơ thöng tin thao taâc trïn dûô liïơu, ặúơc ăaânh giaâ lađ tin cíơy hún so vúâi caâc hïơ thöịng chó thûơc hiïơn journaling trïn chó muơc dûô liïơu (journaling of meta-data only) nhû Reiserfs, XFS hay JFS Vúâi caâch baêo vïơ hai líìn nhû víơy thò hiïơu suíịt ghi dûô liïơu coâ phíìn nađo chíơm hún ext2; nhûng trong möơt vađi trûúđng húơp, nhúđ thöng tin trong journal log mađ ăíìu tûđ öí cûâng di chuýín húơp lyâ hún, nïn töịc ăöơ thao taâc dûô liïơu nhanh hún Ăöịi vúâi nhûông ûâng duơng
ûu tiïn cho ăöơ tin cíơy cuêa dûô liïơu hún lađ töịc ăöơ ghi ăún thuíìn thò ext3 lađ lûơa choơn thñch húơp Ngoađi ra, ext3 cođn cho pheâp caêi thiïơn töịc ăöơ thao taâc trïn dûô liïơu bùìng caâch thiïịt líơp thöng söị cho hïơ thöịng chó thûơc hiïơn journaling ăöịi vúâi thao taâc trïn dûô liïơu (mode: data=writeback vađ data = ordered)
Vúâi mode data=writeback, quaâ trònh khúêi ăöơng nhanh, dûô liïơu ặúơc ghi vađo ẵa ngay sau khi ăaô ghi xong thöng tin trong journal log (write back), vúâi mode nađy ăöi khi cuông xaêy ra tònh traơng hû dûô liïơu nïịu sûơ cöị xaêy ra ngay sau khi ghi journal log mađ chûa kõp ghi vađo ẵa, nhûng buđ laơi töịc ăöơ thao taâc file nhanh hún trong möơt vađi trûúđng húơp Vúâi mode data=ordered, dûô liïơu ặúơc ghi lïn ẵa trûúâc röìi múâi ăïịn
journal log, cho pheâp luön luön baêo ăaêm tñnh toađn veơn cuêa dûô liïơu trong moơi tònh huöịng vađ ăíy cuông chñnh lađ mode mùơc ắnh cuêa ext3 Vúâi mode data=journal thò viïơc baêo vïơ ặúơc thûơc hiïơn trïn caê hai: dûô liïơu vađ journal log; thöng tin ặúơc ghi chi tiïịt vađ nhiïìu hún giuâp caêi thiïơn töịc ăöơ truy cíơp dûô liïơu nhúđ töịi ûu viïơc di chuýín cuêa ăíìu tûđ, hoaơt ăöơng ríịt töịt ăöịi vúâi kiïíu dûô liïơu lađ database hoùơc dûô liïơu duđng chung trïn maơng (NFS), tuy nhiïn do phaêi ăoơc laơi nhiïìu loaơi thöng tin trïn journal log nïn thúđi gian khúêi ăöơng laơi maây húi chíơm hún so vúâi hai mode trïn möơt chuât
Vò baên chíịt cíịu truâc cuêa ext3 ặúơc xíy dûơng hoađn toađn dûơa trïn cú súê cuêa ext2 nïn ta coâ thïí chuýín ăöíi dïî dađng caâc dûô liïơu ăang töìn taơi trïn caâc hïơ thöịng ext2 sang ext3 mađ dûô liïơu khöng hïì bõ aênh hûúêng vađ thûơc hiïơn tûúng ăöịi dïî dađng, ăún giaên Vúâi kernel Linux tûđ 2.4.15 trúê lïn thò ext3 ăaô coâ sùĩn mađ khöng cíìn phaêi ặa thïm vađo (patch) nhû caâc version cuô Hiïơn taơi haông Linux RedHat ăaô ặa sùĩn module ext3 vađo kernel 2.4.7-10 trong baên RedHat 7.2 cuêa mònh
HÏƠ THÖỊNG FILE REISERFS
YÂ tûúêng cuêa viïơc xíy dûơng hïơ thöịng file Reiserfs xuíịt phaât tûđ ýu cíìu töịi ûu viïơc lûu trûô caâc file nhoê vađ tùng töịc ăöơ truy cíơp ăïịn caâc file nađy Reiserfs sûê duơng phûúng phaâp “B * Trees” phaât triïín lïn tûđ
“B + Trees” ăïí töí chûâc dûô liïơu, theo ăoâ möơt thû muơc coâ thïí chûâa ăïịn 100.000 thû muơc con vađ ăùơc biïơt lađ coâ thïí cíịp phaât ăöơng inode: möîi ăöịi tûúơng chûâa trong hïơ thöịng file ặúơc ăaânh díịu bùìng möơt chó söị duy nhíịt; caâc hïơ thöịng file khaâc thûơc hiïơn cíịp phaât inode tônh Ngoađi ra, Reiserfs cuông khöng cíịp phaât cöị ắnh dung lûúơng theo caâc khöịi 1KB hoùơc 4KB nhû caâc hïơ thöịng file khaâc thûúđng lađm mađ seô cíịp chñnh xaâc kñch thûúâc khöịi lûu trûô cíìn thiïịt; nhúđ víơy töịi ûu ặúơc dung lûúơng khi lûu trûô caâc file coâ kñch thûúâc nhoê
Toâm laơi, choơn Reiserfs ăïí lûu trûô vađ truy cíơp caâc file nhoê lađ töịi ûu, vúâi töịc ăöơ truy cíơp file tùng tûđ 8-15 líìn vađ dung
Hïơ ăiïìu hađnh Linux
Caâc hïơ thöịng file trong Linux
Trang 2PC WORLD VIETNAM JULY 2002
82
ÛÂNG DUƠNG
lûúơng tiïịt kiïơm ặúơc khoaêng trïn 5% so
vúâi hïơ thöịng ext2 vúâi caâc loaơi file coâ kñch
thûúâc dûúâi 1 KB Reiserfs höî trúơ thûơc hiïơn
journaling trïn chó muơc dûô liïơu (journaling
of meta-data only)
Muöịn sûê duơng Reiserfs trïn Linux ta
phaêi ặa caâc module nađy vađo kernel vađ
duđng caâc cöng cuơ Reiserfs ăïí ắnh daơng
partition Vñ duơ sau ăíy thûơc hiïơn chuýín
ăöíi partition hda6 sang hïơ thöịng file
Reiserfs
/sbin/mkreiserfs /dev/hda6
mount /dev/hda6 /squidcache –t reiserfs
Thûơc tïị, viïơc aâp duơng hïơ thöịng file
Reiserfs trïn squid proxy server chaơy trïn
Linux lađm cho viïơc truy cíơp internet ặúơc
caêi thiïơn ăaâng kïí do squid truy cíơp caâc
files nhoê (*.html, *.gif, *.class ) trong
cache vúâi töịc ăöơ cao
HÏƠ THÖỊNG FILE XFS
Ăûúơc phaât triïín búêi cöng ty Silicon
Graphic tûđ nùm 1990 ăïí khùưc phuơc haơn
chïị cuêa caâc hïơ thöịng file hiïơn hađnh vïì kñch
thûúâc vađ söị lûúơng partition, directory vađ
file Ngađy nay XFS ăaô sùĩn sađng ăïí sûê duơng
trong Linux vúâi caâc tñnh nùng vö cuđng
maơnh meô vađ ûâng duơng trong caâc hïơ thöịng
coâ tñnh chuýn nghiïơp cao
XFS lađ hïơ thöịng file 64 bit, noâ coâ thïí quaên lyâ ặúơc file coâ kñch thûúâc lađ 264 - 1
byte = 9 Exabyte (do sûê duơng söị nguýn coâ díịu nïn 1 bit duđng ăïí biïíu thõ díịu), coâ keđm theo cöng cuơ Volume Manager cho pheâp quaên lyâ lïn túâi 128 Volume, möîi Volume coâ thïí ặúơc gheâp lïn túâi 100 partition ẵa cûâng víơt lyâ, höî trúơ chûâc nùng journaling ăöịi vúâi dûô liïơu
Möơt ăùơc tñnh quan troơng cuêa XFS ăoâ lađ khaê nùng baêo ăaêm töịc ăöơ truy cíơp dûô liïơu cho caâc ûâng duơng (Guaranteed Rate I/O), cho pheâp caâc ûâng duơng duy trò ặúơc töịc ăöơ truy xuíịt dûô liïơu trïn ẵa, ríịt quan troơng ăöịi vúâi caâc hïơ thöịng phín phöịi dõch vuơ video coâ ăöơ phín giaêi cao hoùơc caâc ûâng duơng xûê lyâ thöng tin vïơ tinh ăođi hoêi duy trò öín ắnh töịc ăöơ thao taâc dûô liïơu Kernel Linux 2.4.17 trúê lïn höî trúơ ríịt töịt ăöịi vúâi hïơ thöịng file nađy, ăïí sûê duơng cíìn phaêi patch laơi kernel vúâi caâc module cuêa XFS
HÏƠ THÖỊNG FILE JFS
Ăûúơc phaât triïín búêi IBM, JFS lađ hïơ thöịng file 64 bit, xíy dûơng cho caâc internet file server vúâi ăùơc ăiïím thúđi gian khúêi
ăöơng maây nhanh, dung lûúơng chûâa dûô liïơu cao JFS höî trúơ journaling cho dûô liïơu, dûơa trïn phûúng phaâp thûúđng ặúơc sûê duơng trong hïơ cú súê dûô liïơu: ghi laơi quaâ trònh thao taâc thay ăöíi file (transaction) Trong trûúđng húơp coâ sûơ cöị xaêy
ra thò hïơ thöịng chó cíìn cho khöi phuơc laơi transaction trûúâc ăoâ mađ khöng cíìn phaêi ăoơc laơi hïịt journal log, giuâp cho quaâ trònh phuơc höìi ặúơc nhanh hún JFS höî trúơ tñnh nùng Logical Volumes cho pheâp nöịi caâc partition víơt lyâ thađnh caâc partition logic vúâi dung lûúơng cao Ngoađi
ra noâ cođn cho pheâp ngûúđi duđng tuyđ biïịn cíịp phaât caâc khöịi tûđ 512, 1.024, 2.048 vađ 4.096 byte cho lûu trûô dûô liïơu trïn ẵa Ăïí sûê duơng JFS trïn Linux ta cuông phaêi patch laơi kernel vađ cađi thïm caâc cöng cuơ JFS ăïí ắnh daơng ẵa (xem baêng)
Tađi liïơu tham khaêo:
http://www.redhat.com/support/ wpapers/redhat/ext3/index.html
http://www.namesys.com/
http://oss.sgi.com/projects/xfs/ papers/xfs_white/xfs_white_paper.html
http://www-124.ibm.com/jfs/ÿ
Hoađng Long – Arrive Technologies Inc longh@atvn.com.vn