05. 디스크 관리 및 파일 시스템 - 파일 시스템 및 마운트 이론

prana·2023년 3월 6일
0

Linux

목록 보기
19/28

출처 : 유튜브 따라하면서 배우는 it- 리눅스 고급 과정

  • 리눅스의 파일 시스템

리눅스의 파일 시스템 - 파일 시스템 종류

  • 계속해서 발전해 온 파일시스템의 종류

EXT2EXT3EXT4
출시199320012006
최대 파일 크기16GB ~ 2TB16GB ~ 2TB16GB ~ 16TB
최대 파일 시스템 크기2TB ~ 32TB2TB ~ 32TB1EB
특징저널링 X저널링 OExtents Multi-block Allocation
  • 저널링: 파일시스템이 물리적 하드디스크 파일을 링크로 만들어주는데, 링크를 잃어버릴 수도 있는데, 그걸 복구할 수 있는 기능이 추가된 파일 시스템.

    • EXT3부터 추가가 됨. xfs에도 저널링 기능이 들어가 있음.
  • 발전을 해왔다.

  • 파일시스템이 뭔데?!

    • 운영체제의 한 일부. 컴퓨터에서 파일이나 자료를 쉽게 보고 보관하는 등 관리하는 프로그램.
  • centos에서는 다른 파일 시스템을 사용하기 시작함. 요즘에는 xfs 를 쓰고 있음.


리눅스의 파일 시스템 - 파일 시스템 구조

리눅스에서 많이 쓰는 ext4의 파일 시스템 구조

  • 내부는 복잡하게 이루어져있다.

  • superblock, ....

  • 네트워크 상에서 프로토콜 같은거라고 보면 된다.

  • 이 중에서 그나마 중요한 내용이 있어서 보여줌.

  • 리눅스 파일 시스템 파일이 저장될 때, 빨간 부분이 중요

  • super block: 엄청 중요. 이 테이블의 모든 정보를 가지고 있음.

    • 얘가 만약 문제 있으면 정보 자체가 다 날라감.
  • inode table : 하드링크, 파일의 고유번호 ls -il 하드링크에는 inode번호가 같다.

    • 파일마다 부여되는 inode, inode table이 data block을 가리킴(실제 데이터블록에 여러분이 저장하는 문서 등이 저장됨)

  • 직접적으로 불러오는 경우도 있고, inode-> inode-> data block도 가능.

  • 파일을 좀 더 효율적으로 관리하려고. data 하나당 일정한 크기. 용량이 적은 경우에는 inode가 직접적으로 가리키게. 큰 경우엔, 따로 뽑아내서 직접 가리킴.

  • data blocks 예를 들어 1MB라고 하면, 최대 15MB밖에 안됨.

  • inode -> inode 128개 -> 1MB짜리

  • ex) inode -> inode -> inode (128 * 128 = 14GB)


리눅스의 파일 시스템 - 파일 시스템 관리

  • 파일 시스템 생성 mkfs

  • 파일 시스템 생성 mkfs make file system

  • 파티션의 번호를 지정해주면 된다. 장치번호 아니고 파티션 번호

  • 기본적으로 ext 파일 시스템으로 됨. 타입 지정하면 가능함.

  • 윈도우 같은 경우에는 파일시스템까지만 만들어도 사용 가능. 리눅스에서는 마운트라는 작업을 해주어야만, 디스크를 사용할 수 있다.


마운트 및 언마운트 - 마운트란?

특정 디렉토리와 특정 장치를 연결하는 마운트

  • 만들어둔 파일 시스템을 특정 디렉토리랑 연결해주는 작업.

  • disk1이라는 디렉토리를 만들고, fileA, fileB, fileC 만듦

  • 이 파일은 20GB에 저장된 하드디스크 친구들. 여기에 저장.


  • mount /dev/sdb1 /disk1 이라는 디렉토리와 연결시켜버림.
  • cd /disk1
  • ls 내가 만든 새로운 파일시스템으로 연결. 원래 있던 파일들 없음.
  • 이 디렉토리가 연결이 제가 추가한 /dev/sdb1로 연결되어 있음.
  • 폴더들이 보이지 않는건 사라진 게 아님.

  • 모든 파일 시스템들이, / 밑에 특정 디렉토리와 연결. 아무리 최상이 되더라도 root 위에는 없음.
  • 어딘가의 디렉토리와 연결시켜준다.

마운트란?

  • 디렉토리와 장치를 연결하는 마운트

    mout [옵션][장치] [마운트 포인트\

  • [옵션]
    -t: 특정 파일 시스템의 종류를 지정

  • [장치] (파티션 번호까지 써 줘야함)
    : 마운트 포인트와 연결할 장치를 지정, 일반적으로 파일 시스템을 생성한 파티션이 온다.

  • [마운트 포인트]
    : 특정 디렉토리를 지정, 해당 디렉토리로 접근 시, 지정한 장치로 이동됨


자동 마운트 설정 파일 - /etc/fastab 파일

  • 마운트는 수동으로 하고 재부팅을 하면 다 풀리게 되어있다.
  • /etc/fstab 자동으로 마운트. 아까 한 명령어는 추가되어있지 않기 때문에, 자동으로 마운트가 되지 않음.
  • 자동으로 하고 싶으면 여기에 추가하면 됨.
  • /dev/mapper/centos-root root 디렉토리로 mount 되게 되어있음.
  • root는 부팅되면서 자동으로 마운트 되면서 됐던 것임.
  • 양식에 맞게 설정해줘야 함.

실습

  1. 디스크 추가해보기
  • 디스크를 새로 추가하고 사용하기 위한 기본 설정해보기
  1. 마운트 해보기
  • 추가한 디스크를 마운트하여 사용해보기

1. 파일 시스템 생성

  • fdisk -l 파티션에 파일 시스템을 생성.
  • 파일 시스템 생성. 찾아가는 inode 경로들을 아예 초기화. 포맷

  • mkfs /dev/sdb1 (100MB 파티션 만들던것)
  • 여러가지 정보들 확인할 수 있음.
  • 파일 시스템 생성됨 -> 디스크 사용하려면 특정 디렉토리와 연결 -> 마운트 과정
  • mkdir /disk1

  • cd /disk1

  • ls -al

  • touch fileA

  • cd ..

  • 사용하는 mount에선 왠만하면 안하는 게 좋다.

  • mount /dev/sdb1 /disk1 : sdb1 파일 시스템,
    disk1과 디렉토리 이동하게 되면, 100MB짜리 파티션으로 만든 하드디스크로 이동하게 된다.

  • cd /disk1

  • ls -l

  • 디렉토리 cd..로 나와서,
  • 언마운트(리눅스는 umount)
  • 어떤 디스크와 연결되는지만 확인
  • 다시 mount로 연결해보면,
  • 나중에는 어떤 디스크와 어떤 디렉토리가 연결 되었는지 잘 확인하고 사용해야 한다.

실습 - 자동 마운트 (/etc/fstab 파일)

  • 얘를 재부팅해보면? df -h 했을 때,

  • 연결이 끊김.

  • ls -l /etc/fstab : 부팅이 되면서, 운영체제가 이 파일을 읽어서 이 파일에 있는 장치들만 mount를 수행한다.

  • mount같은 경우에는 명령어 -> 1회성, 재부팅 하면 추가가 되어있지 않음

  • 이 파일을 직접 수정해야 자동으로 마운트 된다.

  • 🌟vi /etc/fstab

  • 한 줄이 mount 작업을 수행해라라는 내용.

  • 특정 파일 시스템(장치) / /(마운트 포인트): 여기에 마운트 시킴 / 파일 시스템의 종류(xfs) / defaults(옵션. 종류 많음.) /

  • #은 주석

  • / : 슬래시 (루트 파일 시스템, 실제로는 마운트 포인트)

  • 옵션 쪽에 ro나 rw ro(read only) 읽기 전용. 생성이나 삭제x 내용을 보는 건 가능. rw(읽고 쓰는 것 가능) , defaults-> rw 세팅됨.

  • 0 0 첫 번째: 0 또는 1이 올 수 있는데, dump라는 명령어 수행할지 안할지,
    fsck(file system check)로 점검을 할지 안할지, 1이면 하는것임.

  • ex) 1 1: dump 백업도 하고, 파일 시스템도 체크를 하고.

  • 자동으로 마운트 되게 하고 싶다, 한 줄 작성.
    -🌟 /dev/sdb1 /disk1 ext2(파일시스템) defaults 0 0
  • 각각의 필드 구분 잘 해두기

  • 얘가 마운트 돼야 정상적으로 쓸 수 있기 때문에, 이게 잘못되면 제대로 부팅 안됨 -> rescue 모드로 복구.

재부팅하면...

자동으로 사용되고 있는 것을 확인할 수 있다.

  • umount 잠깐 풀면 umount /disk1
    원래 mount /dev/sdb1 /disk1 이렇게 쓰는데,
    둘 중 하나만 mount /disk1 -> 저 /etc/fstab 파일에 등록만 해놨다면!!
  • 알아서 저 파일을 참조해서 보고 연결해줌.
  • 마운트 풀고 다시 보면..
  • mount -a : fstab 파일에 설정된 마운트 되어있지 않은 장치들을 한번에 마운트 시켜줌.

실습 - EXT 파일 시스템의 Superblock 복구

🌟🌟Super Block

  • 파일 시스템의 대부분의 정보를 저장하고 있는 블록

  • 얘가 고장나면, 나머지 전부 알아볼 수 없게 됨.

  • 블록 크기에 상관없이 항상 블록 그룹의 첫번째 블록에 저장된다.

  • 굉장히 중요한 정보를 저장하고 있기 때문에 백업을 해둔다.

  • 정보 : 파일 시스템 크기, 마운트 정보, inode의 수, 블록 크기, 데이터 블록의 수

Group Descriptor Table

  • 슈퍼 블록 다음에 위치한다.

  • 그룹 블록에 대한 정보를 저장

  • 정보 : Block Bitmap의 블록 번호, Inode Bitmap의 블록 번호

  • 첫 번째 Inode Table의 블록 번호 등

Block Bitmap : 각각의 블록의 사용현황을 0 or 1로 표시

Inode Bitmap : 각각의 inode의 사용현황을 0 or 1로 표시

Inode Table :

  • EXT3
    • 직접 inode : 데이터 블록의 주소 직접 가리키는 블록
    • 간접 inode: 직접 inode를 가리키는 블록, 하나의 간접 inode가 여러 개의 직접 inode를 가리킬 수 있다.
  • EXT4
    • EXT2, EXT3과는 다르게 inode블록이 한 개의 데이터 블록만 가리키는 것이 아니라, 블록 할당 알고리즘을 이용하여 연관된 블록을 한꺼번에 여러 개 할당할 수 있도록 만들었다.

  • superblock가 고장나면 어떻게 되는가?!

  • umount /disk1 로 마운트를 풀고,

  • dd라는 명령어 : 어떠한 입력장치-> 출력장치로 데이터를 보내주는 역할
    -ex) 입력장치 아무거나, 출력장치는 하드디스크의 파일이라고 하면, 그러한 파일이 새로 생성이 되는.

  • dd if=/dev/zero of=/sjb/test bs(block size)=512 count=20

  • 이러면 10KB 파일이 하나 생성이 됨.

  • 입력장치 --> 출력장치 : 원하는 크기의 파일 만들 수 있고, 입력 장치/출력 하드디스크 장치를 똑같이 복사를 할 수도 있음. 백업하는 데에도 사용할 수 있음

  • /dev/zero : 특이한 장치. 0으로 되어있음. 0을 출력장치에 써버리게 함.


  • 원래 디스크 안에 superblock 어딘가에 있는데, /dev/zero를 덮어씌워서 superblock을 지워버리게 해보는 걸.

  • 파일 시스템 만들 때, 여러 군데 백업이 되는데 복구하는 방법

  • dd if=/dev/zero of=/dev/sdb1 bs-512 count=32 : 슈퍼블록이 저장되는 지점이 32번째까지 덮어쓰면 다 지워짐.

  • 마운트 해제한 상태에서 해주세요.

  • mount /dev/sdb1 /disk1 하면,

  • 파일시스템이 잘못됐다고 나옴. 사용하기 곤란해짐.
  • 어떻게 복구를 하는가?

👍 슈퍼블록 복구
fsck(기본, filesystem check) -b [백업 블록 번호][복구할 장치]

  • ex) fsck -b 8193 -fy /dev/sdf1
  • 8193 : 파일시스템에서 떴던 번호들 중 하나

  • 파일시스템 만들 때부터 네 다섯군데에 백업.. 복구하게 되면,

  • mount /dev/sdb1/disk1 다시 마운트가 가능해진다.
  • 중요하기 때문에 백업이 자동으로 이루어지고, 이런 부분으로 복구도 가능해진다.

0개의 댓글