Quản lý Disk Quota trên CentOS: Mẹo hay giới hạn không gian lưu trữ cho người dùng và nhóm

CentOS tutorial - IT technology blog
CentOS tutorial - IT technology blog

Vấn đề thực tế: Khi ổ đĩa server CentOS bỗng dưng ‘hết hơi’

Anh em IT mình chắc không lạ gì cảnh đang yên đang lành thì nhận được alert server hết dung lượng, hoặc tệ hơn là hệ thống bắt đầu ì ạch, thậm chí một số dịch vụ còn lăn đùng ra chết. Lúc đó, việc đầu tiên mình làm là chạy lệnh df -h để xem phân vùng nào đang bị ‘ngốn’ nhiều nhất.

Nhớ hồi mình còn làm ở công ty cũ, có mấy con server CentOS 7 chạy dịch vụ nội bộ. Thi thoảng, chúng lại gặp tình trạng một đồng nghiệp dev vô tình đẩy hàng gigabyte file log hoặc dữ liệu lớn lên thư mục home của mình mà không để ý. Đến lúc ổ đĩa đầy, hệ thống bắt đầu chậm chạp, thậm chí crash dịch vụ thì mới tá hỏa đi kiểm tra. Việc này không chỉ gây mất thời gian xử lý mà còn ảnh hưởng trực tiếp đến công việc của nhiều người khác.

Tại nhiều công ty, vẫn còn một số server chạy CentOS 7. Việc migrate sang AlmaLinux là một thách thức đã được xử lý. Tuy nhiên, dù là CentOS 7 hay AlmaLinux, vấn đề quản lý tài nguyên, đặc biệt là không gian lưu trữ, vẫn luôn là ưu tiên hàng đầu. Nếu không có cơ chế kiểm soát chặt chẽ, một cá nhân hoặc nhóm có thể dễ dàng chiếm dụng quá nhiều tài nguyên. Điều này gây mất cân bằng và ảnh hưởng tiêu cực đến toàn bộ hệ thống.

Phân tích nguyên nhân: Tại sao lại ‘mất kiểm soát’ về dung lượng?

Nguyên nhân chính dẫn đến tình trạng trên thường là do thiếu cơ chế quản lý và giới hạn không gian lưu trữ chủ động. Mặc định, khi tạo người dùng trên CentOS (hoặc bất kỳ hệ điều hành Linux nào), họ có thể lưu trữ dữ liệu vào thư mục home hoặc bất kỳ thư mục nào có quyền ghi. Tuy nhiên, không có giới hạn dung lượng nào được áp dụng sẵn.

  • Thiếu sự chủ động: Admin thường chỉ phản ứng khi vấn đề đã xảy ra (ổ đĩa đầy) chứ không có biện pháp phòng ngừa từ trước.
  • Người dùng không ý thức: Nhiều người dùng, đặc biệt là những người không chuyên về hệ thống, không nhận thức được lượng dung lượng mình đang sử dụng và tác động của nó đến hệ thống chung.
  • Không có công cụ kiểm soát tự động: Việc kiểm tra thủ công bằng du -sh hay df -h chỉ là giải pháp tức thời, không tự động ngăn chặn lạm dụng.
  • Phân bổ tài nguyên không công bằng: Khi không có giới hạn, một vài người dùng có thể vô tình hoặc cố ý chiếm dụng phần lớn không gian. Điều này khiến người dùng khác không còn đủ chỗ làm việc.

Hậu quả không chỉ dừng lại ở việc đầy ổ đĩa. Nó còn kéo theo hiệu suất hệ thống giảm sút, nguy cơ mất dữ liệu, và khó khăn trong sao lưu, phục hồi. Thậm chí, việc này có thể tạo ra lỗ hổng bảo mật, cho phép kẻ tấn công thực hiện tấn công từ chối dịch vụ (DoS) bằng cách làm đầy ổ đĩa.

Các cách giải quyết (và tại sao chúng không phải là tốt nhất)

Khi gặp vấn đề dung lượng, có một số giải pháp thường được nghĩ đến:

1. Kiểm tra và nhắc nhở thủ công

Đây là cách phổ biến nhất khi mới bắt đầu. Định kỳ, quản trị viên sẽ dùng các lệnh như du -sh /home/* để kiểm tra xem người dùng nào chiếm dụng nhiều dung lượng nhất, sau đó gửi email hoặc chat nhắc nhở họ dọn dẹp.

Ưu điểm: Đơn giản, không cần cấu hình phức tạp.

Nhược điểm: Tốn thời gian, dễ bị bỏ sót, mang tính phản ứng, không chủ động ngăn chặn. Người dùng có thể quên hoặc không hợp tác, và quản trị viên phải lặp lại công việc này liên tục. Rõ ràng, đây không phải là giải pháp có khả năng mở rộng.

2. Viết script tự động kiểm tra và thông báo

Một bước tiến là phát triển một script shell, chạy định kỳ bằng cron job, để tự động kiểm tra dung lượng của từng người dùng hoặc từng thư mục. Nếu vượt quá ngưỡng nào đó, script sẽ gửi email thông báo cho người dùng đó và cả quản trị viên.

Ưu điểm: Tự động hóa một phần, giảm bớt công sức thủ công.

Nhược điểm: Vẫn là biện pháp phản ứng. Script chỉ thông báo, không ngăn chặn người dùng tạo thêm file. Người dùng vẫn có thể tiếp tục lạm dụng cho đến khi họ đọc email và dọn dẹp. Đôi khi, việc xóa file của người dùng khác lại cần quyền root, điều này không phải lúc nào cũng tối ưu hoặc an toàn.

3. Triển khai Disk Quota

Đây chính là giải pháp chủ động và hiệu quả nhất mà chúng tôi muốn giới thiệu. Disk Quota là tính năng của hệ điều hành. Nó cho phép quản trị viên giới hạn không gian lưu trữ (blocks) và số lượng file (inodes) mà một người dùng hoặc nhóm có thể sử dụng trên một hệ thống file cụ thể.

Ưu điểm:

  • Chủ động ngăn chặn: Ngăn người dùng vượt quá giới hạn, tránh tình trạng đầy ổ đĩa ngay từ đầu.
  • Phân bổ công bằng: Đảm bảo mỗi người dùng/nhóm có một phần không gian lưu trữ nhất định, ngăn chặn việc một vài người chiếm dụng quá mức.
  • Ổn định hệ thống: Giúp duy trì hiệu suất và tính ổn định của server.
  • Dễ quản lý: Sau khi cấu hình, việc quản lý trở nên đơn giản và ít tốn công sức hơn.

Cách tốt nhất: Hướng dẫn triển khai Disk Quota trên CentOS

Để triển khai Disk Quota trên CentOS, chúng ta sẽ thực hiện theo các bước sau. Chúng tôi sẽ lấy ví dụ giới hạn dung lượng trên phân vùng /home, nơi thường chứa dữ liệu của người dùng.

Bước 1: Kiểm tra và cài đặt gói Quota

Đầu tiên, hãy đảm bảo rằng gói quota đã được cài đặt trên hệ thống của bạn.


rpm -qa | grep quota

Nếu không có kết quả hoặc gói bị thiếu, bạn cần cài đặt nó:


sudo yum install quota -y

Bước 2: Kích hoạt Quota trên Filesystem

Để Quota hoạt động, chúng ta cần chỉnh sửa file /etc/fstab để thêm các tùy chọn usrquota (cho người dùng) và grpquota (cho nhóm) vào phân vùng cần áp dụng quota.

Mở file /etc/fstab bằng trình soạn thảo yêu thích (ví dụ: vi hoặc nano):


sudo vi /etc/fstab

Tìm dòng cấu hình của phân vùng cần áp dụng Quota (ví dụ: /home). Dòng này thường có dạng:


/dev/mapper/centos-home /home                   xfs     defaults        0 0

Hoặc nếu là ext4:


/dev/sda1               /home                   ext4    defaults        1 2

Bạn cần thêm usrquotagrpquota vào phần defaults, phân cách bằng dấu phẩy. Nếu đã có các tùy chọn khác, hãy thêm vào sau chúng:


/dev/mapper/centos-home /home                   xfs     defaults,usrquota,grpquota        0 0

Sau khi chỉnh sửa, lưu file và thoát. Để các thay đổi có hiệu lực, bạn cần remount lại filesystem. Cách an toàn nhất là khởi động lại server. Tuy nhiên, để tránh downtime, bạn có thể remount:


sudo mount -o remount /home

Lưu ý: Nếu bạn đang dùng filesystem XFS (thường là mặc định trên CentOS 7 trở lên), thì tùy chọn usrquotagrpquota là đủ. Với ext4, bạn cần đảm bảo kernel hỗ trợ.

Bước 3: Tạo file quota database

Bây giờ, chúng ta cần tạo các file database cho Quota trên phân vùng đã cấu hình. Lệnh quotacheck sẽ quét filesystem và tạo các file database. Các file này là aquota.useraquota.group (hoặc quota.userquota.group đối với ext4 cũ hơn), nằm ở thư mục gốc của phân vùng.


sudo quotacheck -cug /home
  • -c: Tạo file database mới.
  • -u: Quét và tạo database cho người dùng.
  • -g: Quét và tạo database cho nhóm.

Bạn có thể thêm -v để xem chi tiết quá trình quét.

Bước 4: Cấu hình giới hạn Quota cho người dùng/nhóm

Đây là bước quan trọng nhất: đặt giới hạn cho người dùng hoặc nhóm. Chúng ta sẽ sử dụng lệnh edquota.

Cấu hình cho người dùng:


sudo edquota -u <username>

Ví dụ, để cấu hình cho người dùng itfromzero:


sudo edquota -u itfromzero

Lệnh này sẽ mở một trình soạn thảo (thường là vi) với nội dung tương tự như sau:


Disk quotas for user itfromzero (uid 1001):
  Filesystem             blocks       soft       hard     inodes     soft     hard
  /dev/mapper/centos-home  0          0          0          0          0          0

Giải thích các cột:

  • blocks: Số khối (block) hiện tại người dùng đang sử dụng.
  • soft: Giới hạn mềm (soft limit). Người dùng có thể vượt quá giới hạn này trong một khoảng thời gian nhất định (grace period).
  • hard: Giới hạn cứng (hard limit). Người dùng không thể vượt quá giới hạn này. Nếu đạt đến hard limit, họ sẽ không thể ghi thêm dữ liệu.
  • inodes: Số lượng file/thư mục (inodes) hiện tại người dùng đang sử dụng.
  • inodes soft / inodes hard: Tương tự như blocks, nhưng áp dụng cho số lượng file/thư mục.

Bạn có thể đặt giới hạn theo đơn vị KB, MB, GB bằng cách thêm hậu tố K, M, G. Ví dụ, để đặt cho người dùng itfromzero giới hạn mềm là 1GB và giới hạn cứng là 1.2GB cho khối dữ liệu. Đồng thời, giới hạn mềm 50.000 file và giới hạn cứng 60.000 file:


Disk quotas for user itfromzero (uid 1001):
  Filesystem             blocks       soft       hard     inodes     soft     hard
  /dev/mapper/centos-home  0          1G         1.2G       0          50000    60000

Lưu và thoát trình soạn thảo.

Cấu hình cho nhóm:

Tương tự như người dùng, bạn có thể đặt giới hạn cho một nhóm:


sudo edquota -g <groupname>

Ví dụ:


sudo edquota -g developers

Cách cấu hình tương tự như đối với người dùng.

Cấu hình thời gian ân hạn (Grace Period):

Thời gian ân hạn là khoảng thời gian mà người dùng được phép vượt quá giới hạn mềm (soft limit) trước khi giới hạn mềm trở thành giới hạn cứng. Bạn có thể cấu hình bằng lệnh:


sudo edquota -t

Nó sẽ mở một file tương tự:


Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, seconds
  Filesystem             Block grace period       Inode grace period
  /dev/mapper/centos-home 7days                    7days

Bạn có thể thay đổi 7days thành 3days, 2hours, v.v. Ví dụ, một khoảng thời gian phổ biến là 5days để người dùng có đủ thời gian dọn dẹp.

Bước 5: Kích hoạt Quota

Sau khi đã cấu hình xong các giới hạn, bạn cần kích hoạt Quota trên phân vùng:


sudo quotaon /home

Để tắt Quota, bạn dùng quotaoff /home.

Bước 6: Kiểm tra trạng thái Quota

Để kiểm tra xem Quota đã hoạt động và các giới hạn đã được áp dụng đúng chưa, bạn có thể dùng các lệnh sau:

Kiểm tra tổng quan tất cả các phân vùng:


sudo repquota -a

Output sẽ hiển thị trạng thái Quota cho tất cả các phân vùng được kích hoạt.

Kiểm tra Quota của một người dùng cụ thể:


sudo quota -s itfromzero

Lệnh này sẽ hiển thị thông tin chi tiết về dung lượng và số lượng file mà người dùng itfromzero đang sử dụng so với giới hạn của họ.


Disk quotas for user itfromzero (uid 1001):
     Filesystem  blocks   soft   hard  inodes   soft   hard
  /dev/mapper/centos-home     4K     1G   1.2G      1     50K    60K

Nếu người dùng vượt quá giới hạn mềm, cột blocks hoặc inodes sẽ hiển thị dấu + và thời gian ân hạn sẽ được đếm ngược.

Mẹo hay và Best Practices từ kinh nghiệm thực chiến

  • Áp dụng đúng chỗ: Quota thường hiệu quả nhất khi áp dụng cho các phân vùng chứa dữ liệu người dùng hoặc ứng dụng cụ thể, ví dụ /home, /var/www, /srv. Tránh áp dụng lên phân vùng gốc / trừ khi thực sự cần thiết, vì điều này có thể làm phức tạp việc quản lý hệ thống.
  • Giáo dục người dùng: Cho dù bạn đã thiết lập Quota, việc thông báo và giải thích cho người dùng về các giới hạn này là rất quan trọng. Họ cần biết lý do và cách kiểm tra dung lượng của mình để tránh bị gián đoạn công việc.
  • Theo dõi thường xuyên: Dù Quota hoạt động tự động, bạn vẫn nên kiểm tra định kỳ bằng repquota -a để nắm bắt tình hình chung và điều chỉnh nếu cần.
  • Sử dụng edquota -p để tạo template: Nếu cần áp dụng cùng một giới hạn cho nhiều người dùng, bạn có thể cấu hình cho một người dùng mẫu. Sau đó, dùng lệnh edquota -p <template_user> <user1> <user2> ... để sao chép cấu hình. Cách này giúp tiết kiệm rất nhiều thời gian.
  • XFS Quota: Trên các phiên bản CentOS 7 trở lên, filesystem mặc định thường là XFS cho /. Vì vậy, nếu làm việc với XFS, bạn có thể dùng xfs_quota thay vì quota truyền thống. Về cơ bản, cách cấu hình tương tự nhưng lệnh sẽ khác một chút. Ví dụ: xfs_quota -x -c 'limit bsoft=1g bhard=1.2g itfromzero' /home.
  • Cân nhắc giới hạn Inode: Đôi khi, một người dùng có thể không chiếm nhiều dung lượng nhưng lại tạo ra rất nhiều file nhỏ (ví dụ: file cache, session logs). Việc giới hạn inode sẽ giúp kiểm soát tình trạng này, tránh lãng phí tài nguyên của hệ thống file.

Kết luận

Việc quản lý Disk Quota trên CentOS là một kỹ năng không thể thiếu đối với bất kỳ quản trị viên hệ thống nào, đặc biệt trong môi trường nhiều người dùng hoặc server chia sẻ. Bằng cách chủ động giới hạn không gian lưu trữ, chúng ta không chỉ ngăn chặn các sự cố đầy ổ đĩa. Nó còn đảm bảo phân bổ tài nguyên công bằng, duy trì hiệu suất và ổn định cho toàn bộ hệ thống.

Đừng chờ đến khi server ‘kêu cứu’ vì hết dung lượng mới bắt đầu giải quyết vấn đề. Hãy triển khai Disk Quota ngay hôm nay để có một hệ thống khỏe mạnh và dễ quản lý hơn!

Share: