hann-blume
Linux - Partition 본문
작업 표시줄 검색창에 '파티션' 이라고 입력해보자.
우리는 컴퓨터를 이용할 때 물리적인 저장공간인 SSD 또는 HDD를 구매해서 장착하고
pc에서 이 저장공간을 이용용도와 취향에 따라 논리적으로 나누기도하고
합치기도하며 저장공간을 사용한다.
리눅스에서도 윈도우처럼 저장공간을 추가 장착하고 반대로 제거할 수 있다.
저장공간을 추가하고자 하는 가상머신을 우클릭하여 'settings' 를 누른다.
사진에서는 가상머신이 켜저 있지만 실제로 우리가 저장공간을 추가할 때는
가상머신을 꼭 완전히 종료 시킨 후에 작업해야한다.
그렇지 않으면
pc가 켜진상태에서 본체를 뜯고 HDD를 추가하는 것과 같다.
그리고 'Add'를 누르자
Hard Disk를 선택하고 Next를 누른다.
여기서부터는 기본적으로 다들 알것이라고 생각하기에
사진만으로 넘어가겠다.
용량은 당연히 자유이다. 필요한 만큼.
하지만 여기서는 1GB로 해주겠다.
Finish를 누르면 하드디스크가 추가된 것이 보일 것이다.
이제 가상머신을 부팅해보자
우리가 파티션을 직접 보고 관리하기전에 리눅스에서는 어떻게
파티션이 나뉘는지 알아보자
먼저 리눅스에서 파티션은 3가지의 종류로 구분이 된다.
Primary Partition |
1. 실제 데이터를 저장하고, 운영체제 설치가 가능한 파티션 2. 최대 4개까지 사용이 가능하다. 단, 4개를 모두 사용시 더이상 파티션 작업을 할 수 없다.
|
Extended Partition |
1. 실제 데이터는 저장이 불가능하다. 2. 최대 1개만 사용 가능하다. 3. Logical 파티션을 사용하기 위한 도구라고 생각하면된다. 4. 포맷의 대상이 될 수 없다. |
Logical Partition |
1. 정해진 개수 제한이 없다. 2. 실제 데이터의 저장이 가능하다. 3. 운영체제의 설치는 불가능하다. |
이와 같이 3가지의 파티션으로 구분이 된다.
이제 우리가 하드디스크를 한개 추가했으니 내 가상머신의 하드디스크를 확인해보자
확인은 fdisk -l 명령어를 사용한다
# fdisk -l
보면 총 두개의 하드디스크 목록이 나온다. (그 외의 것들은 무시)
/dev/sda
그리고
/dev/sdb
먼저 sda는 우리가 처음 리눅스 가상머신을 만들 때 기본 하드디스크 용량을
입력해준 것이 기억날 것이다. 그때 만들어준 하드디스크이다.
그리고 sdb는 방금 우리가 추가해준 하드디스크이다.
보면 하드디스크의 이름이 sd는 고정이고 뒤에 a, b로 되어있다.
눈치 챗을 수있지만 리눅스에서 하드디스크의 이름부여는
a -> b -> c -> d -> e......
순서로 붙여진다.
sd는 우리가HDD를 추가하는 과정에서
디스크 타입을 SCSI로 만들어주었다.
즉, Scsi Disk라고 생각하면 된다.
그리고 이번에는 같은 사진에서
붉은 박스 부분을 보자.
/dev/sda의 하드디스크가
/dev/sda1 과 /dev/sda2로 구분되어있다.
이게 파티션이다. 하드디스크와 파티션을 구분할줄 알아야한다.
파티션은 해당 하드디스크의 이름뒤에 숫자가 붙는다.
그리고 start부분과 end부분이 있는데
하드디스크 전체 부분중에 2048번 섹터 부터 4196351번 섹터 까지를
sda1 파티션이 사용중인 것이다.
그리고 Blocks 부분이 해당 파티션의 용량을 나타낸다.
지금은 우리가 새로 추가한 sdb는 아직 파티션이 없는 것을 확인할 수 있다.
그리고 이렇게 파티션 설정이 없는 하드디스크는 장착은 되어있지만
실질적으로 우리가 데이터를 저장하며 사용할 수 있는 상태가 아니다.
그럼 sdb하드디스크를 사용하기위해 파티션 설정을 해보자.
파티션 설정을 위한 명령어
# fdisk /dev/[하드디스크 이름]
# fdisk /dev/sdb
그리고 help 메뉴인 'm'을 눌러보면 우리가 사용할 수 있는 옵션들이 나온다.
이 모든 옵션들을 우리가 모두 외울 필요는 절대 없다.
필요한 것들만 외우면 된다.
d | 파티션 삭제 |
n | 파티션 추가 |
p | 파티션 출력 |
q | 저장하지않고 종료 |
w | 저장하고 종료 |
t | 파티션 시스템 id 변경 |
이렇게 6가지 정도만 우리가 알고 있으면 된다.
다른건 이해가 되지만 t 옵션에 파티션 시스템 id를 변경하는 것이 무슨 말인지 모를 수 있다.
후에 다른 포스팅에서 다룰 것이므로 "이런것이 있구나" 정도로 알아두면 된다.
먼저 파티션을 추가해주기 위해 n 을 입력한다
n
그러면 파티션의 타입을 고르는 메뉴가 나온다.
위에서 설명한 파티션 메뉴중 Logical를 제외한 두가지 파티션 타입이다.
여기서 우리가 알아둘 것이 있다.
아까 Extended는 Logical파티션을 위한 도구라고 했다.
위의 타입선택 메뉴에서 Logical이 나타나지 않는 이유도
우리가 아직 Extended 파티션을 만들어주지 않았기 때문이다.
Extended는 나중에 살펴보고 우선 Primary 파티션을 추가하자.
p
p를 누르면 파티션 넘버를 선택해야한다.
1부터 4까지 선택할 수 있는데 이는 P 파티션은 4개까지 만들 수 있기 때문이다.
default 값이 1로 되어있는데 디폴트 값으로 하려면 숫자입력없이
그냥 Enter를 누르면 디폴트 값으로 자동선택된다.
Enter
그러면 처음 섹터를 입력하라고한다. 아까 위에서 sda를 설명할 때
저 번호들을 잠깐 언급했었다.
이 첫 섹터번호는 왠만해선 건들지않고
항상 Enter로 넘어간다
Enter
그러면 이 파티션의 용량을 얼만큼으로 할 것인지 입력해야한다.
크기를 입력할 때는 항상 K킬로바이트, M메가, G기가를 뒤에 붙여주고
앞에는 + 기호를 붙여준다 .
우리는 200메가로 만들어주자.
+200M
그러면 다시 맨처음으로 돌아온다.
우리가 만든 파티션을 확인하기위해 p옵션을 해보자
p
그럼 sdb 하드디스크에 sdb1 이라는 200메가의 파티션이 만들어 졌다.
이상태에서 그냥 'ctrl+c'나 'q' 옵션을 사용해 파티션 설정메뉴를 나가버리면
만든 파티션이 다시 사라진다.
이 말은 뭔가 잘못이나 실수를 했다면 그냥 나갔다가 다시 만들면 된다는 것이다.
'w'옵션을 이용해 저장하고 나가자.
그러면 성공메세지가 나타나고 파티션 설정이 끝났다.
이번에는 마찬가지로 sdb파티션에 300메가의 P파티션을
2개 더 만들고 w옵션으로 저장하고 나오자.
이 과정은 스스로 해보자.
이렇게 해서 sdb 하드디스크에 sdb1, sdb2, sdb3 파티션을 P타입으로 만들어줬다.
이제 남은 용량 200M를 L타입 파티션(Logical)으로 100M씩 2개를 만들어 줄 것이다.
위에서 말했듯 L타입 파티션을 만들기 위해선 E타입(Extended) 파티션을 먼저 구성해야한다.
다시 파티션 설정 메뉴로 돌아가자
# fdisk /dev/sdb
n
보면 아까와는 다른점이 있다. default가 p가 아닌 e로 되어있다.
즉, P타입 파티션을 한개 더 만들 수 있으나
P타입으로 4개의 파티션을 모두 구성해버리면
더 이상 그 하드디스크에 파티션을 추가할 수 없기 때문에
디폴트가 e로 자동으로 바뀐다.
디폴트가 e로 되어있으니 굳이 e를 입력하지 않고
Enter
첫 섹터 Enter
e타입 파티션도 마찬가지로 용량을 선택해주어야 한다.
하지만 우리는 나머지 모든 용량을 E타입 파티션으로 설정할 것이기에
용량 입력없이 넘어간다.
Enter
그리고 다시 p 옵션으로 확인을 해보자.
E타입 파티션이 생겼다.
이제 L타입(Logical) 파티션을 만들 수 있다.
n
새로운 파티션을 설정해주기위해 n옵션을 입력했더니 이번엔
자동으로 logical partition 이라고 나오면서
바로 첫 섹터를 입력하는 단계가 나온다.
당연히 남은 용량 전부를 E타입으로 잡았기 때문에
파티션 작업을 L타입 밖에 할 수 없기 때문에
불필요한 과정을 건너뛴 것이다.
첫 섹터는 Enter
용량은 +100M
아직 100M가 남아있기 때문에 마찬가지로 한번 더 작업해준다.
당연히 이번에는 나머지 용량 전부를 잡아줄 것이므로 용량입력을 안하고 Enter하면 된다
p 확인
이렇게 해서 우리는 P타입 3개와
E타입 1개 안에
L타입 2개를 만들었다.
여기서 중요한 점이 있다.
우리는 저 만들어진 E타입을 굳이 파티션이라 말하지 않는다.
(파티션은 맞지만 없다고 생각하는게 편하다. 우리는 P와 L타입 파티션만 신경쓰자.)
따라서 E타입인 sdb4는 지금부터 취급하지 않는다.
w 옵션으로 저장하고 나간다
위의 사진을 보자.
우리가 파티션을 만들어준 sdb1으로의 이동(cd)와
sdb1안에 touch명령으로 a라는 파일을 만들려고 했으나
모두 디렉터리가 아니라는 문구와 함께 명령이 되지 않는다.
그 이유는 아직 우리의 파티션들은 데이터를 저장할 수 있는 상태가 아니기 때문이다.
즉, 하드디스크를 구매하고 논리적으로 파티션을 나눠주긴 했지만
파일을 저장할 수있는 형태로 바꾸지 않았기 때문이다.
이제 우리는 '포맷' 이라는 작업을 해줄 것이다.
포맷 얘기를 하면서 잠깐 다른 길로 새겠다.
포맷은 절대 내용물을 삭제하는 작업이 아니다.
이는 윈도우에서도 마찬가지이다.
포맷은
"파일시스템을 재구성 하는 작업"
이다.
즉, 파티션에 저장된 파일들이 있는 상태에서 포맷을 하는 것은
내용물을 삭제하는 작업이 아니라
파일시스템을 재구성 해주는 것으로, '덮어 씌우는 것'이 맞는 표현이다.
실제로 컴퓨터 자체에는 삭제라는 기능이 없다.
우리가 휴지통에 파일을 버리고 휴지통 비우기로 파일을 삭제하지만
정말로 파일이 삭제되는 것이 아니다.
Meta 영역 | Data 영역 |
실제 저장공간은 이렇게 두 가지의 영역으로 분리된다.
Data 영역은 실제 데이터가 저장되는 공간이고
Meta 영역은 그 데이터가 존재하는 주소를 기억하는 공간이다.
우리가 파일을 불러올 때 컴퓨터는 Data 영역에서
파일을 찾는 것이 아니라 Meta 영역에서 파일의 주소를 찾아내어
불러오는 작업을 하는 것이다.
따라서 우리가 파일을 삭제하면 컴퓨터는 저장공간의
Data 영역에서 실제 파일을 삭제하는 것이 아니라
그 파일의 Meta 영역에서 해당 파일의 주소만 삭제한다.
파일은 삭제되지 않는다는 것이다.
하지만 우리에게는 해당 주소가 비어있는 것으로 판단하여
파일이 삭제된 것 처럼 보여준다.
그렇다면 새로운 파일을 다운 받게되면 어떻게 될까.
간단하다. 비어있는 주소로 파일이 저장된다.
하지만 그 주소에 대응하는 Data 영역에 삭제되지 않은
파일이 있다.
바로 그때 새로운 파일로 덮어씌어진다.
즉, 삭제가 아닌 '덮어씌어지는 것'이다.
포맷도 같은 원리이다.
삭제가 아닌 덮어씌우기 이다.
전공자라면 포맷을 논할 때 삭제라고 말하지 말자!
다시 원래의 길로 돌아와서...
아직 우리의 파티션들은 포맷이 된 상태가 아니다.
적어도 한번은 포맷이되어 파일시스템이 구성되어야
비로소 저장공간으로 활용이 가능하다.
파일시스템 만드는 방법(포맷하는 방법)
# mkfs.xfs [파티션이름]
하드디스크 이름이 아닌 파티션 이름이다.
# mkfs.xfs /dev/sdb1
여기서 만약 이미 포맷을 진행한 /dev/sdb1을
# mkfs.xfs /dev/sdb1 명령으로 한번 더 포맷을 하면
그것이 우리가 평소에 알던 포맷작업이라고 생각하면 된다.
이제 남은 모든 파티션
sdb2, sdb3, sdb5, sdb6 모두 포맷을 진행해준다.
sdb4는 Extended타입으로 포맷이 대상이 아니라고 했다.
포맷이 되지도 않는다.
이제 모든 파티션이 포맷이 완료되어 파일시스템이 생성되었다.
# blkid 명령으로 잘 포맷이 되었는지 확인해보자
그리고 만들어진 파티션에 대한 정보를 간략하게 보는
# lsblk 명령어로도 확인해보자
하지만...
우리의 리눅스는 아직도 저장공간으로써의 사용을 허락하지 않는다.
우리는 포맷까지 완료한 파티션을 '마운트'해줘야한다.
그 것이 저장공간으로 사용하기 위한 최종 단계이다.
# ls -ld /dev/sdb1
위 사진에 /dev/sdb1의 퍼미션 쪽을 보면
b 로 시작하는것을 볼 수 있다.
우리는 d는 디렉터리, - 는 파일인 것을 알고 있다.
그럼 b는 무엇일까.
b는 블럭장치를 의미한다.
즉, /dev/sdb1는 물리적인 장치라는 것이다.
리눅스에서는 파일을 저장하는 공간은 무조건 디렉터리이고,
따라서 모든 저장은 디렉터리 내부에 이루어진다.
다시말해 디렉터리가 아니면 저장공간이 아니라는 것이다.
그럼 우리는 저 /dev/sdb1 블록장치를 디렉터리로 만들어주어야 한다.
이 작업이 '마운트'이다.
우리는 이 /dev/sdb1 이라는 파티션을 위한 디렉터리를 만들어준다.
이 파티션을 마운트하기 위한 디렉터리를 M.P(Mount Point) 라고 한다.
디렉터리 이름은 자유이며, 여기서는 mp1 이라고하겠다.
# mkdir
명령으로 mp1이라는 디렉터리(m.p)를 만들어주는데
우리는 sdb2, sdb3, sdb5, sdb6 모두 마운트를 해주어야 하므로
mp2, mp3, mp5, mp6를 한번에 만들어 주자
# mkdir /mp1 /mp2 /mp3 /mp5 /mp6
제대로 만들어졌는지 확인해보자
# ls -l / | grep mp*
마운트 포인트가 제대로 만들어졌으니 마운트작업을 해보자
마운트는 파티션과 M.P를 연결시켜주는 작업이다.
그리고 그 명령어는
# mount /dev/sdb1 /mp1
이다.
/mp1을 /dev/sdb1와 마운트(연결)해주겠다는 의미이다.
위 명령어를 사용했을시에 정상적으로 마운트가 되면
어떤 메세지도 출력되지 않는다. 그게 정상이다.
나머지
sdb2, sdb3, sdb5, sdb6 모두
mp2, mp3, mp5, mp6 와 각각 마운트를 해주자.
(sdb4는 취급하지 않는다고 했다. 기억하자.)
마운트를 모두 해주었으면
당연히 확인작업을 해주어야한다.
현재 시스템의 마운트정보를 확인하는 명령어
# df -h
이제 마운트가 완료되었다.
이제 저장장치로서 제대로 저장이 되는지 테스트 해보자
# cp /etc/inittab /mp1
확인
# ls -l /mp1
제대로 저장이 되는 것을 확인할 수 있다.
이제 우리는 sdb1, sdb2, sdb3, sdb5, sdb6 를 저장공간으로 사용이 가능하다.
이제 마운트를 해제하는 법을 알아보자
마운트 해제는
# umount
명령어를 사용한다.
마운트 해제는 두 가지가 있다.
1. # umount [파티션]
ex) # umount /dev/sdb1
2. # umount [M.P]
ex) # umount mp1
어떤 방법을 사용하든 상관없다.
단, 주의할 점이 있다.
마운트를 해제할 때는 현재 위치(pwd)가
마운트를 해제하려는 파티션(m.p)여서는 안된다.
마운트 해제
# umount /dev/sdb1
역시 아무 메세지도 출력되지 않는 것이 정상이다.
해제 확인
# df -h
mp1과 /dev/sdb1이 확인되지 않는다.
마운트가 성공적으로 해제된 것이다.
이번에는 한 가지 테스트를 위해
mptest 라는 디렉터리를 만들어보자
# mkdir /mptest
그리고 조금전에 마운트를 해제한 /dev/sdb1을 /mptest에 마운트 해보자
# mount /dev/sdb1 /mptest
그리고 /mptest 의 내부를 출력해보자
# ls -l /mptest
신기한 일이 벌어졌다.
분명 /dev/sdb1을 /mp1에 마운트 시킨후에
/mp1에 inittab이라는 파일을 넣었었다.
그런데
/dev/sdb1을 /mp1이 아닌 /mptest라는
새로운 디렉터리(m.p)에 마운트를 시켰는데
아까 넣은 파일이 나타났다.
즉, 파일들이 저장되는 곳은 장치와 연결된 디렉터리(m.p)가 아닌
장치 자체에 저장된다는 사실을 알 수 있다.
자, 이렇게해서 새로운 HDD를 사용하기 위해
HDD를 추가하고,
파티션을 만들고,
포맷을 하고(파일시스템),
마운트까지 해서
드디어 저장장치로서 사용을 할 수 있게 되었다.
하지만
만약 이 상태에서 가상머신을 끄거나, 재부팅하면
마운트가 모두 해제된다.
다시말해, 가상머신을 켤 때마다 마운트를
매번 직접 다시 해주어야 한다는 것이다.
그래서
우리는 그런 불상사를 방지하기 위해 한 가지 더 작업을 해야한다.
이것을 오토마운트(Auto Mount)라고 부른다.
오토마운트의 원리는 마운트를 관장하는 파일에 들어가서
자동으로 마운트가 되도록
추가 설정을 입력해주는 것이다.
그러면 부팅 시 시스템이 내가 설정해둔 것을 보고 그대로 실행을 해주기 때문에
자동으로 마운트가 되는 것이다.
마운트를 관장하는 파일은
/etc/fstab 이다.
우선 fstab을 잘못 건들이면 마운트가 안되는 것보다
부팅이 되지않는 더 큰 불상사가 발생하므로
따로 백업을 해두자
# cp /etc/fstab /backup
참고로 백업을 위한 /backup 디렉터리는
가상머신을 설치하고나면 바로바로 만들어주는 것이 좋다.
물론 가상머신을 설치하는 동안에
여기서 마운트 지점에 /backup을 적고
용량은 적당히 2기가정도로(자유)로 미리 만들어도 된다.
이제 백업을 완료했으니 오토마운트 작업을 해보자
# vi /etc/fstab
만약 위 사진처럼 깔끔하게 안나오면 옆으로 내용이 길기 때문에
자동으로 아래로 줄 개행이 일어났기 때문일 것이다.
putty창을 옆으로 길게 만들어주자
여기서 G(shift + g)를 누르고
이어서 $ (shift + 4) 를 차례로 눌러
문서의 가장 마지막 부분으로 이동한다.
이동을 완료했으면 ' i ' 를 눌러 입력모드로 진입한후에 Enter를 눌러
한 줄 아래로 내려가서
이렇게 입력을 해준다.
다시 말하지만 /etc/fstab파일은 부팅과 연관이 있으므로
오타가 발생하면 부팅이 되지않을 수 있다. 오타에 유의하자.
각각의 간격은 키보드의 'Tab'을 두번정도 누른 간격으로 입력해준다.
그럼 방금 추가해준 것이 무엇일까.
먼저 /dev/sdb1는 파티션 이름
/mp1은 해당 파티션의 M.P
xfs는 파일시스템 타입
default는
읽고, 쓰고 계정상관없이 마운트 자동지정, setUID설정 등
의 기능을 하는 옵션이다.
0 0은
첫번째 0 라인은 덤프필드 라고하는 값이다.
덤프 기능 = 데이터를 실질적으로 계속 유지하는 기능. 0이라는 고정값을 입력해준다.
두번째 0라인은 파일시스템 체크필드 값이다.
파일시스템 체크필드 = 파일 시스템이 정상적인 상태인지 확인하는 값을 지정한다.
0이라는 고정값을 입력해준다
xfs가 체크해주는 기능이 있기 때문에 0(체크하지않음)으로 입력해주면 된다.
저장하고 나가자
: wq
여기까지 완료했으면 재부팅을 통해 오토마운트가 되는지 확인해본다.
# reboot
재부팅이 완료되면 확인
# df -h
여기까지 파티션에 대한 설명이 끝났다.
'Linux' 카테고리의 다른 글
Linux - YUM (0) | 2020.02.27 |
---|---|
Linux - 부팅오류 복구 / root계정 암호 재설정 (0) | 2020.02.25 |
Linux - RPM(Redhat Package Management) (0) | 2020.02.25 |
Linux - Umask (0) | 2020.02.25 |
Linux - 특수권한 (SetUID, SetGID, StickyBit) (0) | 2020.02.25 |