TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
----------
BÀI TẬP LỚN
MÔN NGUYÊN LÝ HỆ ĐIỀU HÀNH
ĐỀ TÀI: Nghiên cứu tìm hiểu về Hệ thống tệp tin
trong HĐH Linux.
Giảng viên hướng dẫn: Nguyễn Bá Nghiễn
Lớp : IT6025.2
Nhóm sinh viên thực hiện: Nhóm 6
Hà Nội 2022
1
MỤC LỤC
PHẦN 1. MỞ ĐẦU..............................................................................................4
PHẦN 2. NỘI DUNG..........................................................................................5
CHƯƠNG 1. GIỚI THIỆU VỀ HỆ ĐIỀU HÀNH LINUX VÀ HỆ
THỐNG TỆP TIN............................................................................................5
1.1.Giới thiệu chung về hệ điều hành Linux...................................................5
1.1.1.Lich sử ra đời của HĐH Linux...........................................................5
1.1.2.Các bản phân phối của Linux..............................................................7
1.2.Hệ thống tệp tin(File System)...................................................................8
1.2.1.Khái niệm về hệ thống tệp tin.............................................................8
1.2.2.Các yêu cầu của hệ thống tệp tin........................................................9
1.2.3.Các thao tác của hệ thống tệp tin........................................................9
1.2.4.Quản lý tệp tin...................................................................................10
1.2.5.Bảo vệ tệp tin và đảm bảo tính tồn vẹn dữ liệu...............................11
CHƯƠNG 2. HỆ THỐNG QUẢN LÝ TẬP TIN TRONG LINUX............11
2.1.Hệ thống File EXT2................................................................................11
2.1.1.Giới thiệu chung................................................................................11
2.1.2.Tổ chức đĩa.......................................................................................13
2.1.2.1.Superblock..................................................................................14
2.1.2.2.Group Descriptor........................................................................15
2.1.2.3.Block Bitmap..............................................................................15
2.1.2.4.Inode Bitmap..............................................................................16
2.1.2.5.Inode Table..................................................................................16
2.1.2.6.Data Blocks.................................................................................16
2.1.3.Cấu trúc thư mục...............................................................................17
2.1.3.1.Định dạng Directory File............................................................17
2.1.3.2. Directory Format........................................................................17
2.1.4.Tổ chức tập tin trên Linux................................................................22
2.1.5.Inodes, File Identifiers......................................................................26
2.1.5.1.Inode Number................................................................................26
2.1.5.2.Định vị cấu trúc của Inode..........................................................26
2.1.5.3.Định vị Inode Table....................................................................27
2
2.1.6.Kiểu của tệp......................................................................................27
2.1.7.Một số thao tác trên tệp.....................................................................28
2.1.8.Quyền truy cập tệp tin.......................................................................30
2.1.9.Các thuộc tính của file......................................................................32
2.1.9.1.Các thuộc tính chuẩn...................................................................32
2.1.9.2.Các thuộc tính mở rộng..............................................................33
2.1.10.Quản trị hệ thống file EXT2...........................................................34
2.2.Hệ thống File EXT3................................................................................35
2.2.1.Giới thiệu..........................................................................................35
2.2.2.Journaling File..................................................................................35
2.2.3.Cơ chế và khả năng chuyển đổi........................................................36
2.2.4. So sánh hệ thống file EXT2 và EXT3.............................................39
2.3.Liên hệ so sánh với nguyên lý quản lý hệ tệp đã học..........................39
PHẦN 3.KẾT LUẬN.........................................................................................41
DANH MỤC HÌNH VẼ
Hình 1.1: Biểu tượng của Linux............................................................................6
Hình 1.2: Một số bảng phân phối chủ yếu của Linux (cập nhật vào 26/07/2017) 9
Hình 2.1: Bảng giới hạn lý thuyết của EXT2 trong Linux..................................12
Hình 2.2: Bảng so sánh giới hạn của các hệ thống file Minix,EXT, EXT2........12
Hình 2.3:Việc thực thi Indexed Directories.........................................................21
Hình 2.4: Danh sách các thư mục thơng thường được nhìn thấy dưới thư mục
gốc (/)..................................................................................................................23
Hình 2.5: Sơ đồ một hệ thống file nhật ký..........................................................37
Hình 2.6: So sánh hệ thống tệp tin trên hệ điều hành Linux với Window..........41
3
PHẦN 1. MỞ ĐẦU
LỜI MỞ ĐẦU
Hệ điều hành là một tập các hệ điều hành hệ thống điều khiển mọi hoạt
động của máy tính và tạo mơi trường giao diện giữa người sử dụng máy tính và
máy tính. Vì vậy, hệ điều hành rất quen thuộc với mọi người sử dụng; tất cả mọi
người sử dụng khi làm việc với máy tính cần phải biết thao tác (dù là những thao
tác đơn giản) với mọi hệ điều hành cụ thể.
Hiểu biết, nắm vững nguyên lí hoạt động của hệ điều hành để từ đó có
thể khai thác các hệ điều hành hành hiệu quả là một nhu cầu thực tế không thế
thiếu đối với cán bộ phụ trách kĩ thuật và quản lí các hệ thống máy tính.
Tài nguyên máy tính mà điển hình là hệ cơ sở dữ liệu (Database System)
có ảnh hưởng rất nhiều tới tính hiệu quả của việc sử dụng máy tính. Mà trong đó
hệ thống các file là hệ thống chủ yếu. Bởi vậy quản lí hệ thống file như thế nào
có ảnh hưởng lớn và trực tiếp tới hiệu quả sử dụng máy tính. Việc quản lí hệ
thống file được xây dựng và tổ chức tùy thuộc vào từng hệ điều hành.
Và sau đây nhóm chúng em xin được trình bày về: Nghiên cứu tìm hiểu
về Hệ thống tệp tin trong HĐH Linux.
4
PHẦN 2. NỘI DUNG
CHƯƠNG 1. GIỚI THIỆU VỀ HỆ ĐIỀU HÀNH LINUX VÀ HỆ THỐNG
TỆP TIN
1.1.Giới thiệu chung về hệ điều hành Linux
Hình 1.1: Biểu tượng của Linux.
1.1.1.Lich sử ra đời của HĐH Linux
Linux là tên gọi của một hệ điều hành máy tính và cũng là tên hạt nhân
của hệ điều hành. Nó có lẽ là một ví dụ nổi tiếng nhất của phần mềm tự do và
của việc phát triển mã nguồn mở.
Phiên bản Linux đầu tiên do Linus Torvalds viết vào năm 1991, lúc ơng
cịn là một sinh viên của Đại học Helsinki tại Phần Lan. Ông làm việc một cách
hăng say trong vòng 3 năm liên tục và cho ra đời phiên bản Linux 1.0 vào năm
1994. Bộ phận chủ yếu này được phát triển và tung ra trên thị trường dưới bản
quyền GNU General Public License. Do đó mà bất cứ ai cũng có thể tải và xem
mã nguồn của Linux. Một cách chính xác, thuật ngữ "Linux" được sử dụng để
chỉ Nhân Linux, nhưng tên này được sử dụng một cách rộng rãi để miêu tả tổng
thể một hệ điều hành giống Unix (còn được biết đến dưới tên GNU/Linux) được
tạo ra bởi việc đóng gói nhân Linux cùng với các thư viện và công cụ GNU,
cũng như là các bản phân phối Linux. Thực tế thì đó là tập hợp một số lượng lớn
các phần mềm như máy chủ web, các ngôn ngữ lập trình, các hệ quản trị cơ sở
dữ liệu, các môi trường làm việc desktop như GNOME và KDE, và các ứng
dụng thích hợp cho cơng việc văn phịng như Open Office.
5
Khởi đầu, Linux được phát triển cho dòng vi xử lý 386, hiện tại hệ điều
hành này hỗ trợ một số lượng lớn các kiến trúc vi xử lý, và được sử dụng trong
nhiều ứng dụng khác nhau từ máy tính cá nhân cho tới các siêu máy tính và các
thiết bị nhúng như là các máy điện thoại di động.
Ban đầu, Linux được phát triển và sử dụng bởi những người say mê. Tuy
nhiên, hiện nay Linux đã có được sự hỗ trợ bởi các công ty lớn như IBM và
Hewlett-Packard, đồng thời nó cũng bắt kịp được các phiên bản Unix độc quyền
và thậm chí là một thách thức đối với sự thống trị của Microsoft Windows trong
một số lĩnh vực. Sở dĩ Linux đạt được những thành cơng một cách nhanh chóng
là nhờ vào các đặc tính nổi bật so với các hệ thống khác: chi phí phần cứng thấp,
tốc độ tin cậy cao (khi so sánh với Windows) cũng như là các đặc điểm về giá
thành rẻ, không bị phụ thuộc vào nhà cung cấp. Một đặc tính nổi trội của nó là
được phát triển bởi một mơ hình phát triển phần mềm nguồn mở hiệu quả. Tuy
nhiên, hiện tại số lượng phần cứng được hỗ trợ bởi Linux vẫn còn rất khiêm tốn
so với Windows vì các trình điều khiển thiết bị tương thích với Windows nhiều
hơn là Linux. Nhưng trong tương lai số lượng phần cứng được hỗ trợ cho Linux
sẽ tăng lên.
1.1.2.Các bản phân phối của Linux.
Linux hiện nay có nhiều bản phân phối khác nhau, một phần là bởi vì tính chất
nguồn mở của nó. Sau đây là một số bản phân phối chủ yếu của Luxin.
Tên bản
phân phối
Ubuntu
Phiên bản
mới nhất
10
Trang web chính thức
Debian
Ultimate
Edition
0.4.1 Loki
5.7
/> />
/>
6
Các bản dẫn
xuất
Kubuntu,studi
o, edubuntu,
Xubuntu,
ububtu,
Lubuntu,
Macbuntu,
Kylin, Ubuntu,
mate.
Red hat
Enterprise
Linux
Red hat
Enterprise
Linux
Chrome
Linux
Chrome
OS
7.4
o/
2.4.1290
/>
Fedora
SUSE
Linux
enterprise
Desktop
Linux Mint
Knoppix
PCLinuxO
S
Mandrake
32
13.2
/> />
18.2 sonya
8.1
2017
/> /> />
2011
/>
CentOS
Gentoo
Slackware
SLAX
Sabayon
Dreamlinu
x
OpenSolari
s
Hồng kỳ
linux
Puppy
linux
Hacao
linux
Asianux
7
20170907
14.2
7.0.8
17.11
5
/> /> /> /> />o/
11.1
/>
6.0 SP3
/>
6.3
/>
2011
/>
4.5
/>
/>62.0.3202.6 />2
SliTaz
5.0 Rolling
Linpus
2.2
Back Track 5r3
/> /> />7
openSUSE
11.4,
Mono 2.10.4
Back TrackLinux, Kali
Linux
Linpus Linux
GNU/Linux
Asianux
Server
BOSS
Linux
Kali linux
6.0(Anoop)
/>
2017.2
/>
Nova
Backbox
4.0(2013)
5
/> />
Canaima
GNU/Linu
x
Super
Ubuntu
5.1
/
Kali-linux,
Back Track.
Backbox,
linux
11.10
ubuntu, Z
m/
download.html
Zorin OS
12.2
/>ubuntu, Super
ubuntu, Linux
Mint.
Hình 1.2: Một số bảng phân phối chủ yếu của Linux (cập nhật vào 26/07/2017)
1.2.Hệ thống tệp tin(File System)
1.2.1.Khái niệm về hệ thống tệp tin.
Dữ liệu máy tính được lưu trữ trên các thiết bị nhớ ngoài như: băng từ, đĩa
từ,… và được tập hợp một cách có tổ chức theo đơn vị lưu trữ gọi là hệ thống
tệp tin. Như vậy , hệ thống tệp tin là đơn vị logic để hệ điều hành quản lý thông
tin trên đĩa. Hệ thống tệp tin có thể là một chương trình của người sử dụng, một
chương trình của một hệ thống hoặc một tập hợp dữ liệu của người sử dụng.
Trên phương diện người sử dụng , dữ liệu trong hệ thống tệp tin được tổ
chức thành các bản ghi logic mà mỗi bản ghi logic có thể là một byte hoặc một
cấu trúc dữ liệu nào đó. Bản ghi logic chính là đơn vị dữ liệu mà các chương
trình cần xử lý trong quá trình hoạt động của mình.
Để quản lý dữ liệu trên các thiết bị lưu trữ ngồi một cách có hiệu quả, hệ
điều hành phải tổ chức các hệ thống tệp tin theo một nguyên tắc nhất định. Như
vậy, hệ thống tệp tin là nguyên tắc mà hệ điều hành tổ chức và quản lý các tệp
tin trên các phương tiện lưu trữ.
1.2.2.Các yêu cầu của hệ thống tệp tin
Mặc dù các hệ thống tệp tin có thể tổ chức theo các nguyên tắc khác nhau
nhưng cần phải đảm bảo các yêu cầu chung như sau:
8
-Hệ thống phải được tổ chức sao cho dễ tìm kiếm, dễ lưu trữ cập nhật, tiết
kiệm không gian nhớ.
-Phải đảm bảo tính độc lập của hệ thống tệp tin với hệ thống và các thiết
bị ngoại vi.
-Hệ thống tệp tin phải đảm bảo tính an tồn dữ liệu khi có sự cố chương
trình hoặc kỹ thuật.
-Hệ thống tệp tin phải đảm bảo tính an tồn trong vấn đề truy nhập thông
tin người sử dụng.
1.2.3.Các thao tác của hệ thống tệp tin.
Một hệ thống tệp tin dù phức tạp hay đơn giản cũng đều phải cung cấp
cho người sử dụng những công cụ đơn giản để thao tác với tệp tin. Trong hệ
thống tệp tin thường có những thao tác sau:
-Tạo tệp tin
-Đọc tệp tin
-Bổ sung cập nhật dữ liệu vào tệp tin
-Thay đổi thuộc tính tệp tin
-Xóa tệp tin
Để truy nhập tới các tệp tin, hệ thống tệp tin sử dụng hai phương pháp:
-Truy nhập tuần tự: các bản ghi logic trong tệp tin được truy nhập lần
lượt từ đầu đến cuối theo đúng trình tự sắp xếp trong tệp tin. Với cách thức truy
nhập này thì hồn tồn có thể biết trước được bản ghi logic kế tiếp truy nhập sẽ
là bản ghi nào vì vậy hệ điều hành biết được vị trí trên bộ nhớ ngồi của bản ghi
logic kế tiếp cần xử lý. Cách thức truy nhập tuần tự có mức độ tự động hóa cao
tuy nhiên chỉ áp dụng được với các tệp tin được tổ chức theo kiểu tuần tự. Mặt
khác, để đảm bảo được mức độ tự động hóa cao thì hệ thống phải đảm bảo thực
9
hiện mọi công việc chuẩn bị liên quan đến bản ghi cho trương trình của người sử
dụng.
-Truy nhập trực tiếp: theo cách thức này, hệ thống hồn tồn khơng có
trước thông tin về bản ghi nào là bản ghi kế tiếp cần xử lý. Người lập trình cần
phải tự xác định về bản ghi cần xử lý và để tìm được nó, mọi vấn đề đồng bộ
hóa phải được đặt ra.
Tuy mức độ tự động hóa thấp nhưng cách thức truy nhập trực tiếp cho phép
truy xuất các tệp tin hết sức mềm dẻo, linh hoạt, đạt được mức độ chủ động của
chương trình người sử dụng đối với các tệp tin.
1.2.4.Quản lý tệp tin.
Quản lý tệp tin là tổ chức các thư mục thiết bị sao cho việc thao tác với
các tệp tin là tối ưu nhất.
Các hệ điều hành thực tế tồn tại một số kiểu tổ chức:
-Tổ chức thư mục một mức.
-Tổ chức thư mục hai mức.
-Tổ chức theo cấu trúc cây.
-Tổ chức theo đồ thị không chu trình.
1.2.5.Bảo vệ tệp tin và đảm bảo tính tồn vẹn dữ liệu.
Bảo vệ tệp tin thông qua giới hạn quyền truy nhập của người sử đụng như:
đọc, viết, xóa…
Một số phương pháp bảo vệ tệp tin được áp dụng là: đặt tên, đặt mật khẩu,
liệt kê quyền truy nhâp…
Để đảm bảo tính tồn vẹn dữ liệu, các hệ điều hành thương áp dụng các
biện pháp như: lưu trạng thái của tệp tin qua các quá trình sử dụng, lưu trạng
thái qua các thời điểm…
CHƯƠNG 2. HỆ THỐNG QUẢN LÝ TẬP TIN TRONG LINUX
10
2.1.Hệ thống File EXT2.
2.1.1.Giới thiệu chung.
Hệ thống tệp mở rộng 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. Ban đầu nó được thiết kế bởi
nhà phát triển phần mềm người Pháp Rémy Card để thay thế cho hệ thống tập
tin mở rộng. 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ó đủ 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. Ext2 cũng được thiết kế với khả năng mở rộng bên
trong, với khơng gian cịn lại trong nhiều cấu trúc dữ liệu trên đĩa của nó để sử
dụng bởi các phiên bản trong tương lai. Hạn chế chính của nó là khơng có hệ
thống tập tin nhật ký. 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.
Kích thước khối
1KiB
2KiB
4KiB
Tối đa kích thước tập tin
16GiB
256GiB 2TiB
Tối đa kích thước hệ thống tệp
4TiB
8TiB
16TiB
Hình 2.1: Bảng giới hạn lý thuyết của EXT2 trong Linux
8KiB
2TiB
32TiB
Các giới hạn
Kích thước file hệ thống lớn nhất
MINIX
64MB
EXT
2GB
EXT2
4TB
Kích thước file lớn nhất
64MB
2GB
2GB
Độ dài tối đa tên file
Kích thước block tùy biến
30 ký tự
Khơng
255 ký tự
Khơng
255 ký tự
Có
Hình 2.2: Bảng so sánh giới hạn của các hệ thống file Minix,EXT, EXT2
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.
11
- 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. Hệ thống tập tin Ext2 dự trữ một vài
block cho super user (root). Thơng thường có khoả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.
2.1.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,
kích thước
fragment khớp với kích thước một block. 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.
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.
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ễ
12
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ể. 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.
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ể đố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 tố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, tiếp theo
đây chúng ta sẽ cùng tìm hiểu chi tiết hơn.
2.1.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
13
thơng tin này mà ta có thể dự đốn, tính toán các thành phần và cấu trúc trong
một block group.
Superblock bao gồm những thông tin quan trọng thiết yếu để hệ điều hành
có thể khởi động. Superblock gồm các trường sau:
- Kích thước của file system (FS).
- Tổng số các block còn chưa cấp phát cho tệp (free block) trong FS.
- Danh sách các free block sẵn có trên FS.
- Kích thước của danh sách inode.
- Tổng số các inode chưa cấp phát(free inode) trong FS.
-Chỉ số của free block tiếp theo trong danh sách free block.
- Chỉ số của free inode tiếp theo trong danh sách free inode.
- Các trường khóa (lock) cho free block và các danh sách free inode.
- Cờ (flag) cho biêt các superblock đã có thay đổi.
2.1.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, Group Descriptor 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. Một group_desc như vậy sẽ được tạo ra tương đương với
mỗi group descriptor trong hệ thống tập tin. 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ả.
2.1.2.3.Block Bitmap.
Block bitmap 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
14
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.1.2.4.Inode Bitmap.
Ngoài việc trong bảng Inode mỗi bit diễn tả một inode hơn là một block
thì Inode bitmap làm việc giống như Block bimap.
Có thể được xác định được một inode bitmap trên group và vị trí của nó
bằng việc đọc giá trị bg_inode_bitmap và group descriptor tương ứng của nó.
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.1.2.5.Inode Table.
Vùng Inode Table được dùng để giữ vết lưu trữ 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ó. 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ó.Trong EXT2_GOOD_OLD_REV có 11 entry dự trữ trong khi ở
15
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.
2.1.2.6.Data Blocks.
Vùng Data block gồm các block dữ liệu. Được quản lý bởi các bit tương ứng
trong vùng block bitmap. Nếu là một tập tin bình thường thì đây là nơi lưu trữ
nội dung của tập tin, nhưng nếu tập tin là thư mục thì nơi đây sẽ chứa các
directory-entry.
2.1.3.Cấu trúc thư mục.
Thư mục là một file đặc biệt mà nội dung của nó (chứa tại vùng Data
blocks) gồm tồn các directory entry. Thư mục được lưu trữ giống như tập tin và
có thể được nhận ra bằng việc tìm trong các bit dịnh dạng tập tin
ext2_inode.i_mode đối với giá trị EXT2_S_IFDIR.
Thư mục gốc luôn là entry thứ hai của bảng inode (EXT2_ROOT_INO có
giá trị là 2). Bất kỳ thư mục con nào từ thư mục gốc có thể được định vị bằng
việc quan sát nội dung của tập tin thư mục gốc.
2.1.3.1.Định dạng Directory File.
Các directory-entry trong Ext2 của Linux có kích thước khơng bằng nhau
(directory-entry cịn được gọi là record). Nhưng mỗi directory-entry đều có đủ 5
trường (field) sau:
Inode: Giá trị 32 bit cho biết số inode của file-entry. Entry không được
dùng thì giá trị này là 0.
Rec_len: Giá trị 16 bit không dấu cho biết sự thay thế directory-entry kế
tiếp bắt đầu từ directory-entry hiện hành.
Name_len: Giá trị 8 bit không dấu cho biết tên chứa bao nhiêu ký tự.
File_type: Giá trị 8 bit không dấu dùng để xác định kiểu tập tin. Giá trị
này có thể là 0 trong sự bổ sung trước đó.
Name : Tên của file entry, các ký tự cho phép thuộc ISO-Latin-1.
16
2.1.3.2. Directory Format.
Khi số lượng tập tin bắt đầu tang thì việc dùng chuẩn liên kết danh sách
định dạng thư mục có thể trở nên chậm. Để tăng hiệu quả cho một hệ thống như
vậy, một mảng băm được tạo ra cho phép nhanh chóng định vị tập tin cụ thể
được tìm kiếm.
-Thuật tốn tìm kiếm (Lookup Algorithm).
+Tính tốn một hash của tên.
+Đọc index gốc.
+Dùng tìm kiếm nhị phân để tìm index đầu tiên hoặc block lá có
thể chứa hash đích (trong trật tự cây).
+Lập lại bước trên cho đến khi đạt được cấp độ thấp nhất của cây.
+Đọc block entry của thư mục lá và thực hiện tìm kiếm Ext2 thơng
thường trên nó.
+Nếu tên đưbhợc tìm thấy, trả về buffer và directory-entry của nó.
+Ngược lại, nếu bit xung đột của directory-entry tiếp theo được
thiết lập, tiếp tục tìm kiếm trên block đã thành cơng.
-Thuật tốn chèn (Insert Algorithm)
Chèn vào các entry mới vào trong thư mục phức tạp hơn là tìm kiếm, vì
cần phải tách các block lá khi chúng đầy, và thỏa mãm điều kiện là cho phép
những xung đột khóa hash được điều khiển một cách chắc chắn và có hiệu quả:
+Dị index như là tìm kiếm.
+Nếu block lá đích đầy, chia nhỏ nó và ghi nhớ block sẽ nhận entry mới.
+Chèn thêm entry mới trong block lá sử dụng mã chèn directiry-entry
Ext2 thông thường.
-Tách (Splitting)
17
Tóm lại, khi một nút lá đầy và chúng ta muốn đặt một entry mới vào đó
thì lá sẽ bị tách ra, và một phần khoảng trống hash của nó được chia thành nhiều
phần. Cách dễ nhất để làm được điều này là sắp xếp các entry theo giá trị hash
và cắt ở phần giữa của danh sách đã được sắp xếp. Thao tác này là
log(number_of_entries_in_leaf) và không mất nhiều chi phí với điều kiện sử
dụng thuật tốn sắp xếp có hiệu quả.
Một phương pháp khác là dự đốn một giá trị trung bình cho khóa hash,
và việc chia phần có thể được làm theo thời gian tuyến tình, nhưng kết quả việc
phân chia kém hơn khoảng trống khóa hash có giá trị hơn thuận lợi ít ỏi của
thuật tốn phân chia tuyến tính. Trong trường hợp bất kỳ, số entry cần sắp xếp
được giới hạn bởi số lượng vừa khít trong một .
Các xung đột khóa (Key Collisions).
Việc điều khiển những chuỗi xung đột khóa hash có một vài phức tạp.
Nếu tránh việc tách các chuỗi như vậy giữa các block, vì vậy điểm cắt của một
block được điều chỉnh với cái này. Nhưng khả năng vẫn còn nếu block lắp đầy
bởi các entry được băm một cách xác định, chuỗi có thể vẫn phải bị tách,được
đánh dấu bằng cách đặt một số 1 vào bit bên dưới của entry index trỏ vào block
kế thừa, cái mà được làm sáng tỏ một cách tự nhiên bởi sự thăm dò index như là
một giá trị trung gian mà khơng có bất kỳ sự mã hóa đặc biệt nào. Vì vậy, việc
điều khiển vấn đề xung đột bắt buộc khơng có xử lý thực sự, chỉ có mã mở rộng
và và sự giảm bớt khơng đáng kể khoảng trống của khóa băm. Khoảng trống của
khóa băm vẫn cịn đủ cho số directory-entry có thể tưởng tượng được, lên đến
hàng tỷ.
Hàm băm (Hash Function)
Các đặc tính chính xác của hàm Hash rất ảnh hưởng đến việc thực thi
chiến lược index này. Một hàm hash dở sẽ dẫn đến nhiều sự xung đột hoặc sự
phân chia khoảng trống hash dở.Xác suất các entry index sau đó cũng được băm
tương tự, khoảng cách càng nhỏ thì giá trị này càng nhỏ. Thực tế, khi một block
18
được tách ra, nếu khoảng trống hash của nó quá nhỏ đến nỗi chỉ ln đầy có một
nửa.
Sau một số thử nghiệm,đã có một hàm Hash cho ra một sự phân tán hợp
lý các khóa Hash dọc theo tồn bộ khoảng trống khóa 31 bit. Điều này làm tăng
sự đầy trung bình của các block lá, đạt gần tới giá trị trung bình theo lý thuyết là
đầy 3/4
Nhưng hàm Hash hiện tại chỉ để dùng tạm, chờ một phiên bản tốt hơn dựa
trên lý thuyết chắc chắn.
Sự thực thi (Performance).
Sự cải tiến khả năng thực thi trên Ext2 thông thường đã gây một sự bất
ngờ. Với việc thực thi các thư mục rất nhỏ giống với Ext2 chuẩn, nhưng vì kích
thước thư mục tăng theo Ext2 chuẩn một cách nhanh chóng làm xuất hiện bậc
hai, trong khi htree-enhanced Ext2 tiếp tục lấy tỉ lệ một cách tuyến tính.
Uli Luckas chạy điểm chuẩn cho việc tạo tập tin theo các kích thước khác
nhau của thư mục nằm trong dãy từ 10,000 đến 90,000 tập tin. Kết quả này rất
hài lịng: tồn bộ thời gian tạo file gần như tuyến tính, chống lại việc tăng bậc
hai của Ext2 thường.
Thời gian được tạo như sau:
10000
Indexed
Normal
0m1.350s
0 m23.670s
0m2.720s
1 m20.470s
Files:
20000
Files:
19
30000
0m4.330s
3 m9.320s
0m5.890s
5 m48.750s
0m7.040s
9 m31.270s
0m8.610s
13 m52.250s
0m9.980s
19 m24.070s
0m12.060s
25 m36.730s
0m13.400s
33 m18.550s
Files:
40000
Files:
50000
Files:
60000
Files:
70000
Files:
80000
Files:
90000
Files:
Hình 2.3:Việc thực thi Indexed Directories
Các thư mục dễ dàng vừa khít bộ nhớ đệm, và thừa số giới hạn trong trường hợp
Ext2 chuẩn là việc tìm các block directory trong bộ nhớ đệm buffer, và việc quét
cấp độ thấp các entry directory. Trong trường hợp lập chỉ mục htree, thì số chi
phí cần được xem xét, tất cả chúng hầu như được giới hạn. Có một vài cách tối
ưu cần phải thực hiện, đó là:
-Thay vì tìm kiếm tuyến tính trong các nút chỉ thị ở phía trong thì dùng tìm kiếm
bằng nhị phân.
-Bỏ qua việc dò chỉ mục, đi thẳng đến block ln nếu chỉ có một block lá trong
một thư mục.
-Thay vì vào cache bộ nhớ đệm trung gian thì ánh xạ thư mục vào trang cache
20
Mỗi sự tối ưu này sẽ tạo ra một hiệu quả được cải thiện, nhưng khơng có gì
giống như bước nhảy lớn từ N*2 đến Log512(N), ~=N. Trong lúc những tối ưu
đó được áp dụng và chúng ta có thể tìm thấy một hiệu quả gấp đơi khác hay
tương tự như vậy. Đó là một hiệu quả khơng đáng kể khi mà thư mục đủ lớn để
cần một level cấp 2 vì bộ lưu trữ sẽ rất nhỏ. Việc đi ngang qua các block dữ liệu
của thư mục sẽ là một chi phí rất lớn, và một lần nữa, giá trị này có thể tăng lên
bởi việc di chuyển các block vào trang cache.
Điển hình chúng ta sẽ đi qua 3 block để đọc hay viết một entry thư mục, và số
đó tăng đến khoảng 4-5 với những thư mục lớn. Nhưng thực sự thì khơng có gì
so sánh với Ext2 thông thường cái mà đi qua vài trăm block trong tình huống
tương tự.
2.1.4.Tổ chức tập tin trên Linux
Hệ thống tập tin của Linux và Unix được tổ chức theo một hệ thống phân
bậc tương tự cấu trúc của một cây phân cấp. Bậc cao nhất của hệ thống tập tin là
thư mục gốc, được ký hiệu bằng vạch chéo “/” (root directory). Đối với các hệ
điều hành Unix và Linux tất các thiết bị kết nối vào máy tính đều được nhận
dạng như các tập tin, kể cả những linh kiện như ổ đĩa cứng, các phân vùng đĩa
cứng và các ổ USB. Điều này có nghĩa là tất cả các tập tin và thư mục đều nằm
dưới thư mục gốc, ngay cả những tập tin biểu tượng cho các ổ đĩa cứng.
21
Hình 2.4: Danh sách các thư mục thơng thường được nhìn thấy dưới thư mục
gốc (/)
1. / – Root.
- Mỗi một file và thư mục điều bắt đầu từ root directory.
- Chỉ có user root có quyền trên các thư mục ở cấp bên dưới.
- Còn /root là home directory của user root.
2. /bin – User Binaries.
- Chứa file thực thi dạng binary.
- Các lệnh sử dụng thông thường trong linux được sử dụng single-user
mode được đặt dưới cấu trúc thư mục này.
22
- Các câu lệnh được sử dụng bởi tất cả các user trong hệ thống sẽ được đặt
trong đây.
3. /sbin – System Binaries.
- Giống như /bin, bên trong /sbin cũng chứa đựng các file thực thi dạng
binary. Các lệnh bên trong /sbin thường được sử dụng bởi system administrator
và dùng cho các mục đích là duy trì quản trị hệ thống.
4. /etc – Configuration Files.
- Thông thường ở /etc sẽ chứa file cấu hình cho các chương trình hoạt
động.
- Ở /etc cũng thường chứa các scripts dùng để start, stop, kiểm tra status
cho các chương trình.
- Ví dụ /etc/resolv.conf (cấu hình dns-server ), hay /etc/network dùng để
quản lý dịch vụ network.
5. /dev – Device Files.
- Chứa các file device để đại diện các hardware.
- Ví dụ /dev/tty1 hay /dev/sda.
6. /proc – Process Information.
- Chứa đựng thơng tin về q trình xử lý của hệ thống.
- Đây là một pseudo filesystem chứa đựng các thông tin về các process
đang chạy.
- Đây là một virtual filesystem chứa đựng các thông tin tài ngun hệ
thống. Ví dụ: /proc/cpuinfo cung cấp cho ta thơng số kỹ thuật của CPU.
7. /var – Variable Files.
23
- Chứa đựng các file có sự thay đổi trong q trình hoạt động của hệ điều
hành
- Ví dụ system log sẽ được đặt tại vị trí này.
+ System log file /var/log.
+ database file /var/lib.
+ email /var/mail.
+ Các print queue /var/spool.
+ lock file /var/lock.
+ Các file tạm thời cần cho quá trình reboot /var/tmp.
8. /tmp – Temporary Files.
- Thư mục này chứa các file được tạo ra bởi hệ thống và user.
- Các file bên dưới thư mục này được xóa đi khi hệ thống reboot.
9. /usr – User Programs.
- Chứa các file binary, library, tài liệu, source-code cho các chương trình.
- /usr/bin chứa file binary cho các chương trình của user. Nếu như một
user trong quá trình thực thi một lệnh ban đầu sẽ tìm kiếm trong /bin, nếu như
khơng có thì sẽ tiếp tục nhìn vào /usr/bin. Ví dụ một số lệnh như at. awk, cc...
- /usr/sbin chứa các file binary cho system administrator. Nếu như ta
khơng tìm thấy các file system binary bên dưới /sbin thì ta có thể tìm ở trong
/usr/sbin. Ví dụ một số lệnh như cron, sshd, useradd, userdel.
- /usr/lib chứa các file libraries cho /usr/bin và /usr/sbin.
- /usr/local dùng để chứa chương trình của các user, các chương trình này
được cài đặt từ source. Ví dụ khi ta install apache từ source thì nó sẽ nằm ở vị trí
là /usr/local/apache2.
24
10. /home – Home Directories.
- Home directory được chứa đựng thơng tin cá nhân của các user.
- Ví dụ /home/athena , /home/student.
11. /boot – Boot Loader Files.
- Chứa đưng boot loader và các file cần cho quá trình boot tùy theo các
phiên bản của kernel.
- Các file Kernel initrd, vmlinux, grub được đặt bên dưới /boot.
- Ví dụ initrd.img-2.6.32-24-generic, vmlinuz-2.6.32-24-generic.
12. /lib – System Libraries.
- Chứa các file library hỗ trợ cho các file thực binary nằm bên dưới /bin
và /sbin .
- Tên của các file library thường là ld* or lib*.so.* . Ví dụ như ld2.11.1.so, libncurses.so.5.7.
13. /opt – Optional add-on Applications.
- opt đại diện cho optional.
- Chứa đựng các chương trình thêm vào của các hãng khác.
14. /mnt – Mount Directory.
- Chứa các thư mục dùng để system admin thực hiện quá trình mount.
15. /media – Removable Media Devices.
- Chứa thư mục dùng để mount cho các thiết bị removable. Ví dụ như
CDROM, Floppy...
16. /srv – Service Data.
25