티스토리 뷰
물리적으로 디스크 파티션 나누고, 디스크 사용하기전 파일시스템(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 |
- Total
- Today
- Yesterday
- grafana cloud
- 시뮬레이션
- 자바스크립트 예제
- 데이터 중심 애플리케이션 설계
- Simulation
- javascript
- 아레나
- Discrete Mathematics
- flutter
- 명제논리
- rosen
- arena simulation
- beginning javascript
- 그라파나
- 대규모 시스템 설계 기초
- 백준
- 아레나 시뮬레이션
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- 최단경로 알고리즘
- 이산 수학
- 자바스크립트
- paul wilton
- Grafana
- 로젠
- 아레나시뮬레이션
- Arena
- Propositional and Predicate Logic
- 항해99
- 엄청난 인내심과 시뮬레이션을 위한 아레나 툴
- 이산수학
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |