Quotas đượ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. Nếu không có những giới hạn này, người dùng có thể làm đầy đĩa của máy và gây ra sự cố cho những người dùng và dịch vụ khác. Trong bài viết hôm nay, Vietnix sẽ hướng dẫn bạn cách cài đặt Filesystem Quotas trên Ubuntu 20.04
Bước 1: Thiết lập công cụ Quota để cài đặt Filesystem Quotas trên Ubuntu 20.04
Đầu tiên, bạn cần có một máy chủ Ubuntu 20.04 với tài khoản user non-root có quyền sudo. Nếu chưa có máy chủ Ubuntu, bạn có thể tham khảo các gói dịch vụ thuê VPS Việt nam tại Vietnix. Hiện tại, Vietnix đang cung cấp nhiều gói VPS tốc độ cao với cấu hình đa dạng, có hỗ trợ hệ điều hành Ubuntu và có chi phí phải chăng, chỉ từ 84.000VND/Tháng.
Để cài đặt và kiểm tra quotas, trước tiên bạn cần thiết lập công cụ dòng lệnh quota bằng cách sử dụng apt
. Trước tiên hãy cập nhật package list, sau đó cài đặt package:
sudo apt update
sudo apt install quota
Bạn có thể kiểm tra các công cụ đã được cài đặt hay chưa bằng cách chạy lệnh quota
và trích xuất thông tin của version đó:
quota --version
Output
Quota utilities version 4.05.
. . .
Tùy theo phiên bản bạn đang sử dụng mà output sẽ hiện thị số version khác nhau.
Tiếp theo, hãy đảm bảo rằng bạn có các kernel module phù hợp để kiểm tra quotas.
Bước 2: Thiết lập Quota Kernel Module
Nếu bạn đang sử dụng virtual server cloud-based, thiết lập 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 module quota_v1
và quota_v2
trong thư mục /lib/modules/...
:
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 kernel version – được highlight trong đường dẫn file ở trên – vì bạn sẽ cần nó trong bước sau. Output có thể hơi khác, nhưng miễn là có hai module được liệt kê như trên, bạn có thể bỏ qua phần còn lại và chuyển sang bước tiếp theo.
Nếu bạn không nhận được kết quả nào từ lệnh trên, hãy cài đặt package linux-image-extra-virtual
:
sudo apt install linux-image-extra-virtual
Thao tác này sẽ cung cấp các kernel module cần thiết để triển khai quota. Chạy lại lệnh find
trước đó để chắc chắn rằng quá trình cài đặt đã thành công.
Tiếp theo, bạn sẽ cần cập nhật các tùy chọn mount
filesystem của bạn để bật quota trên filesystem root của bạn.
Bước 3: Cập nhật tùy chọn Mount Filesystem
Để kích hoạt quota trên một filesystem cụ thể, bạn cần gắn nó với một vài 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 mục nhập của filesystem trong file cấu hình /etc/fstab. Mở file nano hoặc bằng text editor:
sudo nano /etc/fstab
Nội dung của file này sẽ ra như sau:
LABEL=cloudimg-rootfs / ext4 defaults 0 0
LABEL=UEFI /boot/efi vfat defaults 0 0
File fstab
này là từ một virtual server. Máy tính để bàn hoặc laptop có thể sẽ hiển thị file fstab
khác nhau, nhưng trong hầu hết các trường hợp, bạn sẽ có một /
hoặc filesystem root đạ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í thiết bị được gắn kết, loại file system và các tùy chọn gắn kết được sử dụng. Số 0 đầu tiên cho biết sẽ không có bản sao lưu nào được thực hiện và số 0 thứ hai cho biết sẽ không có quá trình kiểm tra lỗi nào được thực hiện khi khởi động.
Trỏ đến filesystem root bằng cách thay thế tùy chọn defaults
bằng các lựa chọn được đánh dấu sau:
LABEL=cloudimg-rootfs / ext4 usrquota,grpquota 0 0
. . .
Thay đổi này sẽ cho phép chúng ta kích hoạt cả quota dựa trên người dùng ( usrquota
) và dựa trên nhóm ( grpquota
) trên filesystem. Nếu bạn chỉ cần một trong hai, bạn có thể bỏ tùy chọn mà bạn không cần. Nếu dòng fstab
của bạn đã có một số tùy chọn được liệt kê thay vì defaults
, thì bạn nên thêm các tùy chọn mới vào cuối bất kỳ tùy chọn nào đã có, bạn nên phân tách tất cả các tùy chọn bằng dấu phẩy và không chứa dấu cách.
Remount lại filesystem để các tùy chọn mới có hiệu lực:
sudo mount -o remount /
Ở đây, flag-o
được sử dụng để pass tùy chọn remount
.
Lưu ý: Hãy đảm bảo rằng không có khoảng cách giữa các tùy chọn được liệt kê trong file /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
, hãy mở lại file fstab
, sửa mọi lỗi và lặp lại lệnh mount
một lần nữa.
Bạn có thể kiểm tra các tùy chọn mới đã được sử dụng để gắn kết filesystem bằng cách xem file /proc/mounts
. Ở đây, sử dụng grep
để chỉ hiển thị mục filesystem root trong file đó:
cat /proc/mounts | grep ' / '
Output
/dev/vda1 / ext4 rw,relatime,quota,usrquota,grpquota 0 0
Bạn hãy lưu ý hai tùy chọn vừa được chỉ định.
Bước 4: Kích hoạt Quotas
Trước khi kích hoạt quota system, chạy lệnh quotacheck
như sau:
sudo quotacheck -ugm /
Lệnh này tạo các file /aquota.user
và /aquota.group
. Các file này chứa thông tin về giới hạn và cách sử dụng filesystem và chúng cần có sẵn 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 file quota dựa trên người dùng sẽ được tạo.g
: Cho biết rằng file quota dựa trên nhóm sẽ được tạo.m
: Tắt tính năng sắp xếp lại filesystem dưới dạng read-only trong khi thực hiện kiểm đếm quota ban đầu. Việc sắp xếp lại filesystem dưới dạng read-only sẽ cho kết quả chính xác hơn trong trường hợp người dùng đang cố muốn lưu file trong suốt quá trình, 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 quota dựa trên người dùng hoặc nhóm, bạn có thể bỏ qua tùy chọn quotacheck
tương ứng.
Bạn có thể kiểm tra các file thích hợp đã được tạo bằng cách liệt kê ra thư mục root:
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 chọn các tùy chọn u
hoặc g
trong lệnh quotacheck
thì file tương ứng sẽ bị thiếu.
Tiếp theo, bạn sẽ phải thêm các quota module vào kernel Linux. Ngoài ra, bạn có thể khởi động lại server của mình để hoàn thành tác vụ tương tự. Nếu không thì thêm bằng phương pháp thủ công, thay thế phiên bản kernel được đánh dấu bằng phiên bản mà bạn tìm thấy trong Bước 2:
sudo modprobe quota_v1 -S 5.4.0-99-generic
sudo modprobe quota_v2 -S 5.4.0-99-generic
Kích hoạt quota system:
sudo quotaon -v /
quotaon Output
/dev/vda1 [/]: group quotas turned on
/dev/vda1 [/]: user quotas turned on
Bước 5: Định cấu hình Quotas cho người dùng
Có một số cách bạn có thể cài đặt quotas cho người dùng hoặc nhóm. Tại đây, Vietnix sẽ giới thiệu cho bạn hai cách cài đặt quotas bằng hai lệnh edquota
và setquota
.
Sử dụng edquota
để cài đặt quotas cho người dùng
Sử dụng lệnh edquota
để chỉnh sửa quotas. Chỉnh sửa quotas của người dùng vietnix mẫu như sau:
sudo edquota -u vietnix
Tùy chọn -u
chỉ định rằng đây là quotas user
mà bạn sẽ chỉnh sửa. Thay vào đó, nếu bạn muốn chỉnh sửa quotas của nhóm, hãy sử dụng tùy chọn -g
ở vị trí đó.
Thao tác này sẽ mở một file trong text editor mặc định của bạn, tương tự như cách crontab -e
mở một file tạm thời để bạn chỉnh sửa. File sẽ hiển thị như sau:
Disk quotas for user vietnix (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/vda1 40 0 0 13 0 0
Thao tác này liệt kê tên người dùng và uid
, các filesystem có quotas được bật cũng như việc sử dụng và giới hạn dựa trên block– và inode – . Đặt quotas dựa trên inode sẽ giới hạn số lượng file và thư mục mà người dùng có thể tạo, bất kể dung lượng ổ đĩa họ sử dụng. Hầu hết mọi người sẽ muốn quotas dựa trên block, giới hạn cụ thể việc sử dụng dung lượng ổ đĩa.
Lưu ý: Khái niệm về block không rõ ràng, có thể thay đổi tùy thuộc vào nhiều yếu tố như công cụ dòng lệnh nào đang report chúng. Trong danh sách trên, người dùng vietnix của bạn đang sử dụng 40 block hoặc 40KB dung lượng trên ổ đĩa /dev/vda1
. Cả hai giới hạn soft
và hard
đều bị vô hiệu hóa với một giá trị 0
.
Mỗi loại quotas 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 sẽ vượt quá quotas, nhưng người dùng không bị chặn ngay lập tức về việc tiêu tốn thêm dung lượng hoặc inode. Thay vào đó, một số thời hạn sẽ được đưa ra.
Theo mặc định, người dùng có bảy ngày để lấy lại quyền sử dụng đĩa dưới giới hạn soft. Khi kết thúc 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ì nó sẽ được coi là giới hạn hard.
Giới hạn hard sẽ bị siết chặt hơn, tất cả việc tạo block hoặc inode mới sẽ bị tạm dừng ngay lập tức khi bạn đạt đến giới hạn hard được cho phép. Điều này có nghĩa là đĩa hoàn toàn hết dung lượng bạn sẽ không thể ghi thêm được bất cứ thứ gì, các file 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 người dùng vietnix của bạn để có quotas block với giới hạn soft 100 MB và giới hạn hard 110 MB:
Disk quotas for user vietnix (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 quotas mới, bạn có thể sử dụng lệnh quota
:
sudo quota -vs vietnix
Output
Disk quotas for user vietnix (uid 1000):
Filesystem space quota limit grace files quota limit grace
/dev/vda1 40K 100M 110M 13 0 0
Output cho biết trạng thái quotas hiện tại của bạn và cho biết rằng quotas 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 muốn người dùng tự kiểm tra quotas mà không cần quyền sudo
, bạn cần cấp quyền cho người dùng đọc được file quotas đã tạo ở Bước 4. Để thực hiện, bạn tạo nhóm users
và làm cho file đó có thể đọc được trong nhóm user
s, sau đó đảm bảo tất cả người dùng của bạn được đặt trong nhóm.
Sử dụng setquota
để cài đặt quotas cho người dùng
Không giống như edquota
, setquota
sẽ cập nhật thông tin quotas của người dùng 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ả quotas dựa trên block và inode, và cuối cùng là filesystem để áp dụng quotas:
sudo setquota -u vietnix 200M 220M 0 0 /
Lệnh trên sẽ tăng gấp đôi giới hạn quotas dựa trên block của vietnix thành 200 megabyte và 220 megabyte. Giới hạn hard và soft 0 0
dựa trên inode cho biết rằng chúng vẫn chưa được cài đặt. Điều này là bắt buộc ngay cả khi bạn không đặt bất kỳ quotas nào dựa trên inode.
Dùng lệnh quota
để kiểm tra lại:
sudo quota -vs vietnix
Output
Disk quotas for user vietnix (uid 1000):
Filesystem space quota limit grace files quota limit grace
/dev/vda1 40K 200M 220M 13 0 0
Bước 6: Tạo báo cáo quotas
Để tạo báo cáo về việc sử dụng quotas hiện tại cho tất cả người dùng trên một filesystem cụ thể, hãy sử dụng lệnh repquota
:
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
vietnix -- 40K 200M 220M 13 0 0
Trong trường hợp này, bạn đang tạo báo cáo cho filesystem root /
. Lệnh -s
cho biết repquota
sử dụng human-readable numbers khi có thể. Danh sách trên đã liệt kê ra một vài người dùng hệ thống, có thể không có quotas được đặt theo mặc định. Người dùng vietnix được liệt kê ở dưới cùng, với số lượng được sử dụng và giới hạn soft và hard.
Lưu ý chú thích Block grace time: 7days
và cột grace
. Nếu người dùng của bạn vượt quá giới hạn soft, cột grace
sẽ hiển thị lượng thời gian còn lại để họ không vượt quá giới hạn.
Bước 7: Định cấu hình Grace Period cho việc vượt mức quotas
Có thể 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 bằng cách sử dụng lệnh setquota
:
sudo setquota -t 864000 864000 /
Lệnh trên cài đặ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à phải cung cấp cả hai giá trị ngay cả khi bạn không sử dụng cả hai loại quotas (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 không:
sudo repquota -s /
Output
Block grace time: 10days; Inode grace time: 10days
. . .
Những thay đổi sẽ được hiển thị ngay lập tức trong output repquota
.
Một số lỗi thường gặp khi thiết lập quotas
Sau đây là một số lỗi phổ biến mà bạn có thể gặp khi thiết lập và thao tác quotas cho filesystem.
quotaon Output
quotaon: cannot find //aquota.group on /dev/vda1 [/]
quotaon: cannot find //aquota.user on /dev/vda1 [/]
Đây là lỗi mà bạn có thể gặp phải nếu cố gắng bật quotas (bằng cách sử dụng quotaon
) trước khi chạy lệnh quotacheck
. Lệnh quotacheck
tạo các file aquota
hoặc quota
cần thiết để bật hệ thống quota system. Xem lại 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 biết kernel không hỗ trợ quotas hoặc ít nhất là không hỗ trợ đúng phiên bản (có cả phiên bản quota_v1
và quota_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 tải không đúng cách. Trên Ubuntu Server, nguyên nhân xảy ra rất có thể là do sử dụng hình ảnh cài đặt được pared-down trên virtual server cloud-based.
Nếu bạn gặp trường hợp này, bạn có thể khắc phục bằng cách cài đặt package linux-image-extra-virtual
có 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.
quota 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ẽ thấy nếu bạn chạy quota
và người dùng hiện tại của bạn không có quyền đọc các file 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 quyền của file 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 file quota.
Lời kết
Như vậy, qua những bước hướng dẫn trên bạn đã có thể biết cách cài đặt Filesystem Quotas trên Ubuntu 20.04. Nếu có bất kỳ thắc mắc nào trong quá trình thao tác, bạn có thể để lại bình luận bên dưới để được hỗ trợ thêm.