티스토리 뷰

반응형

물리적으로 디스크 파티션 나누고, 디스크 사용하기전 파일시스템(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
SOFTWARE MAINTENANCE  (0) 2017.07.18
GRUB 관련  (0) 2017.07.18
SYSTEMD OVERVIEW  (0) 2017.07.18