ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • LINUX 디스크 쿼터(DISK Quota) 설정 사용 하는 방법
    System of Infra/Linux System 2022. 5. 26. 00:04
    반응형

    LINUX 로고이미지

    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) 구성하는 방법

     

    LINUX LVM(Logical Volume Managemant) 구성하는 방법

    LINUX LVM(Logical Volume Managemant) 구성하는 방법 [root@localhost ~]# fdisk -l Disk /dev/sda: 80 GiB, 85899345920 bytes, 167772160 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logica..

    pinetreeday.tistory.com

    2022.03.21 - [System of Infra/LINUX] - LINUX DISK 추가를 통한 파티션 생성하는 방법(1편)

     

    LINUX DISK 추가를 통한 파티션 생성하는 방법(1편)

     LINUX  DISK 추가를 통한 파티션 생성하는 방법 [root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 80G 0 disk ├─sda1 8:1 0 4G 0 part [SWAP] └─sda2 8:2 0 76G 0 par..

    pinetreeday.tistory.com

    2022.03.23 - [System of Infra/LINUX] - LINUX DISK 추가를 통한 파티션 생성하는 방법(2편)

     

    LINUX DISK 추가를 통한 파티션 생성하는 방법(2편)

    LINUX DISK 추가를 통한 파티션 생성하는 방법(1편) [root@localhost dev]# ls -ltr | grep -i sd brw-rw---- 1 root disk 8, 16 3월 20 16:44 sdb brw-rw---- 1 root disk 8, 0 3월 20 16:44 sda brw-rw---- 1 r..

    pinetreeday.tistory.com

     

    PS. 포스팅의 내용은 제 기준으로 작성한 것이기 때문에 참고해서 보시면 감사하겠습니다.

    포스팅 과정의 오류 및 오타 그리고 궁금한 점에 대해서는 댓글 남겨주세요.

    반응형

    댓글

Designed by Tistory.