9. 기본적인 디스크이론과 관리

2022. 9. 19. 12:35Linux

우선 디스크의 이론에 대해서 살펴보겠습니다.

 

운영체제별 디스크 사용 과정

리눅스 : 파티셔닝 -> 파일시스템 -> 마운트

윈도우 : 파티셔닝 -> 파일시스템 -> 드라이브명 할당. c:, d: ...

 

BIOS란?

Basic Input/Output System는 메인보드의 ROM에 내장된 프로그램으로서 키보드, 마우스, CPU, HDD 등의 하드웨어 장치를 초기화하고 제어하여 OS 부팅을 이어가도록 스타트 역할을 하는 펌웨어 인터페이스입니다.

통상 BIOS는 레거시 BIOS라 칭하고, 후속 업글 버전은 UEFI(Unified Extentiable Firmware interface)입니다.

 

파티셔닝이란?

하드 디스크의 공간을 파티션이라 알려진 별도의 데이터 영역으로 논리적으로 분할하는 것입니다.

디스크를 사용하기 위해서는 반드시 1개 이상의 파티션이 존재해야 합니다.

 

파티션 방식

  • MBR(Master Boot Record)
    • 최대 2TB 까지만 인식 가능 
    • 최대 4개의 주(Primary) 파티션
    • 주 파티션 중 오로지 1개의 파티션만 확장(Extended) 파티션 생성 가능
    • 레거시 BIOS의 경우 MBR 방식만 사용 가능
  • GPT(GUID Partition Table)
    • 최대 8ZB 까지 지원 가능 
    • 최대 128개 파티션의 생성이 가능
    • UEFI는 MBR과 GPT 방식 모두 사용할 수 있지만 앞으로 출시될 메인보드들은 UEFI 기반에 GPT만 지원

 

파일시스템이란?

컴퓨터에서 파일이나 자료를 쉽게 발견 및 접근할 수 있도록 보관 또는 조직하는 체제를 가리키는 말입니다.

리눅스는 주로 xfs, ext 시리즈를 사용하고, 윈도우는 FAT과 NTFS 를 사용합니다.

 

저널링 파일시스템(Journaling File System)

  • 저널링(Journaling)
    • Stoarge에 데이터를 저장하기 전에 Journal 영역에 데이터의 변경 이력을 저장하고, Stoarge에 데이터 변경 내역을 저장하는 활동을 의미합니다.
    • 장점 : 시스템 장애 등 Storage에 장애 발생 시, Storage의 장애복구를 빠른 시간에 원활하게 처리할 수 있습니다.
    • 단점 : log를 생성하다 보니 시간이 오래 걸린다는 단점이 있습니다.
  • EXT3, EXT4가 있습니다.

 

마운트란?

디스크 공간과 디렉토리를 연결하는 것입니다. 리눅스에서 디스크 공간을 사용하기 위해서 반드시 필요한 작업입니다.

 

Linux 필수 파티션

  • 리눅스는 최소 2개의 파티션을 요구합니다. swap과 /가 요구됩니다.
    • swap : 메모리가 부족할 때 디스크를 메모리처럼 사용하는 기술입니다.
      • 통상적으로 메모리 용량의 2배로 설정합니다.(1G->2G)
      • 예전 메모리가 너무 비싸던 시절의 기술이고, 지금은 swap 동작하면 메모리가 증설됩니다.
    • / : 최상위 디렉토리 안에 boot, etc등의 디렉토리가 생성됩니다.

이제 직접 리눅스에서 명령어를 쳐가면서 디스크 작업을 해보겠습니다.

 

먼저 10G, 5G의 디스크를 추가합니다.

 

모든 디스크 정보를 출력해보겠습니다.

 

# lsblk

 

우리가 막 추가한 10G sdb, 5G sdc가 보이는 모습입니다.

 

# cat proc/partitions

용량 정보가 보입니다.

 

# fdisk -l


/dev 디렉토리와 장치명에 대해서 짚고 넘어가겠습니다.

 

리눅스 OS에는 디스크 파일들이 위치한 디렉토리 /dev 가 있습니다.

그리고 연결된 장치 타입에 따라서 관례적으로 정해진 이름이 존재합니다.

  • cdrom : CD, DVD-ROM 드라이브
  • fd : 플로피 디스크 드라이브
  • hd : 하드 드라이브나 CD-ROM과 같이 IDE로 연결된 장치
  • md : 하드 드라이브와 같은 메타디스크와 RAID 장치
  • ram : RAM 디스크
  • sd : SCSI로 연결된 대용량 저장 장치
  • usb : USB로 연결된 장치

이제 파티셔닝 하겠습니다.

 

sdb 디스크를 1개의 파티션으로 만들겠습니다.

 

  1. # fdisk /dev/sdb // /dev/sdb 디스크 설정
  2. : n // 새로만들기
  3. : Primary 파티션 기본값
  4. : 파티션 번호 1 기본값
  5. : 시작 sector 기본값
  6. : 마지막 섹터 기본값(모든 용량)

 

내가 설정한 파티션을 확인할 수 있습니다. 

: p

/dev/sdb1 파티션이 생성됐습니다.

 

설정한 파티션을 저장하고 fdisk를 나가줍니다.

: w

 

lsblk로 확인한 모습입니다.

 

이제 파일시스템을 파티션에 셋팅해 줘야 합니다. ex4 파일시스템을 셋팅해 주겠습니다.

# mkfs.ext4 /dev/sdb1 또는

# mkfs -t ext4 /dev/sdb1

 

파일시스템이 잘 셋팅됐는지 확인해보겠습니다.

# blkid

 

이제 디스크 공간을 디렉토리와 연결하는 마운트를 진행하겠습니다.

먼저 마운트할 디렉토리를 생성해 주겠습니다. 이때 이 디렉토리를 마운트포인트 라고 합니다.

 

마운트 하기 전에 txt 파일을 하나 넣어주겠습니다.

 

# mount 디스크공간명 마운트포인트

# mount /dev/sdb1 /fs1

 

이후 마운트가 잘 됐는지 df 명령어로 확인해보겠습니다.

 

# df [옵션] : 파일 시스템 디스크 사용량 확인

옵션 -

a : 모든 파일시스템을 출력

--total : 총합 total 라인을 추가하여 출력

h : 보기 편한 용량 크기로 출력(1K, 20M, 2.0G)

H : 블럭단위를 1024가 아닌 1000단위로 용량계산하여 출력

l : 출력하는 목록을 로컬파일시스템으로 제한

t : 지정한 파일타입(nfs, ext4 등)만 파일시스템을 출력

x : t 옵션과 반대. 지정한 파일 타입을 제외하고 파일 시스템 출력

T : 파일 타입항목을 추가하여 출력

# df -Th : 파일시스템 타입과 용량을 보기 편하게 출력

 

마운트 이후 beforemount.txt 파일은 사라지고 lost+found 디렉토리가 하나 보입니다.

이 디렉토리에 대해서 알아보니 파티션이 나뉜 곳마다 생기고

비정상적인 시스템 종료등의 오류로 인한 메모리나 버퍼의 내용을 담고 있다고 재부팅 시 복구에 이용된다고 합니다.

웬만하면 삭제하지 않고 그냥 두는게 좋을 듯 합니다.

 

이제 다시 마운트를 해제하고 파티션을 삭제까지 하겠습니다.

# umount 마운트포인트

# umount /fs1

여기서 주의할 점은 언마운트 할때 현재 작업 위치가 마운트 포인트 내부면 안된다는 것입니다.

오류가 뜨고 언마운트 되지 않습니다.

 

마운트 포인트에서 나가서 언마운트 하니 잘 됩니다. 또한 마운트전 생성한 beforemount.txt  파일이 보입니다.

 

그리고 df 명령어를 통해 디스크를 확인할 수 없게 됐습니다.

 

이제 파티션을 삭제하겠습니다.

# fdisk /dev/sdb

: d

삭제하니 p를 통해 확인했을 때 남아있는 파티션이 하나도 없습니다.

 

lsblk로 확인해보니 sdb1 파티션이 사라진 걸 확인할 수 있습니다.


끝!