디스크 관리

Violet_Evgadn·2023년 4월 27일
1

Linux

목록 보기
19/34

리눅스 파티션

리눅스 파티션이란?

하드 디스크 드라이브의 기억 공간을 별도의 데이터 영역으로 분할하는 것을 말한다.

이렇게 디스크를 분할하는 이유는 디스크의 공간을 나눠 사용 목적과 용도에 따라 고유한 디스크를 사용하기 위함이다.

분할된 디스크 공간은 다른 디스크 공간에 간섭할 수 없기 때문에 디스크 영역에 따라 수행하는 역할을 다르게 한다면 특정 디스크 공간은 안전하게 자신의 역할을 수행할 수 있게 될 것이다. 또한 보호 목적으로도 파티션을 나누어 사용한다.

리눅스 파티션 종류

Primary Partition(주 영역 파티션)

  • 1개의 디스크에 최대 4개의 주영역 파티션을 만들 수 있음

Extend Partition(확장 파티션)

  • 1개의 디스크에 하나의 확장 파티션만 만들 수 있음
  • 4개의 주 영역 파티션만으로는 안정성 등의 이유로 개수가 부족하다. 따라서 아래에서 설명할 논리 영역 파티션을 활용하는데, 이 논리 영역 파티션을 담을 수 있는 그릇 역할을 하는 것이 확장 파티션이다.
  • Primary Partition을 구성하고 남은 공간으로 설정

Logical Partition(논리 영역 파티션)

  • 확장 파티션 안에 만들 수 있는 파티션
  • 파티션 개수가 15개만 넘지 않으면 자유롭게 생성할 수 있긴 하나 12개 이상의 파티션을 만드는 것은 시스템에 좋지 않으므로 적절히 설정해야 함
  • Primary Partition과 달리 명령을 실행시킬 수는 없으 단순히 데이터만 저장할 수 있음

장치 파일(Device File) 이름 생성 기준

이전에 리눅스에서는 모든 하드웨어를 마운트를 통해 디렉터리 형태로 관리한다고 설명했다.

그렇다면 하드웨어는 어떠한 디렉터리와 대응되는 것일까?

장치 파일은 디스크의 종류에 따라 대응될 디렉터리가 정해져 있다.

예를 들어 IDE 디스크의 경우 /dev/hdX이며 SCSI 디스크의 경우 /dev/sdX와 대응된다.

맨 끝에 붙은 X에는 디스크 개수에 따라 a부터 z까지 붙여준다.

예를 들어 IDE 디스크가 1개 있을 경우 /dev/hda만 존재할 것이고 SCSI 디스크가 2개 있을 경우 /dev/sda와 /dev/sdb로 장치 파일이 구성될 것이다.

이렇게 하드웨어를 장치 파일과 연결시켰다 하더라도 끝이 아니다.

위에서 말했듯 리눅스에선 디스크 파티션을 통해 디스크를 몇 개의 영역으로 나눌 수 있기 때문에 이 파티션 영역을 구분할 수 있어야 한다.

따라서 리눅스 서버는 파티션 영역을 구분하기 위해 정해진 장치 파일 뒤에 숫자를 붙여 파티션 영역을 구분하게 된다.

예를 들어 /dev/hda 디스크를 2개 파티션으로 나눌 경우 /dev/hda1과 /dev/hda2로 나누어 구분하는 것이다.

파티션 분할이 필요한 디렉터리

루트 파티션(/)

핵심 기능들이 보호되도록 다른 파일 시스템과 분리해 놓는 것이 좋음

/boot 파티션

리눅스 커널 이미지, 맵, 파일 등 커널이 저장되어 있는 디렉터리

/var 파티션

  • /var 파티션은 Spool 디렉터리(메일, 프린트 등)와 로그 파일을 저장함
  • /var 파티션에서는 계속해서 정보가 추가되거나 수정사항이 발생하므로 매우 큰 파일이 생길 수 있기 때문에 파티션 분할이 필수적이다.

/home 파티션

사용자의 홈 디렉터리를 위한 파티션으로 사용자가 서버에 접근하는 목적에 따라 구분하기 위하여 파티션을 분리하는 것이 좋음

/swap 파티션

  • 가상 메모리를 저장하는 파티션
  • 보통 RAM 크기의 2배로 사용함

/tmp 파티션

  • 사용자 응용 프로그램에서 임시 파일을 저장하는 곳으로 사용되는 파티션
  • 매우 큰 임시 파일이 생기거나 보안상 문제가 생길 수 있으므로 별도의 파티션으로 분리하는 것이 좋음

마지막으로 위에 설명한 파티션 분할이 필요한 디렉터리들을 고려하여 디스크 파티션을 구성한 예시 이미지를 확인하자.

마운트

하드 디스크를 추가하여 사용하기 위해선 마운트 과정이 필수적으로 필요하다.

그렇다면 "마운트"란 무엇일까?

리눅스에서는 하드웨어를 모두 디렉터리 형태로 관리하고 있는데 리눅스에서 하드디스크 파티션, CD/DVD, USB 메모리 등을 사용하기 위해선 특정 디렉터리에 연결을 시켜줘야 한다.

이렇게 물리적 장치를 특정 위치(대부분 디렉터리)에 연결시켜 주는 과정을 마운트라고 한다.

출처 : https://sksstar.tistory.com/7

위 그림을 통해 마운트를 설명한 사이트가 마운트를 가장 이해하기 쉽게 표현했다고 생각해서 가지고 왔다.

만약 필자의 설명이 이해가 되지 않는다면 위 사이트에 들어가 설명을 읽어보자.

물리적 장치 = 기차, 마운트 디렉터리(하드웨어와 연결된 디렉터리) = 서울역, 데이터 = 홍길동이다.

기차는 서울역에 정차했다. 이제 기차는 서울역에서 사람을 태울 수 있는 상태가 되는 것이다.

이때 홍길동이라는 사람이 후다닥 뛰어와서 서울역에 정차한 기차에 탔다. 이럼 결과적으로 "서울역에 정차한 기차는 홍길동을 태웠다"라는 결과로 이어질 것이다.

이를 리눅스의 마운팅 시스템에 비롯해 이해해 보자.

물리적 장치(기차)는 마운팅 디렉터리(서울역)와 연결되었다.(도착했다)

이제 물리적 장치는 마운팅 디렉터리에 저장한 데이터(홍길동)를 가져올 수 있는 상태가 되는 것이다.

이런 상황에서 마운팅 디렉터리에 데이터가 저장된다면 마운팅 디렉터리는 물리적 디스크와 마운팅 되어 있으므로 데이터는 마운팅 디렉터리를 거쳐 하드웨어에 저장되는 것이다.

그렇다면 조금 심화 과정에 들어가 보자. 만약 마운팅이 풀리면 그때 저장된 데이터는 어떻게 될까?

홍길동을 태운 기차가 서울역을 떠나 대전역에 도착했다고 가정해 보자. 그럼 홍길동은 없어진 것일까?

아니다. 홍길동이라는 사람은 여전히 기차 내에 존재하나 서울역에서는 찾지 못하고 대전역에서 찾을 수 있는 것이다.

마운팅 시스템에서도 동일하다.

원래 마운팅 되었던 디렉터리(서울역)와 하드웨어를 언마운트시킨 뒤 새로운 디렉터리(대전역)에 하드웨어를 새로 마운트 시켰다 가정해 보자.

이 과정에서 계속 하드웨어 기기(기차)에는 데이터가 저장되어 있을 것이다. 단지 저장되어 있는 데이터를 실제로 찾기 위해선 이전 마운팅 디렉터리(서울역)가 아닌 새롭게 마운팅 된 디렉터리(대전역)를 뒤져야 하는 것이다.


Virtual Machine에서 하드디스크 추가

1. 원하는 서버 마우스 오른쪽 클릭 > Settings 선택

2. Add > Hard Disk 선택 후 원하는 용량 설정

참고로 필자는 SCSI로 5GB 정도의 하드디스크를 추가했다.

3. 디스크 추가 여부 확인

fdisk -l

리눅스에서 위 명령어를 치면 물리적으로 장착된 디스크 정보를 확인할 수 있다.

현재 필자는 5GB의 SCSI 하드디스크를 달았고 이미 SCSI 하드디스크가 존재하고 있던 상태였기 때문에 /dev/sdb가 추가되어야 할 것이다.

5GB /dev/sdb가 정상적으로 추가되었음을 알 수 있다.

(추가로 /dev/sda, 즉 원래 존재하던 하드 디스크는 3개의 파티션으로 구성되었음을 알 수 있다)

4. 추가한 디스크에 대하여 파티션 설정 모드 진입

fdisk [추가한 디스크 장치명]

3번 과정에서 추가한 하드디스크가 /dev/sdb 장치 파일 이름을 가졌으므로 /dev/sdb를 입력했다.

파티션 설정 모드에서 자주 활용되는 Command는 아래와 같다.

  • d : Delete Partition. 파티션 삭제
  • n : Add a New Partition. 파티션 추가
  • w : 설정한 파티션 값 저장
    • 제일 중요한 Command이다.
    • w를 입력하지 않고 파티션 설정 모드에서 빠져나온다면 그동안 설정했던 내용들이 모두 적용되지 않고 날아갈 것이다.
  • p : 현재까지
    • 수행한 파티션 설정 확인

우리는 파티션을 추가할 것이기 때문에 Command에 n을 입력해 보자.

5. 파티션 추가

일단 Command로 n을 입력하여 새로운 파티션을 추가시켰다.

우리가 추가시킬 파티션은 Primary Partition이기 때문에 p를 입력해 준다.

그럼 Partition Number를 지정하는데, 위에서 배웠듯 1개 디스크당 4개의 Primary Partition밖에 생성할 수 없으므로 1-4 중 1개의 값을 선택하도록 나와 있다.

이후 First Sector와 Last Sector는 Primary Partition의 시작 부분과 끝 부분을 의미하는데, 이를 통해 파티션 크기를 지정할 수 있다. 필자는 디폴트 값을 활용하기 위하여 아무 값도 입력하지 않고 엔터를 쳤다.

Last Sector에는 파티션 마지막 값을 입력하지 않고 설정할 파티션 크기를 "+256M" 처럼 입력해도 된다.

설정이 완료되어 p를 입력해 보았다.

/dev/sdb가 /dev/sdb1로 변경됨으로 파티션이 수행되었음을 확인할 수 있다.

이젠 "w"를 입력하여(진짜 중요하다) 설정 사항을 반영한 뒤 파티션 설정 창을 벗어나자.

6. 파티션 시스템 설정

이제 파티션은 생성되었다.

하지만 리눅스에서 파티션을 활용하기 위해선 리눅스 시스템에 맞게 파일 시스템 설정을 수행해야 한다.

파일 시스템 설정 한다는 것에 대한 의미가 어려울 수 있는데, 쉽게 말하자면 생성된 파티션의 포맷을 미리 정해져 있는 규격에 맞춤으로써 실제로 활용할 수 있게 만들어주는 것이다.

파티션을 만드는 것은 내가 가진 땅에서 건물을 지을 부분을 분리해 놓는 작업을 말하며 파티션 시스템 설정은 분리된 땅에 건물을 내가 원하는 목적으로 사용하기 위해 규격에 맞춰 건물을 짓는 작업이라고 할 수 있겠다.

리눅스 파일 시스템에는 여러 가지가 있고 그중 대표적으로 아래 3가지가 존재한다.

  • FAT32 : 윈도우와 리눅스 범용적으로 사용할 수 있는 파일 시스템. 대용량 NTFS 파일 시스템 이하의 환경에서만 동작 가능
  • ext : 현재 사용 X
  • ext2 : 긴 파일의 시스템 이름 지원
  • ext3 : 보안 부분이 조금 향상된 기본 파일 시스템.
  • ext4 : 대형 파일 시스템을 지향하는 목적으로 개발된 파일 시스템. ext3 단점을 많이 보완했으며 현재까지 개발 중에 있는 파일 시스템

필자는 ext4 파일 시스템으로 파티션 시스템을 설정하겠다.

mkfs.ext4 [partition_name]

위 사진에서 파티션 이름은 "/dev/sdb1"이므로 이 값을 입력해 주면 될 것이다.

7. 파티션 마운트

파티션 시스템을 설정했다면 이젠 설정이 끝난 하드웨어를 실제로 활용할 수 있도록 파티션을 디렉터리와 마운트 시켜야 한다.

일단 디렉터리를 만들자

# 디렉토리 생성
mkdir /mount_dir

# 디렉토리 권한 수정
chmod 777 /mount_dir

이제 생성한 /mount_dir에 파티션(/dev/sdb1)을 마운트 시키자.

mount 명령어 사용법은 아래와 같다.

mount [하드웨어 기기] [마운팅할 디렉터리]

현재 하드웨어 기기는 디스크 파티션(/dev/sdb1)이며 마운팅 할 디렉터리는 생성한 /mount_dir이므로 아래 사진과 같이 입력하면 될 것이다.

마지막으로 "df -h" 명령어를 통해 리눅스 시스템 전체의 마운트 된 디스크 사용량을 확인해 보자.

빨간색 네모에 쓰여 있는 문구를 통해 마운트가 성공적으로 완료되었음을 확인할 수 있다.

8. 부팅 시 자동 마운트하도록 설정

마지막 과정이다. 이를 수행하기 전 리눅스 서버를 껐다 킨 후 "df -h" 명령어를 입력해 보자.

어라? 설정해 놨던 /dev/sdb1이 없어졌음을 확인할 수 있다.

이전에 Linux 부팅 과정을 설명하며 Kernel 단계 수행 과정에 대해 설명한 적이 있다.

이 중 7번 Init Process를 호출하는 과정이 존재했는데 Init 프로그램은 다양한 Daemon을 생성하고 /etc/fstab 파일에 지정된 모든 Partition을 마운트 시키는 역할을 담당한다고 말했다.

우리는 이 설명을 통해 하드웨어(디스크 파티션)가 마운팅 디렉터리와 마운트 되는 것은 컴퓨터에 물리적으로 저장되어 있는 것이 아니라 /etc/fstab 파일 설정에 따라 OS가 마운팅 시킴으로써 리눅스에서 하드웨어를 사용할 수 있게 한다는 것을 알 수 있다.

하지만 우리가 위에서 지정한 /dev/sdb1은 우리가 임의대로 지정한 디스크 파티션 및 마운트 상태일 뿐 OS 입장에서는 /etc/fstab 파일에 존재하지 않는 설정이므로 부팅 과정에서 자동 마운트가 수행되지 않을 것이다.

따라서 재부팅을 시키면 /dev/sdb1 마운트 설정은 없어지게 되는 것이다.

이렇게 될 경우 시스템을 재부팅시킬 때마다 /dev/sdb1과 /mount_dir을 수동으로 마운트 시켜줘야 한다는 것인데 이는 너무 귀찮다.

따라서 부팅 시 /dev/sdb1도 자동 마운트 되도록 /etc/fstab 파일에 마운트 설정을 추가해 주자.

/etc/fstab 파일을 VI 에디터로 연 다음 아래 문구를 마지막에 추가해 주자

/dev/sdb1 /mount_dir ext4 defaults 1 2

만약 파티션이나 마운팅 디렉터리 이름을 다르게 설정했거나 파티션 시스템 설정이 ext4가 아니면 그에 맞춰 위 문구를 수정하면 된다.

defaults, 1, 2의 의미는 아래에서 자세히 알아보자.

이후 파일 수정을 완료하고 다시 리눅스 서버를 재시작시켜보자.

/dev/sdb1이 정상적으로 마운팅 되었음을 알 수 있다.


기타 내용

UUID

사람보다는 컴퓨터를 위해 만들어진 값으로 디바이스 명이 바뀌더라도 정상 작동하도록 설정하는 값이다.

간단히 컴퓨터 디바이스의 고유 주소값이라 생각하면 편하다.

"blkid"나 "ls -l /dev/disk/by-uuid" 명령을 통해 디스크 파티션들의 UUID를 확인할 수 있다.

/etc/fstab 구성

[디스크 파티션(하드웨어)] [마운팅 디렉터리] [파일시스템 종류] [옵션] [덤프] [파일체크옵션]

디스크 파티션, 마운팅 디렉터리, 파일시스템 종류는 위에서 설명한 그대로이다.

덤프

  • 0 : 백업을 수행하지 X
  • 1 : 백업 가능한 파일 시스템

파일체크옵션

루트 파일 시스템을 점검할 때 사용한다.

  • 0 : 부팅 시 파일 시스템을 점검하지 X
  • 1 : 루트 파일 시스템으로써 부팅 시 파일 시스템 점검을 한다.
    • /부분을 체크 후 부팅
  • 2 : 루트 파일시스템 이외의 파일 시스템으로써 부팅 시 파일시스템 점검을 한다.
    • /를 제외한 나머지 파티션 체크 후 부팅

옵션

  • defaults : rw, suid, exec, auto, nouser 옵션을 모두 선택한 것과 같다.
  • rw : Read & Write 허용
  • suid : SetUID와 SetGID 사용을 허용
  • exec : 실행 파일이 실행되는 것을 허용
  • auto : 부팅 시 자동 마운트. 이 설정 때문에 부팅 과정에서 마운트가 가능해진다.
  • nouser : 일반 사용자 마운트 불가능. root만 가능
  • ...
profile
혹시 틀린 내용이 있다면 언제든 말씀해주세요!

0개의 댓글