HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA QUỐC TẾ VÀ ĐÀO TẠO SAU ĐẠI HỌC
*********
Bài tập tiểu luận môn Hệ Điều Hành Mạng Nâng Cao
Kiến trúc hệ thống File EXT2, EXT3, EXT4 của
các hệ điều hành họ LINUX
Nhóm thực hiện: Nguyễn Trường Giang
Vũ Hoàng Anh - Nguyễn Ngọc Ân
Phạm Khánh Chung - Tô Danh Dũng
Nguyễn Anh Dũng - Dương Văn Dũng
Đặng Xuân Điệp - Đinh Quang Định
Nguyễn Thu Giang - Chu Hải Hà
Giảng viên hướng dẫn: Ts Hoàng Xuân Dậu
Lớp: TDL&MMT (Đợt 1) - M11CQCT01-B
Đề tài: Kiến trúc hệ thống File EXT2, EXT3, EXT4 của các hệ điều hành họ LINUX
Hà Nội, tháng 12 - 2011
Nhóm 7- Lớp TDL&MMT Đợt 1 2
Đề tài: Kiến trúc hệ thống File EXT2, EXT3, EXT4 của các hệ điều hành họ LINUX
MỤC LỤC
MỤC LỤC........................................................................................................................1
LỜI GIỚI THIỆU...............................................................................................................3
CÁC TỪ VIẾT TẮT.............................................................................................................4
Chương 1. Tìm hiểu về hệ điều hành Linux......................................................................5
1.1 Linux là gì?......................................................................................................................5
1.2 Tại sao Linux phát triển?.................................................................................................. 6
1.3 Các bản phát hành Linux..................................................................................................7
1.4 Lợi thế của Linux.............................................................................................................7
1.5 Ai phát triển Linux ?........................................................................................................9
Chương 2. Phân vùng đĩa cứng.....................................................................................10
2.1 Giới thiệu chung............................................................................................................10
2. 2 Hệ thống File EXT2........................................................................................................10
2. 2.1 Giới thiệu...............................................................................................................................................10
2.2.2 Tổ chức đĩa.............................................................................................................................................12
2.2.2.1 Superblock......................................................................................................................................14
2.2.2.2 Group Descriptor............................................................................................................................20
2.2.2.3 Block Bitmap...................................................................................................................................21
2.2.2.4 Inode Bitmap..................................................................................................................................21
2.2.2.5 Inode Table.....................................................................................................................................22
2.2.2.6 Data Blocks.....................................................................................................................................28
2.2.3 Cấu trúc thư mục...................................................................................................................................28
2.2.3.1. Định dạng Directory File...............................................................................................................28
2.2.3.2 Ví dụ về Directory...........................................................................................................................29
2.2.3.4 Indexed Directory Format..............................................................................................................31
2.2.4 Inodes, File Identifiers...........................................................................................................................35
2.2.4.1 Inode Number................................................................................................................................35
2.4.2 Định vị cấu trúc của Inode................................................................................................................35
2.2.4.3 Định vị Inode Table........................................................................................................................36
2.2.5 Các Thuộc Tính Của File.........................................................................................................................36
2.2.5.1 Các thuộc tính chuẩn.....................................................................................................................36
2.2.5.2 Các thuộc tính mở rộng................................................................................................................37
2.2.6 Quản trị hệ thống file EXT2...................................................................................................................38
2.3 Hệ thống File EXT3.........................................................................................................39
2.4 Hệ thống File EXT4.........................................................................................................42
2.4.1 Giới thiệu................................................................................................................................................43
2.4.2 Khả năng nâng cấp mở rộng.................................................................................................................43
2.4.2.1 Hệ Thống Tệp Tin Lớn....................................................................................................................43
Nhóm 7- Lớp TDL&MMT Đợt 1 1
Đề tài: Kiến trúc hệ thống File EXT2, EXT3, EXT4 của các hệ điều hành họ LINUX
2.4.2.2 Đặc điểm........................................................................................................................................44
2.4.2.3 Lưu file theo nhóm block (Extents)...............................................................................................44
2.4.2.4 Chống phân mảnh trực tuyến .......................................................................................................46
2.4.2.5 Cải tiến độ tin cậy..........................................................................................................................47
4.4.2.6 Đếm số inode (index-node) chưa dùng và việc làm lệnh e2fsck nhanh hơn...............................47
2.4.2.7 Kiểm tra tổng thể (checksum).......................................................................................................49
2.4.2.8 Các đặc điểm mới..........................................................................................................................50
Kết luận........................................................................................................................56
TÀI LIỆU THAM KHẢO....................................................................................................57
Nhóm 7- Lớp TDL&MMT Đợt 1 2
Đề tài: Kiến trúc hệ thống File EXT2, EXT3, EXT4 của các hệ điều hành họ LINUX
LỜI GIỚI THIỆU
Trong những năm gần đây HDH Linux đang ngày càng trở nên phổ biến trong
trường học và môi trường công nghiệp. Hệ điều hành này, với chức năng và tính ổn
định cho phép nó tồn tại song song với các hệ điều hành thương mại khác. Hơn nữa,
sự phổ biến của mã nguồn Linux trên Internet đã đóng góp rất nhiều cho sự phổ cập
của Linux. Một trong những đặc điểm quan trọng của Linux là nó hỗ trợ nhiều hệ
thống tập tin. Điều này làm cho nó rất linh động và có thể cùng tồn tại với nhiều hệ
điều hành khác. Từ những phiên bản đầu tiên, Linux đã hỗ trợ 15 loại tập tin : ext,
ext2, xia, minix, umsdos, msdos, vfat, proc, smb, ncp, iso9660, sysv, hpfs, affs và ufs.
Trong Linux, cũng như Unix, hệ thống tập tin được truy xuất thông qua một
cấu trúc cây thừa kế đơn thay vì là các thiết bị xác định (như tên ổ đĩa hoặc số hiệu
của ổ đĩa). Linux thêm những hệ thống tập tin mới vào cây này khi nó được thiết lập
(mount). Tất cả hệ thống tập tin được thiết lập vào một thư mục và được gọi là thư
mục thiết lập. Khi một đĩa được khởi tạo, trên đĩa được chia thành nhiều partitions.
Mỗi partition có một hệ thống tập tin.
Nhóm sinh viên chúng em đã chọn đề tài: “Kiến trúc hệ thống File EXT2,
EXT3, EXT4 của các hệ điều hành họ LINUX”. Nhưng do kiến thức và kinh
nghiệm còn ít, sự nghiên cứu về đề tài còn nhiều thiếu sót, kính mong thầy giúp đỡ
và chỉnh sửa những thiếu sót giúp chúng em để chúng em có thể hoàn thiện hơn kiến
thức của mình.
Chúng em xin chân thành cảm ơn!
Nhóm 7- Lớp TDL&MMT Đợt 1 3
Đề tài: Kiến trúc hệ thống File EXT2, EXT3, EXT4 của các hệ điều hành họ LINUX
CÁC TỪ VIẾT TẮT
Client: máy khách.
IP: Internet Address.
RPM: Redhat Package Manager.
FQDN: Fully Qualifield Domain Name.
NFS: Network File System.
Server: máy chủ.
SMB= Samba chương trình dùng chia sẻ tài nguyên giữa các Windows PC
và Linux PC.
MTA: Mail Transport Agent.
PC= Personal computer: máy tính cá nhân.
Point, mount_point: điểm truy cập, thường là thư mục, nơi mount các hệ
thống tập tin.
Mount: gắn kết các tập tin vào 1 point nào đó.
Umount: gỡ bỏ các tập tin đã được mount vào 1 point nào đó.
Username: tên tài khoản người dùng.
Password: mật khẩu tương ứng với username.
SMB: Samba.
SWAT: Samba Web Administration Tool.
…
Nhóm 7- Lớp TDL&MMT Đợt 1 4
Đề tài: Kiến trúc hệ thống File EXT2, EXT3, EXT4 của các hệ điều hành họ LINUX
Chương 1. Tìm hiểu về hệ điều hành Linux
1.1 Linux là gì?
Linux xuất hiện như một sản phẩm nguồn mở miễn phí và đến nay đã có thể
sánh vai với các hệ điều hành thương phẩm như MS Windows, Sun Solaris v.v.
Linux ra đời từ một dự án hồi đầu những năm 1990 có mục đích tạo ra một hệ
điều hành kiểu UNIX cài đặt trên máy tính cá nhân chạy với bộ vi xử lý Intel,
tương hợp họ máy tính IBM-PC (còn gọi tắt là PC). Từ lâu, UNIX đã nổi tiếng là
một hệ điều hành mạnh, tin cậy và linh hoạt, nhưng vì khá đắt nên chủ yếu chỉ
dùng cho các trạm tính toán hoặc máy chủ cao cấp.
Ngày nay Linux có thể cài đặt trên nhiều họ máy tính khác nhau, không chỉ
riêng cho họ PC. Qua Internet, Linux được hàng nghìn nhà lập trình khắp trên thế
giới tham gia thiết kế, xây dựng và phát triển, với mục tiêu không lệ thuộc vào
bất kỳ thương phẩm nào và để cho mọi người đều có thể sử dụng thoải mái. Khởi
thuỷ, Linux xuất phát từ ý tưởng của Linus Torvalds, khi đó chàng sinh viên Đại
học Helsinki ở Phần Lan đã muốn thay thế Minix, một hệ điều hành nhỏ kiểu
UNIX.
Về cơ bản, Linux bắt chước UNIX cho nên cũng có nhiều ưu điểm của UNIX.
Tính đa nhiệm thực sự của Linux cho phép chạy nhiều chương trình cùng lúc.
Với Linux, bạn có thể đồng thời thực hiện một số thao tác, thí dụ chuyển tệp, in
ấn, sao tệp, nghe nhạc, chơi game v.v.
Linux là hệ điều hành đa người dùng, nghĩa là nhiều người có thể đăng nhập
và cùng lúc sử dụng một hệ thống. Ưu điểm này có vẻ không phát huy mấy trên
máy PC ở nhà, song ở trong công ty hoặc trường học thì nó giúp cho việc dùng
chung tài nguyên, từ đó giảm thiểu chi phí đầu tư vào máy móc.
Ngay cả khi ở nhà, bạn cũng có thể đăng nhập vào Linux với nhiều account
khác nhau qua các terminal ảo và tổ chức dịch vụ trên mạng riêng cho mình bằng
cách sử dụng Linux với nhiều modem.
Nhóm 7- Lớp TDL&MMT Đợt 1 5
Đề tài: Kiến trúc hệ thống File EXT2, EXT3, EXT4 của các hệ điều hành họ LINUX
Bản thân việc độc lập với những công ty lớn cũng tiềm tàng một điểm yếu của
Linux. Khi chưa có một mạng lưới riêng cung cấp dịch vụ bảo trì thì tất nhiên
người ta sẽ ngại sử dụng Linux. Tuy thế, với sự phát triển của Internet, các tổ
chức hỗ trợ người dùng Linux đã tạo nên các Website và forum để tháo gỡ cho
bạn nhiều vấn đề khó khăn.
Hơn nữa Linux có thể không chạy tốt với một số phần cứng ít phổ biến, thậm
chí việc hỏng hóc hoặc xoá mất dữ liệu đôi khi cũng xảy ra, bởi vì Linux luôn
thay đổi và khó được thử nghiệm đầy đủ trước khi đưa lên Internet.
Linux không phải là đồ chơi sẵn có, nó được thiết kế nhằm mang đến cho
người sử dụng cảm giác cùng tham gia vào một dự án mới. Tuy nhiên thực tế cho
thấy Linux chạy tương đối ổn định và cho bạn một cơ may không tốn kém để
học và sử dụng UNIX, một họ hệ điều hành chuyên nghiệp hiện nay đang được
rất nhiều người dùng trên các máy chủ và trạm tính toán cao cấp.
1.2 Tại sao Linux phát triển?
Trước hết, Linux phát triển vì là một trong những hệ điều hành miễn phí và có
khả năng đa nhiệm cho nhiều người sử dụng cùng lúc trên các máy tính tương
thích với PC. So với những hệ điều hành thương phẩm, Linux giúp bạn ít phải
nâng cấp và lại không cần trả tiền, cũng như phần lớn các phần mềm ứng dụng
cho nó. Hơn nữa, Linux và những ứng dụng đó được cung cấp với cả mã nguồn
miễn phí mà bạn có thể lấy về từ Internet, sau đó chỉnh sửa và mở rộng chức
năng của chúng theo nhu cầu riêng.
Linux có khả năng thay thế một số hệ điều hành thuộc họ UNIX đắt tiền. Nếu
tại nơi làm việc mà bạn sử dụng UNIX thì ở nhà bạn cũng thích sử dụng một hệ
nào đó giống như thế nhưng rẻ tiền. Linux giúp bạn dễ dàng truy cập, lướt qua
các Website và gửi nhận thông tin trên mạng Internet. Nếu bạn là một quản trị
viên UNIX thì về nhà bạn cũng có thể sử dụng Linux để thực hiện mọi công việc
quản trị hệ thống.
Một nguyên nhân khác làm cho Linux dễ đến với người dùng là nó cung cấp
mã nguồn mở cho mọi người.
Nhóm 7- Lớp TDL&MMT Đợt 1 6
Đề tài: Kiến trúc hệ thống File EXT2, EXT3, EXT4 của các hệ điều hành họ LINUX
Chính điều này đã khiến một số tổ chức, cá nhân hay quốc gia đầu tư vào
Linux nhằm mở rộng sự lựa chọn ra ngoài các phần mềm đóng kín mã nguồn. Họ
cho rằng, mặc dù có dịch vụ hậu mãi nhưng không gì đảm bảo được rằng khi
dùng các sản phẩm đóng kín này trên Internet, các thông tin cá nhân hay quốc gia
của họ có bị gửi về một tổ chức hay một quốc gia nào khác hay không. Thí dụ
Trung Quốc đã phát triển hệ điều hành Hồng Kỳ từ kernel của Linux để không bị
lệ thuộc Microsoft Windows, cũng như họ đang tự nghiên cứu bộ vi xử lý Hồng
Tâm để thay thế cho họ chip Intel.
Tại Việt Nam, việc nghiên cứu xây dựng một hệ điều hành từ kernel Linux đã
thu được một số thành công nhất định. Chắc bạn cũng đã biết đến Vietkey Linux
và CMC RedHat Linux (phiên bản tiếng Việt của RedHat Linux 6.2).
Gần đây, các công ty nổi tiếng như IBM, Sun, Intel, Oracle cũng bắt đầu
nghiên cứu Linux và xây dựng các phần mềm ứng dụng cho nó.
1.3 Các bản phát hành Linux
Nhiều người đã biết đến các nhà sản xuất phần mềm RedHat, ManDrake,
SuSE, Corel và Caldera. Có thể chính bạn cũng đã từng nghe đến tên các phiên
bản Linux như Slackware, Debian, TurboLinux và VA Linux, v.v. Quả thật,
Linux được phát hành bởi nhiều nhà sản xuất khác nhau, mỗi bản phát hành là
một bộ chương trình chạy trên nhóm tệp lõi (kernel) của Linus Tordvalds. Mỗi
bản như vậy đều dựa trên một kernel nào đó, thí dụ bản RedHat Linux 6.2 sử
dụng phiên bản kernel 2.2.4.
Hãng RedHat đã làm ra chương trình quản lý đóng gói RPM (RedHat
Package Manager), một công cụ miễn phí giúp cho bất cứ ai cũng có thể tự đóng
gói và phát hành một phiên bản Linux của chính mình. Thí dụ bản OpenLinux
của Caldera cũng đã được tạo ra như thế.
1.4 Lợi thế của Linux
Tại sao có thể chọn Linux thay vì chọn một trong những hệ điều hành khác
chạy trên PC như DOS, Windows 95/98, Windows NT, hoặc Windows 2000 ?
Nhóm 7- Lớp TDL&MMT Đợt 1 7
Đề tài: Kiến trúc hệ thống File EXT2, EXT3, EXT4 của các hệ điều hành họ LINUX
Linux cung cấp cho bạn một môi trường học lập trình mà hiện nay chưa có hệ
nào sánh được. Với Linux, bạn có đầy đủ cả mã nguồn, trong khi đó các sản
phẩm mang tính thương mại thường không bao giờ tiết lộ mã nguồn.
Cuối cùng, Linux mang đến cho bạn cơ hội sống lại bầu không khí của cuộc
cách mạng vi tính trước kia. Cho đến giữa thập niên 1970, máy tính điện tử còn
là sân chơi riêng của các tổ chức lớn, chẳng hạn như chính quyền, tập đoàn
doanh nghiệp và trường đại học. Người dân thường đã không thể sử dụng những
thành tựu kỳ diệu của công nghệ thông tin.
Ngày nay Linux đang làm một cuộc cách mạng ở lĩnh vực phần mềm hệ
thống. Linux là lá cờ tập hợp những con người không muốn bị kiểm sát bởi các
hãng khổng lồ nhân danh kinh tế thị trường để làm xơ cứng óc sáng tạo và cải
tiến.
Với Linux bạn sẽ khai thác được nhiều thế mạnh của UNIX. Trong số những
hệ điều hành thông dụng hiện nay, Linux là hệ điều hành miễn phí được nhiều
người sử dụng rộng rãi nhất. Bản thân Linux đã hỗ trợ sẵn sàng bộ giao thức
mạng TCP/IP, giúp bạn dễ dàng kết nối Internet và gửi thư điện tử. Linux thường
đi kèm XFree86 là một giao diện đồ hoạ cho người sử dụng (GUI) và cũng được
phát hành miễn phí. XFree86 cung cấp cho bạn các chức năng phổ biến ở một số
thương phẩm khác, chẳng hạn như Windows.
Linux đã có hàng ngàn ứng dụng, từ các chương trình bảng tính điện tử, quản
trị cơ sở dữ liệu, xử lý văn bản đến các chương trình phát triển phần mềm cho
nhiều ngôn ngữ, chưa kể nhiều phần mềm viễn thông trọn gói. Ngoài ra Linux
cũng có hàng loạt trò chơi giải trí trên nền ký tự hoặc đồ hoạ. Phần lớn những
chương trình tiện ích và ứng dụng có sẵn cho Linux lại không mất tiền mua. Các
bạn chỉ phải trả chi phí cho việc tải chúng từ Internet xuống hoặc trả cước phí
bưu điện.
Đến với Linux, giới lập trình sẽ có một loạt các công cụ phát triển chương
trình, bao gồm các bộ biên dịch cho nhiều ngôn ngữ lập trình hàng đầu hiện nay,
chẳng hạn như C, C++. Bạn cũng có thể dùng ngôn ngữ Pascal thông qua trình
biên dịch FreePascal. Nếu bạn không thích sử dụng những ngôn ngữ vừa kể,
Nhóm 7- Lớp TDL&MMT Đợt 1 8
Đề tài: Kiến trúc hệ thống File EXT2, EXT3, EXT4 của các hệ điều hành họ LINUX
Linux có sẵn các công cụ như Flex và Bison để bạn xây dựng ngôn ngữ riêng cho
mình.
Hai khái niệm hiện nay được đề cập rất nhiều là hệ thống mở (open system)
và tính liên tác (interoperability) đều gắn với khả năng của những hệ điều hành
có thể liên lạc với nhau. Phần lớn các hệ mở đòi hỏi phải thoả mãn tương thích
tiêu chuẩn IEEE POSIX (giao diện hệ điều hành khả chuyển). Linux đáp ứng
những tiêu chuẩn ấy và được lưu hành với mã nguồn mở.
1.5 Ai phát triển Linux ?
Nói chung, Linux là một hệ thống được xây dựng bởi các hacker và cho các
hacker. Mặc dù hiện nay trong xã hội từ hacker thường có hàm ý tiêu cực, song
nếu theo nghĩa ban đầu thì hacker không phải là tội phạm. Hacker tìm hiểu
những gì có bên trong một hệ thống cho đến từng chi tiết và có khả năng sửa
chữa nếu hệ thống ấy bị hỏng hóc. Đa số các hacker không xâm nhập hệ thống vì
tiền bạc hoặc ác ý, mặc dù sau này đã có những người vượt qua giới hạn ấy và bị
tập thể các hacker gọi là cracker (tin tặc) hay hacker mũ đen. Giới hacker cảm
thấy bị xúc phạm khi mọi người xem họ như lũ phá hoại và gọi chung là tin tặc.
Thực ra, những hacker chân chính, còn gọi là hacker mũ trắng, rất có công
trong việc phát hiện kẽ hở của các phần mềm, giúp mọi người và chủ nhân của
những phần mềm ấy cảnh giác trước sự tấn công của giới tin tặc. Cũng nhờ công
cuộc bảo vệ này mà Linux và các ứng dụng Linux (nói rộng hơn là các phần
mềm nguồn mở) càng ngày càng an toàn hơn
Ngoài đời, phần lớn những người sử dụng UNIX chỉ được cấp cho một số
account với quyền hạn thu hẹp, do đó một người bình thường không thể thử
nghiệm đầy đủ các câu lệnh UNIX. Với Linux bạn có một phiên bản hoạt động
tương tự UNIX nhưng cho phép quản trị, sử dụng, vào ra thoải mái không giới
hạn, một điều hiếm gặp trong cuộc sống.
Nhóm 7- Lớp TDL&MMT Đợt 1 9
Đề tài: Kiến trúc hệ thống File EXT2, EXT3, EXT4 của các hệ điều hành họ LINUX
Chương 2. Phân vùng đĩa cứng
2.1 Giới thiệu chung
Với sự hình thành và phát triển của hệ điều hành Linux, giờ đây chúng ta có
rất nhiều cách trong việc chọn lựa các hệ thống file (file system) cho từng loại
ứng dụng.
Hệ thống tập tin Linux được tổ chức theo dạng cây. Có một vị trí khởi điểm,
gọi là root (gốc). Bất kỳ một hệ thống Unix/Linux nào cũng có một thư mục đặc
biệt gọi là thư mục gốc (root directory) ký hiệu là dấy slash (“ / ”). Đây là điểm
bắt đầu để gắn (mount point) tất cả các phần tử còn lại như hệ thống disks,
partitions, CD ROM … vào hệ thống Linux/Unix. Tất cả các thư mục và tập tin
khác, kể cả các tập tin hệ thống và các thư mục hệ thống cũng chỉ là cấp con của
root. Khi hệ thống Linux/Unix khởi động, thông qua tiến trình init – nó sẽ tự
động moun (gắn) các tập tin hệ thống và thư mục hệ thống vào root (/). Trong
phần này chúng tôi muốn giới thiệu các hệ thống file tiên tiến được sử dụng trong
Linux như EXT2, EXT3, EXT4 có tính tin cậy cao và có khả năng ghi nhớ quá
trình thao tác trên dữ liệu (journaling).
2. 2 Hệ thống File EXT2
2. 2.1 Giới thiệu
Ext2 hay hệ thống tập tin mở rộng thứ hai là một hệ thống tập tin dành cho các
hệ thống nhân Linux. Lúc đầu nó được thiết kế để thay thế cho hệ thống tập tin
mở rộng. Nó đủ nhanh để dùng làm tiêu chuẩn để công năng của các loại hệ điều
hành Linux. Hạn chế chính của nó là không phải hệ thống tập tin nhật ký.
Hệ thống file ext2 được giới thiệu vào đầu năm 1993 và được thiết kế riêng
cho Linux. Nó có nhiều tính năng tăng cường để khắc phục các hạn chế của các
hệ thống file khác.
Tính năng Minix EXT EXT 2
Nhóm 7- Lớp TDL&MMT Đợt 1 10
Đề tài: Kiến trúc hệ thống File EXT2, EXT3, EXT4 của các hệ điều hành họ LINUX
Kích thước hệ thống
file lớn nhất
64 MB 2 GB 4 TB
Kích thước file lớn
nhất
64 MB 2 GB 2 GB
Chiều dài tối đa tên file 30 ký tự 255 ký
tự
255 ký
tự
Kích thước block tuỳ
biến
Không Không Có
Những đặc trưng của hệ thống tập tin Ext2 chuẩn:
- Hệ thống tập tin Ext2 hỗ trợ các kiểu tập tin Unix chuẩn: các tập tin thông
thường, các tập tin thiết bị đặc biệt và các tập tin liên kết.
- Hệ thống tập tin Ext2 có khả năng quản lý các hệ thống tập tin trên những
phân vùng kích cỡ rất lớn. Trong khi mã nhân (kernel) gốc giới hạn kích cỡ hệ
thống tập tin lớn nhất là 2GB, nghiên cứu gần đây trong lớp VFS đã tăng lên
đến giới hạn là 4TB. Vì vậy, ngày nay nó có thể sử dụng các đĩa dung lượng
lớn mà không cần tạo nhiều phân vùng.
- Hệ thống tập tin Ext2 cung cấp tên tập tin dài. Đây là khả năng của Linux mà
trên các hệ thống UNIX chuẩn không hề cung cấp. Tối đa một tên tập tin là
255 ký tự và có thể có khoảng trắng. Nghiên cứu gần đây trên lớp VFS, giới
hạn này đã tăng lên 4TB. Vì thế, nó có thể sử dụng các đĩa kích thước rất lớn
mà không cần tạo nhiều phân vùng.
- Hệ thống tập tin Ext2 dự trữ một vài block cho super user (root). Thông
thường, 5% các block này được dự trữ. Điều này cho phép người quản lý phục
hồi dễ dàng từ quá trình người dùng làm đầy các hệ thống tập tin.
- Hệ thống tập tin Ext2 cho phép truy xuất đến các hệ thống khác như FAT,
FAT32, MSDOS trên Windows 9.x và DOS một cách dễ dàng. Ngược lại,
chúng ta có thể cũng có thể từ các hệ thống FAT, NTFS, BeOS, OS/2, MacOS
truy xuất đến Ext2 thông qua các trình tiện ích như LTOOLS. Và còn nhiều
khả năng khác như có thể dễ dàng thêm vào các khả năng cho Ext2.
Nhóm 7- Lớp TDL&MMT Đợt 1 11
Đề tài: Kiến trúc hệ thống File EXT2, EXT3, EXT4 của các hệ điều hành họ LINUX
2.2.2 Tổ chức đĩa
Mục tiêu đầu tiên của việc dùng Ext2 là phải hiểu được tất cả kích thước của
các cấu trúc dữ liệu đều dựa trên kích cỡ một block hơn là kích cỡ một sector. Kích
cỡ block này thay đổi phụ thuộc vào hệ thống tập tin. Ví dụ trên đĩa mềm, nó là 1KB
(2 sector), trong khi trên một phân vùng 10GB, kích cỡ một block thường là 4KB hay
8KB (tương ứng với 8 và 16 sector).
Mỗi block lại được chia nhỏ hơn thành các fragment, nhưng tôi vẫn chưa thấy
một hệ thống tập tin nào mà kích thước fragment không khớp với kích thước một
block. Ngoài trừ superblock, tất cả các cấu trúc dữ liệu được thay đổi lại kích thước
cho khớp với các block. Đây là cái cần nhớ khi cố gắng mount bất kỳ hệ thống tập tin
nào khác trên một đĩa mềm. Ví dụ, Inode Table Block chứa entry trong một block
4KB nhiều hơn một block 1KB, nên người ta phải đưa vào tính toán khi nào nên truy
xuất cấu trúc đặc biệt này.
Block đầu tiên trong mỗi partition Ext2 không bao giờ được quản lý bởi hệ thống
tập tin Ext2, bởi vì nó được dùng cho partition boot sector. Phần còn lại của partition
Ext2 được chia thành các block group, được biểu diễn như hình sau:
Sự bố trí của một phân vùng Ext2 và của một block group
Tất cả các block group đều có cùng kích thước và lưu trữ liên tiếp nhau, vì vậy nhân
có thể tìm thấy được vị trí của một block group trên đĩa từ số chỉ mục kiểu nguyên
của nó. Trong khi một đĩa mềm chỉ chứa một block group điều khiển tất cả các block
của hệ thống tập tin, thì một đĩa cứng 10GB có thể dễ dàng được chia thành 30 block
group như vậy, mỗi block group điều khiển một số lượng block cụ thể.
Nhóm 7- Lớp TDL&MMT Đợt 1 12
Đề tài: Kiến trúc hệ thống File EXT2, EXT3, EXT4 của các hệ điều hành họ LINUX
Vị trí đầu của mỗi block group là các cấu trúc dữ liệu khác nhau liệt kê đường
dẫn của phần còn lại, cung cấp nhiều thông tin hơn, cấu trúc dữ liệu xác định trạng
thái hệ thống tập tin hiện hành. Sau đây là một tổ chức hệ thống tập tin Ext2 trên một
đĩa mềm:
Figure 1-1. Bố trí dữ liệu trên đĩa mềm.
offset # of blocks description
-------- ----------- -----------
0 1 boot record
-- block group 0 --
(1024 bytes) 1 superblock
2 1 group descriptors
3 1 block bitmap
4 1 inode bitmap
5 23 inode table
28 1412 data blocks
Và đây là tổ chức của một hệ thống file Ext2 20MB:
Figure 1-2. Bố trí dữ liệu trên phân vùng 20MB
offset # of blocks description
-------- ----------- -----------
0 1 boot record
-- block group 0 --
(1024 bytes) 1 superblock
2 1 group descriptors
3 1 block bitmap
4 1 inode bitmap
5 214 inode table
219 7974 data blocks
-- block group 1 --
8193 1 superblock backup
8194 1 group descriptors backup
8195 1 block bitmap
8196 1 inode bitmap
8197 214 inode table
8408 7974 data blocks
-- block group 2 --
16385 1 block bitmap
16386 1 inode bitmap
16387 214 inode table
16601 3879 data blocks
Các block group làm tăng sự phân mảnh tập tin, bời vì nhân (kernel) cố gắng
giữ các block data phụ thuộc vào một tập tin trong block group giống nhau, nếu có
thể. Mỗi block trong một block group bao gồm các thông tin sau:
Một bản sao superblock của hệ thống tập tin.
Một bản sao của nhóm các ký hiệu miêu tả block group
Một block bitmap dữ liệu
Một bảng các inode
Một khoanh dữ liệu thuộc một tập tin, ví dụ như block data.
Nhóm 7- Lớp TDL&MMT Đợt 1 13
Đề tài: Kiến trúc hệ thống File EXT2, EXT3, EXT4 của các hệ điều hành họ LINUX
Nếu một block không chứa bất kỳ thông tin có nghĩa nào, thì block đó trống.
Việc bố trí trên đĩa có thể đoán trước với điều kiện bạn biết một vài thông tin cơ
bản sau: kích thước block, số block trên một block group, số inode trên một block
group. Thông tin này đều được xác định hay tính toán từ cấu trúc của superblock.
Nếu không có thông tin về superblock, đĩa sẽ vô ích; do đó nếu đủ khoảng trống
có sẵn thì sẽ tạo ra một hay nhiều bản sao lưu superblock trên đĩa.
Block bitmap và Inode bitmap được dùng để xác định block nào và các entry
inode nào trống để sử dụng. Các data block là nơi lưu trữ nhiều loại tập tin. Lưu ý
rằng một thư mục cũng được xem là một tập tin trong Exts, sau đây chúng ta sẽ đi
tìm hiểu chi tiết hơn.
Trong khi tất cả sự bổ sung Ext2 cố gắng tương thích, một số field trong các cấu
trúc khác nhau được tùy biến để khớp với những yêu cầu của một hệ điều hành cụ
thể.
2.2.2.1 Superblock
Superblock là cấu trúc trên một đĩa Ext2 chứa thông tin cơ bản về các đặc tính
của hệ thống tập tin. Không có Superblock thì không dùng đĩa được vì Superblock
chứa các thông tin cơ bản như: kích thước của một block, tổng số block trên một
block group, tổng số inode trên một block group… Nhờ các thông tin này mà ta có
thể dự đoán, tính toán các thành phần và cấu trúc trong một block group.
Cấu trúc chi tiết của một Superblock như sau:
Figure 1-3. Cấu trúc của Superblock
offset size description
------- ------- -----------
0 4 s_inodes_count
4 4 s_blocks_count
8 4 s_r_blocks_count
12 4 s_free_blocks_count
16 4 s_free_inodes_count
20 4 s_first_data_block
24 4 s_log_block_size
28 4 s_log_frag_size
32 4 s_blocks_per_group
36 4 s_frags_per_group
40 4 s_inodes_per_group
44 4 s_mtime
48 4 s_wtime
52 2 s_mnt_count
54 2 s_max_mnt_count
56 2 s_magic
58 2 s_state
60 2 s_errors
62 2 s_minor_rev_level
64 4 s_lastcheck
68 4 s_checkinterval
72 4 s_creator_os
76 4 s_rev_level
80 2 s_def_resuid
82 2 s_def_resgid
-- EXT2_DYNAMIC_REV Specific --
Nhóm 7- Lớp TDL&MMT Đợt 1 14
Đề tài: Kiến trúc hệ thống File EXT2, EXT3, EXT4 của các hệ điều hành họ LINUX
84 4 s_first_ino
88 2 s_inode_size
90 2 s_block_group_nr
92 4 s_feature_compat
96 4 s_feature_incompat
100 4 s_feature_ro_compat
104 16 s_uuid
120 16 s_volume_name
136 64 s_last_mounted
200 4 s_algo_bitmap
-- Performance Hints --
204 1 s_prealloc_blocks
205 1 s_prealloc_dir_blocks
206 2 - (alignment)
-- Journaling Support --
208 16 s_journal_uuid
224 4 s_journal_inum
228 4 s_journal_dev
232 4 s_last_orphan
-- Unused --
236 788 - (padding)
s_inodes_count
Giá trị 32 bit cho biết tổng số inode trên toàn bộ partition, bao gồm cả inode đã
dùng và chưa dùng trong hệ thống tập tin.
s_blocks_count
Giá trị 32 bit cho biết tổng số block trên toàn bộ partition, bao gồm cà block đã
dùng và chưa dùng trong hệ thống tập tin.
s_r_blocks_count
Giá trị 32 bit cho biết tổng số block dành riêng cho super user. Điều này hữu dụng
nhất nếu vì một số lý do một người dùng có cố tình làm đầy hệ thống tập tin hay
không. Super user sẽ có một lượng block chưa dùng cụ thể này để có thể tạo và lưu
các tập tin cấu hình.
s_free_blocks_count
Giá trị 32 bit cho biết tổng số các block còn trống, bao gồm cả số block dành cho
super user. Đây là tổng số tất cả các block còn trống của tất cả các block group.
s_free_inodes_count
Giá trị 32 bit cho biết tổng số inode còn trống. Đây là tổng tất cả các inode trống của
tất cả block group.
s_first_data_block
Giá trị 32 bit cho biết vị trí của data block đầu tiên, hay xác định số thứ tự của khối
chứa cấu trúc superblock.
Nhóm 7- Lớp TDL&MMT Đợt 1 15
Đề tài: Kiến trúc hệ thống File EXT2, EXT3, EXT4 của các hệ điều hành họ LINUX
Chú ý rằng giá trị này luôn là 0 cho hệ thống tập tin có kích thước một block lớn hơn
1KB, và bằng 1 với hệ thống tập tin có kích thước một block là 1KB. Superblock
luôn bắt đầu từ byte thứ 1024 của đĩa, thường là byte đầu tiên của sector thứ 3.
s_log_block_size
Kích thước block được tính toán sử dụng giá trị 32 bit này như là số bit để dịch trái
giá trị 1024. Giá trị này phải là số dương:
block size = 1024 << s_log_block_size;
s_log_frag_size
Kích thước fragment được tính toán sử dụng giá trị 32 bit như là số bit dịch trái giá
trị là 1024. Chú ý một giá trị âm sẽ dịch bit sang phải hơn là sang trái:
if( positive )
fragmnet size = 1024 << s_log_frag_size;
else
framgnet size = 1024 >> -s_log_frag_size;
s_blocks_per_group
Giá trị 32 bit cho biết tổng số block trên một block group. Giá trị này có thể kết hợp
với s_first_data_block có thể được dùng để xác định đường biên của các block group.
s_frags_per_group
Giá trị 32 bit cho biết tổng số fragment trên một block group. Nó cũng được dùng để
xác định kích thước của một block bitmap của mỗi block group.
s_inodes_per_group
Giá trị 32 bit cho biết tổng số inode trên một block group. Nó còn được dùng để xác
định kích thước của inode bitmap của mỗi block group.
s_mtime
Phiên bản Unix, như được xác định bởi POSIX, của lần gần nhất mà hệ thống tập tin
được gắn vào.
s_wtime
Phiên bản Unix, như được xác định bởi POSIX, của lần viết gần nhất truy cập vào hệ
thống tập tin.
Nhóm 7- Lớp TDL&MMT Đợt 1 16
Đề tài: Kiến trúc hệ thống File EXT2, EXT3, EXT4 của các hệ điều hành họ LINUX
s_mnt_count
Giá trị 32 bit cho biết có bao nhiêu lần hệ thống tập tin được gắn vào từ khi lần gắn
vào gần nhất được bổ sung một cách đầy đủ.
s_max_mnt_count
Giá trị 32 bit cho biết số lần tối đa hệ thống tập tin có thể được gắn vào trước khi
hoàn thành việc kiểm tra toàn diện.
s_magic
Giá trị 16 bit xác định hệ thống tập tin như Ext2. Giá trị cố định hiện thời là 0xEF53.
s_state
Giá trị 16 bit cho biết trạng thái của hệ thống tập tin. Khi hệ thống tập tin được gắn
vào, trạng thái này được thiết lập là EXT2_ERROR_FS. Khi mà hệ thống tập tin chưa
được gắn vào, giá trị này có thể là EXT2_VALID_FS hoặc EXT2_ERROR_FS trong trường
hợp hệ thống tập tin không gắn vào một cách không dễ dàng.
s_errors
Giá trị 16 bit cho biết trình điều khiển hệ thống tập tin nào được thực thi khi phát
hiện thấy một lỗi. Các giá trị chi tiết được liệt kê trong bảng sau:
Table 1-1. Giá trị EXT2_ERRORS
EXT2_ERRORS_CONTINUE 1 Tiếp tục nếu không có gì xảy ra
EXT2_ERRORS_RO 2 remount read-only
EXT2_ERRORS_PANIC 3 Gây ra lỗi ở nhân (kernel panic)
EXT2_ERRORS_DEFAULT Thay đổi Kể từ việc xét lại 0.5, cái này cũng
giống như
EXT2_ERRORS_CONTINUE
s_minor_rev_level
Giá trị 16 bit xác định cấp xét lại thứ cấp (minor revision) trong phạm vi cấp độ xét
lại của nó (revision level).
s_lastcheck
Phiên bản Unix, như được định nghĩa bởi POSIX, của sự kiểm tra hệ thống tập tin
gần đây nhất.
s_checkinterval
Nhóm 7- Lớp TDL&MMT Đợt 1 17
Đề tài: Kiến trúc hệ thống File EXT2, EXT3, EXT4 của các hệ điều hành họ LINUX
Khoảng thời gian lớn nhất giữa các lần Unix, được định nghĩa bởi POSIX, cho phép
giữa các lần kiểm tra hệ thống tập tin.
s_creator_os
Giá trị 32 bit cho biết hệ điều hành tạo hệ thống tập tin. Giá trị này được xác định
như sau:
Table 1-2. Giá trị của EXT2_OS
EXT2_OS_LINUX 0 Linux
EXT2_OS_HURD 1 Hurd
EXT2_OS_MASIX 2 MASIX
EXT2_OS_FREEBSD 3 FreeBSD
EXT2_OS_LITES4 4 Lites
s_rev_level
Giá trị 32 bit cho biết giá trị của cấp duyệt. Hiện thời có hai giá trị được xác định như
sau:
Table 1-3. Các giá trị duyệt EXT2
EXT2_GOOD_OLD_REV 0 Định dạng gốc
EXT2_DYNAMIC_REV 1 Định dạng V2 với kích thước
inode động
s_def_resuid
Giá trị 16 bit được dùng như số thự tự người dùng mặc định cho các block được dành
riêng.
s_def_resgid
Giá trị 16 bit được dùng như số thứ tự nhóm mặc định cho các block được dự trữ.
s_first_ino
Giá trị 32 bit được dùng như chỉ mục đến inode đầu tiên có thể sử dụng cho các tập
tin chuẩn. Trong việc duyệt hệ thống tập tin không động, inode không dự trữ đầu tiên
được cố định là 11. Với câu lệnh duyệt động của hệ thống tập tin, nó có thể bổ sung
giá trị này.
s_inode_size
Nhóm 7- Lớp TDL&MMT Đợt 1 18
Đề tài: Kiến trúc hệ thống File EXT2, EXT3, EXT4 của các hệ điều hành họ LINUX
Giá trị 16 bit cho biết kích thước của cấu trúc inode. Trong các lần duyệt hệ thống tập
tin không động giá trị này được giả lập là 128.
s_block_group_nr
Giá trị 16 bit được dùng để cho biết số block group đang làm chủ cấu trúc superblock
này. Cái này có thể dùng để tạo lại hệ thống tập tin từ bản sao lưu superblock bất kỳ.
s_feature_compat
Giá trị 32 bit cho biết các đặc trưng có thể có của bitmask. Việc thực thi hệ thống tập
tin được giải phóng để hỗ trợ cho chúng hoặc không hỗ trợ mà không có sự rủi ro về
việc hư dữ liệu.
s_feature_incompat
Giá trị 32 bit cho biết các đặc trưng có thể có của bitmask. Việc thực thi hệ thống tập
tin được từ chối để gắn vào hệ thống tập tin nếu bất kỳ đặc tính xác định nào không
được hỗ trợ.
s_feature_ro_compat
Giá trị 32 bit cho biết các đặc trưng chỉ đọc “read-only” của bitmask. Việc thực thi hệ
thống tập tin nên gắn vào như chỉ đọc nếu đặc tính xác định của bất kỳ bitmask nào
không được hỗ trợ.
s_uuid
Giá trị 128 bit được dùng như số thứ tự của bộ đĩa. Nếu có thể, cái này nên là duy
nhất cho mỗi hệ thống tập tin được định dạng.
s_volume_name
Giá trị 16 byte cho biết tên của ổ đĩa, hầu như không được sử dụng. Một tên ổ đĩa
hợp lệ sẽ bao gồm các ký tự ISO-Latin-1 và kết thúc là 0.
s_last_mounted
Giá trị 64 byte cho biết đường dẫn thư mục ở đó hệ thống tập tin được gắn vào gần
nhất. Thông thường không được dùng, nó có thể phục vụ cho việc tự tìm kiếm thời
điểm gắn vào mà không xác định trên dòng lệnh. Hơn nữa đường dẫn được kết thúc
là 0 vì những lý do tương thích. Đường dẫn hợp lệ được tạo từ các ký tự ISO-Latin-
1.
s_algo_bitmap
Nhóm 7- Lớp TDL&MMT Đợt 1 19
Đề tài: Kiến trúc hệ thống File EXT2, EXT3, EXT4 của các hệ điều hành họ LINUX
Giá trị 32 bit được dùng bởi thuật toán nén để xác định những phương thức được sử
dụng.
2.2.2.2 Group Descriptor
Group descriptor là một mảng cấu trúc group_desc, mỗi phần tử mô tả một block
group, cho biết đường dẫn của bảng inode, các block và các inode bitmap của nó, và
một số thông tin hữu ích khác.
Các group descriptor được định vị ở block đầu tiên sau block chứa trong cấu trúc
superblock. Các thành phần của group descriptor:
Figure 1-4. Cấu trúc group_desc
offset size description
------- ------- -----------
0 4 bg_block_bitmap
4 4 bg_inode_bitmap
8 4 bg_inode_table
12 2 bg_free_blocks_count
14 2 bg_free_inodes_count
16 2 bg_used_dirs_count
18 2 bg_pad
20 12 bg_reserved
Đối với mỗi group descriptor trong hệ thống tập tin, một group_desc như vậy sẽ được
tạo ra. Mỗi cái đại diện cho một block group đơn trong hệ thống tập tin và thông tin
của bất kỳ cái nào trong chúng thích hợp với group mà nó đang mô tả. Mỗi bảng
Group descriptor chứa tất cả các thông tin về tất cả group.
Tất cả chỉ cho biết số thứ tự block là tuyệt đối.
bg_block_bitmap
Giá trị 32 bit cho biết số thứ tự của block đầu tiên của block bitmap đối với group
được trình bày.
bg_inode_bitmap
Nhóm 7- Lớp TDL&MMT Đợt 1 20
Đề tài: Kiến trúc hệ thống File EXT2, EXT3, EXT4 của các hệ điều hành họ LINUX
Giá trị 32 bit cho biết số thứ tự của block đầu tiên của inode bitmap đối với group
được mô tả.
bg_inode_table
Giá trị 32 bit cho biết số thứ tự của block đầu tiên trong bảng inode đối với group
được mô tả.
bg_free_blocks_count
Giá trị 16 bit cho biết tổng số block còn trống đối với group được mô tả.
bg_free_inodes_count
Giá trị 16 bit cho biết tổng số inode trống đối với group được mô tả.
bg_used_dirs_count
Giá trị 16 bit cho biết số inode định phần đến thư mục đối với group được mô tả.
bg_pad
Giá trị 16 bit được dùng cho việc đệm cấu trúc trong giới hạn 32 bit.
bg_reserved
Ba giá trị 32 bit kế tiếp nhau lưu trữ cho những sự thực thi trong tương lai.
2.2.2.3 Block Bitmap
Block bitmap thông thường được xác định tại block đầu tiên, hoặc block thứ hai nếu
bản sao lưu của một superblock hiện diện, của block group. Đường dẫn chính thức
của nó có thể được xác định bằng cách đọc “bg_block_bitmap” trong các group
descriptor tương ứng của nó.
Mỗi bit diễn tả trạng thái hiện tại của một block với group đó, trong đó 1 có nghĩa là
“đã dùng” và 0 có nghĩa là “còn trống/có thể dùng được”. block đầu tiên của block
group này được mô tả bởi bit 0 của byte 0, cái thứ hai được mô tả ở bit 1 của byte 0.
block thứ 8 được mô tả bởi bit 7 (bit quan trọng nhất) của byte 0 trong khi đó block
thứ 9 được mô tả bởi bit 0 (bit ít quan trọng nhất) của byte 1.
2.2.2.4 Inode Bitmap
Inode bitmap làm việc giống như Block bimap, chỉ khác nhau ở chỗ trong bảng Inode
mỗi bit diễn tả một inode hơn là một block.
Một inode bitmap trên group và vị trí của nó có thể được xác định bằng việc đọc giá
trị bg_inode_bitmap và group descriptor tương ứng của nó.
Nhóm 7- Lớp TDL&MMT Đợt 1 21
Đề tài: Kiến trúc hệ thống File EXT2, EXT3, EXT4 của các hệ điều hành họ LINUX
Khi bảng inode được tạo ra, tất cả các inode dự trữ được đánh dấu như đã dùng. Đối
với Good Old Revision điều này có nghĩa là 11 bit đầu tiên của inode bitmap.
2.2.2.5 Inode Table
Vùng Inode Table được dùng để giữ rãnh ghi của mỗi tập tin; vị trí của nó, kích
thước, kiểu và thứ tự truy xuất tất cả đều được lưu trữ trong các inode. Tên tập tin
không được cất giữ ở đây, với vùng Inode table tất cả các tập tin được tham chiếu
đến bởi số inode của chúng.
Có một vùng inode table trên một group và nó có thể được xác định bởi việc đọc giá
trị bg_inode_table trong group descriptor tương ứng của nó. Có các inode
s_inodes_per_group trên một bảng.
Mỗi inode chứa thông tin về tập tin vật lý đơn trên hệ thống. một tập tin có thể là một
thư mục, một socket, một bộ đệm, ký tự hay tập tin thiết bị, tập tin liên kết hay tập tin
thông thường. Vì vậy một inode có thể được hiểu như một block có thông tin liên
quan đến một thực thể, mô tả vị trí của nó trên đĩa, kích thước và quyền sở hữu của
nó. Cấu trúc của một inode như sau:
Figure 1-5. Cấu trúc inode
offset size description
------- ------- -----------
0 2 i_mode
2 2 i_uid
4 4 i_size
8 4 i_atime
12 4 i_ctime
16 4 i_mtime
20 4 i_dtime
24 2 i_gid
26 2 i_links_count
28 4 i_blocks
32 4 i_flags
36 4 i_osd1
40 15 x 4 i_block
100 4 i_generation
104 4 i_file_acl
108 4 i_dir_acl
112 4 i_faddr
116 12 i_osd2
Một số entry đầu tiên của bảng inode được dự trữ. Trong
EXT2_GOOD_OLD_REV có 11 entry dự trữ trong khi ở EXT2_DYNAMIC_REV
mới hơn số entry của inode được dự trữ được chỉ rõ trong s_first_ino của cấu trúc
superblock. Sau đây là danh sách của các entry inode dữ trữ được biết đến nhiều
nhất:
Table 1-4. Bảng giá trị EXT2_*_INO
EXT2_BAD_INO 0x01 bad blocks inode
Nhóm 7- Lớp TDL&MMT Đợt 1 22
Đề tài: Kiến trúc hệ thống File EXT2, EXT3, EXT4 của các hệ điều hành họ LINUX
EXT2_ROOT_INO 0x02 root directory inode
EXT2_ACL_IDX_INO 0x03 ACL index inode
EXT2_ACL_DATA_INO 0x04 ACL data inode
EXT2_BOOT_LOADER_INO 0x05 boot loader inode
EXT2_UNDEL_DIR_INO 0x06 undelete directory inode
i_mode
Giá trị 16 bit này được dùng để cho biết định dạng của tập tin được mô tả và lượt
truy xuất. Sau đây là các giá trị có thể có:
Table 1-5. Các giá trị của EXT2_S_I
-- file format --
EXT2_S_IFMT 0xF000 format mask
EXT2_S_IFSOCK 0xC000 socket
EXT2_S_IFLNK 0xA000 symbolic link
EXT2_S_IFREG 0x8000 regular file
EXT2_S_IFBLK 0x6000 block device
EXT2_S_IFDIR 0x4000 directory
EXT2_S_IFCHR 0x2000 character device
EXT2_S_IFIFO 0x1000 fifo
-- access rights --
EXT2_S_ISUID 0x0800 SUID
EXT2_S_ISGID 0x0400 SGID
EXT2_S_ISVTX 0x0200 sticky bit
EXT2_S_IRWXU 0x01C0 user access rights mask
EXT2_S_IRUSR 0x0100 read
EXT2_S_IWUSR 0x0080 write
EXT2_S_IXUSR 0x0040 execute
Nhóm 7- Lớp TDL&MMT Đợt 1 23