-
LINUX 디스크 쿼터(DISK Quota) 설정 사용 하는 방법System of Infra/Linux System 2022. 5. 26. 00:04반응형
LINUX 디스크 쿼터(DISK Quota) 설정 사용하는 방법
[root@localhost /]# fdisk -l Disk /dev/sda: 80 GiB, 85899345920 bytes, 167772160 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xbe61492f Device Boot Start End Sectors Size Id Type /dev/sda1 2048 8390655 8388608 4G 82 Linux swap / Solaris /dev/sda2 * 8390656 167772159 159381504 76G 83 Linux Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
▶ 쿼터 디스크 설정을 위해서 물리적인 디스크 10GB를 설정해 주도록 합니다. /dev/sdb=10GB 생성
[root@localhost /]# fdisk /dev/sdb Welcome to fdisk (util-linux 2.32.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0xe0721ad8. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-20971519, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, default 20971519): Created a new partition 1 of type 'Linux' and of size 10 GiB. Command (m for help): p Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xe0721ad8 Device Boot Start End Sectors Size Id Type /dev/sdb1 2048 20971519 20969472 10G 83 Linux Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.
▶ 논리적으로 용량을 사용하기 위해서 물리적인 용량 10GB를 모두 할당해 주도록 합니다. /dev/sdb1 생성
[root@localhost /]# mkfs.ext4 /dev/sdb1 mke2fs 1.44.3 (10-July-2018) Creating filesystem with 2621184 4k blocks and 655360 inodes Filesystem UUID: 08bbc046-1aa5-4bdc-ba65-bcbab594904d Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done
▶ 파일시스템의 유형을 mkfs.ext4로 ext4 타입으로 포맷 지정해주도록 합니다.
[root@localhost /]# mkdir /userhome [root@localhost /]# mount /dev/sdb1 /userhome [root@localhost /]# df -Th | grep -i userhome /dev/sdb1 ext4 9.8G 37M 9.3G 1% /userhome
▶ userhome 디렉터리를 한 개 생성 후 논리적으로 생성된 /dev/sdb1을 /userhome에 마운트 해주도록 합니다.
[root@localhost /]# cat /etc/fstab # /etc/fstab # Created by anaconda on Mon Feb 28 20:48:23 2022 # # Accessible filesystems, by reference, are maintained under '/dev/disk/'. # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info. # # After editing this file, run 'systemctl daemon-reload' to update systemd # units generated from this file. # UUID=6d75a782-7d9b-4e9e-a338-fa882a919ada / xfs defaults 0 0 UUID=ae9aeae5-2577-49e3-86d9-63db631bc9d8 swap swap defaults 0 0 /dev/sdb1 /userhome ext4 defaults 0 0
▶ 부팅 후에도 마운트가 해지 되지 않도록 /etc/fstab에 등록을 해주도록 합니다.
[root@localhost /]# useradd -d /userhome/client2 client2 [root@localhost /]# useradd -d /userhome/client3 client3 [root@localhost /]# passwd client2 client2 사용자의 비밀 번호 변경 중 새 암호: 잘못된 암호: 암호는 8 개의 문자 보다 짧습니다 새 암호 재입력: passwd: 모든 인증 토큰이 성공적으로 업데이트 되었습니다. [root@localhost /]# passwd client3 client3 사용자의 비밀 번호 변경 중 새 암호: 잘못된 암호: 암호는 8 개의 문자 보다 짧습니다 새 암호 재입력: passwd: 모든 인증 토큰이 성공적으로 업데이트 되었습니다. [root@localhost /]# cat /etc/passwd | grep -i client* client2:x:1001:1001::/userhome/client2:/bin/bash client3:x:1002:1002::/userhome/client3:/bin/bash
▶ 쿼럼 디스크를 테스트 하기 위한 유저 생성을 위해 client2, client3이라는 계정 2개를 생성해 주도록 합니다.
[root@localhost /]# cat /etc/fstab # /etc/fstab # Created by anaconda on Mon Feb 28 20:48:23 2022 # # Accessible filesystems, by reference, are maintained under '/dev/disk/'. # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info. # # After editing this file, run 'systemctl daemon-reload' to update systemd # units generated from this file. # UUID=6d75a782-7d9b-4e9e-a338-fa882a919ada / xfs defaults 0 0 UUID=ae9aeae5-2577-49e3-86d9-63db631bc9d8 swap swap defaults 0 0 /dev/sdb1 /userhome ext4 defaults,uerjquota=aquota.user,jqfmt=vfsv0 0 0
▶ 다시 /etc/fstab으로 들어가게 되면 defults, userjquota=aquota.user, jqfmt=vfsv0로 항목을 추가해주어 쿼럼 디스크로 사용하겠다는 정의를 내립니다.
[root@localhost /]# mount | grep /sdb1 /dev/sdb1 on /userhome type ext4 (rw,relatime) [root@localhost /]# mount --options remount /userhome/ [root@localhost /]# mount | grep /sdb1 /dev/sdb1 on /userhome type ext4 (rw,relatime,jqfmt=vfsv0,usrjquota=aquota.user)
▶ 기존에 마운트 되어 있던 /dev/sdb1에서 remount를 통해 다시 확인 하게 되면 /dev/sdb1 on /userhome type ext4 (rw,relatime,jqfmt=vfsv0,usrjquota=aquota.user)의 형태로 변경된 것을 확인할 수 있습니다.
[root@localhost userhome]# quotaoff -avug /dev/sdb1 [/userhome]: user quotas turned off [root@localhost userhome]# quotacheck -augmn [root@localhost userhome]# ls -ltr 합계 32 drwx------ 2 root root 16384 4월 25 20:36 lost+found drwx------ 3 client2 client2 4096 4월 25 20:41 client2 drwx------ 3 client3 client3 4096 4월 25 20:41 client3 -rw------- 1 root root 7168 4월 25 20:52 aquota.user [root@localhost userhome]# rm -rf aquota.* [root@localhost userhome]# quotacheck -augmn [root@localhost userhome]# touch aquota.user [root@localhost userhome]# touch aquota.group [root@localhost userhome]# chmod 600 aquota.user; chmod 600 aquota.group [root@localhost userhome]# quotacheck -augmn [root@localhost userhome]# quotaon -avug /dev/sdb1 [/userhome]: user quotas turned on
▶ 쿼터의 기능을 잠시 off 상태로 변경 후 quotacheck -augmn 명령어를 통해서 기능이 비활성화 되어 있는지 확인을 합니다. 이후 /userhome 디렉터리에 있는 aquota.user를 살제 해주도록 합니다. 삭제가 완료가 되었다면 다시 touch 파일을 통해서 aquota.user + aquota.group를 생성해주고 권한을 600으로 소유자만 볼 수 있도록 지정합니다. 해당 설정이 완료 되면 quota 기능을 활성화합니다.
[root@localhost userhome]# edquota -u client2 Disk quotas for user client2 (uid 1001): Filesystem blocks soft hard inodes soft hard /dev/sdb1 28 0 0 7 0 0 Disk quotas for user client2 (uid 1001): Filesystem blocks soft hard inodes soft hard /dev/sdb1 28 20480 30720 7 0 0
▶ 생성된 client2 계정에 10G로 할당된 /dev/sdb1의 용량 중에서 30MB만 쓸 수 있게 지정을 할 수 있습니다. clinet2의 계정에 soft로 20MB를 주고 hard로 30MB를 지정하였습니다.
★ 쿼터 사용자 용량 지정(MB단위)
soft: 사용자가 해당 용량을 넘어서 사용 시 경고 메시지 출력
hard: 지정된 용량 이상을 초과하여 쓸 수 없고 초과 시 최대 용량까지 사용[root@localhost /]# su - client2 [client2@localhost ~]$ pwd /userhome/client2 [client2@localhost ~]$ cp /boot/vmlinuz-4* vmlinuz-4_bk1 [client2@localhost ~]$ ls -ltr -rwxr-xr-x 1 client2 client2 7872760 4월 25 20:59 vmlinuz-4_bk1 [client2@localhost ~]$ cp /boot/vmlinuz-4* vmlinuz-4_bk2 [client2@localhost ~]$ ls -ltr -rwxr-xr-x 1 client2 client2 7872760 4월 25 20:59 vmlinuz-4_bk1 -rwxr-xr-x 1 client2 client2 7872760 4월 25 21:00 vmlinuz-4_bk2 [client2@localhost ~]$ cp /boot/vmlinuz-4* vmlinuz-4_bk3 sdb1: warning, user block quota exceeded. [client2@localhost ~]$ ls -ltr -rwxr-xr-x 1 client2 client2 7872760 4월 25 20:59 vmlinuz-4_bk1 -rwxr-xr-x 1 client2 client2 7872760 4월 25 21:00 vmlinuz-4_bk2 -rwxr-xr-x 1 client2 client2 7872760 4월 25 21:00 vmlinuz-4_bk3 [client2@localhost ~]$ cp /boot/vmlinuz-4* vmlinuz-4_bk4 sdb1: write failed, user block limit reached. cp: 'vmlinuz-4_bkr4'에 쓰는 도중 오류 발생: 디스크 할당량이 초과됨 [client2@localhost ~]$ ls -ltr -rwxr-xr-x 1 client2 client2 7872760 4월 25 20:59 vmlinuz-4_bk1 -rwxr-xr-x 1 client2 client2 7872760 4월 25 21:00 vmlinuz-4_bk2 -rwxr-xr-x 1 client2 client2 7872760 4월 25 21:00 vmlinuz-4_bk3 -rwxr-xr-x 1 client2 client2 7798784 4월 25 21:00 vmlinuz-4_bk4
▶ client2 계정을 스위칭 후에 현재 디렉터리가 /userhome/client2로 해당 디렉터리에 /boot/vmlinuz-4* vmlinuz-4_bk1~4까지 cp 명령어를 통해서 복사를 해주도록 합니다. 한 개당 약 7MB정도의 파일인데 3개까지는 정상적으로 복사가 된뒤 4개가 복사 되었을때 경고 메세지가 출력되고 파일이 한개 생성되었지만 용량이 다르고 파일 손상이 될 가능성이 높기 때문에 vmlinuz-4_bk4의 경우는 정상적인 파일이 아니라고 생각하시면 됩니다.
[client2@localhost ~]$ du -sm 30.
▶ client2의 게정에 할당된 quota 디스크 용량이 hard=30GB로 du 명령어를 통해서 확인 시 최대까지 생성된 30GB 할당이 가능한 것을 확인할 수 있습니다. 그 이상은 생성이 불가
[client2@localhost ~]$ quota Disk quotas for user client2 (uid 1001): Filesystem blocks quota limit grace files quota limit grace /dev/sdb1 30720* 20480 30720 6days 11 0 0
▶ quota 명령어를 통해서 현재 지정되어 있는 속성 값을 확인할 수 있는데 limit=30GB라는 부분이 중요하게 확인이 가능하고 grace의 경우는 30GB를 초과하여 행위를 수행 후 생성된 파일에 대해서 6일 뒤 정합성을 보장 못할 수도 있기 때문에 가급적 기한 내에 데이터 파일 백업을 수행하는 것이 좋겠습니다.
[root@localhost /]# repquota /userhome/ *** Report for user quotas on device /dev/sdb1 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 20 0 0 3 0 0 client2 +- 30720 20480 30720 6days 12 0 0 client3 -- 28 0 0 7 0 0
▶ requota 명령어를 통해서 현재 quota로 지정한 계정 중에서 사용률이 어떤 상태인지 확인을 할 수 있습니다. 현재 client3 계정의 경우 아직 미사용인 것을 확인할 수 있습니다.
[root@localhost /]# edquota -p client2 client3
▶ edquota 명령어를 사용하게 되면 client2에 할당된 30GB의 정책을 client3에게 그대로 주기 위한 명령어입니다.
[root@localhost /]# repquota /userhome/ *** Report for user quotas on device /dev/sdb1 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 20 0 0 3 0 0 client2 +- 30720 20480 30720 6days 12 0 0 client3 -- 28 20480 30720 7 0 0
▶ requota 명령어를 통해서 다시 확인하게 되면 client3에게도 30GB를 주었고 아직 용량을 사용하고 있지 않은 상태를 확인할 수 있습니다.
[root@localhost /]# su - client3 [client3@localhost ~]$ cp /boot/vmlinuz-4* vmlinuz-4_bk0 [client3@localhost ~]$ du -sm 8 . [client3@localhost ~]$ cp /boot/vmlinuz-4* vmlinuz-4_bk1 [client3@localhost ~]$ du -sm 16 . [client3@localhost ~]$ cp /boot/vmlinuz-4* vmlinuz-4_bk2 sdb1: warning, user block quota exceeded. [client3@localhost ~]$ du -sm 23 . [client3@localhost ~]$ cp /boot/vmlinuz-4* vmlinuz-4_bk3 sdb1: write failed, user block limit reached. cp: 'vmlinuz-4_bk3'에 쓰는 도중 오류 발생: 디스크 할당량이 초과됨 [client3@localhost ~]$ du -sm 30
▶ Client3 역시 약 8MB의 파일 4개를 복사하면 마지막 파일에서 디스크 할당량이 초과됨의 경고 메시지 출력 후 자신에게 할당된 30MB의 최대 용량만 사용된 것을 확인할 수 있습니다.
2022.04.26 - [System of Infra/LINUX] - LINUX LVM(Logical Volume Managemant) 구성하는 방법
2022.03.21 - [System of Infra/LINUX] - LINUX DISK 추가를 통한 파티션 생성하는 방법(1편)
2022.03.23 - [System of Infra/LINUX] - LINUX DISK 추가를 통한 파티션 생성하는 방법(2편)
PS. 포스팅의 내용은 제 기준으로 작성한 것이기 때문에 참고해서 보시면 감사하겠습니다.
포스팅 과정의 오류 및 오타 그리고 궁금한 점에 대해서는 댓글 남겨주세요.
반응형'System of Infra > Linux System' 카테고리의 다른 글
LINUX Too many open files 에러 해결하는 방법 (10) 2022.06.22 LINUX DNS(캐싱전용)서버 구축하기 (2) 2022.06.20 LINUX XRDP 서버 구축 하는 방법 [원격지 서버 3편] (0) 2022.05.19 LINUX SSH 서버 구축 하는 방법 [원격지 서버 2편] (2) 2022.05.18 LINUX Telnet 서버 구축 하는 방법 [원격지 서버 1편] (2) 2022.05.17