파일시스템 관리
파일시스템 ( File System )
- 파일이나 자료를 쉽게 발견 및 접근 할 수 있도록
보관 또는 조직하는 체계
Ex)
도서관 - 하드디스크
책 - 파일
도서검색대 - 파일시스템
- 리눅스에서 자주 사용되는 파일 시스템
ext3 , ext4 , xfs , iso9660 , nfs
+@ext4 ( EXTended File System 4 )
1EB의 최대 파일 시스템 크기와,
16TB크기의 파일을 지원
서브디렉터리를 64000개 까지 지원,
파일은 약 40억개를 지원
* 파티션 ( Partition )
- 운영체제가 저장 공간을 인식하는 단위
- 하나의 물리적인 디스크를 논리적인 디스크로 나누는 것
! 실 습
① 디스크 추가
-> Server-A(우클릭) -> settings -> Add
-> Hard Disk -> 설치때와 같은 옵션으로 진행
-> 용량 20G 설정 -> reboot
+@ 가상환경에서는 추가한 디스크를 인식시키기 위해서
재부팅을 하지만 실제 서버에서는 Hotplug, udev와
같은 기능이 있어서 추가 즉시 인식하여 사용가능하다.
② fdisk명령어를 이용하여 추가된 디스크를 확인
#fdisk -l // 모든 디스크의 정보를 출력
#ls -l /dev/sd* // 추가된 디스크 확인
③ 리눅스 파티셔닝
/dev/sda -> 첫번째 디스크
/dev/sdb -> 두번째 디스크
/dev/sdc -> 세번째 디스크
... ...
/dev/sda1 -> 첫번째 디스크의 1번 파티션
/dev/sda2 -> 첫번째 디스크의 2번 파티션
/dev/sdb1 -> 두번째 디스크의 1번 파티션
/dev/sdd3 -> 네번째 디스크의 3번 파티션
+@ SATA , SCSI 타입의 디스크를 사용 /dev/sd~
IDE 타입의 디스크를 사용 /dev/hd~
[ 사용법 ]
#fdisk [장치파일명]
Ex) #fdisk /dev/sdb
#fdisk /dev/sdg
(가상설정)
주파티션1 -> 2G 할당
주파티션2 -> 3G 할당
주파티션3 -> 나머지 전부 할당
[root@Server-A ~]#fdisk /dev/sdb <--
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x6984790a.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): m <--
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
Command (m for help): n <--
Command action
e extended
p primary partition (1-4)
p <--
Partition number (1-4): 1 <--
First cylinder (1-2610, default 1): 1 <--
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +2G <--
Command (m for help): p <--
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6984790a
Device Boot Start End Blocks Id System
/dev/sdb1 1 262 2104483+ 83 Linux
Command (m for help): n <--
Command action
e extended
p primary partition (1-4)
p <--
Partition number (1-4): 2 <--
First cylinder (263-2610, default 263): <-- "enter"
Using default value 263
Last cylinder, +cylinders or +size{K,M,G} (263-2610, default 2610): +3G <--
Command (m for help): p <--
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6984790a
Device Boot Start End Blocks Id System
/dev/sdb1 1 262 2104483+ 83 Linux
/dev/sdb2 263 655 3156772+ 83 Linux
Command (m for help): n <--
Command action
e extended
p primary partition (1-4)
p <--
Partition number (1-4): 3 <--
First cylinder (656-2610, default 656): <-- "enter"
Using default value 656
Last cylinder, +cylinders or +size{K,M,G} (656-2610, default 2610):
Using default value 2610
Command (m for help): p <--
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6984790a
Device Boot Start End Blocks Id System
/dev/sdb1 1 262 2104483+ 83 Linux
/dev/sdb2 263 655 3156772+ 83 Linux
/dev/sdb3 656 2610 15703537+ 83 Linux
Command (m for help): w <--
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
④ 파일 시스템 생성
mkfs ( Make File System )
[ 사용법 ]
#mkfs -t [타입] [장치명]
#mkfs -t ext4 /dev/sdb1 // 두번째 디스크의 첫번째 파티션에
ext4형식으로 파일시스템을 생성
#mkfs -t ext4 /dev/sdb2
#mkfs -t etc4 /dev/sdb3
+@파일시스템 생성 확인 명령어
[ 사용법 ]
#file -s [장치파일명]
#file -s /dev/sdb1
#file -s /dev/sdb2
#file -s /dev/sdb3
⑤ 마운트 포인트 생성과 마운트
- 마운트란 특정 디렉터리에 저장장치를 연결하는 것
- 마운트 포인트는 장치와 연결되는 디렉터리를 말한다.
- 윈도우는 각 장치(파티션)별로 트리구조 형태를 이룬다.
리눅스는 최상위 / 디렉터리부터 트리구조를 이룬다.
[ 사용법]
#mount [장치파일명] [마운트 포인트]
#mkdir /App{1..3} //마운트할 디렉터리 생성
#mount /dev/sdb1 /App1 // /dev/sdb1을 /App1 디렉터리에 연결
#mount /dev/sdb2 /App2 // /dev/sdb2을 /App2 디렉터리에 연결
#mount /dev/sdb3 /App3 // /dev/sdb3을 /App3 디렉터리에 연결
⑥ 디스크 사용량 확인 및 디스크 사용
df ( Disk Free ) - 마운트되어있는 파티션 용량 확인
[root@Server-A ~]#df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 19792144 1734448 17045628 10% /
tmpfs 502056 0 502056 0% /dev/shm
/dev/sda1 194241 27081 156920 15% /boot
/dev/sdb1 2005848 3096 1897528 1% /App1
/dev/sdb2 3041588 4632 2879120 1% /App2
/dev/sdb3 15325664 38344 14502144 1% /App3
[root@Server-A ~]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 19G 1.7G 17G 10% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 27M 154M 15% /boot
/dev/sdb1 2.0G 3.1M 1.9G 1% /App1
/dev/sdb2 3.0G 4.6M 2.8G 1% /App2
/dev/sdb3 15G 38M 14G 1% /App3
⑦ fstab에 uuid등록
UUID ( Universial Unique Identifier )
- 범용 고유 식별자
- 특정 장치나 설정에 부여하는 고유한 값
- 디스크를 추가하거나, 제거 작업시에 장치명이 변경되어서
마운트가 되지 않는 현상을 사전에 방지한다.
[ 사용법 ]
#blkid // UUID 확인
#blkid [장치파일명] // 특정장치파일의 UUID만 확인
#blkid //장치에 해당하는 UUID를 확인
/dev/sdb1
/dev/sdb2
/dev/sdb3의 UUID를 복사해서
/etc/fstab파일에 붙여넣기
// vi /etc/fstab 파일
[연결대상] [마운트 포인트] [파일시스템] [옵션] [덤프] [검사]
[연결대상]
- 디스크에 생성된 파티션 , 장치명이 오거나 UUID가 온다.
[마운트 포인트]
- 장치와 연결되는 디렉터리
[파일시스템]
- 파티션에 생성한 파일시스템
[옵션]
- 마운트시 사용할 옵션을 나열하는 필드
- 보통 defaults(rw,async,suid등이 묶여있는 옵션)을 사용한다.
[덤프]
- 해당파티션에 문제가 발생했을 때 파티션에 대한 정보가
저장되어있는 파일 생성 유무
( 각 파티션의 최상위 디렉터리 아래 lost+found 디렉터리에
덤프 파일이 생성됨 )
0 : 생성하지 않음
1 : 생성
[검사]
- 부팅 시 해당 파티션에 생성된 파일시스템 검사 유무
0 : 검사하지 않음
1 : 검사 ( 우선순위가 높음 )
2 : 검사 ( 우선순위가 낮음 )
- 중요한 파티션에는 1을 설정하고 , 그 외의 파티션에는
0을 사용하는 것이 일반적이다.
#vi /etc/fstab
--------------------------------
하단에 다음 내용 추가
UUID=7f718a3f-f3dc-46a6-8237-af186c58fa3d /App1 ext4 defaults 0 0
UUID=1701d647-222a-4891-a177-4fe31eba4637 /App2 ext4 defaults 0 0
UUID=fada5e41-431f-4484-a57e-a072e0e6a63a /App3 ext4 defaults 0 0
( UUID는 모두 다르니 자신의 UUID등록 )
:wq!
----------------------------------
#reboot
#df -h
! 연 습
1) 디스크 2개 추가
1개 : 20G /dev/sdb
1개 : 20G /dev/sdc
2) 파티셔닝
첫번째 디스크는 10G,10G파티셔닝
/dev/sdb1 : 10G
/dev/sdb2 : 10G
두번째 디스크는 200M ,512M ,나머지전부 파티셔닝
3) 마운트
10G /App1디렉터리 마운트
10G /App2디렉터리 마운트
200M /root/myBoot디렉터리 마운트
512M /root/mySwap디렉터리 마운트
나머지 /root/myRoot디렉터리 마운트
( 정답 )
1) 디스크 2개 추가
2) 파티셔닝 작업
#fdisk /dev/sdb
각각 10GB씩 할당
#fdisk /dev/sdc
200MB 할당
512MB 할당
나머지 전부 할당
3) 파일시스템 생성
#mkfs -t ext4 /dev/sdb1 // 파일시스템 생성
#mkfs -t ext4 /dev/sdb2
#mkfs -t ext4 /dev/sdc1 // 파일 시스템 생성
#mkfs -t ext4 /dev/sdc2
#mkfs -t ext4 /dev/sdc3
4) 마운트 포인트 생성
#mkdir /App{1,2} // 마운트 포인트 생성
#mkdir /root/myBoot /root/mySwap /root/myRoot
5) 마운트
#mount /dev/sdb1 /App1 // 마운트
#mount /dev/sdb2 /App2
#mount /dev/sdc1 /myBoot // 마운트
#mount /dev/sdc2 /mySwap
#mount /dev/sdc3 /myRoot
6) 마운트 확인
#df -h // 마운트 확인
7) UUID확인
#blkid
8) fstab파일에 등록
#vi /etc/fstab
------------------------
~ 하단에 추가 ~
UUID=~~ /App1 ext4 defaults 0 0
UUID=~~ /App2 ext4 defaults 0 0
UUID=~~ /myBoot ext4 defaults 0 0
UUID=~~ /mySwap ext4 defaults 0 0
UUID=~~ /myRoot ext4 defaults 0 0
:wq!
------------------------
9) 설정 확인
#reboot
#df -h // 마운트된 디렉터리 확인
* RAID ( Rebundant Array Of Inexpensive/Independent Disk )
- 물리 디스크 여러개를 하나의 논리 디스크로 사용하는 방법
- 초창기 RAID
초기에는 디스크 용량이 크지가 않아서 디스크 교체가
빈번하게 일어남
교체한 디스크를 폐기하기는 아깝고 단독으로
사용하기에는 용량이 부족한 (Inexpensive) 저장장치를
재활용할 목적으로 RAID를 구성
- 현재 RAID
저장장치의 용량이 커져 , 용량증설이 목적이 아니라
데이터보호 및 디스크 성능을 개선할 목적으로 사용한다고 해서
단독으로 사용가능한 (Independent) 저장장치로 해석된다.
! 실습 환경 구축
(환경변수 설정 이후로 스냅샷)
0.25GB Disk총 9개를 추가
#ls -l /dev/sd*
(디스크 추가 후 스냅샷 지정)
#fdisk /dev/sdb
n // 파티션생성
p // 주파티션선택
1 // 1번 파티션
"enter" // 시작부터
"enter" // 마지막까지
t // 파티션타입변경
fd // RAID타입
p // 설정 확인
w // 저장 후 종료
+ /dev/sdc ,sdd ,sde ,sdf ,sdg ,sdh ,sdi ,sdj 모두 진행
#ls -l /dev/sd*
brw-rw----. 1 root disk 8, 0 2023-05-15 04:21 /dev/sda
brw-rw----. 1 root disk 8, 1 2023-05-15 04:21 /dev/sda1
brw-rw----. 1 root disk 8, 2 2023-05-15 04:21 /dev/sda2
brw-rw----. 1 root disk 8, 3 2023-05-15 04:21 /dev/sda3
brw-rw----. 1 root disk 8, 16 2023-05-15 04:25 /dev/sdb
brw-rw----. 1 root disk 8, 17 2023-05-15 04:25 /dev/sdb1
brw-rw----. 1 root disk 8, 32 2023-05-15 04:28 /dev/sdc
brw-rw----. 1 root disk 8, 33 2023-05-15 04:28 /dev/sdc1
brw-rw----. 1 root disk 8, 48 2023-05-15 04:29 /dev/sdd
brw-rw----. 1 root disk 8, 49 2023-05-15 04:29 /dev/sdd1
brw-rw----. 1 root disk 8, 64 2023-05-15 04:29 /dev/sde
brw-rw----. 1 root disk 8, 65 2023-05-15 04:29 /dev/sde1
brw-rw----. 1 root disk 8, 80 2023-05-15 04:29 /dev/sdf
brw-rw----. 1 root disk 8, 81 2023-05-15 04:29 /dev/sdf1
brw-rw----. 1 root disk 8, 96 2023-05-15 04:29 /dev/sdg
brw-rw----. 1 root disk 8, 97 2023-05-15 04:29 /dev/sdg1
brw-rw----. 1 root disk 8, 112 2023-05-15 04:29 /dev/sdh
brw-rw----. 1 root disk 8, 113 2023-05-15 04:29 /dev/sdh1
brw-rw----. 1 root disk 8, 128 2023-05-15 04:29 /dev/sdi
brw-rw----. 1 root disk 8, 129 2023-05-15 04:29 /dev/sdi1
brw-rw----. 1 root disk 8, 144 2023-05-15 04:30 /dev/sdj
brw-rw----. 1 root disk 8, 145 2023-05-15 04:30 /dev/sdj1
* Linear RAID
- 선형 RAID라고도 한다.
- 첫번째 디스크가 완전히 채워지면 순차적으로
다음 디스크에 데이터를 저장하는 형식이다.
- 최소 2개 이상의 디스크를 필요로 한다.
- 여러개의 저장장치를 하나의 큰 논리 저장장치(볼륨)로 만든다.
- mdadm명령어 사용법
#mdadm --create [볼륨명] --level=[레벨] --raid-devices=[장치의 개수] [장치명1] [장치명2]...[장치명n]
! 실 습
1) mdadm 명령어를 이용하여 RAID를 구성
#mdadm --create /dev/md9 --level=linear --raid-devices=2 /dev/sdb1 /dev/sdc1
#cat /proc/mdstat // md9이 있는지 확인
#mdadm --detail /dev/md9 // md9의 자세한 설정 확인
2) 파일 시스템 생성
#mkfs -t ext4 /dev/md9
3) 마운트 포인트 생성 및 마운트
#mkdir /RAID-Linear // 마운트포인트 생성
#mount /dev/md9 /RAID-Linear // 마운트
#cp /etc/passwd /RAID-Linear // 테스트할 파일 복사
#df -h // 마운트 확인
#ls /RAID-Linear // passwd파일 확인
4) fstab 파일에 마운트 정보 등록
#blkid // md9의 UUID확인
#vi /etc/fstab
--------------------------
~~~ 하단에 추가 ~~~~
UUID=방금확인한 UUID /RAID-Linear ext4 defaults 0 0
:wq!
--------------------------
5) 설정 적용
#mdadm --detail --scan > /etc/mdadm.conf
6) 확인
#reboot
#df -h // md9 확인
#ll /RAID-Linear // 테스트용 데이터 확인
* RAID 0
- 스트라이핑 RAID라고 부른다.
- 데이터를 여러 디스크에 나누어쓰고 읽어들임으로써
데이터를 기록하는데 지연되는 시간을 줄여
가장 높은 입출력 성능을 제공한다.
- 데이터 보호기능이 없다.
! 실 습
1) mdadm 명령어를 이용하여 RAID를 구성
#mdadm --create /dev/md0 --level=stripe --raid-devices=2 /dev/sdd1 /dev/sde1
0
#cat /proc/mdstat // md0이 있는지 확인
#mdadm --detail /dev/md0 // md0의 자세한 설정 확인
2) 파일 시스템 생성
#mkfs -t ext4 /dev/md0
3) 마운트 포인트 생성 및 마운트
#mkdir /RAID-0 // 마운트포인트 생성
#mount /dev/md0 /RAID-0 // 마운트
#cp /etc/passwd /RAID-0 // 테스트할 파일 복사
#df -h // 마운트 확인
#ls /RAID-0 // passwd파일 확인
4) fstab 파일에 마운트 정보 등록
#blkid // md0의 UUID확인
#vi /etc/fstab
--------------------------
~~~ 하단에 추가 ~~~~
UUID=방금확인한 UUID /RAID-0 ext4 defaults 0 0
:wq!
--------------------------
5) 가정상황 ( 설정 적용x )
#reboot
#df -h
/dev/md127 // /dev/md0이어야하는데 운영체제가 임의로 정한
/dev/md127로 변경되어 있다.
// 볼륨명이 지정한 이름과 다를경우 다음과 같이 조치한다.
#mdadm --detail --scan > /etc/mdadm.conf // 해당명령어의 결과를
/etc/mdadm.conf에 저장
#vi /etc/mdadm.conf // VI Editor로 설정 변경
-------------------------
ARRAY /dev/md9 // Linear실습때 설정값
ARRAY /dev/Server-A:0 // 운영체제가 임의로 변경해놓은값
ARRAY /dev/md0 // 윗줄의 내용을 왼쪽처럼 변경
/dev/Server-A:0 -> /dev/md0
:wq!
-------------------------
#reboot // 재부팅
#df -h // 확인
/dev/md0 // /dev/md127 -> /dev/md0으로
변경된 것을 확인
RAID
* RAID 1
- 미러링 RAID라고 한다.
- 최소 2개이상의 디스크가 필요하다.
- 디스크의 용량의 총합의 50%만 사용가능하다.
- 한개의 디스크가 고장이 나도 볼륨의 다른 디스크에서
데이터를 사용할 수 있다. ( Fault- Tolerant 기능)
+@ Fault-Tolerant ( 결함 감내 / 장애 내성 )
- 결함(Fault)이나 고장(Failure)이 발생하여도 정상적 혹은 부분적으로
기능을 수행할 수 있는 환경
! 실 습
1) mdadm 명령어를 이용하여 RAID를 구성
#mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdf1 /dev/sdg1
mirror
#cat /proc/mdstat // md1이 있는지 확인
#mdadm --detail /dev/md1 // md1의 자세한 설정 확인
2) 파일 시스템 생성
#mkfs -t ext4 /dev/md1
3) 마운트 포인트 생성 및 마운트
#mkdir /RAID-1 // 마운트포인트 생성
#mount /dev/md1 /RAID-1 // 마운트
#cp /etc/passwd /RAID-1 // 테스트할 파일 복사
#df -h // 마운트 확인
#ls /RAID-1 // passwd파일 확인
4) fstab 파일에 마운트 정보 등록
#blkid // md1의 UUID확인
#vi /etc/fstab
--------------------------
~~~ 하단에 추가 ~~~~
UUID=방금확인한 UUID /RAID-1 ext4 defaults 0 0
:wq!
--------------------------
5) 설정 적용
#mdadm --detail --scan > /etc/mdadm.conf
6) 확인
#reboot
#df -h // md1 확인
#ll /RAID-1 // 테스트용 데이터 확인
* RAID-5
- RAID 1처럼 데이터 결함도 허용하면서 ,
RAID 0처럼 공간 효율성도 좋은 방식
- 최소3개 이상의 Disk가 필요하며 , 보통은 5개 이상의 Disk로 구성을 한다.
- Disk 장애 발생시 패리티(Parity)를 이용하여 데이터를 복구 한다.
- 하드디스크 개수 -1 = 볼륨의 총 용량
Ex) 디스크가 5개 -> 디스크 4개의 용량
! 실 습
1) mdadm 명령어를 이용하여 RAID를 구성
#mdadm --create /dev/md5 --level=5 --raid-devices=3 /dev/sdh1 /dev/sdi1 /dev/sdj1
#cat /proc/mdstat // md5이 있는지 확인
#mdadm --detail /dev/md5 // md5의 자세한 설정 확인
2) 파일 시스템 생성
#mkfs -t ext4 /dev/md5
3) 마운트 포인트 생성 및 마운트
#mkdir /RAID-5 // 마운트포인트 생성
#mount /dev/md5 /RAID-5 // 마운트
#cp /etc/passwd /RAID-5 // 테스트할 파일 복사
#df -h // 마운트 확인
#ls /RAID-5 // passwd파일 확인
4) fstab 파일에 마운트 정보 등록
#blkid // md5의 UUID확인
#vi /etc/fstab
--------------------------
~~~ 하단에 추가 ~~~~
UUID=방금확인한 UUID /RAID-5 ext4 defaults 0 0
:wq!
--------------------------
5) 설정 적용
#mdadm --detail --scan > /etc/mdadm.conf
6) 확인
#reboot
#df -h // md5 확인
#ll /RAID-5 // 테스트용 데이터 확인
! 장애 테스트 및 복구 실습
( 현재 상황 )
/RAID-Linear /dev/sdb1 , /dev/sdc1
/RAID-0 /dev/sdd1 , /dev/sde1
/RAID-1 /dev/sdf1 , /dev/sdg1
/RAID-5 /dev/sdh1 , /dev/sdi1 , /dev/sdj1
(/dev/sdb1 , /dev/sdd1 , /dev/sdf1 /dev/sdh1 장애테스트)
Vmware Workstation -> 2번 , 4번 디스크 제거
(/dev/sdb1 , /dev/sdd1)
#mdadm /dev/md1 -f /dev/sdf1 // 디스크 고장 (Failure)
#mdadm /dev/md5 -f /dev/sdh1 // 디스크 고장 (Failure)
#reboot
#df- h
// md0 (x)
md0 (x)
md1 (o)
md5 (o)
디스크 새로 추가
RAID-1 , RAID-5 볼륨에 새로 추가한 디스크로 교체
Vmware -> 디스크 0.25GB 2개 추가
#reboot
#ls -l /dev/sd* // 디스크 확인
#fdisk /dev/sdb // 파티셔닝
#fdisk /dev/sdd // 파티셔닝
@root계정 세션 추가
@세션2
#watch -n 1 cat /proc/mdstat
@세션1
#mdadm /dev/md1 --add /dev/sdb1 //md1볼륨에 sdb1디스크 추가
@세션2에서 데이터 '복사'하는 과정 확인
@세션1
#mdadm /dev/md5 --add /dev/sdd1 //md5볼륨에 sdd1디스크 추가
@세션2에서 데이터 '복구(재구축)'하는 과정 확인
LVM ( Logical Volume Manager )
- Disk 파티션을 효율적으로 관리하고 사용할 수 있는 방식
PV ( Physical Volume )
/dev/sdb1 , /dev/sdc1과 같은 실제 하드디스크의
파티션을 의미
VG ( Volume Group )
여러개의 PV를 그룹으로 묶어 놓은 것을 의미
LV ( Logical Volume )
VG를 다시 적절한 크기의 파티션으로 나눌때의
논리파티션을 의미
LE / PE ( Logical , Physical Extent )
LV , PV가 가진 일정한 크기의 블록을 의미
* LVM 관련 명령어
1. PV( Volume Disk ) 제작
1) 볼륨제작
[ 사용법 ]
#pvcreate [파티션명]
Ex)
#pvcreate /dev/sdb1
#pvcreate /dev/sdc1 /dev/sdd1
2) 볼륨확인
#pvs // 전체확인
#pvdisplay // 상세확인
3) 볼륨제거
[사용법]
#pvcremove [볼륨명] // PV를 디스크로 환원
Ex)
#pvremove /dev/sdb1
2. VG ( Disk Pool )
1) 볼륨그룹 생성
[사용법]
#vgcreate [그룹명] [pv] [pv] ...
Ex)
#vgcreate VG /dev/sdb1 /dev/sdc1
2) 확인
#vgs // 전체확인
#vgdisplay // 상세확인 ( 전체 )
#vgsiplay [그룹명] // 상세확인 ( 특정그룹 )
3) 삭제
[사용법]
#vgremove [그룹명]
Ex)
#vgremove VG
4) 그룹 확장
[사용법]
#vgextend [그룹명] [newPV]
Ex)
#vgextend VG /dev/sdf1 // VG에 sdf1 PV를 추가
5) 그룹 축소
#vgreduce [그룹명] [PV]
Ex)
#vgreduce VG /dev/sdf1 // VG에 sdf1를 제거
3. LV
1) 생성
[사용법]
#lvcreate -n [LV명] -l [사용량] [그룹명]
#lvcreate -n [LV명] -L [용량] [그룹명]
Ex)
#lvcreate -n LV -l 100%FREE VG
#lvcreate -n LV -L 1.5G VG
2) 확인
#lvs // 전체 확인
#lvsdisplay // 상세 확인 ( 전체 )
#lvdisplay /dev[그룹]/[LV명] // 상세 확인 ( 특정 LV )
3) 삭제
[사용법]
#lvremove [/dev/VG명/LV명]
Ex)
#lvremove /dev/VG/LV
+@참고
삭제 순서
umount -> lvremove -> vgremove -> pvremove
4) 확장
[사용법]
#lvextend -n [LV명] -l +[사용량] [그룹명]
#lvextend -n [LV명] -L +[용량] [그룹명]
Ex)
#lvextend -n LV -l +100%FREE VG
#lvextend -n LV -L +1.5G VG
! 실 습
( 디스크 추가전으로 스냅샷 )
1) 디스크 파티셔닝
#fdisk /dev/sdb
n
p
1
"enter"
"enter"
t
8e // Linux LVM으로 변경
w
@dev/sdc , /dev/sdd , /dev/sde도 동일한 작업진행
2) PV 생성
#pvcreate /dev/sdb1
#pvcreate /dev/sdc1 /dev/sdd1 /dev/sde1
#pvs // PV생성 확인
#pvdisplay // PV생성 확인
3) VG 생성
#vgcreate VG /dev/sdb1 /dev/sdc1 /dev/sdd1
#vgs // VG생성 확인
#vgdisplay // VG생성 확인
#pvs // VG에 포함되어있는지 확인
4) LV 생성
#lvcreate -n LV -l 100%FREE VG
#lvs // LV생성 확인
#lvdiplay // LV생성 확인
5) 파일 시스템 생성
#mkfs -t ext4 /dev/VG/LV
6) 마운트 포인트 생성 및 마운트
#mkdir /LVM
#mount /dev/VG/LV /LVM
#df -h //용량 확인
7) fstab 등록
#blkid
/dev/mapper/VG-LV=UUID //UUID복사
#vi /etc/fstab
--------------------------------------
맨하단에
UUID=복사 /LVM ext4 defaults 0 0
:wq!
--------------------------------------
#reboot
#df -h
8) LV 용량 증설
#cp -r /usr /LVM // 간단한 테스트
#df -h // 용량 확인
#vgextend VG /dev/sde1 // VG에 /dev/sde1추가
#lvextend +100%FREE /dev/VG/LV // LV에 추가
#df -h // 아직 변경전 (대략750MB)
#resize2fs /dev/VG/LV // 파일시스템의 크기를 재조정
#df -h // 재조정된 크기 확인 (대략1000MB)
+@) 삭제
#umount /dev/VG/LV // 마운트 해지
#lvs // lv확인
#lvremove /dev/VG/LV // lv제거
#lvs // 제거 확인
#vgs // vg확인
#vgremove VG // vg제거
#vgs // 제거 확인
#pvs // pv확인
#pvremove /dev/sdb1 /dev/sdc1
/dev/sdd1 /dev/sde1 // pv제거
#pvs // 제거 확인
! 연 습
(디스크 추가 후 스냅샷)
1) 디스크 추가 및 파티셔닝
/dev/sdb1 0.25G /dev/sdc1 0.25G /dev/sdd1 0.25G
/dev/sde1 0.25G /dev/sdf1 0.25G /dev/sdg1 0.25G
/dev/sdh1 0.25G /dev/sdi1 0.25G /dev/sdj1 0.25G
2) PV , VG , LV 생성
[/dev/sdb1 , /dev/sdc1 , /dev/sdd1] -> VG1 -> LV1
[/dev/sde1 , /dev/sdf1 , /dev/sdg1] -> VG2 -> LV2
3) 파일시스템 생성 및 마운트 , fstab 등록
LV1 -> /LVM1 디렉터리에 마운트
LV2 -> /LVM2 디렉터리에 마운트
4) /dev/sdh1을 LV1에 증설
/dev/sdi1 , /dev/sdj1을 LV2에 증설
1) 디스크 추가 및 파티셔닝
#fdisk /dev/sdb1
n
p
1
enter
enter
t // 타입 변경
8e // Linux LVM으로 설정
w // 저장후 종료
@/dev/sdc , /dev/sdd ~~ /dev/sdj1도 똑같이 진행
2) PV , VG , LV 생성
PV[ /dev/sdb1 , /dev/sdc1 , /dev/sdd1 ] -> VG1 -> LV1 -> /LVM1 마운트
PV[ /dev/sde1 , /dev/sdf1 , /dev/sdg1 ] -> VG2 -> LV2 -> /LVM2 마운트
#pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1
#vgcreate VG1 /dev/sdb1 /dev/sdc1 /dev/sdd1
#vgcreate VG2 /dev/sde1 /dev/sdf1 /dev/sdg1
#lvcreate -n LV1 -l 100%FREE VG1
#lvcreate -n LV2 -l 100%FREE VG2
3) 파일시스템 생성 및 마운트 , fstab에 등록
#mkfs -t ext4 /dev/VG1/LV1
#mkfs -t ext4 /dev/VG2/LV2
#mkdir /LVM{1,2}
#mount /dev/VG1/LV1 /LVM1
#mount /dev/VG2/LV2 /LVM2
#df -h
#blkid
연관 UUID 복사
#vi /etc/fstab
------------------------------------
~~ 하단에 추가 ~~
UUID=~ /LVM1 ext4 defaults 0 0
UUID=~ /LVM2 ext4 defaults 0 0
:wq!
-------------------------------------
#reboot
#df -h
4) /dev/sdh1를 LV1에 증설 ,
/dev/sdi1 , /dev/sdj1를 LV2에 증설
#vgextend VG1 /dev/sdh1
#lvextend -l +%100FREE LV1
#resize2fs /dev/VG1/LV1
#df -h
#vgextend VG2 /dev/sdi1 /dev/sdj1
#lvextend -l +%100FREE LV2
#resize2fs /dev/VG1/LV2
#df -h