Thứ Bảy, 29 tháng 7, 2023

Giới thiệu một số File System phổ biến (ext, xfs file system)

Bài viết này sẽ giới thiệu một số File System phổ biến nhất cho bạn.
Nội dung
  1. Filesystem là gì?
  2. Journaling filesystem
  3. Ext filesystem
    1.  Ext2
       Ext3
      1.  Ext 4
  4. XFS filesystem

Filesystem là gì?

Filesystem, tạm dịch là Hệ thống tập tin, là một phương pháp dùng để kiểm soát dữ liệu được lưu trữ và lấy ra như thế nào. Cụ thể như lày, nếu không có filesystem, tất cả dữ liệu sẽ được đặt vào thiết bị lưu trữ dưới dạng một cục bùi nhùi, không thể nào biết được điểm đầu và điểm kết thúc. Bằng việc chia cắt cục bùi nhùi đó ra thành nhiều mảnh và đặt cho chúng một cái tên, dữ liệu sẽ dễ dàng được phân tách và định danh. Và cái tên mà người ta sử dụng để gọi các mảnh dữ liệu đã được chia cắt đó là file (tập tin). Cấu trúc và các quy luật logic để quản lý các nhóm tập tin đó gọi là filesystem.

Hiện nay có rất nhiều loại filesystem, mỗi loại khác nhau về cấu trúc, logic, tốc độ, độ linh hoạt, tính bảo mật, kích thước…

Filesystem có thể được dùng trên rất nhiều loại thiết bị lưu trữ khác nhau: HDD, SSD, USB drive, thậm chí là RAM…

Ở bài viết này, tớ sẽ giới thiệu sơ qua cho các cậu một số loại filesystem thường thấy ở các dịch vụ tại Vinahost đó là extxfs nhé.

Journaling filesystem

Ơ, tại sao lại có journaling filesystem ở đây?

Trước khi đi vào tìm hiểu 2 filesystem liệt kê ở phần trước, ta cần biết sương sương về filesystem này nhé các cậu.

Journaling filesystem, với nghĩa tiếng Việt hơi chuối là Hệ thống tập tin có ghi chép, là một filesystem theo dõi những thay đổi chưa được hoàn thành trên phần chính của filesystem bằng cách ghi chép lại những thao tác thay đổi đó trong một cơ sở dữ liệu gọi là journal (giống một quyển sổ ghi chép ý). Trong trường hợp system bị tèo hay khi mất điện, filesystem có thể được phục hồi mau chóng hơn và ít có nguy cơ bị hỏng hơn.

Giải thích dễ hiểu: khi ta mở một file để chỉnh sửa, trước khi file đó được save và close, file sẽ được ghi vào journal, sau đó journal sẽ ghi file vào ổ cứng khi ta kết thúc việc chỉnh sửa file.

Mặt hạn chế của journaling filesystem là vì nó thực hiện ghi nhiều hơn nên hiệu suất từ đó cũng thấp đi một chút.

Một ví dụ về tác dụng của journal: Khi một file bị xóa trên hệ thống sẽ trải qua 3 bước sau:

1) Xóa directory entry của file đó (directory entry là một cấu trúc ánh xạ giữa filename và inode, chứa thông tin để phiên dịch filename sang inode. Còn inode là…thôi dài dòng quá, các cậu tự tìm hiểu thêm nhé).

2) Giải phóng inode đến pool inode trống.

3) Hoàn trả block ổ cứng đến pool block trống.

Nếu có crash xảy ra ở giữa bước 1 và 2, hệ thống sẽ xuất hiện inode “mồ côi” và dẫn đến storage leak (rò rỉ lưu trữ). Nếu có crash xảy ra ở giữa bước 2 và 3, block ổ cứng của file vừa bị xóa sẽ không thể được dùng cho file mới, dẫn đến dung lượng lưu trữ của filesystem giảm đi. Khi có journal, sau khi crash xảy ra, hệ thống sẽ biết được quá trình xóa file đang dừng lại ở bước nào, và từ đó sẽ thực hiện tiếp.

Ví dụ ghi nội dung vào một file

Ext filesystem

Ext filesystem (hay Extended filesystem), với nghĩa tiếng Việt không-nên-dịch là Hệ thống tập tin mở rộng, là filesystem đầu tiên được thiết kế dành riêng cho Linux. Có tổng cộng 4 phiên bản và mỗi phiên bản có những tính năng nổi bật riêng. Phiên bản đầu tiên là bản nâng cấp từ Minix filesystem được sử dụng tại thời điểm đó, nhưng lại không đáp ứng được nhiều tính năng phổ biến hiện nay. Và thậm chí, với phiên bản mới nhất là ext4 vẫn còn nhiều hạn chế, được khuyến nghị không nên sử dụng, và đã bị loại bỏ trên một số distribution.

Nhưng mà tớ vẫn sẽ giới thiệu sơ qua cho các cậu biết vì trong quá trình cài OS ở một số OS thông dụng như CentOS 7, tới bước phân vùng ổ cứng vẫn sẽ có filesystem này. Hihi!

Cấu trúc dữ liệu của ext filesystem được chia thành nhiều block. Các block này được nhóm lại thành các block group. Trên một hệ thống filesystem lớn có khoảng hàng ngàn các block như vậy. Dữ liệu của một file bất kỳ sẽ được chứa trong một block group duy nhất nào đó khả dụng. Điều này giúp giảm thiểu số lần truy xuất (seek) trên disk khi đọc một lượng lớn dữ liệu nối tiếp nhau.

Mỗi block group sẽ luôn bao gồm superblock và descriptor table (bảng mô tả) của block group đó giống hệt nhau. Và các block group còn bao gồm các block sau: block bitmapinode bitmapinode table, và cuối cùng là data block (block thực sự chứa dữ liệu).

 Ext2

Ext2 (Second extended filesystem) không phải là một journaling filesystem, là filesystem được phát triển để kế thừa các thuộc tính của filesystem cũ.

Do filesystem này không sử dụng journal nên performance được tăng lên và giảm thiểu số lần ghi nên nó là lựa chọn tốt cho các thiết bị lưu trữ ngoài như thẻ nhớ SD hay USB drive.

Tuy nhiên, các kernel Linux mới hiện nay cung cấp nhiều lợi ích cho các filesystem mới sau này hơn, ví dụ như kích thước file lớn hơn và kích thước volume lớn hơn (đối Linux kernel dưới 2.6.17, dung lượng tối đa khi sử dụng filesystem này chỉ là 2TB) nên ext2 không phải là sự lựa chọn tốt nhất.

 Ext3

Ext3 về cơ bản là Ext2 kết hợp với journaling, vì vậy nó sẽ cải thiện về độ uy tín (reliability) và loại bỏ công đoạn kiểm tra lại filesystem sau khi hệ thống shutdown đột ngột. Ext3 có mặt trên các bản Linux kernel 2.4.15 trở lên.

Performance của ext3 filesystem không so sánh được với các filesystem mới hiện tại như ext4 hay xfs, nhưng ext3 có một ưu điểm đáng chú ý là nó cho phép nâng cấp từ ext2 lên mà không cần phải format lại partition. Ngoài ra, theo một số bài test thì ext3 sử dụng ít CPU hơn xfs.

Những tính năng được bổ sung vào ext3 mà ext2 không có:

_ Journal

_ Tăng kích thước filesystem online (không downtime)

_ Đánh chỉ mục thư mục (Directory indexing) bằng cấu trúc dữ liệu HTree đối với các thư mục lớn

 Ext 4

Ext4 ban đầu là chuỗi các extension có khả năng tương thích ngược với ext3, được phát triển bởi Cluster File Systems với mục đích mở rộng giới hạn lưu trữ và cải thiện  về mặt performance so với bản trước. Tuy nhiên, một số nhà phát triển Linux kernel lại không thích sử dụng các extension này vì lý do liên quan đến độ tin cậy (reliability), và họ thực hiện fork (copy bản gốc và phát triển theo một hướng mới) source code của ext3, đặt tên nó là ext4, và phát triển nó mà không làm ảnh hưởng tới những người đang sử dụng ext3.

Phiên bản ext4 sơ khai lần đầu tiên xuất hiện ở Linux kernel 2.6.19, và bản vá đánh dấu phiên bản stable đầu tiên của ext4 có mặt ở Linux kernel 2.6.28.

Kernel 2.6.28 với filesystem ext4 được release vào ngày 25/12/2008, và vào ngày 15/01/2010, Google đã tuyên bố sẽ thực hiện nâng cấp hạ tầng lưu trữ của họ từ ext2 lên ext4.

Một số điểm nổi bật (mà tớ hiểu và dịch được) của ext4:

Filesystem lớn: ext4 hỗ trợ volume với kích thước lên đến 1 exbibyte (EiB, 1 exbibyte = 260 byte), và kích thước một file có thể lên đến 16 tebibytes (TiB, 1 tebibytes = 260 byte)

Extent: extent là kỹ thuật thay thế cho sơ đồ block mapping được sử dụng ở các bản ext2 và ext3. Một extent là một dãy các block vật lý nối tiếp nhau giúp tăng performance đối với các file lớn và giảm khả năng bị phân mảnh.

Tương thích ngược: ext4 có khả năng tương thích ngược với các bản ext2 và ext3.

Số thư mục con không giới hạn: ext4 không giới hạn số thư mục con (subdirectory) bên trong một thư mục, trong khi ở ext3 một thư mục chỉ được có tối đa 32.000 thư mục con.

Journal checksums: ext4 sử dụng checksum đối với journal với mục đích tăng độ tin cậy vì journal là một trong những file được sử dụng nhiều nhất trên disk. Tính năng này có thêm một lợi ích khác nữa là nó có thể tránh được tình trạng IO wait trong quá trình journaling, cải thiện nhẹ performance.

Metadata checksumming: có từ Linux kernel 3.5 được release vào năm 2012.

XFS filesystem

XFS filesystem, nó tên là XFS luôn chứ không phải viết tắt của từ gì cả, là một journaling filesystem 64 bit với hiệu năng cao. XFS đã xuất hiện ở các Linux kernel vào năm 2001, cho tới tháng 06/2014 nó đã được hỗ trợ bởi hầu hết các Linux distribution, một vài trong số đó sử dụng XFS như là filesystem mặc định.

Khá tương đồng với ext4 về một số mặt nào đó, chẳng hạn như hạn chế được tình trạng phân mảnh dữ liệu, không cho phép các snapshot tự động kết hợp với nhau, hỗ trợ nhiều file dung lượng lớn, có thể thay đổi kích thước file dữ liệu… nhưng không thể shrink (chia nhỏ) phân vùng XFS.

Vì XFS là filesystem 64 bit nên nó hỗ trợ kích thước tối đa là 8 exbibyte (263 – 1 byte), nhưng có thể bị hạn chế bởi giới hạn của hệ điều hành. Cụ thể, với hệ điều hành Linux 32 bit thì kích thước tối đa cho cả file và filesystem là 16 tebibyte.

Một đặc tính quan trọng của XFS đó là khả năng bảo đảm tốc độ truy xuất dữ liệu cho các ứng dụng (Guaranteed Rate I/O),  cho phép các ứng dụng duy trì được tốc độ truy xuất dữ liệu trên disk, rất quan trọng đối với các hệ thống phân phối dịch vụ video có độ phân giải cao hoặc các ứng dụng xử lý thông tin vệ tinh đòi hỏi duy trì ổn định tốc độ thao tác dữ liệu.

Với những đặc điểm như vậy thì XFS khá phù hợp với việc áp dụng vào mô hình server media vì khả năng truyền tải file video rất tốt. Tuy nhiên, nhiều bản Linux distribution yêu cầu phân vùng /boot riêng biệt, hiệu suất hoạt động với các file dung lượng nhỏ không bằng được khi so với các filesystem khác, do vậy sẽ không thể áp dụng với mô hình database, email và một vài loại server có nhiều file log. Nếu dùng với máy tính cá nhân, thì đây cũng không phải là sự lựa chọn tốt nên so sánh với ext, vì hiệu suất hoạt động không khả thi, ngoài ra cũng không có gì nổi trội về hiệu năng, quản lý so với ext3/4.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master