quota 4.06부터 외부 파일 quota(quota.user, quota.group 또는 aquota.user, aquota.group) 사용 시 경고 메시지가 출력되기 시작했고, 이를 명시적 deprecation 경고를 항상 띄우도록 강화된 시점은 quota 4.07이다.
Debian stable 기준으로는 Debian 11 (bullseye)부터, Ubuntu LTS 기준은 22.04부터, RHEL 계열은 RHEL 9 시점부터 경고가 보이기 시작했다.
외부 파일 quota가 제거된다는 공식 일정은 아직 없지만, 비정상 종료 후 quotacheck를 돌려야 하는 관리 부담, 점검/복구 과정 자체의 까다로움이 존재한다.
ext4 내장 quota의 가장 큰 장점은 파일시스템이 quota 정보의 일관성을 직접 보장한다는 점이다. ext4/XFS 등의 hidden system inode 방식에서는 보이는 quota 파일이 없고 quotacheck가 필요 없으며, quota 정보는 파일시스템이 항상 일관성 있게 유지한다.
내가 관리하고 있는 서버 중 일부는 외부 파일 방식의 quota를 사용하고 있어서, 이번 기회에 ext4 내장 quota로 전환하고자 한다.
목차
1) Debian 13 부팅 중 에러가 발생하다.

/dev/sda2: clean, 492716/15196160 files, 12066721/60783104 blocks
[FAILED] Failed to start quota.service - Initial Check File System Quotas.
[1.371902] quota-initial-check.sh[362]: Checking quotas...
[1.371981] quota-initial-check.sh[380]: quotacheck: your kernel probably supports ext4 quota feature but you are using external quota files. Please switch your filesystem to use ext4 quota feature as external quota files on ext4 are deprecated. You can enable the feature by unmounting the file system and running 'tune2fs -0 quota <device>'.
[1.372045] quota-initial-check.sh[380]: quotacheck: Quota for groups is enabled on mountpoint / so quotacheck might damage the file.
[1.372074] quota-initial-check.sh[380]: Please turn quotas off or use -f to force checking.
Debian 13에서 GRUB 이후 부팅 단계로 넘어가면 위와 같은 에러가 출력되었다. 다만 부팅 후 systemctl status --failed로 확인했을 때는, 부팅 화면에서 보였던 것과 달리 quota 관련 유닛이 실패 상태로 남아 있지 않았다.
2) 현재 quota 상태 확인
아래 명령어로 현재 quota 상태를 확인한다.
sudo quotaon -p /
sudo repquota -avug
실행하면 아래 사진처럼 나와야 한다.

3) ext4 내장 quota 전환을 위한 라이브 ISO 또는 Rescuezilla로 부팅
기존 ext4 파일시스템에 quota feature를 활성화하는 작업은 tune2fs -O quota로 오프라인 상태에서 수행하는 것이 일반적이다. 그렇기에 라이브 ISO 또는 Rescuezilla ISO로 부팅하여 작업을 진행한다.
• Ubuntu Desktop 다운로드
• Rescuezilla 다운로드
4) 디스크의 파티션 이름 확인
라이브 ISO 또는 Rescuezilla로 부팅되면 터미널을 실행하여 작업을 진행한다.
lsblk 명령어로 디스크의 파티션 이름을 확인한다.

5) 파일 시스템 검사
# 일반 디스크인 경우
e2fsck -f /dev/파티션이름
# LVM을 사용하는 경우
e2fsck -f /dev/mapper/LV이름

6) ext4 quota feature 활성화
# 일반 디스크인 경우
tune2fs -O quota /dev/파티션이름
# LVM을 사용하는 경우
tune2fs -O quota /dev/mapper/LV이름

7) 한 번 더 파일 시스템 검사
# 일반 디스크인 경우
e2fsck -f /dev/파티션이름
# LVM을 사용하는 경우
e2fsck -f /dev/mapper/LV이름
8) fstab 수정
기존 시스템을 라이브 ISO 또는 Rescuezilla에서 마운트한 다음, /etc/fstab을 수정해야 한다.
# 일반 디스크인 경우
mount /dev/파티션이름 /mnt
# LVM을 사용하는 경우
mount /dev/mapper/LV이름 /mnt
# Ubuntu ISO로 부팅한 경우
nano /mnt/etc/fstab
# Rescuezilla로 부팅한 경우
vi /mnt/etc/fstab
또는
mousepad /mnt/etc/fstab


UUID=68e2241e-7775-4844-bcbe-b07526c41515 / ext4 errors=remount-ro,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 0 1
외부 파일 기반의 quota를 사용 중이라면 usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 옵션이 들어 있을 수 있다. 이 부분을 제거하고 아래와 같이 수정하면 된다.
UUID=68e2241e-7775-4844-bcbe-b07526c41515 / ext4 errors=remount-ro 0 1
9) 기존 시스템 마운트 해제 및 재부팅
# 기존 시스템 마운트 해제
umount /mnt
# 재부팅
reboot
10) 재부팅 후 quota 작동 확인
mount | grep ' on / '
sudo quotaon -p /
sudo repquota -avug
sudo journalctl -b | grep -Ei 'quota|quotacheck'
sudo quotaon -p /를 실행했을 때group quota on / (/dev/mapper/debian-systemroot) is onuser quota on / (/dev/mapper/debian-systemroot) is onproject quota on / (/dev/mapper/debian-systemroot) is off
위처럼 나와야 한다. 모두 off로 표시된다면 ext4 quota feature 전환이 제대로 적용되지 않았을 가능성이 있으므로, 전환 절차와 fstab 설정을 다시 점검하는 것이 좋다.
11) quota.user / quota.group 또는 aquota.user / aquota.group 파일 삭제
ext4 내장 quota로 전환해도 파일 기반 quota를 사용했던 흔적이 그대로 남아 있다. 그렇기에 루트 디렉터리에 있는 quota 관련 파일을 정리해도 된다.
quota.user, quota.group 또는 aquota.user, aquota.group 파일에는 immutable 속성이 걸려 있을 수 있어서 삭제되지 않을 수 있다. lsattr로 확인하고 chattr -i로 immutable 속성을 삭제하고 rm으로 quota 관련 파일을 삭제하면 된다.
sudo lsattr /quota.user /quota.group
sudo chattr -i /quota.user /quota.group
sudo rm -f /quota.user /quota.group
또는
sudo lsattr /aquota.user /aquota.group
sudo chattr -i /aquota.user /aquota.group
sudo rm -f /aquota.user /aquota.group
12) 특정 프로그램에서 quota 설정이 풀린 경우 조치하는 방법
ext4 내장 quota로 전환한 뒤 ISPConfig에서 설정해 둔 웹사이트별 quota 값이 다시 반영되지 않는 경우가 있었다.
이는 ISPConfig에 저장된 웹사이트별 quota 값이 Linux quota에 다시 반영되지 않았기 때문이다.
이런 경우 프로그램의 Resync 등의 기능을 이용하여 quota 값을 다시 반영할 수 있다.
13) 마무리
외부 파일 기반 quota는 예상치 못한 강제 종료나 재부팅 이후 quota 데이터 불일치가 발생할 수 있고, 그 결과 부팅 과정에서 quota 관련 에러가 출력될 수 있다.
반면 ext4 내장 quota는 파일시스템 metadata 수준에서 quota 정보를 직접 관리하며, hidden inode 방식으로 저장한다. 이 방식은 외부 quota 파일을 별도로 유지하지 않으므로 quota 일관성을 더 안정적으로 유지할 수 있다.
아직도 외부 파일 기반의 quota를 사용 중이라면, ext4 내장 quota로 전환하는 것을 적극 권장한다.