Giới thiêu Mục tiêu Sinh viên cần nắm rõ các khái niệm lý thuyết về hệ thống tập tin. Bài thực hành giúp sinh viên hiểu và có thể lấy thông tin về hệ thống tập tin đang chạy trong HĐH Linux và MacOS. Phần mở rộng giúp sinh viên dò tìm cấu trúc lưu trữ theo inode trong hệ thống tập tin của Linux. Nội dung Sinh viên được thí nghiệm các nội dung như sau • Thí nghiệm lấy thông tin đĩa cứngthư mụctập tin; • Thí nghiệm lấy thông tin các process đang mở tập tin nào đó; • Xây dựng lại cây ánh xạ thư mục của tập tin theo đơn vị inode. Kêt quả đạt được Sau khi thực hiện thí nghiệm, sinh viên có thể • Hiểu được cách HĐH quản lý thông tin file, thông tin các process đang tương tác với file; • Được tiến hành các thực nghiệm để minh họa lí thuyết quản lý không gian đĩa sử dụng inote. 2 Cơ sở lý thuyết 2.1 File là một chuỗi các byte và là đơn vị truy xuất dữ liệu lưu trữ trên các thiết bị thứ cấp. File được đặt tên, có tính bền vững (persistent) và hỗ trợ hai tác vụ chuẩn là readwrite. Các tác vụ trên file gồm create, write, read, reposition, delete, truncate, open và close. Thư mục là mộ tiện ích của hệ điều hành dùng để dễ dàng tổ chức các file. Các tác vụ trên hệ thống file có hai tác vụ quan trọng là mount và chia sẻ file (gồm hard link và soft link). Để bảo vệ file, các quyền cấp phép cho mỗi file được định nghĩa trong Access Control List (ACL) gồm các cặp . 2.2 Đơn vị lưu trữ vật lý gồm mức thấp nhất là disk block và mức cao nhất là partition (trong DosUNIX) hay volume trong MacOS. Partitionvolume là vùng không gian được phần chia trên đĩa cứng mà hệ điều hành có thể quản lý từng vùng không gian này một cách tách biệt. Việc tạo partition được thực hiện trước khi tạo file system hoặc thư mục. Có hai dạng partition là primary partition nơi mà một số thành phần của HĐH bắt buộc phải chứa ở các phân vùng này. Một đĩa cứng chỉ có thể có một extended partition nhưng extended partition này có thể chia thành nhiều logical parition. Disk block là đơn vị lưu trữ của thiết bị lưu trữ (đĩa cứng, flash...) và là một chuỗi các byte hoặc bit. Dữ liệu phải được truy xuất theo đơn vị block.
Trang 1Đại học Bách Khoa TP HCM, Khoa KH & KTMT
Bài thực hành số 12
Môn: Hệ điều hành
Phương-Duy Nguyễn Email: duynguyen@cse.hcmut.edu.vn
Ngày 17 tháng 11 năm 2016
Trang 2Mục lục
2.1 File 4
2.2 Đơn vị lưu trữ vật lý 4
2.3 Đơn vị lưu trữ luận lý 4
3 Nội dung thực hành 10 3.1 Thao tác trên tập tin 10
3.1.1 Giới thiệu ls 10
3.1.2 Giới thiệu stat 11
3.2 Thông tin đĩa và parition/volume 13
3.3 Giới thiệu công cụ quản lý các file đang mở trong hệ thống 15
Trang 31 Giới thiêu
Mục tiêu Sinh viên cần nắm rõ các khái niệm lý thuyết về hệ thống tập tin Bài thực hành giúp sinh viên hiểu và có thể lấy thông tin về hệ thống tập tin đang chạy trong HĐH Linux và MacOS Phần mở rộng giúp sinh viên dò tìm cấu trúc lưu trữ theo i-node trong hệ thống tập tin của Linux
Nội dung Sinh viên được thí nghiệm các nội dung như sau
• Thí nghiệm lấy thông tin đĩa cứng/thư mục/tập tin;
• Thí nghiệm lấy thông tin các process đang mở tập tin nào đó;
• Xây dựng lại cây ánh xạ thư mục của tập tin theo đơn vị i-node
Kêt quả đạt được Sau khi thực hiện thí nghiệm, sinh viên có thể
• Hiểu được cách HĐH quản lý thông tin file, thông tin các process đang tương tác với file;
• Được tiến hành các thực nghiệm để minh họa lí thuyết quản lý không gian đĩa sử dụng i-note
Trang 42 Cơ sở lý thuyết
2.1 File
là một chuỗi các byte và là đơn vị truy xuất dữ liệu lưu trữ trên các thiết bị thứ cấp File được đặt tên, có tính bền vững (persistent) và hỗ trợ hai tác vụ chuẩn là read/write
Các tác vụ trên file gồm create, write, read, reposition, delete, truncate, open và close
Thư mục là mộ tiện ích của hệ điều hành dùng để dễ dàng tổ chức các file
Các tác vụ trên hệ thống file có hai tác vụ quan trọng là mount và chia sẻ file (gồm hard link và soft link) Để bảo vệ file, các quyền cấp phép cho mỗi file được định nghĩa trong Access Control List (ACL) gồm các cặp <user, rights>
2.2 Đơn vị lưu trữ vật lý gồm mức thấp nhất là disk block và mức cao nhất là partition (trong Dos/UNIX) hay volume trong MacOS
Partition/volume là vùng không gian được phần chia trên đĩa cứng mà hệ điều hành có thể quản lý từng vùng không gian này một cách tách biệt Việc tạo partition được thực hiện trước khi tạo file system hoặc thư mục Có hai dạng partition là primary partition nơi mà một số thành phần của HĐH bắt buộc phải chứa ở các phân vùng này Một đĩa cứng chỉ có thể có một extended partition nhưng extended partition này có thể chia thành nhiều logical parition
Disk block là đơn vị lưu trữ của thiết bị lưu trữ (đĩa cứng, flash ) và là một chuỗi các byte hoặc bit Dữ liệu phải được truy xuất theo đơn vị block
2.3 Đơn vị lưu trữ luận lý được thực hiện bằng phần mềm để quản lý, tổ chức (ánh xạ, đánh địa chỉ) các datablock trong một partition Hiện thực này khác nhau tùy từng hệ điều hành và được gọi là tổ chức/định dạng hệ thống file hay file system format Trong Unix sử dụng định dạng UFS (UNIX File system) trong Mac OS X sử dụng định dạng HFS+ (Hierarchical File System Plus)
Linux UFS
Trang 5Hard disk Partition Partition Partition
Head armature Head
Spindle
Plates
Arm
Track/
Data block
Hình 2.1: Đơn vị lưu trữ vật lý parition và block
Inode (Index node) Cấu trúc dữ liệu lưu thuộc tính và vị trí của disk block (pointer) Inode được định danh theo inode number Mỗi file có tên và được gán một inode number duy nhất Các thông tin thuộc tính chứa trong inode bao gồm:
• kích thước file
• Device ID của thiết bị chứa file
• UserID
• GroupID
• File mode (r/w )
• Các cờ (flags) khác
• Timestamp
• Số lượng hard link trỏ đến inode Inode có thể không có link nào trỏ đến
• Các con trỏ đến disk blocks (disk block address)
Directory được quản lý bởi một inode trỏ đến directory block và nội dung block chứa tên cho file, directories và devices, v.v Inode chứa kích thước file, directory chỉ chứa tên và inode number Chính inode number là thông tin để hệ thống khi cần truy xuất lấy thông tin kích thước sử dụng
Trang 68
7
5
4
2
1
10
11
D
i
r
e
c
t
b
l
o
c
k
7
5 6 8 9
4 3 1 0 2
255
0 Di Triple
DoubleSingle
267 12
255
0 255
0
255
0
255
0
255
0
255
0 255
0
255
0
16843019
66059 65804 65803
523 268
256 blocks
65536 blocks
16777216 Blocks
2 6 e t i e s
6 5 6
10 11 Info
Indirect
Block
256 blocks
256 blocks
2 6 e t i e s
Hình 2.2: Cấu trúc inode
inode number filename
inode number filename
inode number filename
Data block
i-list
inode inode
directory block Data block
Super block
Hình 2.3: Cấu trúc directory
Trang 7Hard disk Partition Partition Partition
Boot block
Super block Cylinder group Cylinder group
Cylinder group
File system
Head armature Head
Spindle
Plates
Arm
Track/
copy header
Hình 2.4: Cấu trúc Hard disk và file system
File System gồm các thành phần sau
• Một số block làm boot block
• Super block chứa magic number
• Môt số cylinder group Mỗi cylinder group gồm các thành phần:
– Bản sao superblock
– cylinder header
– i-list
– Data block
MacOS HFS+
B*tree để ánh xạ các node Có 4 dạng node:
• Header node: B*tree metadata
• Map node: node allocation bitmap lưu mapping các block đã cấp phát dưới dạng bitmap
• Index node: lưu dưới dạng key:node pointer
• Leaf node: lưu dươi dạng key:data record
Trang 8kind = kBTMapNode
B-Tree Map Node
Map Record Bitmap Offset to Record
node 212 bLink flink
Data Record numRecords=2 height=1 kind = kBTLeafNode
reserved
node 111 bLink flink
Data Record
kind = kBTLeafNode height=1 numRecords=2 reserved
Node 1
Node m
Node 0
(Header)
…
Node i
…
node 17 bLink flink
Data Record
kind = kBTLeafNode height=1 numRecords=1 reserved
kind = kBTMapNode
B-Tree Map Node
Map Record Bitmap Offset to Record
node 12 bLink flink kind = kBTIndexNode height=3 numRecords=2
key = 23 pointer key = 254 pointer
… reserved
node 23 bLink flink kind = kBTIndexNode height=2 numRecords=2 reserved key = 212 pointer key = 111 pointer
…
node 254 bLink flink
… key = 117 pointer
kind = kBTIndexNode height=2 numRecords=3 reserved key = 17 pointer key = 18 pointer
node 117 bLink flink
Data Record
kind = kBTLeafNode height=1 numRecords=2 reserved
node 18 bLink flink
Data Record
kind = kBTLeafNode height=1 numRecords=4 reserved Data Record
Data Record
bLink = 0 flink = 0 flink = mapnode
leafRecords=9 firstLeafNode lastLeafNode
…
kind = kBTHeaderNode height=0 numRecords=3 reserved treeDepth=3 rootNode=12
B-Tree
B-Tree Header Node
B-Tree Map Node
Hình 2.5: Cấu trúc B-Tree trong Hierarchical File System - HFS
Block Trong định dạng HFS, volume (tương ứng partition trong UNIX) gồm nhiều block, còn được gọi là sector Với đĩa dung lượng nhở thường block có kích thước 512 byte, các đĩa có dung lượng lớn hơn block size có thể lên đến 16KB hoặc hơn nữa HFS Flus (phiên bản mới của HFS) dùng 23bit để đánh địa chỉ tương ứng với 4.294.967.296 = 232 block lớn hơn so với chuẩn cũ HFS chỉ dùng 16 bit dịa chỉ block tương ứng 65, 536 = 216 block Trong các block, có khoảng 9 cấu trúc thường đặc trưng cho HFS volume:
• Boot block: được đọc khi khởi động và chứa các lệnh khởi động (boot instruction), thường ở block/sector 0 và 1
• Volumne Header: phiên bản HFS trước gọi là Master directory block chứa các thông tin về parition/volume đó như thời gian tạo và số lượng file có trong volumne
• Allocation File: phiên bản HFS gọi là Volume bitmap chứa danh sách bit (bitmap) các block nào được dùng và các block nào đang trống Điểm khác biệt là Allocation File hiện thực như một file bình thường và có thể thay đổi kích thước cũng như được lưu trên các block không liên tục trong volume
• Catalog File: hiện thực bằng B-tree chứa thông tin về các file và thư mục trong volume
• Extends Overflow file: hiện thực bằng B-tree chứa các block được cấp cho file như là phần mở rộng Trong MacOS, ngoài nội dung dữ liệu, file có thể có các
Trang 9Node 2
B-Tree
Header Node CNode 0g Node 1
Node n
…
Node
Node descriptor Record 0 Record 1 Free space Offset to free space Offset to record 1 Offset to record 0
Partition
Reserved C1024 bytesg Boot block Volume Header/
Master directory block Free space Allocation File/
Free space Extends Overflow File Free space Catalog File Free space Attributes File Free space Startup File
Free space Alternative Volume Header
Reserved C512 bytesg Volume bitmap
Hình 2.6: Cấu trúc Parition/Volume trong HFS
thông tin mở rộng metafile được chứa trong phần này
• Attribute File: mới xuất hiện ở HFS Plus chứa các thông tin của file và các phần
mở rộng
• Startup File: được thiết kế cho các hệ thống không phải MacOS vốn không hỗ trợ HFS hay HFS Plus Thành phần này tương tự Boot Block trong HFS
• Alternate Volume Header: phiên bản HFS trước gọi là Alternate Master Di-rectory Block là một bản sao (copy) của Volume Header
• Block/sector cuối cùng được dự trữ dành riêng cho Apple sử dụng trong quá trình chế tạo máy tính
Trang 103 Nội dung thực hành
Nội dung phần thực hành không hương đến việc thực tập các thao tác trên file vì đó chỉ
là các giao tiếp thông thường mà chúng ta đã quen thuộc qua các tiện ích của hệ điều hành Chúng ta có thể nhắc lại các thao tác như:
• open/close qua Programming API fopen()/fclose()
• read qua command cat, redirect stdout (>) Programming API fread(), fscanf();
• write qua command vi, echo & redirect sdtin (<), Programming API fwrite(), fprintf();
• reposition Programming API fseek()
• truncate qua command touch, Programming API ftruncate();
• delete qua command rm, Programming API remove();
Nội dung phần thực hành này minh họa việc hiện thưc hệ thống tập tin trong hệ điều hành Chúng ta sẽ điểm qua cấu trúc thông tin quản lý tập tin Cấu trúc tổ chức trong
hệ thống file với i-node (UNIX UFS) và block (MacOS HFS)
3.1 Thao tác trên tập tin Công cụ để quản lý các tập tin là ls, list directory contents, và các tập tin đang mở trên hệ thống là lsof viết tắt của List Open Files Đây là công cụ giúp liệt kê các thông tin các tập tin hoặc các tập tin đang được mở bởi các process Lưu ý trong UNIX, mọi thứ đều là file (directory, devices ) Qua các thông tin chúng ta có thể thấy được owner (user owned file) và group owner (group owned file) Các thông tin về phân quyền Access List Control và kích thước file
3.1.1 Giới thiệu ls
Linux
$ l s − l /
F i l e _ P e r m i s s i o n s Owner Group S i z e Modified_Time Name
drwxr−xr−x 2 r o o t r o o t 1480 Nov 10 1 9 : 1 8 b i n /
drwxrwxr−x 13 r o o t s t a f f 6140 Nov 10 1 9 : 1 8 dev /
drwxr−s r −x 8 r o o t r o o t 680 Nov 10 1 9 : 1 8 e t c /
drwxrwxr−x 3 r o o t s t a f f 60 Apr 20 2016 home/
−rwxr−xr−x 1 r o o t r o o t 496 Feb 23 2016 i n i t
Trang 11
Xem thông tin i-node Dùng lệnh ls với tham số -i để liệt kê thông tin inode tương ứng với file/directory Với directory, sử dụng option -d để liệt kê chính directory đó hoặc
sử dụng không có tham số để liệt kê thông tin các tập tin/thư mục con của thư mục đó
$ l s − i − l / e t c / p a s s
14618 −rw−rw−r−− 1 r o o t s t a f f 161 Apr 20 2016 / e t c / passwd
$ l s − i − l −d / e t c
349 drwxr−s r −x 8 r o o t r o o t 680 Nov 10 1 9 : 1 8 / e t c /
$ l s − i − l / e t c
2427 −rw−r−−r−− 1 r o o t r o o t 574 Nov 10 1 9 : 1 8 f s t a b
354 −rw−rw−r−− 1 r o o t s t a f f 49 Feb 23 2016 group
393 −rw−rw−−−− 1 r o o t s t a f f 44 Feb 23 2016 gshadow
351 −rw−rw−r−− 1 r o o t s t a f f 26 Feb 23 2016 h o s t c o n f
14648 −rw−r−−r−− 1 r o o t r o o t 4 Nov 10 1 9 : 1 8 hostname
MacOS
$ l s − l / l s − l
F i l e _ P e r m i s s i o n s Owner Group S i z e Modified_Time Name
drwxrwxr−x+ 37 r o o t admin 1258 Nov 2 1 4 : 1 3 A p p l i c a t i o n s drwxr−xr−x+ 59 r o o t w h e e l 2006 Sep 30 1 4 : 1 9 L i b r a r y drwxr−xr−x@ 2 r o o t w h e e l 68 Sep 10 2014 Network drwxr−xr−x+ 4 r o o t w h e e l 136 Jan 29 2015 System
drwxr−xr−x 5 r o o t admin 170 Sep 17 0 6 : 4 1 U s e r s
Xem thông tin i-node trong MacOS, i-node không có ý nghĩa tổ chức cấu trúc File System như trong Unix, mà chỉ đơn giản là unique id mà file system dùng để lưu vết (track) file
3.1.2 Giới thiệu stat
để xem trạng thái của file Thông tin được liệt kê bởi lệnh stat nhiều hơn ls
Linux
Hint
Command stat là công cụ chuyên sâu không được tích hợp mặc định
cùng MT14tinyLinux để giữ kích thước virtual machine nhỏ Để sử
dụng, chúng ta cần cài bổ sung gói phần mềm coreutils.tcz Có thể
cài đặt trong Apps > Cloud (Remote)> Browse Xem minh họa ở hình
3.1.2
Trang 12Hình 3.1: Cài đặt gói coreutils.tcz
$ s t a t / e t c / passwd
F i l e : ’ / e t c / passwd ’
S i z e : 161 B l o c k s : 8 IO B l o c k : 4096 r e g u l a r f i l e
D e v i c e : 2h /2 d I n o d e : 14618 L i n k s : 1
A c c e s s : (0664/ −rw−rw−r −−) Uid : ( 0/ r o o t ) Gid : ( 5 0 / s t a f f )
A c c e s s : 2016−11−11 0 7 : 1 0 : 3 4 0 1 5 9 7 6 7 6 8 +0000
Modify : 2016−04−20 1 9 : 2 2 : 2 7 0 0 0 0 0 0 0 0 0 +0000
Change : 2016−11−10 1 9 : 1 8 : 1 2 9 4 6 6 6 6 5 7 0 +0000
B i r t h : −
MacOS
$ s t a t / dev / t t y
/∗ i n o d e ’ s number ∗/
/∗ i n o d e p r o t e c t i o n mode ∗/
/∗ number o r hard l i n k s t o t h e f i l e ∗/
/∗ u s e r −i d o f owner ∗/
/∗ group−i d o f owner ∗/
/∗ d e v i c e type , f o r s p e c i a l f i l e i n o d e ∗/
/∗ t i m e o f l a s t a c c e s s ∗/
/∗ t i m e o f l a s t d a t a m o d i f i c a t i o n ∗/
/∗ t i m e o f l a s t f i l e s t a t u s change ∗/
/∗ f i l e s i z e , in b y t e s ∗/
/∗ b l o c k s a l l o c a t e d f o r f i l e ∗/
/∗ o p t i m a l f i l e s y s I /O ops b l o c k s i z e ∗/
/∗ u s e r d e f i n e d f l a g s f o r f i l e ∗/
/∗ f i l e g e n e r a t i o n number ∗/
/∗ f i l e name ∗/
7 8 7 7 4 3 6 5 6
Trang 13crw−rw−rw−
1
r o o t
w h e e l
3 3 5 54 4 3 2
0
"Nov␣ 17 ␣ 0 9 : 5 0 : 3 5 ␣ 2016 "
"Nov␣ 16 ␣ 1 4 : 1 4 : 0 4 ␣ 2016 "
"Nov␣ 16 ␣ 1 4 : 1 4 : 0 4 ␣ 2016 "
"Nov␣ 16 ␣ 1 4 : 1 4 : 0 4 ␣ 2016 "
131072
0
0
/ dev / t t y
3.2 Thông tin đĩa và parition/volume Mỗi hệ điều hành cung cấp các công cụ tiện ích (utilities tool) để xem thông tin trên harddisk và partition Trong Unix, thiết bị lưu trữ thứ cấp (đĩa, flash ) được gắn vào file system Các lệnh được cung cấp là df -h (Linux và MacOS), fdisk, (Linux, MacOS), parted (Linux) và diskutil (MacOS)
Hint
Các thao tác xem thông tin đĩa chỉ có thể thực hiện với quyền quản lý hệ thống Các lệnh do vậy nếu báo lỗi permission denied thì phải chuyển sang sử dụng dưới chết độ sudo Ví dụ: lênh $ fdisk /dev/sda bị lỗi permission denied thì
sử dụng $ sudo fdisk /dev/sda
Linux Đường dẫn: Thiết bị lưu trữ (đía, flash ) được mount tại tại đường dẫn /dev/sdXy (X: a z harddisk identification; y: 1,2, partition number) Vd:
• hardisk /dev/sda (đĩa 0) /dev/sdb (đĩa 1), /dev/sr0 (đĩa CDROM)
• partition /dev/sda1 (parition thứ 1 trên đĩa 0), /dev/sdc2 (partition thứ 3 trên đĩa 2)
$ d f −h
F i l e s y s t e m S i z e Used A v a i l Use% Mounted on
/ dev / s d a 1 486M 130M 353M 27% /mnt/ s d a 1
/ dev / l o o p 0 8 0K 8 0K 0 100% /tmp/ t c l o o p / libXdmcp
/ dev / l o o p 1 8 0K 8 0K 0 100% /tmp/ t c l o o p / l i b X a u
Trang 14/ dev / l o o p 2 228K 228K 0 100% /tmp/ t c l o o p / l i b x c b
/ dev / l o o p 3 892K 892K 0 100% /tmp/ t c l o o p / l i b X 1 1
$ f d i s k − l / dev / sda
Disk / dev / sda : 536 MB, 5 3 6 8 7 0 9 1 2 b y t e s
255 heads , 63 s e c t o r s / t r a c k , 65 c y l i n d e r s
U n i t s = c y l i n d e r s o f 16065 ∗ 512 = 8225280 b y t e s
D e v i c e Boot S t a r t End B l o c k s I d System
$ f d i s k − l / dev / s d a 1
Disk / dev / s d a 1 : 534 MB, 5 3 4 6 1 0 9 4 4 b y t e s
255 heads , 63 s e c t o r s / t r a c k , 64 c y l i n d e r s
U n i t s = c y l i n d e r s o f 16065 ∗ 512 = 8225280 b y t e s
D e v i c e Boot S t a r t End B l o c k s I d System
P a r t i t i o n 1 has d i f f e r e n t p h y s i c a l / l o g i c a l b e g i n n i n g s ( non−Linux ? ) : phys =(187 , 1 8 0 , 1 4 ) l o g i c a l =(200715 , 1 9 7 , 3 8 )
P a r t i t i o n 1 has d i f f e r e n t p h y s i c a l / l o g i c a l e n d i n g s :
phys =(784 , 0 , 1 3 ) l o g i c a l =(227660 , 1 9 2 , 4 4 )
P a r t i t i o n 1 d o e s no t end on c y l i n d e r boundary
/ dev / sda1p2 ? 203674 57922 9 7 6 7 3 0 0 1 7 16 Hidden FAT16
P a r t i t i o n 2 has d i f f e r e n t p h y s i c a l / l o g i c a l b e g i n n i n g s ( non−Linux ? ) : phys =(906 , 2 3 5 , 6 1 ) l o g i c a l =(203673 , 2 2 5 , 2 2 )
P a r t i t i o n 2 has d i f f e r e n t p h y s i c a l / l o g i c a l e n d i n g s :
phys =(262 , 1 1 6 , 5 9 ) l o g i c a l =(57921 , 2 0 3 , 2 5 )
MacOS Đường dẫn: Thiết bị lưu trữ (đía, flash ) được mount tại tại đường dẫn /dev/diskXsY
(X: 0,1, harddisk identification; Y: 1,2, partition number) Vd:
• hardisk /dev/disk0 (đĩa 0) /dev/disk1
• partition /dev/disk0s1 (parition thứ 1 trên đĩa 0), /dev/disk3s2 (partition thứ 2
trên đĩa 4)
$ sudo d f −h
F i l e s y s t e m S i z e Used A v a i l C a p a c i t y i u s e d i f r e e %i u s e d Mounted on