Mục lục

Không có mục lục
Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly

Cách đặt Filesystem Quotas trên Ubuntu 20.04

Ngày đăng: 13 tháng 10 năm 2022

Ubuntu

Giới thiệu

Quotas (hạn ngạch) được sử dụng để giới hạn dung lượng đĩa mà người dùng hoặc nhóm có thể sử dụng trên filesystem (hệ thống tệp). Nếu không có giới hạn như vậy, người dùng có thể làm đầy đĩa của máy và gây ra sự cố cho người dùng và dịch vụ khác.

Trong hướng dẫn này, bạn sẽ cài đặt các công cụ dòng lệnh để tạo và kiểm tra disk quotas, sau đó đặt quota cho người dùng mẫu.

Điều kiện

Hướng dẫn này giả định rằng bạn đã đăng nhập vào máy chủ Ubuntu 20.04, với non-root user có đặc quyền sudo, như được mô tả trong Thiết lập máy chủ ban đầu với Ubuntu 20.04. Các kỹ thuật trong hướng dẫn này thường hoạt động trên các bản phân phối Linux khác với Ubuntu, nhưng có thể yêu cầu một số điều chỉnh.

Bước 1: Cài đặt Quota Tools

Để đặt và kiểm tra quota, trước tiên bạn cần cài đặt công cụ dòng lệnh quota bằng apt. Trước tiên, hãy cập nhật danh sách gói, sau đó cài đặt gói:

  1. sudo apt update
  2. sudo apt install quota

Bạn có thể xác minh rằng các công cụ đã được cài đặt bằng cách chạy lệnh quota và yêu cầu thông tin phiên bản của nó:

  1. quota --version
Output
Quota utilities version 4.05. . . .

Sẽ ổn nếu đầu ra của bạn hiển thị số phiên bản hơi khác.

Tiếp theo, hãy đảm bảo rằng bạn có các kernel modules thích hợp để theo dõi quota.

Bước 2: Cài đặt Quota Kernel Module

Nếu bạn đang sử dụng máy chủ ảo dựa trên đám mây, cài đặt Ubuntu Linux mặc định của bạn có thể không có các kernel module cần thiết để hỗ trợ quản lý quota. Để kiểm tra, bạn sẽ sử dụng find để tìm kiếm các mô-đun quota_v1quota_v2 trong thư mục /lib/modules/...:

  1. find /lib/modules/ -type f -name '*quota_v*.ko*'
Output
/lib/modules/5.4.0-99-generic/kernel/fs/quota/quota_v2.ko /lib/modules/5.4.0-99-generic/kernel/fs/quota/quota_v1.ko

Ghi lại phiên bản kernel của bạn - được đánh dấu trong đường dẫn tệp ở trên - vì bạn sẽ cần nó trong bước sau. Nó có thể sẽ khác nhau, nhưng miễn là hai mô-đun được liệt kê, bạn đã sẵn sàng và có thể bỏ qua phần còn lại của bước này.

Nếu bạn không nhận được kết quả nào từ lệnh trên, hãy cài đặt gói linux-image-extra-virtual:

  1. sudo apt install linux-image-extra-virtual

Điều này sẽ cung cấp các kernel module cần thiết để thực hiện quota. Chạy lại lệnh find trước đó để xác minh rằng quá trình cài đặt đã thành công.

Tiếp theo, bạn sẽ cập nhật các tùy chọn filesystem mount của mình để kích hoạt quota trên root filesystemcủa bạn.

Bước 3: Cập nhật các tùy chọn Filesystem Mount

Để kích hoạt quotah trên một filesystem cụ thể, bạn cần gắn nó với một số tùy chọn liên quan đến quota được chỉ định. Bạn có thể thực hiện việc này bằng cách cập nhật chỗ vào của filesystem trong tệp cấu hình /etc/fstab. Mở tệp nano đó hoặc trình soạn thảo văn bản ưa thích của bạn:

  1. sudo nano /etc/fstab

Nội dung của tệp này sẽ tương tự như sau:

/etc/fstab
LABEL=cloudimg-rootfs   /        ext4   defaults        0 0
LABEL=UEFI      /boot/efi       vfat    defaults        0 0

Tệp fstab này là từ một máy chủ ảo. Máy tính để bàn hoặc máy tính xách tay có thể sẽ có fstab hơi khác, nhưng trong hầu hết các trường hợp, bạn sẽ có / hoặc root filesystem đại diện cho tất cả dung lượng ổ đĩa của bạn.

Dòng được đánh dấu cho biết tên của thiết bị được gắn kết, vị trí nơi nó được gắn kết, loại hệ thống tệp và các tùy chọn gắn kết được sử dụng. Số 0 đầu tiên cho biết không có bản sao lưu nào sẽ được thực hiện và số 0 thứ hai cho biết không kiểm tra lỗi sẽ được thực hiện khi khởi động.

Cập nhật dòng trỏ đến root filesystem bằng cách thay thế tùy chọn defaults bằng các tùy chọn được đánh dấu sau:

/etc/fstab
LABEL=cloudimg-rootfs   /        ext4   usrquota,grpquota        0 0
. . .

Thay đổi này sẽ cho phép chúng ta bật cả user-based quota (usrquota) và group-based quota (grpquota) trên filesystem. Nếu bạn chỉ cần cái này hoặc cái kia, bạn có thể bỏ đi tùy chọn không sử dụng. Nếu dòng fstab của bạn đã có một số tùy chọn được liệt kê thay vì defaults, bạn nên thêm các tùy chọn mới vào cuối bất cứ thứ gì đã có ở đó, đảm bảo phân tách tất cả các tùy chọn bằng dấu phẩy và không có dấu cách.

Gắn kết filesystem để làm cho các tùy chọn mới có hiệu lực:

  1. sudo mount -o remount /

Ở đây, cờ -o được sử dụng để chuyển tùy chọn remount.

Lưu ý: Hãy chắc chắn rằng không có khoảng trống giữa các tùy chọn được liệt kê trong tệp /etc/fstab của bạn. Nếu bạn đặt dấu cách sau dấu phẩy , bạn sẽ thấy lỗi như sau:

Output
mount: /etc/fstab: parse error

Nếu bạn thấy thông báo này sau khi chạy lệnh mount trước đó, hãy mở lại tệp fstab, sửa bất kỳ lỗi nào và lặp lại lệnh mount trước khi tiếp tục.

Bạn có thể xác minh rằng các tùy chọn mới đã được sử dụng để gắn kết filesystem bằng cách xem tệp /proc/mounts. Tại đây, sử dụng grep để chỉ hiển thị chỗ vào root filesystem trong tệp đó:

  1. cat /proc/mounts | grep ' / '
Output
/dev/vda1 / ext4 rw,relatime,quota,usrquota,grpquota 0 0

Lưu ý hai tùy chọn được chỉ định. Bây giờ bạn đã cài đặt các công cụ của mình và cập nhật các tùy chọn filesystem của mình, bạn có thể bật hệ thống quota.

Bước 4: Bật quota

Cuối cùng trước khi bật hệ thống quota, bạn cần chạy lệnh quotacheck theo cách thủ công một lần:

  1. sudo quotacheck -ugm /

Lệnh này tạo các tệp /aquota.user/aquota.group. Các tệp này chứa thông tin về các giới hạn và cách sử dụng filesystem, chúng cần tồn tại trước khi bạn bật giám sát quota. Các tham số quotacheck được sử dụng là:

  • u: chỉ định rằng tệp user-based quota sẽ được tạo
  • g: cho biết rằng tệp group-based quota sẽ được tạo
  • m: vô hiệu hóa việc đếm lại filesystem ở dạng read-only trong khi thực hiện kiểm đếm quota ban đầu. Việc nhắc lại filesystem là read-only sẽ cho kết quả chính xác hơn trong trường hợp người dùng đang tích cực lưu tệp trong quá trình này, nhưng không cần thiết trong quá trình thiết lập ban đầu.

Nếu bạn không cần bật user-based quota hoặc group-based quota, bạn có thể bỏ tùy chọn quotacheck tương ứng.

Bạn có thể xác minh rằng các tệp thích hợp đã được tạo bằng cách liệt kê thư mục gốc:

  1. ls /
Output
aquota.group bin dev home initrd.img.old lib64 media opt root sbin srv tmp var vmlinuz.old aquota.user boot etc initrd.img lib lost+found mnt proc run snap sys usr vmlinuz

Nếu bạn không bao gồm các tùy chọn u hoặc g trong lệnh quotacheck, tệp tương ứng sẽ bị thiếu.

Tiếp theo, bạn sẽ phải thêm các quota module vào Linux kernel. Ngoài ra, bạn có thể khởi động lại máy chủ của mình để hoàn thành tác vụ tương tự. Nếu không, hãy thêm chúng theo cách thủ công, thay thế phiên bản kernel được đánh dấu bằng phiên bản của bạn ở Bước 2:

  1. sudo modprobe quota_v1 -S 5.4.0-99-generic
  2. sudo modprobe quota_v2 -S 5.4.0-99-generic

Bây giờ bạn đã sẵn sàng để bật hệ thống quota:

  1. sudo quotaon -v /
quotaon Output
/dev/vda1 [/]: group quotas turned on /dev/vda1 [/]: user quotas turned on

Máy chủ của bạn hiện đang theo dõi và thực thi quota, nhưng chúng tôi chưa thiết lập nó! Tiếp theo, bạn sẽ đặt disk quota cho một user.

Bước 5: Thiết lập cấu hình quota cho user

Có một số cách bạn có thể đặt quotas cho user hoặc group. Tại đây, bạn sẽ xem qua cách đặt quotas bằng cả lệnh edquotasetquota.

Sử dụng edquota để đặt User Quota

Sử dụng lệnh edquota để chỉnh sửa quotach. Hãy chỉnh sửa sammy user’s quota mẫu của bạn:

  1. sudo edquota -u sammy

Tùy chọn -u chỉ định rằng đây là user quota mà bạn sẽ chỉnh sửa. Thay vào đó, nếu bạn muốn chỉnh sửa quota của một nhóm, hãy sử dụng tùy chọn -g ở vị trí của nó.

Thao tác này sẽ mở tệp trong trình soạn thảo văn bản mặc định của bạn, tương tự như cách crontab -e mở tệp tạm thời để bạn chỉnh sửa. Tệp sẽ trông giống như sau:

Disk quotas for user sammy (uid 1000):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/vda1                        40          0          0         13        0        0

Phần này liệt kê tên người dùng và uid, các hệ thống tệp đã bật quotas trên chúng, cũng như giới hạn và cách sử dụng dựa trên block và inode. Đặt inode-based quota sẽ giới hạn số lượng tệp và thư mục mà người dùng có thể tạo, bất kể dung lượng đĩa mà họ sử dụng. Hầu hết mọi người sẽ muốn block-based quotas, đặc biệt giới hạn việc sử dụng không gian đĩa. Đây là những gì bạn sẽ cấu hình.

Lưu ý: Khái niệm về block (khối) không được xác định rõ ràng và có thể thay đổi tùy thuộc vào nhiều yếu tố, bao gồm cả công cụ dòng lệnh nào đang báo cáo chúng. Trong bối cảnh đặt quotas trên Ubuntu, khá an toàn nếu giả sử rằng 1 block tương đương với 1 kilobyte dung lượng đĩa.

Trong danh sách trên, user sammy của bạn đang sử dụng 40 blocks hoặc 40KB dung lượng trên ổ đĩa /dev/vda1. Cả hai giới hạn softhard đều bị vô hiệu hóa với giá trị 0.

Mỗi loại quota cho phép bạn đặt cả giới hạn soft và giới hạn hard. Khi người dùng vượt quá giới hạn soft, họ vượt quá quota, nhưng họ không bị ngăn chặn ngay lập tức để tiêu thụ thêm dung lượng hoặc inodes. Thay vào đó, một số thời gian được đưa ra: người dùng - theo mặc định - có bảy ngày để sử dụng lại đĩa của họ theo giới hạn soft. Khi hết thời gian gia hạn bảy ngày, nếu người dùng vẫn vượt quá giới hạn soft thì sẽ được coi là giới hạn hard. Giới hạn hard ít được tha thứ hơn: tất cả việc tạo các block hoặc inode mới ngay lập tức bị tạm dừng khi bạn đạt đến giới hạn hard được chỉ định. Điều này hoạt động như thể đĩa hết dung lượng: ghi sẽ không thành công, các tệp tạm thời sẽ không được tạo và người dùng sẽ bắt đầu thấy các cảnh báo và lỗi trong khi thực hiện các tác vụ thông thường.

Hãy cập nhật sammy user của bạn để có block quota với giới hạn soft 100 MB và giới hạn hard 110 MB:

Disk quotas for user sammy (uid 1000):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/vda1                        40       100M       110M         13        0        0

Lưu và đóng tập tin. Để kiểm tra quota mới, bạn có thể sử dụng lệnh quota:

  1. sudo quota -vs sammy
Output
Disk quotas for user sammy (uid 1000): Filesystem space quota limit grace files quota limit grace /dev/vda1 40K 100M 110M 13 0 0

Lệnh xuất ra trạng thái quota hiện tại của bạn và cho biết rằng quota của bạn là 100M trong khi giới hạn của bạn là 110M. Điều này tương ứng với các giới hạn soft và hard tương ứng.

Lưu ý: Nếu bạn muốn các user của mình có thể kiểm tra quota của riêng chúng mà không có quyền truy cập sudo, bạn cần cấp cho họ quyền đọc các tệp quota bạn đã tạo ở Bước 4. Một cách để làm điều này là tạo nhóm users, làm cho các tệp đó có thể đọc được bởi nhóm users và sau đó đảm bảo tất cả users của bạn cũng được đặt trong nhóm.

Để tìm hiểu thêm về các quyền của Linux, bao gồm quyền sở hữu của người dùng và nhóm, vui lòng đọc Giới thiệu về Quyền của Linux

Sử dụng setquota để đặt User Quota

Không giống như edquota, setquota sẽ cập nhật thông tin quota của user của bạn trong một lệnh duy nhất mà không cần bước chỉnh sửa tương tác. Bạn sẽ chỉ định tên người dùng và các giới hạn soft và hard cho cả block- và inode-based quotas, và cuối cùng là filesystem để áp dụng quota cho:

  1. sudo setquota -u sammy 200M 220M 0 0 /

Lệnh trên sẽ tăng gấp đôi giới hạn block-based quota của sammy lên 200 megabyte và 220 megabyte. 0 0 cho các giới hạn soft và hard dựa trên inode chỉ ra rằng chúng vẫn chưa được đặt. Điều này là bắt buộc ngay cả khi bạn không đặt bất kỳ inode-based quotas nào.

Một lần nữa, hãy sử dụng lệnh quota để kiểm tra công việc của bạn:

  1. sudo quota -vs sammy
Output
Disk quotas for user sammy (uid 1000): Filesystem space quota limit grace files quota limit grace /dev/vda1 40K 200M 220M 13 0 0

Bây giờ bạn đã đặt một số quotas, hãy cùng tìm hiểu cách tạo quota report.

Bước 6: Tạo Quota Report

Để tạo báo cáo về việc sử dụng quota hiện tại cho tất cả người dùng trên một hệ thống tệp cụ thể, hãy sử dụng lệnh repquota:

  1. sudo repquota -s /
Output
*** Report for user quotas on device /dev/vda1 Block grace time: 7days; Inode grace time: 7days Space limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 1696M 0K 0K 75018 0 0 daemon -- 64K 0K 0K 4 0 0 man -- 1048K 0K 0K 81 0 0 nobody -- 7664K 0K 0K 3 0 0 syslog -- 2376K 0K 0K 12 0 0 sammy -- 40K 200M 220M 13 0 0

Trong trường hợp này, bạn đang tạo báo cáo cho / root filesystem. Lệnh -s cho biết repquota sử dụng các số có thể đọc được của con người khi có thể. Có một vài người dùng hệ thống được liệt kê, có thể không có quota được đặt theo mặc định. User sammy của bạn được liệt kê ở dưới cùng, với số lượng được sử dụng và các giới hạn soft và hard.

Cũng lưu ý Block grace time: 7days và cột grace. Nếu user của bạn đã vượt quá giới hạn soft, cột gia hạn sẽ hiển thị thời gian họ còn lại để quay lại dưới giới hạn.

Bước 7: Thiết lập cấu hình thời gian gia hạn cho mức trung bình

Bạn có thể thiết lập cấu hình khoảng thời gian mà người dùng được phép vượt quá giới hạn soft. Sử dụng lệnh setquota để làm như vậy:

  1. sudo setquota -t 864000 864000 /

Lệnh trên đặt cả thời gian gia hạn block và inode thành 864000 giây hoặc 10 ngày. Cài đặt này áp dụng cho tất cả người dùng và cả hai giá trị phải được cung cấp ngay cả khi bạn không sử dụng cả hai loại quota (block so với inode).

Lưu ý rằng các giá trị phải được chỉ định bằng giây.

Chạy lại repquota để kiểm tra xem các thay đổi có hiệu lực hay không:

  1. sudo repquota -s /
Output
Block grace time: 10days; Inode grace time: 10days . . .

Những thay đổi phải được phản ánh ngay lập tức trong đầu ra repquota.

Kết luận

Trong hướng dẫn này, bạn đã cài đặt các công cụ dòng lệnh quota, đã xác minh rằng Linux kernel của bạn có thể xử lý quota giám sát, thiết lập block-based quota cho một user và tạo báo cáo về việc sử dụng filesystem’s quota của bạn.

Phụ lục: Thông báo lỗi phổ biến liên quan đến quota

Sau đây là một số lỗi phổ biến bạn có thể gặp khi thiết lập và thao tác với filesystem quotas.

quotaon Output
quotaon: cannot find //aquota.group on /dev/vda1 [/] quotaon: cannot find //aquota.user on /dev/vda1 [/]

Đây là một lỗi bạn có thể gặp nếu bạn đã cố gắng bật quotas (sử dụng quotaon) trước khi chạy lệnh quotacheck ban đầu. Lệnh quotacheck tạo các tệp aquota hoặc quota cần thiết để bật hệ thống quota. Xem Bước 4 để biết thêm thông tin.

quotaon Output
quotaon: using //aquota.group on /dev/vda1 [/]: No such process quotaon: Quota format not supported in kernel. quotaon: using //aquota.user on /dev/vda1 [/]: No such process quotaon: Quota format not supported in kernel.

Lỗi quotaon này cho chúng tôi biết rằng kernel của bạn không hỗ trợ quotas hoặc ít nhất là không hỗ trợ phiên bản chính xác (có cả phiên bản quota_v1quota_v2). Điều này có nghĩa là các kernel module bạn cần chưa được cài đặt hoặc không được tải đúng cách. Trên Máy chủ Ubuntu, nguyên nhân có thể xảy ra nhất là sử dụng hình ảnh cài đặt bị giảm tốc độ trên máy chủ ảo dựa trên đám mây.

Nếu trường hợp này xảy ra, nó có thể được khắc phục bằng cách cài đặt gói linux-image-extra-virtual với apt. Xem Bước 2 để biết thêm chi tiết.

Nếu lỗi này vẫn còn sau khi cài đặt, hãy xem lại Bước 4. Đảm bảo rằng bạn đã sử dụng đúng các lệnh modprobe hoặc đã khởi động lại máy chủ của mình nếu đó là một lựa chọn khả thi cho bạn.

quotaon Output
quota: Cannot open quotafile //aquota.user: Permission denied quota: Cannot open quotafile //aquota.user: Permission denied quota: Cannot open quotafile //quota.user: No such file or directory

Đây là lỗi bạn sẽ gặp nếu bạn chạy quota và user hiện tại của bạn không có quyền đọc các tệp quota cho filesystem của bạn. Bạn (hoặc quản trị viên hệ thống của bạn) sẽ cần điều chỉnh các quyền đối với tệp một cách thích hợp hoặc sử dụng sudo khi chạy các lệnh yêu cầu quyền truy cập vào tệp quota.

Để tìm hiểu thêm về các quyền của Linux, bao gồm quyền sở hữu của người dùng và nhóm, vui lòng đọc Giới thiệu về Quyền của Linux.

Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly
Chia sẻ

0 câu trả lời