Hệ thống quota cho phép hạn chế dung lượng đĩa được dùng bởi user hay group.
Để kích hoạt quota, cần phải thiết lập trong /etc/fstab, thêm vào tùy chọn quota, noquota, nouid32, grpquota, usrquota, usrjquota, grpjquota tùy theo kiểu file hệ thống trên partition, thí dụ như quota dùng cho hệ thống file ext4 từ phiên bản 3.6
Khai báo
# Thí dụ về khai báo quota trong /etc/fstab
/dev/sda3 /mnt ext4 rw,relatime,usrquota,grpquota 0 0
- quota Tạo inodes quota (inode #3: user quota, inode #4: group quota) trong superblock. Với tính năng này, quota được bật tự động khi hệ thống được mount. Các file quota (i.e., user.quota và group.quota) có trong thiêt kế quota cũ thành các inodes ẩn.
- grpquota|noquota|quota|usrquota Các option này bật các tính năng quota trên hệ thống file hỗ trợ chúng. Cần các công cụ về quota để bật và quản lý hệ thống quota
- prjquota bật project quota. Cần các công cụ về quota để bật và quản lý hệ thống quota. Option này đòi hỏi hệ thống file hổ trợ project.
- jqfmt={vfsold|vfsv0|vfsv1} thuộc hệ thống quota cũ (ext2, jqfmt=vfsold quota version 1) ext3 cũng hổ trợ journaled quotas (quota version 2). jqfmt=vfsv0 hoặc jqfmt=vfsv1 bật journaled quotas. Khi quota của filesystem được bật, journaled quotas được dùng tự động, do vậy không cần option này.
- usrjquota=aquota.user|grpjquota=aquota.group Với journaled quotas (jqfmt=vfsv0 hay jqfmt=vfsv1), các options usrjquota=aquota.user và grpjquota=aquota.group cần thiết để nói với hệ thống quota file dữ liệu cho quota nào được dùng. tell the quota system which quota database files to use. Khi quota của filesystem được bật, journaled quotas được dùng tự động, do vậy có thể bỏ qua option này.
Như vậy quota đặt trên partition, tác động đến quyền sử dụng dung lượng đĩa của user hoặc nhóm.
Quản lý quota
Quota được quản lý dựa trên 3 yếu tố
- Hard Limit Tổng dung lượng đĩa tối đa mà người dùng có thể sử dụng.
- Soft Limit Tương tự như hard limit, nhưng cho phép người dùng có thể sử dụng đĩa vượt giới hạn trong một khoảng thời gian cụ thể gọi là grace period. Khi chúng ta sử dụng vượt soft limit thì sẽ nhận được thông báo cảnh báo nhưng vẫn có thể tạo các tệp mới cho đến khi quá grace period hay đạt đến hard limit.
- Grace Period là thời gian cho phép người dùng vượt quá dung lượng đĩa được cấp phép trong soft limit.
Có thể đặt soft limit và hard limit dựa trên số block sử dụng hay số inode được dùng.
- Nếu hệ thống file cấp phát các khổi cở 1 kibibyte cho file, một khối chứa 1024 bytes liên tục dữ liệu của file. Khối sau cùng có thể được lấp đầy hoặc không, vì vậy dung lượng đĩa có thể không được thực sự dùng hết . Có thể hạn chế sử dụng đĩa qua số khối được cấp phát cho user hay dung lượng đĩa tính bằng k/m/g/t (mặc định k=KB).
- Mỗi một file chiếm ít nhất một inode để chứa thông tin về nó (permissions, owner, timestamp…), file lớn có thể sẽ cần hơn một inode. Trên thực tế, hạn chế số inode là hạn chế số lượng file của người dùng.
Cài đặt công cụ
apt install quota
Thực hiện các bước sau để thiết lập quota
- Khởi tạo quota trong /etc/fstab
- Remount partition /logical volume
- Chạy lệnh quotacheck để tạo file aquota.user/aquota.group
- Chạy lệnh setquota để đặt quota cho user
- Đặt Grace Period nếu cần
- Bật quota trên mount point bằng lệnh quotaon
# Soạn thảo /etc/fstab
...
/dev/sda3 /test ext4 rw,relatime,usrquota,grpquota 0 0
...
# Remount partition
sudo mount -o remount /dev/sda3
# Kiểm tra option quota
sudo cat /proc/mounts | grep '/dev/sda3'
# Tạo file aquota.user/aquota.group tại mountpoint
sudo quotacheck -ugc /test
# Đặt quota tối đa 200M
sudo setquota -u pi 200M 220M 0 0 /dev/sda3
# Đặt Grace Period
sudo setquota -t 864000 864000 /dev/sda3 #10 ngày=864000s
# Bật quota trên /test
sudo quotaon /test
# Sửa quota
edquota -f <device> -u <user hay group>
# Xem quota của user
quota -vs <user>
# Xem quota của user trên mountpoint
repquota -s <mountpoint or device>
Các lệnh liên quan
- quotacheck
Phát hiện quota trên đĩa và tạo file dữ liệu quota
-a: tìm trên mọi partition
-u: tìm quota của user
-g: tìm quota của group
-c: tạo file dữ liệu quota
-v: hiển thị quá trình làm việc
- edquota
Sửa cài đặt quota của user/group
-u: Sửa user quota, mặc định KB.
-g: Sửa group quota, mặc định KB.
-t: Sửa grace time
edquota -u User_name edquota -g Group_name edquota -t
- quotaon & quotaoff
Bắt đầu chức năng quota trên mount point
-u: user
-g: group
-v: display process
quotaon -ugv device_file_name hoặc mount_point quotaoff -ugv device_file_name hoặc mount_point
- quota
Xem quota của user/group
-u: user
-g: group
quota -u user_name quota -g group_name
- repquota
Xem thiết lập quota tại mount point
repquota mount_point
Quota trên thư mục
Giả sứ muốn đặt quota 200M cho userA trên thư mục folderA thuộc partition partA
Cách 1
- Tạo nhóm grp200 có quyền đọc ghi trên folderA
- Đặt quota 200M cho nhóm grp200 trên partition partA
- Cho userA vào nhóm grp200
Khi đó userA thừa hưởng quyền đọc ghi trên folderA với quota 200M
Nhược điểm: userA nếu cũng là owner thư mục B thuộc partA thì phải chia sẻ quota 200M trên cả 2 thư mục. userB nếu cũng thuộc nhóm grp200 thì cũng có quota 200M trên partA
Cách 2
- Thêm /etc/fstab 2 dòng tương tự như sau
LABEL=partA /there/partA ext4 defaults,usrquota 0 2
/there/partA/folderA/ /folderA none bind,nofail 0 2
- remount các partition
mount -a remount
- Đặt quota 200M cho userA trên mountpoint /here/partA/
quotaon /here/partA/
setquota -u userA 0 200M 0 0 /here/partA
mountpoint của partition partA được giấu ở đâu đó như /here/partA, thí dụ ứng dụng OMV giấu ở /srv/uuid-of-disk, vì không cần thao tác trên đây.
Tiếp theo mount bind một thư mục /here/partA/folderA của nó với thư mục /folderA. Hai thư mục này độc lập nhưng nội dung như nhau. Quota của userA trên thư mục /folderA thực chất là quota của userA trên partA. Cách làm rườm rà này là để tạo cơ hội có nhiều mount point của partA.
Nhược điểm: Quota của một user trên một mountpoint partA dù có biến tấu dưới dạng thư mục nào cũng là một giá trị không đổi, không thể cho userA quota trên thư mục folderA khác với quota trên thư mục folderB nếu chúng cùng thuộc partA, ngoài ra chúng còn phải chia sẻ quota của partA.
Tóm lại, trên Pi OS quota không phải là một giải pháp hoàn hảo.