ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • LOCAL STORAGE ADMINISTRATION // 로컬 디스크 관리
    IoT 과정 2017. 7. 19. 10:12

    물리적으로 디스크 파티션 나누고, 디스크 사용하기전 파일시스템(ext 2/3/4, xfs)으로  포맷하는 법

    INTRODUCTION

    lsscsi 확인
    # lsscsi


    fdisk & gdisk 로 파티션 나누기

    fdisk : DOS/MBR 스타일의 파티션 테이블이고 1983년에 개발되었고 최대 2TB 디스크에 대해 적합하다.
    gdisk : fdisk 와 UI는 같지만 GPT 파티션 테이블 스타일로 동작한다. MBR파티션 테이블은 GPT 테이블로 변경가능하다.

    파티션 관련 명령어

    partprobe, partx, addpart, delpart 이런 명령어들이 동작하지 않으면 재부팅이 필요할 수 도 있다.


    fdisk 사용하기

    # lsscsi 디스크를 확인한 후 fdisk로 DOS스타일 파티션 테이블을 생성할 것이다.

    # lsscsi
    [2:0:0:0]    disk    QEMU     QEMU HARDDISK    1.5.  /dev/sda
    [2:0:0:1]    disk    QEMU     QEMU HARDDISK    1.5.  /dev/sdd
    [2:0:0:2]    disk    QEMU     QEMU HARDDISK    1.5.  /dev/sdc
    [2:0:0:3]    disk    QEMU     QEMU HARDDISK    1.5.  /dev/sdb
    # fdisk /dev/sda
    Welcome to fdisk (util-linux 2.23.2).

    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
    Building a new DOS disklabel with disk identifier 0xe4bd0e5f.

    Command (m for help): p

    Disk /dev/sda: 3221 MB, 3221225472 bytes, 6291456 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
    Disk label type: dos
    Disk identifier: 0xe4bd0e5f

       Device Boot      Start         End      Blocks   Id  System

    Command (m for help): n
    Partition type:
       p   primary (0 primary, 0 extended, 4 free)
       e   extended


    # primary 파티션은 4개 이상 놔눌 수 없다. MBR 은 최대 4개의 포인터를 가질 수 있다. 더 파티션을 놔누고 싶다면 extended형을 추가해서 그 아래에 logical partition을 생성할 수 있다.
      MBR
    |_____primary
    |_____primary
    |_____primary
    |_____extended
             |______logical
             |______logical ...생략...

    # 계속해서 파티션을 생성해보자, 섹터는 2048 부터 시작한다. 그 이전은 MBR 영역이다. 디폴트 섹터를 사용했다.

    Select (default p): p
    Partition number (1-4, default 1): 1
    First sector (2048-6291455, default 2048):     
    Using default value 2048
    Last sector, +sectors or +size{K,M,G} (2048-6291455, default 6291455): +1G
    Partition 1 of type Linux and of size 1 GiB is set

    # 다시 print를 수행해보니 파티션 정보가 제대로 메모리에 올라온것을 확인했다. 이제 w 명령어를 통해 디스크에 써보자.

    Command (m for help): p

    Disk /dev/sda: 3221 MB, 3221225472 bytes, 6291456 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
    Disk label type: dos
    Disk identifier: 0xe4bd0e5f

       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1            2048     2099199     1048576   83  Linux

    Command (m for help): w
    The partition table has been altered!

    Calling ioctl() to re-read partition table.
    Syncing disks.


    # 잘 수행 되었는지 확인

    # fdisk -l /dev/sda

    Disk /dev/sda: 3221 MB, 3221225472 bytes, 6291456 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
    Disk label type: dos
    Disk identifier: 0xe4bd0e5f

       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1            2048     2099199     1048576   83  Linux


    # 위와 같이 extended 파티션을 만든뒤 (용량은 디폴트로 해 끝까지 사용)


    # fdisk /dev/sda
    Welcome to fdisk (util-linux 2.23.2).

    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.


    Command (m for help): n
    Partition type:
       p   primary (1 primary, 1 extended, 2 free)
       l   logical (numbered from 5)
    Select (default p): l
    Adding logical partition 5
    First sector (2101248-6291455, default 2101248):
    Using default value 2101248
    Last sector, +sectors or +size{K,M,G} (2101248-6291455, default 6291455): +500M
    Partition 5 of type Linux and of size 500 MiB is set

    Command (m for help): p

    Disk /dev/sda: 3221 MB, 3221225472 bytes, 6291456 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
    Disk label type: dos
    Disk identifier: 0x711092ee

       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1            2048     2099199     1048576   83  Linux
    /dev/sda2         2099200     6291455     2096128    5  Extended
    /dev/sda5         2101248     3125247      512000   83  Linux

    Command (m for help): w
    The partition table has been altered!

    Calling ioctl() to re-read partition table.
    Syncing disks.

    # 디바이스 파일이 잘 만들어졌는지 확인해보자. 그뒤 파티션을 부팅없이 로드할 수 있게  partprobe 명령어를 사용한다.

    # ls -l /dev/sda*
    brw-rw----. 1 root disk 8, 0 Jul 19 10:59 /dev/sda
    brw-rw----. 1 root disk 8, 1 Jul 19 10:59 /dev/sda1
    brw-rw----. 1 root disk 8, 2 Jul 19 10:59 /dev/sda2
    brw-rw----. 1 root disk 8, 5 Jul 19 10:59 /dev/sda5
    # partprobe /dev/sda


    # 위와 같이 한번더 로지컬 파티션을 만들어 준 뒤, 삭제해보자. 삭제할 때 주의점은 fdisk로 생성된 테이블은 파티션이 연속적인 공간이여야하므로, 용량이 부족해서 파티션을 삭제할 때 삭제하고 난뒤 그 용량만큼은 반드시 연속된 파티션 공간을 생성할 수 있게 만들어줘야한다.

    # fdisk /dev/sda
    Welcome to fdisk (util-linux 2.23.2).

    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.


    Command (m for help): d
    Partition number (1,2,5,6, default 6): 6
    Partition 6 is deleted

    Command (m for help): p

    Disk /dev/sda: 3221 MB, 3221225472 bytes, 6291456 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
    Disk label type: dos
    Disk identifier: 0x711092ee

       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1            2048     2099199     1048576   83  Linux
    /dev/sda2         2099200     6291455     2096128    5  Extended
    /dev/sda5         2101248     3125247      512000   83  Linux

    Command (m for help): w
    The partition table has been altered!

    Calling ioctl() to re-read partition table.
    Syncing disks.


    gdisk 로 GPT 파티션 리사이징하기

    # LUN이 GPT를 사용하고, 최근 디스크 용량이 확장되었을 때 사용가능하다. 나중에 그럴일이 있다면 책을 참고하고 패스


    parted로 디스크 파티션하기

    # GPT, MBR을 포함하여 많은 파티션 테이블 형식을 지원한다. 명령어 즉시 적용되기 때문에 조심.

    # parted /dev/sdb
    GNU Parted 3.1
    Using /dev/sdb
    Welcome to GNU Parted! Type 'help' to view a list of commands.
    (parted) help
      align-check TYPE N                        check partition N for TYPE(min|opt)
            alignment
      help [COMMAND]                           print general help, or help on
            COMMAND
      mklabel,mktable LABEL-TYPE               create a new disklabel (partition
            table)
      mkpart PART-TYPE [FS-TYPE] START END     make a partition
      name NUMBER NAME                         name partition NUMBER as NAME
      print [devices|free|list,all|NUMBER]     display the partition table,
            available devices, free space, all found partitions, or a particular
            partition
      quit                                     exit program
      rescue START END                         rescue a lost partition near START
            and END
      rm NUMBER                                delete partition NUMBER
      select DEVICE                            choose the device to edit
      disk_set FLAG STATE                      change the FLAG on selected device
      disk_toggle [FLAG]                       toggle the state of FLAG on selected
            device
      set NUMBER FLAG STATE                    change the FLAG on partition NUMBER
      toggle [NUMBER [FLAG]]                   toggle the state of FLAG on partition
            NUMBER
      unit UNIT                                set the default unit to UNIT
      version                                  display the version number and
            copyright information of GNU Parted
    (parted) p                                                               
    Error: /dev/sdb: unrecognised disk label
    Model: QEMU QEMU HARDDISK (scsi)                                         
    Disk /dev/sdb: 3221MB
    Sector size (logical/physical): 512B/512B
    Partition Table: unknown
    Disk Flags:


    # 파티션 테이블이 없으므로, 라벨을 생성해보자. msdos 는 MBR이다. 또 gpt로 바꿔보았다.

    (parted) mklabel msdos
    (parted) p                                                               
    Model: QEMU QEMU HARDDISK (scsi)
    Disk /dev/sdb: 3221MB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    Disk Flags:

    Number  Start  End  Size  Type  File system  Flags

    (parted) mklabel gpt
    Warning: The existing disk label on /dev/sdb will be destroyed and all data on
    this disk will be lost. Do you want to continue?
    Yes/No? y                                                                
    (parted) p                                                               
    Model: QEMU QEMU HARDDISK (scsi)
    Disk /dev/sdb: 3221MB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Disk Flags:

    Number  Start  End  Size  File system  Name  Flags


    # 파티션을 생성해보자. 시작용량을 0으로 줬으나, GPT 영역을 제외하고 준다. 하나 더 생성해보았다. 1G에서부터 100%, 즉 나머지 모든 공간을 준다

    (parted) mkpart primary 0 1G
    Warning: The resulting partition is not properly aligned for best performance.
    Ignore/Cancel? i
    (parted) p                                                               
    Model: QEMU QEMU HARDDISK (scsi)
    Disk /dev/sdb: 3221MB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Disk Flags:

    Number  Start   End     Size    File system  Name     Flags
     1      17.4kB  1000MB  1000MB               primary

    (parted) mkpart primary 1G 100%
    (parted) p                                                               
    Model: QEMU QEMU HARDDISK (scsi)
    Disk /dev/sdb: 3221MB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Disk Flags:

    Number  Start   End     Size    File system  Name     Flags
     1      17.4kB  1000MB  1000MB               primary
     2      1000MB  3220MB  2220MB               primary

    # 디스크에 이름을 줘보자. 이름은 사람한테 더 이해를 주려고 변경한다. 대부분의 명령어는 앞의 디스크 넘버를 이용한다.

    (parted) name 1 filesystem
    (parted) name 2 oracle_fs
    (parted) p                                                               
    Model: QEMU QEMU HARDDISK (scsi)
    Disk /dev/sdb: 3221MB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Disk Flags:

    Number  Start   End     Size    File system  Name        Flags
     1      17.4kB  1000MB  1000MB               filesystem
     2      1000MB  3220MB  2220MB               oracle_fs

    # q를 입력하고 나온뒤 확인해보자. 메이저 번호, 마이너 번호가 나오는데. 메이저 번호는 드라이버 정보, 식별정보는 마이너 번호이다.

    # ll /dev/sdb*                                                           
    brw-rw----. 1 root disk 8, 16 Jul 19 11:23 /dev/sdb
    brw-rw----. 1 root disk 8, 17 Jul 19 11:23 /dev/sdb1
    brw-rw----. 1 root disk 8, 18 Jul 19 11:23 /dev/sdb2
    # fdisk -l /dev/sdb
    WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

    Disk /dev/sdb: 3221 MB, 3221225472 bytes, 6291456 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
    Disk label type: gpt


    #         Start          End    Size  Type            Name
     1           34      1953125  953.7M  Microsoft basic filesystem
     2      1953792      6289407    2.1G  Microsoft basic oracle_fs


    파티션을 나눴으니 파일 시스템을 생성하자(포맷하자)

    포맷하기 전에 이론수업 잠깐


    1) super block : file system 정보 ( file system 종류, 크기, 사용량, avail, 속성, inode table 등..)

    # 명령어 df -hT를 통해 super block이 하는 일을 살펴보자. h option : human readable, T: Type. tmpfs는 실제로 존재하는 디스크가 아닌 메모리. /sys, /proc 등...

    # df -hT
    Filesystem          Type      Size  Used Avail Use% Mounted on
    /dev/mapper/cl-root xfs        27G  1.1G   26G   4% /
    devtmpfs            devtmpfs  909M     0  909M   0% /dev
    tmpfs               tmpfs     920M     0  920M   0% /dev/shm
    tmpfs               tmpfs     920M  8.5M  912M   1% /run
    tmpfs               tmpfs     920M     0  920M   0% /sys/fs/cgroup
    /dev/vda1           xfs      1014M  141M  874M  14% /boot
    tmpfs               tmpfs     184M     0  184M   0% /run/user/0


    2) inode-table : 파일 속성
    inum | type | permission | links | owner | group | size | timestamp (m,a, c) | address (physical)
       #       file      600            1       root      root     1024     0 : 0 : 0                      블럭주소
       #       block   600            1      root       root     disk   major#  minor# 0:0:0:    장치주소


    3) 디렉토리의 역할은 filename의 inode number를 가지고있다.


    파일시스템의 종류
    ex{2,3,4} : ext4는 Inodes의 크기에 제한이있다. 따라서 파일 갯수에 제한이 있다. 튜닝포인트가 많다. 동적확장 / 축소

    xfs
    RHEL8 ; 기본, 최적화, 파일하나 8엑사 & 파일시스템 (16엑사) inode 동적확장 축소


    # 파일 시스템을 만들어보았다.

    # mkfs -t ext4 /dev/sda1
    mke2fs 1.42.9 (28-Dec-2013)
    Discarding device blocks: done                           
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    Stride=0 blocks, Stripe width=0 blocks
    65536 inodes, 262144 blocks
    13107 blocks (5.00%) reserved for the super user
    First data block=0
    Maximum filesystem blocks=268435456
    8 block groups
    32768 blocks per group, 32768 fragments per group
    8192 inodes per group
    Superblock backups stored on blocks:
        32768, 98304, 163840, 229376

    Allocating group tables: done                           
    Writing inode tables: done                           
    Creating journal (8192 blocks): done
    Writing superblocks and filesystem accounting information: done

    # mkfs.xfs /dev/sda5
    meta-data=/dev/sda5              isize=512    agcount=4, agsize=32000 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0, sparse=0
    data     =                       bsize=4096   blocks=128000, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal log           bsize=4096   blocks=855, version=2
             =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0


    마운트하기

    # 디스크를 마운트하기 위해 /etc/fstab 에서 작성한다. 이름이 sda, sdb 등 은 시스템은 바뀌는 경우가 있으므로  UUID로 작성한다. 이런 상황을 만들어보기위해 /etc/fstab 이름으로 작성한 뒤 마운트시키고, 그 뒤 poweroff 후 vm 매니저에서 sda를 빼주고 다시 부팅해본다.


    # mkfs.xfs /dev/sdb1
    meta-data=/dev/sdb1              isize=512    agcount=4, agsize=61034 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0, sparse=0
    data     =                       bsize=4096   blocks=244136, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal log           bsize=4096   blocks=855, version=2
             =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    # mkdir /test
    # mount /dev/sdb1 /test
    # cp /usr/bin/a* /test/
    # ls /test
    addr2line  apropos  arch  aserver  aulastlog  auvirt
    alias      ar       as    aulast   ausyscall  awk
    #
    # /etc/fstab
    # Created by anaconda on Mon Jul 17 12:18:03 2017
    #
    # 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
    #
    /dev/mapper/cl-root     /                       xfs     defaults        0 0
    UUID=372ce9fb-1903-4c73-8316-7cf9a50358fc /boot                   xfs     defaults        0 0
    /dev/mapper/cl-swap     swap                    swap    defaults        0 0
    /dev/sdb1       /test   xfs                     defaults   0  1    

    # umount /test
    # mount /test

    # poweroff


    # 부팅은 완료되지 않고, 1m 30s 정도 기다리다가 emergency 모드로 들어온다. sdb를 xfs로 마운트 시켜야하는데 기존의 sdc가 sdb로 바뀌었으니 xfs 파일시스템도 아닌데 마운트시키려니 안된다. 이럴경우가 있으니  /etc/fstab 에서 UUID로 써보자.

    # lsblk -f
    NAME        FSTYPE      LABEL UUID                                   MOUNTPOINT
    sda                                                                 
    ├─sda1      xfs               e4ece575-d12d-4ba2-91f5-50875d1fae68  
    └─sda2                                                              
    sdb                                                                 
    sdc                                                                 
    vda                                                                 
    ├─vda1      xfs               372ce9fb-1903-4c73-8316-7cf9a50358fc   /boot
    └─vda2      LVM2_member       RZ8k6v-wAFn-q1tH-iEng-tZii-OCw3-uim3Z2
      ├─cl-root xfs               7618555f-1b64-453d-8ce3-42f14d58e395   /
      └─cl-swap swap              121e58e2-8f0d-40b0-9591-9d7bb5b2e56a   [SWAP]


    #
    # /etc/fstab
    # Created by anaconda on Mon Jul 17 12:18:03 2017
    #
    # 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
    #
    /dev/mapper/cl-root     /                       xfs     defaults        0 0
    UUID=372ce9fb-1903-4c73-8316-7cf9a50358fc /boot                   xfs     defaults        0 0
    /dev/mapper/cl-swap     swap                    swap    defaults        0 0
    UUID=e4ece575-d12d-4ba2-91f5-50875d1fae68       /test   xfs                     defaults   0  1
    # mount -a
    # blkid
    /dev/mapper/cl-root: UUID="7618555f-1b64-453d-8ce3-42f14d58e395" TYPE="xfs"
    /dev/vda2: UUID="RZ8k6v-wAFn-q1tH-iEng-tZii-OCw3-uim3Z2" TYPE="LVM2_member"
    /dev/vda1: UUID="372ce9fb-1903-4c73-8316-7cf9a50358fc" TYPE="xfs"
    /dev/mapper/cl-swap: UUID="121e58e2-8f0d-40b0-9591-9d7bb5b2e56a" TYPE="swap"
    /dev/sda1: UUID="e4ece575-d12d-4ba2-91f5-50875d1fae68" TYPE="xfs" PARTLABEL="filesystem" PARTUUID="3ba0731a-d25e-4b7b-b23a-4ff1d8c6241d"
    /dev/sda2: PARTLABEL="oracle_fs" PARTUUID="0371f8a4-e8c5-4171-a306-d2863df1e598"



    # 다른 파티션에도 파일시스템을 한 번 만들어보자. 마운트 하지 않는다면, kernel 은 그 디렉토리를 찾아볼 수 없다. 그 경우를 확인한뒤 마운트를 한 뒤 다시 확인해보자.


    # ll /dev/sda*
    brw-rw----. 1 root disk 8, 0 Jul 19 12:36 /dev/sda
    brw-rw----. 1 root disk 8, 1 Jul 19 12:36 /dev/sda1
    brw-rw----. 1 root disk 8, 2 Jul 19 12:36 /dev/sda2
    # mkfs.ext4 /dev/sda2
    mke2fs 1.42.9 (28-Dec-2013)
    Discarding device blocks: done                           
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    Stride=0 blocks, Stripe width=0 blocks
    135728 inodes, 541952 blocks
    27097 blocks (5.00%) reserved for the super user
    First data block=0
    Maximum filesystem blocks=555745280
    17 block groups
    32768 blocks per group, 32768 fragments per group
    7984 inodes per group
    Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

    Allocating group tables: done                           
    Writing inode tables: done                           
    Creating journal (16384 blocks): done
    Writing superblocks and filesystem accounting information: done

    # df
    Filesystem          1K-blocks    Used Available Use% Mounted on
    /dev/mapper/cl-root  28289540 1131296  27158244   4% /
    devtmpfs               930000       0    930000   0% /dev
    tmpfs                  941908       0    941908   0% /dev/shm
    tmpfs                  941908    8608    933300   1% /run
    tmpfs                  941908       0    941908   0% /sys/fs/cgroup
    /dev/sda1              973124   34016    939108   4% /test
    /dev/vda1             1038336  143476    894860  14% /boot
    tmpfs                  188384       0    188384   0% /run/user/0

    # mount /dev/sda2 /yohan
    # df -hT
    Filesystem          Type      Size  Used Avail Use% Mounted on
    /dev/mapper/cl-root xfs        27G  1.1G   26G   4% /
    devtmpfs            devtmpfs  909M     0  909M   0% /dev
    tmpfs               tmpfs     920M     0  920M   0% /dev/shm
    tmpfs               tmpfs     920M  8.5M  912M   1% /run
    tmpfs               tmpfs     920M     0  920M   0% /sys/fs/cgroup
    /dev/sda1           xfs       951M   34M  918M   4% /test
    /dev/vda1           xfs      1014M  141M  874M  14% /boot
    tmpfs               tmpfs     184M     0  184M   0% /run/user/0
    /dev/sda2           ext4      2.0G  6.3M  1.9G   1% /yohan


    # 확인했다면 다음부팅에도 마운트 할 수 있도록 /etc/fstab 에서도 작성해주자. 잘 작성되었는지 확인하기 위해 mount -a 를 사용한다. 그런데 mount -a 명령어는 마운트된

    #
    # /etc/fstab
    # Created by anaconda on Mon Jul 17 12:18:03 2017
    #
    # 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
    #
    /dev/mapper/cl-root     /                       xfs     defaults        0 0
    UUID=372ce9fb-1903-4c73-8316-7cf9a50358fc /boot                   xfs     defaults        0 0
    /dev/mapper/cl-swap     swap                    swap    defaults        0 0
    UUID=e4ece575-d12d-4ba2-91f5-50875d1fae68       /test   xfs                     defaults   0  1
    UUID=8c876288-69bb-47e6-8dfa-04a33bdd35e9       /yohan  etx4 defaults 0 1


    mount의 중요성

    # 마운트 작업을 할 때 디렉토리를 생성하는데 실수로 언마운트인 상태였을 때도 디렉토리를 읽는다. 마운트 된줄 알고 해당 디렉토리에서 한창 작업하다가, 재부팅 했을때 (디폴트가 마운트일때) 해당 파티션이 마운트되면 작업한게 없어진다. 그 때 다시 언마운트하면 볼 수 있다. 아래의 예는 마운트 한 상태일 때 디렉토리에 파일을 옮기고 언마운트하면 없는 것을 보여준다. 또한 언마운트 상태에서 디렉토리에 파일을 옮기고 나서 마운트 해서 보면 아까 마운트했을 때 옮겼던 파일만 보인다는 예다. 

    # ls /yohan
    lost+found
    # mount | grep /yohan
    /dev/sda2 on /yohan type ext4 (rw,relatime,seclabel,data=ordered)
    # cp /usr/bin/a* /yohan
    # ls /yohan
    addr2line  alias  apropos  ar  arch  as  aserver  aulast  aulastlog  ausyscall  auvirt  awk  lost+found
    # umount /yohan
    # ls /yohan
    # cp /usr/bin/b* /yohan
    # ls /yohan
    base64  basename  bash  bashbug  bashbug-64  bg  bond2team  bootctl  busctl
    # mount /yohan
    # ls /yohan
    addr2line  alias  apropos  ar  arch  as  aserver  aulast  aulastlog  ausyscall  auvirt  awk  lost+found
    # cd /
    # umount /yohan
    # ls /yohan
    base64  basename  bash  bashbug  bashbug-64  bg  bond2team  bootctl  busctl
    # df -hT
    Filesystem          Type      Size  Used Avail Use% Mounted on
    /dev/mapper/cl-root xfs        27G  1.1G   26G   5% /
    devtmpfs            devtmpfs  909M     0  909M   0% /dev
    tmpfs               tmpfs     920M     0  920M   0% /dev/shm
    tmpfs               tmpfs     920M  8.5M  912M   1% /run
    tmpfs               tmpfs     920M     0  920M   0% /sys/fs/cgroup
    /dev/sda1           xfs       951M   34M  918M   4% /test
    /dev/vda1           xfs      1014M  141M  874M  14% /boot
    tmpfs               tmpfs     184M     0  184M   0% /run/user/0


    # 언마운트 하려는 디렉토리에 유저가 cd 명령어로 해당 디렉토리에 있을 때, fuser 명령어를 사용하여 알 수 있다.

    [root@station16 ~]# fuser -cu /tmp
    /tmp:                 1051m(root)  1351(root)  1742(root)  1912(root)  1958m(root)  2641(root)  2838m(root)

    # 언마운트 하려는 디렉토리의 파일(프로세스)이 어떤것인지 참조되고 있어서 안되는지는 lsof 명령어를 사용할 수 있다.

    [root@station16 ~]# lsof -p 1
    COMMAND PID USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
    systemd   1 root  cwd       DIR              253,0      281         64 /
    systemd   1 root  rtd       DIR              253,0      281         64 /
    systemd   1 root  txt       REG              253,0  1482272    9014993 /usr/lib/systemd/systemd
    systemd   1 root  mem       REG              253,0    20040   12607936 /usr/lib64/libuuid.so.1.3.0
    systemd   1 root  mem       REG              253,0   256960   13021325 /usr/lib64/libblkid.so.1.1.0
    systemd   1 root  mem       REG              253,0    90664   12603053 /usr/lib64/libz.so.1.2.7
    ...생략....


    파일 시스템에 라벨 달기

    # 디바이스에 라벨을 달 수 있다. 라벨링은 언마운트 상태에서 달 수 있으므로, 어떤 디바이스가 있는지 확인한후 언마운트하고, 라벨링을 해보자. 그리고 lsblk -f 으로 잘 됐는지 확인해보자. e2label 은 언마운트 안필요한듯... 근데 라벨보다 UUID방식을 선호한다고 한다.


    # df -hT
    Filesystem          Type      Size  Used Avail Use% Mounted on
    /dev/mapper/cl-root xfs        27G  1.1G   26G   5% /
    devtmpfs            devtmpfs  909M     0  909M   0% /dev
    tmpfs               tmpfs     920M     0  920M   0% /dev/shm
    tmpfs               tmpfs     920M  8.5M  912M   1% /run
    tmpfs               tmpfs     920M     0  920M   0% /sys/fs/cgroup
    /dev/sda1           xfs       951M   34M  918M   4% /test
    /dev/vda1           xfs      1014M  141M  874M  14% /boot
    tmpfs               tmpfs     184M     0  184M   0% /run/user/0
    /dev/sda2           ext4      2.0G  7.3M  1.9G   1% /yohan
    # xfs_admin -L XFS_yohan /dev/sda1
    xfs_admin: /dev/sda1 contains a mounted filesystem

    fatal error -- couldn't initialize XFS library
    # umount /dev/sda1
    # xfs_admin -L XFS_yohan /dev/sda1
    writing all SBs
    new label = "XFS_yohan"

    # e2label /dev/sda2 FS_ext4
    # lsblk -f
    NAME        FSTYPE      LABEL     UUID                                   MOUNTPOINT
    sda                                                                     
    ├─sda1      xfs         XFS_yohan e4ece575-d12d-4ba2-91f5-50875d1fae68  
    └─sda2      ext4        FS_ext4   8c876288-69bb-47e6-8dfa-04a33bdd35e9   /yohan
    sdb                                                                     
    sdc                                                                     
    vda                                                                     
    ├─vda1      xfs                   372ce9fb-1903-4c73-8316-7cf9a50358fc   /boot
    └─vda2      LVM2_member           RZ8k6v-wAFn-q1tH-iEng-tZii-OCw3-uim3Z2
      ├─cl-root xfs                   7618555f-1b64-453d-8ce3-42f14d58e395   /
      └─cl-swap swap                  121e58e2-8f0d-40b0-9591-9d7bb5b2e56a   [SWAP]


    # 라벨로 마운트 해보기


    # mkdir /ext4
    # lsblk -f
    NAME        FSTYPE      LABEL     UUID                                   MOUNTPOINT
    sda                                                                     
    ├─sda1      xfs         XFS_yohan e4ece575-d12d-4ba2-91f5-50875d1fae68  
    └─sda2      ext4        FS_ext4   8c876288-69bb-47e6-8dfa-04a33bdd35e9   /yohan
    sdb                                                                     
    sdc                                                                     
    vda                                                                     
    ├─vda1      xfs                   372ce9fb-1903-4c73-8316-7cf9a50358fc   /boot
    └─vda2      LVM2_member           RZ8k6v-wAFn-q1tH-iEng-tZii-OCw3-uim3Z2
      ├─cl-root xfs                   7618555f-1b64-453d-8ce3-42f14d58e395   /
      └─cl-swap swap                  121e58e2-8f0d-40b0-9591-9d7bb5b2e56a   [SWAP]
    # mount LABEL=XFS_yohan /ext4
    # lsblk -f
    NAME        FSTYPE      LABEL     UUID                                   MOUNTPOINT
    sda                                                                     
    ├─sda1      xfs         XFS_yohan e4ece575-d12d-4ba2-91f5-50875d1fae68   /ext4
    └─sda2      ext4        FS_ext4   8c876288-69bb-47e6-8dfa-04a33bdd35e9   /yohan
    sdb                                                                     
    sdc                                                                     
    vda                                                                     
    ├─vda1      xfs                   372ce9fb-1903-4c73-8316-7cf9a50358fc   /boot
    └─vda2      LVM2_member           RZ8k6v-wAFn-q1tH-iEng-tZii-OCw3-uim3Z2
      ├─cl-root xfs                   7618555f-1b64-453d-8ce3-42f14d58e395   /
      └─cl-swap swap                  121e58e2-8f0d-40b0-9591-9d7bb5b2e56a   [SWAP]



    디스크 스냅샷 (이미지) 떴을때 UUID 중복피하는법

    # xfs_admin -u generate /dev/sd#  .. #교재참고

    조각모음하는법도

    # 교재참고


    tune2fs 사용법

    # 파일 시스템의 정보나 속성 같은것을 체크, 변경할 수 있다. dumpe2fs 로 정보와 속성을 체크해보자.

    # df -hT
    Filesystem          Type      Size  Used Avail Use% Mounted on
    /dev/mapper/cl-root xfs        27G  1.1G   26G   5% /
    devtmpfs            devtmpfs  909M     0  909M   0% /dev
    tmpfs               tmpfs     920M     0  920M   0% /dev/shm
    tmpfs               tmpfs     920M  8.5M  912M   1% /run
    tmpfs               tmpfs     920M     0  920M   0% /sys/fs/cgroup
    /dev/vda1           xfs      1014M  141M  874M  14% /boot
    tmpfs               tmpfs     184M     0  184M   0% /run/user/0
    /dev/sda2           ext4      2.0G  7.3M  1.9G   1% /yohan
    /dev/sda1           xfs       951M   34M  918M   4% /ext4
    # dumpe2fs /dev/sda2 | less
    Filesystem volume name:   FS_ext4
    Last mounted on:          /yohan
    Filesystem UUID:          8c876288-69bb-47e6-8dfa-04a33bdd35e9
    Filesystem magic number:  0xEF53
    Filesystem revision #:    1 (dynamic)
    ...생략...
    Default mount options:    user_xattr acl      #access control list 지원함 (추후 챕터에서 설명됨)
    ...생략...
    Block size:               4096                   #
    Fragment size:            4096
    ...생략...
    Mount count:              4                    #마운트 된 횟수
    Maximum mount count:      -1
    ...생략...
    Check interval:           0 (<none>)        #몇 번째 마운트마다 disk check 할지 설정

    아래와 같은 옵션으로 바꿀수 있다.

    # tune2fs -c num, -i interval, -o 기능


    -c : mount 횟수 때 체크. -i : 기간 때 체크 (월, 일, 주 가능) -o : acl, default 등 가능


    파일복구하기, 다른 데이터로 덮어쓰이기 전까지 (ext4)

    # cp /etc/fstab /yohan
    # sync                                    //메모리의 작업이 디스크에 전달되게 함 (실습을 위해 보다빠르게 하기 위해)
    # debugfs -w /dev/sda2
    debugfs 1.42.9 (28-Dec-2013)
    debugfs:  ls
     2  (12) .    2  (12) ..    11  (20) lost+found    12  (20) addr2line  
     13  (16) alias    14  (16) apropos    15  (12) ar    16  (12) arch  
     17  (12) as    18  (16) aserver    19  (16) aulast    20  (20) aulastlog  
     21  (20) ausyscall    22  (16) auvirt    23  (12) awk    24  (3864) fstab  
    debugfs:  cat fstab

    #
    # /etc/fstab
    # Created by anaconda on Mon Jul 17 12:18:03 2017
    #
    # 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
    #
    /dev/mapper/cl-root     /                       xfs     defaults        0 0
    UUID=372ce9fb-1903-4c73-8316-7cf9a50358fc /boot                   xfs     defaults        0 0
    /dev/mapper/cl-swap     swap                    swap    defaults        0 0
    UUID=e4ece575-d12d-4ba2-91f5-50875d1fae68     /test    xfs             defaults   0  1       
    UUID=8c876288-69bb-47e6-8dfa-04a33bdd35e9    /yohan  ext4 defaults 0 1
    debugfs:  rm fstab

    debugfs:  lsdel
     Inode  Owner  Mode    Size      Blocks   Time deleted
        24      0 100644    607      1/     1 Wed Jul 19 14:47:35 2017
    1 deleted inodes found.
    debugfs:  undel <24> newfstab
    debugfs:  ls
     2  (12) .    2  (12) ..    11  (20) lost+found    12  (20) addr2line  
     13  (16) alias    14  (16) apropos    15  (12) ar    16  (12) arch  
     17  (12) as    18  (16) aserver    19  (16) aulast    20  (20) aulastlog  
     21  (20) ausyscall    22  (16) auvirt    23  (12) awk    24  (3864) newfstab  


    XFS 파일시스템 백업하고 복구하기

    # 백업과 복구는 시간이 많이걸리므로 다른 유저들에게는 해당 디렉토리에 작업을 못하게 해야하므로 프리즈란 개념이 필요하다.

    # df -hT
    Filesystem          Type      Size  Used Avail Use% Mounted on
    /dev/mapper/cl-root xfs        27G  1.1G   26G   5% /
    devtmpfs            devtmpfs  909M     0  909M   0% /dev
    tmpfs               tmpfs     920M     0  920M   0% /dev/shm
    tmpfs               tmpfs     920M  8.5M  912M   1% /run
    tmpfs               tmpfs     920M     0  920M   0% /sys/fs/cgroup
    /dev/vda1           xfs      1014M  141M  874M  14% /boot
    tmpfs               tmpfs     184M     0  184M   0% /run/user/0
    /dev/sda2           ext4      2.0G  7.3M  1.9G   1% /yohan
    /dev/sda1           xfs       951M   34M  918M   4% /xfs
    # xfs_freeze -f /xfs


    # 다른 터미널에서 해당 디렉토리에 작업을 수행해본다. 그러면 터미널이 freeze 한것처럼 된다.

    # cp /etc/passwd /xfs

    # 해당 터미널에서 프리즈를 풀어줘야 작업이 된다.

    # xfs_freeze -u /xfs


    # 백업 명령은 두 개로 나뉜다. 전체 백업은 xfs_copy와 incremental backup(증분 백업, 변경파일들만 백업)인 xfsdump 이다. 아래는 전체 백업인 xfs_copy이다.

    # cp /usr/bin/a* /xfs
    # umount /xfs
    # xfs_copy /dev/sda1 /tmp/sda1-xfs-backup
    Creating file /tmp/sda1-xfs-backup
     0%  ... 10%  ... 20%  ... 30%  ... 40%  ... 50%  ... 60%  ... 70%  ... 80%  ... 90%  ... 100%

    # 아래는 증분 백업인 xfsdump 이다.


    # xfsdump -f /tmp/backup.full /xfs
    xfsdump: using file dump (drive_simple) strategy
    ... 생략 ...
    xfsdump: Dump Status: SUCCESS
    # ls /xfs
    addr2line  alias  apropos  ar  arch  as  aserver  aulast  aulastlog  ausyscall  auvirt  awk  fstab  passwd
    # cp /usr/bin/b* /xfs
    # xfsdump -f /tmp/backup.1 /xfs
    xfsdump: using file dump (drive_simple) strategy
    xfsdump: version 3.1.4 (dump format 3.0) - type ^C for status and control
    ... 생략...
    xfsdump: Dump Status: SUCCESS
    # rm -rf /xfs/*
    # xfsrestore -f /tmp/backup.full /xfs
    xfsrestore: using file dump (drive_simple) strategy
    ... 생략 ...
    xfsrestore: Restore Status: SUCCESS
    # ls /xfs
    addr2line  alias  apropos  ar  arch  as  aserver  aulast  aulastlog  ausyscall  auvirt  awk  fstab  passwd
    # xfsrestore -f /tmp/backup.1 /xfs
    xfsrestore: using file dump (drive_simple) strategy
    ... 생략 ...
    xfsrestore: Restore Status: SUCCESS
    # ls /xfs
    addr2line  apropos  arch  aserver  aulastlog  auvirt  base64    bash     bashbug-64  bond2team  busctl  passwd
    alias      ar       as    aulast   ausyscall  awk     basename  bashbug  bg          bootctl    fstab


    Swap

    # 메모리에 프로세스가 올라 가려 하지만 유휴 page( 메모리의 I/O 단위) 가 없을 때 기존 프로세스가 잠시 자리를 내줘 디스크로 내려가는 공간. 그러므로 OS 설치시 (windows 건 Linux 건..) 디스크에 swap공간을 만들어 주는 것이 필요하다. 예제: 신발장과 현관.

    # dd if=/dev/zero of=/yohan/swapfile bs=1024 count=256000   # count => 1000K(1M) * 256, 즉 256M

    # df -hT
    Filesystem          Type      Size  Used Avail Use% Mounted on
    /dev/mapper/cl-root xfs        27G  1.1G   26G   5% /
    devtmpfs            devtmpfs  909M     0  909M   0% /dev
    tmpfs               tmpfs     920M     0  920M   0% /dev/shm
    tmpfs               tmpfs     920M  8.5M  912M   1% /run
    tmpfs               tmpfs     920M     0  920M   0% /sys/fs/cgroup
    /dev/sda2           ext4      2.0G  7.3M  1.9G   1% /yohan
    /dev/vda1           xfs      1014M  140M  875M  14% /boot
    tmpfs               tmpfs     184M     0  184M   0% /run/user/0
    /dev/sda1           xfs       951M   35M  916M   4% /xfs
    # dd if=/dev/zero of=/yohan/swapfile bs=1024 count=256000
    256000+0 records in
    256000+0 records out
    262144000 bytes (262 MB) copied, 0.700947 s, 374 MB/s
    # ll -h /yohan/swapfile
    -rw-r--r--. 1 root root 250M Jul 19 15:56 /yohan/swapfile
    # mkswap /yohan/swapfile
    Setting up swapspace version 1, size = 255996 KiB
    no label, UUID=4ca65767-d248-4d61-9d87-962c6f3c00c3
    # chmod 600 /yohan/swapfile
    # swapon /yohan/swapfile
    # swapon
    NAME            TYPE      SIZE USED PRIO
    /dev/dm-1       partition   2G   0B   -1
    /yohan/swapfile file      250M   0B   -2

    디스크 사용량 체크 df du

    # du -hs /home   # 홈 밑의 디렉토리 용량 체크


    디스크 쿼터 (disk quotas) 설정

    # 사용자들의 사용량을 제한하는데 사용한다. user 또는 group 별로 제한가능하다.

    # 먼저 /etc/fstab 에서 다음과 같이 수정이 필요하다. 수정을 완료한 뒤 reboot 을 수행한다. 그 뒤 파일의 내용이 메모리에 잘 올라갔는지 옵션을 확인하여 usrquota와 grpquota가 있는지 확인한다.

    UUID=e4ece575-d12d-4ba2-91f5-50875d1fae68       /xfs    xfs     usrquota,grpquota   0  1      
    UUID=8c876288-69bb-47e6-8dfa-04a33bdd35e9       /yohan  ext4 defaults 0 1

    # reboot
    # mount |grep /xfs
    /dev/sda1 on /xfs type xfs (rw,relatime,seclabel,attr2,inode64,usrquota,grpquota)


    # /xfs 안의 사용량을 확인해보니 root 계정이 1088 byte를 사용하고 있고 file을 17개 사용하고 있는지 알 수 있다. soft, hard limit, grace time 이 있다. hard limit은 절대 넘을 수 없는 용량 이고, soft limit은 그 이상 생성가능하지만 초과했을 때 grace time 내에 정리 하지 않으면 hard limit 처럼 더이상 생성할 수 없다. 그렇다고해서 있던 자료가 사라지는 것은 아니다. 확인한 뒤 hard limit을 guru 유저에게 설정해보자.

    # repquota /xfs
    *** Report for user quotas on device /dev/sda1
    Block grace time: 7days; Inode grace time: 7days
                            Block limits                File limits
    User            used    soft    hard  grace    used  soft  hard  grace
    ----------------------------------------------------------------------
    root      --    1088       0       0             17     0     0      
    guru      --       0       0         0              1     0     0

    # setquota guru 0 2048 0 0 /xfs

    # repquota /xfs
    *** Report for user quotas on device /dev/sda1
    Block grace time: 7days; Inode grace time: 7days
                            Block limits                File limits
    User            used    soft    hard  grace    used  soft  hard  grace
    ----------------------------------------------------------------------
    root      --    1088       0       0             17     0     0      
    guru      --       0       0    2048              1     0     0      


    # 또는 xfs_quota -x /xfs 를 통해 명령어 단계로 갈 수 있다. 아래의 예제는 guru 사용자를 제한하고 guru 사용자로 로그인해서 파일을 quota 사용량을 초과하게 사용해보았다.

    xfs_quota> report
    User quota on /xfs (/dev/sda1)

                                   Blocks                    
    User ID          Used       Soft       Hard    Warn/Grace    
    ---------- --------------------------------------------------
    root             1088          0       4096     00 [--------]
    guru                0          0       2048     00 [--------]

    Group quota on /xfs (/dev/sda1)
                                   Blocks                    
    Group ID         Used       Soft       Hard    Warn/Grace    
    ---------- --------------------------------------------------
    root             1088          0          0     00 [--------]
    guru                0          0          0     00 [--------]

    xfs_quota> limit bsoft=0 bhard=4m guru
    xfs_quota> report
    User quota on /xfs (/dev/sda1)
                                   Blocks                    
    User ID          Used       Soft       Hard    Warn/Grace    
    ---------- --------------------------------------------------
    root             1088          0       4096     00 [--------]
    guru                0          0       4096     00 [--------]

    Group quota on /xfs (/dev/sda1)
                                   Blocks                    
    Group ID         Used       Soft       Hard    Warn/Grace    
    ---------- --------------------------------------------------
    root             1088          0          0     00 [--------]
    guru                0          0          0     00 [--------]


    [guru@localhost xfs]$ dd if=/dev/zero of=/xfs/ab bs=1024 count=256000
    dd: error writing ‘/xfs/ab’: Disk quota exceeded
    4097+0 records in
    4096+0 records out
    4194304 bytes (4.2 MB) copied, 0.0346518 s, 121 MB/s


    Filesystem Attributes

    # lsattr, chattr 로 쓰인다.

    1) +a : append only
    2) +A : Do not update file access time    # mount default 옵션 relatime이면 -A 해도 access time이 잘 업데이트 안될 수 도 있다. mount 옵션 strictatime 을 등록 하고 다시 마운트하면 access time이 잘 적용된다.(기본적으로 atime 메타 데이터는 너무 변경점이많아 default 옵션 relatime이 사용된다.)
    3) +D : dump(복원)program will not backup this file when filesystem backup is performed
    4) +e :
    5) +i : Immutable, can not modify. except access time


    # date > yumi.out
    # cat yumi.out
    Wed Jul 19 16:38:41 KST 2017
    # chattr + a yumi.out
    # date >> yumi.out
    # cat yumi.out
    Wed Jul 19 16:38:41 KST 2017
    Wed Jul 19 16:39:44 KST 2017
    # date > yumi.out
    # rm yumi.out
    rm: remove regular file ‘yumi.out’? y
    # date > yumi.out
    # chattr +a yumi.out
    # date >> yumi.out
    # cat yumi.out
    Wed Jul 19 16:40:09 KST 2017
    Wed Jul 19 16:40:20 KST 2017
    # date > yumi.out
    bash: yumi.out: Operation not permitted

    'IoT 과정' 카테고리의 다른 글

    라즈베리파이와 개발pc와의 nfs 설정 및 tftp등등  (0) 2017.09.07
    LVM & RAID  (0) 2017.07.19
    LOCAL STORAGE ADMINISTRATION // 로컬 디스크 관리  (0) 2017.07.19
    SOFTWARE MAINTENANCE  (0) 2017.07.18
    GRUB 관련  (0) 2017.07.18
    SYSTEMD OVERVIEW  (0) 2017.07.18

    댓글 0

Designed by Tistory.